1. Spring整合MyBatis切换SqlSessionFactory有两种方法,第一、 继承SqlSessionDaoSupport,重写获取SqlSessionFactory的方法。第二、继承SqlSessionTemplate 重写getSqlSessionFactory、getConfiguration和SqlSessionInterceptor这个拦截器。其中最为关键还是继承SqlSessionTemplate 并重写里面的方法。

我们一般使用第二种方法,第二种方法有2 种配置:

单个sqlSessionFactory情况:需要在程序中(action 里面动态指定使用那个数据库连接池)

spring-mybatis.xml配置如下:

  1. <!-- ========================================配置数据源========================================= -->
  2. <!-- 配置数据源,使用的是alibaba的Druid(德鲁伊)数据源 -->
  3. <bean name="pepos" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">
  4. <property name="url" value="${pepos.url}" />
  5. <property name="username" value="${pepos.username}" />
  6. <property name="password" value="${pepos.password}" />
  7. <!-- 密码解密-->
  8. <property name="filters" value="config" />
  9. <property name="connectionProperties" value="config.decrypt=true;config.decrypt.key=${pepos.publickey}" />
  10. <!-- 初始化连接大小 -->
  11. <property name="initialSize" value="0" />
  12. <!-- 连接池最大使用连接数量 -->
  13. <property name="maxActive" value="20" />
  14. <!-- 连接池最大空闲 <property name="maxIdle" value="20" /> -->
  15. <!-- 连接池最小空闲 -->
  16. <property name="minIdle" value="0" />
  17. <!-- 获取连接最大等待时间 -->
  18. <property name="maxWait" value="60000" />
  19. <!-- 打开PSCache,并且指定每个连接上PSCache的大小 -->
  20. <property name="poolPreparedStatements" value="true" />
  21. <property name="maxPoolPreparedStatementPerConnectionSize" value="20" />
  22. <property name="validationQuery" value="SELECT 1" />
  23. <property name="testOnBorrow" value="false" />
  24. <property name="testOnReturn" value="false" />
  25. <property name="testWhileIdle" value="true" />
  26. <!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 -->
  27. <property name="timeBetweenEvictionRunsMillis" value="60000" />
  28. <!-- 配置一个连接在池中最小生存的时间,单位是毫秒 -->
  29. <property name="minEvictableIdleTimeMillis" value="25200000" />
  30. <!-- 打开removeAbandoned功能 -->
  31. <property name="removeAbandoned" value="true" />
  32. <!-- 1800秒,也就是30分钟 -->
  33. <property name="removeAbandonedTimeout" value="1800" />
  34. <!-- 关闭abanded连接时输出错误日志 -->
  35. <property name="logAbandoned" value="true" />
  36. </bean>
  37. <!-- 配置数据源,使用的是alibaba的Druid(德鲁伊)数据源 -->
  38. <bean name="payment" class="com.alibaba.druid.pool.DruidDataSource"
  39. init-method="init" destroy-method="close">
  40. <property name="url" value="${payment.url}" />
  41. <property name="username" value="${payment.username}" />
  42. <property name="password" value="${payment.password}" />
  43. <!-- 密码解密 -->
  44. <property name="filters" value="config" />
  45. <property name="connectionProperties" value="config.decrypt=true;config.decrypt.key=${payment.publickey}" />
  46. <!-- 初始化连接大小 -->
  47. <property name="initialSize" value="0" />
  48. <!-- 连接池最大使用连接数量 -->
  49. <property name="maxActive" value="20" />
  50. <!-- 连接池最大空闲 <property name="maxIdle" value="20" /> -->
  51. <!-- 连接池最小空闲 -->
  52. <property name="minIdle" value="0" />
  53. <!-- 获取连接最大等待时间 -->
  54. <property name="maxWait" value="60000" />
  55. <!-- 打开PSCache,并且指定每个连接上PSCache的大小 -->
  56. <property name="poolPreparedStatements" value="true" />
  57. <property name="maxPoolPreparedStatementPerConnectionSize" value="20" />
  58. <property name="validationQuery" value="SELECT 1" />
  59. <property name="testOnBorrow" value="false" />
  60. <property name="testOnReturn" value="false" />
  61. <property name="testWhileIdle" value="true" />
  62. <!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 -->
  63. <property name="timeBetweenEvictionRunsMillis" value="60000" />
  64. <!-- 配置一个连接在池中最小生存的时间,单位是毫秒 -->
  65. <property name="minEvictableIdleTimeMillis" value="25200000" />
  66. <!-- 打开removeAbandoned功能 -->
  67. <property name="removeAbandoned" value="true" />
  68. <!-- 1800秒,也就是30分钟 -->
  69. <property name="removeAbandonedTimeout" value="1800" />
  70. <!-- 关闭abanded连接时输出错误日志 -->
  71. <property name="logAbandoned" value="true" />
  72. </bean>
  73. <!-- 需要基础spring的 AbstractRoutingDataSource 来实现动态设置数据库连接池  -->
  74. <bean id="dynamicDataSource" class="com.threeweidu.mallmanage.utils.DynamicDataSource">
  75. <property name="targetDataSources">
  76. <map key-type="java.lang.String">
  77. <entry value-ref="pepos" key="pepos"></entry>
  78. <entry value-ref="payment" key="payment"></entry>
	<!-- ========================================配置数据源========================================= -->
&lt;!-- 配置数据源,使用的是alibaba的Druid(德鲁伊)数据源 --&gt;
&lt;bean name="pepos" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close"&gt;
&lt;property name="url" value="${pepos.url}" /&gt;
&lt;property name="username" value="${pepos.username}" /&gt;
&lt;property name="password" value="${pepos.password}" /&gt; &lt;!-- 密码解密--&gt;
&lt;property name="filters" value="config" /&gt;
&lt;property name="connectionProperties" value="config.decrypt=true;config.decrypt.key=${pepos.publickey}" /&gt; &lt;!-- 初始化连接大小 --&gt;
&lt;property name="initialSize" value="0" /&gt;
&lt;!-- 连接池最大使用连接数量 --&gt;
&lt;property name="maxActive" value="20" /&gt;
&lt;!-- 连接池最大空闲 &lt;property name="maxIdle" value="20" /&gt; --&gt;
&lt;!-- 连接池最小空闲 --&gt;
&lt;property name="minIdle" value="0" /&gt;
&lt;!-- 获取连接最大等待时间 --&gt;
&lt;property name="maxWait" value="60000" /&gt; &lt;!-- 打开PSCache,并且指定每个连接上PSCache的大小 --&gt;
&lt;property name="poolPreparedStatements" value="true" /&gt;
&lt;property name="maxPoolPreparedStatementPerConnectionSize" value="20" /&gt; &lt;property name="validationQuery" value="SELECT 1" /&gt;
&lt;property name="testOnBorrow" value="false" /&gt;
&lt;property name="testOnReturn" value="false" /&gt;
&lt;property name="testWhileIdle" value="true" /&gt;
&lt;!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 --&gt;
&lt;property name="timeBetweenEvictionRunsMillis" value="60000" /&gt;
&lt;!-- 配置一个连接在池中最小生存的时间,单位是毫秒 --&gt;
&lt;property name="minEvictableIdleTimeMillis" value="25200000" /&gt;
&lt;!-- 打开removeAbandoned功能 --&gt;
&lt;property name="removeAbandoned" value="true" /&gt;
&lt;!-- 1800秒,也就是30分钟 --&gt;
&lt;property name="removeAbandonedTimeout" value="1800" /&gt;
&lt;!-- 关闭abanded连接时输出错误日志 --&gt;
&lt;property name="logAbandoned" value="true" /&gt;
&lt;/bean&gt; &lt;!-- 配置数据源,使用的是alibaba的Druid(德鲁伊)数据源 --&gt;
&lt;bean name="payment" class="com.alibaba.druid.pool.DruidDataSource"
init-method="init" destroy-method="close"&gt;
&lt;property name="url" value="${payment.url}" /&gt;
&lt;property name="username" value="${payment.username}" /&gt;
&lt;property name="password" value="${payment.password}" /&gt; &lt;!-- 密码解密 --&gt;
&lt;property name="filters" value="config" /&gt;
&lt;property name="connectionProperties" value="config.decrypt=true;config.decrypt.key=${payment.publickey}" /&gt; &lt;!-- 初始化连接大小 --&gt;
&lt;property name="initialSize" value="0" /&gt;
&lt;!-- 连接池最大使用连接数量 --&gt;
&lt;property name="maxActive" value="20" /&gt;
&lt;!-- 连接池最大空闲 &lt;property name="maxIdle" value="20" /&gt; --&gt;
&lt;!-- 连接池最小空闲 --&gt;
&lt;property name="minIdle" value="0" /&gt;
&lt;!-- 获取连接最大等待时间 --&gt;
&lt;property name="maxWait" value="60000" /&gt; &lt;!-- 打开PSCache,并且指定每个连接上PSCache的大小 --&gt;
&lt;property name="poolPreparedStatements" value="true" /&gt;
&lt;property name="maxPoolPreparedStatementPerConnectionSize" value="20" /&gt; &lt;property name="validationQuery" value="SELECT 1" /&gt;
&lt;property name="testOnBorrow" value="false" /&gt;
&lt;property name="testOnReturn" value="false" /&gt;
&lt;property name="testWhileIdle" value="true" /&gt;
&lt;!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 --&gt;
&lt;property name="timeBetweenEvictionRunsMillis" value="60000" /&gt;
&lt;!-- 配置一个连接在池中最小生存的时间,单位是毫秒 --&gt;
&lt;property name="minEvictableIdleTimeMillis" value="25200000" /&gt;
&lt;!-- 打开removeAbandoned功能 --&gt;
&lt;property name="removeAbandoned" value="true" /&gt;
&lt;!-- 1800秒,也就是30分钟 --&gt;
&lt;property name="removeAbandonedTimeout" value="1800" /&gt;
&lt;!-- 关闭abanded连接时输出错误日志 --&gt;
&lt;property name="logAbandoned" value="true" /&gt;
&lt;/bean&gt; &lt;!-- 需要基础spring的 AbstractRoutingDataSource 来实现动态设置数据库连接池 --&gt;
&lt;bean id="dynamicDataSource" class="com.threeweidu.mallmanage.utils.DynamicDataSource"&gt;
&lt;property name="targetDataSources"&gt;
&lt;map key-type="java.lang.String"&gt;
&lt;entry value-ref="pepos" key="pepos"&gt;&lt;/entry&gt;
&lt;entry value-ref="payment" key="payment"&gt;&lt;/entry&gt;
</pre><div class="dp-highlighter bg_java"><div class="bar"><div class="tools"><b>[java]</b> <a href="#" class="ViewSource" title="view plain" onclick="dp.sh.Toolbar.Command('ViewSource',this);return false;">view plain</a><span class="tracking-ad" data-mod="popu_168"> <a href="#" class="CopyToClipboard" title="copy" onclick="dp.sh.Toolbar.Command('CopyToClipboard',this);return false;">copy</a><div style="position: absolute; left: 496px; top: 2131px; width: 16px; height: 16px; z-index: 99;"><embed id="ZeroClipboardMovie_2" src="http://static.blog.csdn.net/scripts/ZeroClipboard/ZeroClipboard.swf" loop="false" menu="false" quality="best" bgcolor="#ffffff" width="16" height="16" name="ZeroClipboardMovie_2" align="middle" allowscriptaccess="always" allowfullscreen="false" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" flashvars="id=2&amp;width=16&amp;height=16" wmode="transparent"></div></span><span class="tracking-ad" data-mod="popu_169"> <a href="#" class="PrintSource" title="print" onclick="dp.sh.Toolbar.Command('PrintSource',this);return false;">print</a></span><a href="#" class="About" title="?" onclick="dp.sh.Toolbar.Command('About',this);return false;">?</a></div></div><ol start="1" class="dp-j"><li class="alt"><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/map&gt;&nbsp;&nbsp;</span></span></li><li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&lt;/property&gt;&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&lt;property&nbsp;name=<span class="string">"defaultTargetDataSource"</span><span>&nbsp;ref=</span><span class="string">"pepos"</span><span>&gt;&nbsp;&nbsp;</span></span></li><li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&lt;/property&gt;&nbsp;&nbsp;</span></li><li class="alt"><span>&lt;/bean&gt;&nbsp;&nbsp;</span></li><li class=""><span>&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&lt;bean&nbsp;id=<span class="string">"jdbcTemplate"</span><span>&nbsp;</span><span class="keyword">class</span><span>=</span><span class="string">"org.springframework.jdbc.core.JdbcTemplate"</span><span>&gt;&nbsp;&nbsp;</span></span></li><li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&lt;property&nbsp;name=<span class="string">"dataSource"</span><span>&nbsp;ref=</span><span class="string">"dynamicDataSource"</span><span>&gt;&lt;/property&gt;&nbsp;&nbsp;</span></span></li><li class="alt"><span>&lt;/bean&gt;&nbsp;&nbsp;</span></li><li class=""><span>&nbsp;&nbsp;</span></li><li class="alt"><span>&lt;!--&nbsp;MyBatis配置&nbsp;--&gt;&nbsp;&nbsp;</span></li><li class=""><span>&lt;bean&nbsp;id=<span class="string">"sqlSessionFactory"</span><span>&nbsp;</span><span class="keyword">class</span><span>=</span><span class="string">"org.mybatis.spring.SqlSessionFactoryBean"</span><span>&gt;&nbsp;&nbsp;</span></span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&lt;property&nbsp;name=<span class="string">"dataSource"</span><span>&nbsp;ref=</span><span class="string">"dynamicDataSource"</span><span>&nbsp;/&gt;&nbsp;&nbsp;</span></span></li><li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&lt;!--&nbsp;自动扫描entity目录,&nbsp;省掉Configuration.xml里的手工配置&nbsp;--&gt;&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&lt;property&nbsp;name=<span class="string">"typeAliasesPackage"</span><span>&nbsp;value=</span><span class="string">"com.threeweidu.mallmanage.entity"</span><span>&nbsp;/&gt;&nbsp;&nbsp;</span></span></li><li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&lt;!--&nbsp;显式指定Mapper文件位置&nbsp;--&gt;&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&lt;property&nbsp;name=<span class="string">"mapperLocations"</span><span>&nbsp;value=</span><span class="string">"classpath:/com/threeweidu/mallmanage/dao/mybatis/mapper/*Mapper.xml"</span><span>&nbsp;/&gt;&nbsp;&nbsp;</span></span></li><li class=""><span>&lt;/bean&gt;&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;</span></li><li class=""><span>&lt;!--&nbsp;配置扫描器&nbsp;--&gt;&nbsp;&nbsp;</span></li><li class="alt"><span>&lt;bean&nbsp;<span class="keyword">class</span><span>=</span><span class="string">"org.mybatis.spring.mapper.MapperScannerConfigurer"</span><span>&gt;&nbsp;&nbsp;</span></span></li><li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&lt;!--&nbsp;扫描me.gacl.dao这个包以及它的子包下的所有映射接口类&nbsp;--&gt;&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&lt;property&nbsp;name=<span class="string">"basePackage"</span><span>&nbsp;value=</span><span class="string">"com.threeweidu.mallmanage.dao.mybatis"</span><span>&nbsp;/&gt;&nbsp;&nbsp;</span></span></li><li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&lt;property&nbsp;name=<span class="string">"sqlSessionFactoryBeanName"</span><span>&nbsp;value=</span><span class="string">"sqlSessionFactory"</span><span>&nbsp;/&gt;&nbsp;&nbsp;</span></span></li><li class="alt"><span>&lt;/bean&gt;&nbsp;&nbsp;</span></li><li class=""><span>&nbsp;&nbsp;</span></li><li class="alt"><span>&lt;!--&nbsp;配置Spring的事务管理器&nbsp;--&gt;&nbsp;&nbsp;</span></li><li class=""><span>&lt;bean&nbsp;id=<span class="string">"transactionManager"</span><span>&nbsp;</span><span class="keyword">class</span><span>=</span><span class="string">"org.springframework.jdbc.datasource.DataSourceTransactionManager"</span><span>&gt;&nbsp;&nbsp;</span></span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&lt;property&nbsp;name=<span class="string">"dataSource"</span><span>&nbsp;ref=</span><span class="string">"dynamicDataSource"</span><span>&nbsp;/&gt;&nbsp;&nbsp;</span></span></li><li class=""><span>&lt;/bean&gt;&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;</span></li><li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&lt;tx:annotation-driven&nbsp;transaction-manager=<span class="string">"transactionManager"</span><span>&nbsp;proxy-target-</span><span class="keyword">class</span><span>=</span><span class="string">"true"</span><span>&nbsp;/&gt;&nbsp;&nbsp;</span></span></li><li class="alt"><span>&nbsp;&nbsp;</span></li><li class=""><span>&lt;!--&nbsp;拦截器方式配置事务&nbsp;--&gt;&nbsp;&nbsp;</span></li><li class="alt"><span>&lt;tx:advice&nbsp;id=<span class="string">"transactionAdvice"</span><span>&nbsp;transaction-manager=</span><span class="string">"transactionManager"</span><span>&gt;&nbsp;&nbsp;</span></span></li><li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&lt;tx:attributes&gt;&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;tx:method&nbsp;name=<span class="string">"get*"</span><span>&nbsp;&nbsp;&nbsp;propagation=</span><span class="string">"REQUIRED"</span><span>&nbsp;read-only=</span><span class="string">"true"</span><span>/&gt;&nbsp;&nbsp;</span></span></li><li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;tx:method&nbsp;name=<span class="string">"find*"</span><span>&nbsp;&nbsp;propagation=</span><span class="string">"REQUIRED"</span><span>&nbsp;read-only=</span><span class="string">"true"</span><span>/&gt;&nbsp;&nbsp;</span></span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;tx:method&nbsp;name=<span class="string">"load*"</span><span>&nbsp;&nbsp;propagation=</span><span class="string">"REQUIRED"</span><span>&nbsp;read-only=</span><span class="string">"true"</span><span>/&gt;&nbsp;&nbsp;</span></span></li><li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;tx:method&nbsp;name=<span class="string">"init*"</span><span>&nbsp;rollback-</span><span class="keyword">for</span><span>=</span><span class="string">"java.lang.Exception"</span><span>&nbsp;propagation=</span><span class="string">"REQUIRED"</span><span>&nbsp;read-only=</span><span class="string">"false"</span><span>/&gt;&nbsp;&nbsp;</span></span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;tx:method&nbsp;name=<span class="string">"save*"</span><span>&nbsp;rollback-</span><span class="keyword">for</span><span>=</span><span class="string">"java.lang.Exception"</span><span>&nbsp;propagation=</span><span class="string">"REQUIRED"</span><span>&nbsp;read-only=</span><span class="string">"false"</span><span>/&gt;&nbsp;&nbsp;</span></span></li><li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;tx:method&nbsp;name=<span class="string">"add*"</span><span>&nbsp;rollback-</span><span class="keyword">for</span><span>=</span><span class="string">"java.lang.Exception"</span><span>&nbsp;propagation=</span><span class="string">"REQUIRED"</span><span>&nbsp;read-only=</span><span class="string">"false"</span><span>/&gt;&nbsp;&nbsp;</span></span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;tx:method&nbsp;name=<span class="string">"register*"</span><span>&nbsp;rollback-</span><span class="keyword">for</span><span>=</span><span class="string">"java.lang.Exception"</span><span>&nbsp;propagation=</span><span class="string">"REQUIRED"</span><span>&nbsp;read-only=</span><span class="string">"false"</span><span>/&gt;&nbsp;&nbsp;</span></span></li><li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;tx:method&nbsp;name=<span class="string">"update*"</span><span>&nbsp;rollback-</span><span class="keyword">for</span><span>=</span><span class="string">"java.lang.Exception"</span><span>&nbsp;propagation=</span><span class="string">"REQUIRED"</span><span>&nbsp;read-only=</span><span class="string">"false"</span><span>/&gt;&nbsp;&nbsp;</span></span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;tx:method&nbsp;name=<span class="string">"delete*"</span><span>&nbsp;rollback-</span><span class="keyword">for</span><span>=</span><span class="string">"java.lang.Exception"</span><span>&nbsp;propagation=</span><span class="string">"REQUIRED"</span><span>&nbsp;read-only=</span><span class="string">"false"</span><span>/&gt;&nbsp;&nbsp;</span></span></li><li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;tx:method&nbsp;name=<span class="string">"remove*"</span><span>&nbsp;rollback-</span><span class="keyword">for</span><span>=</span><span class="string">"java.lang.Exception"</span><span>&nbsp;propagation=</span><span class="string">"REQUIRED"</span><span>&nbsp;read-only=</span><span class="string">"false"</span><span>/&gt;&nbsp;&nbsp;</span></span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;tx:method&nbsp;name=<span class="string">"*"</span><span>&nbsp;propagation=</span><span class="string">"SUPPORTS"</span><span>&nbsp;/&gt;&nbsp;&nbsp;</span></span></li><li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&lt;/tx:attributes&gt;&nbsp;&nbsp;</span></li><li class="alt"><span>&lt;/tx:advice&gt;&nbsp;&nbsp;</span></li><li class=""><span>&lt;aop:config&gt;&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&lt;aop:pointcut&nbsp;id=<span class="string">"transactionPointcut"</span><span>&nbsp;expression=</span><span class="string">"execution(*&nbsp;com.threeweidu.mallmanage.service..*Impl.*(..))"</span><span>/&gt;&nbsp;&nbsp;</span></span></li><li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&lt;aop:advisor&nbsp;pointcut-ref=<span class="string">"transactionPointcut"</span><span>&nbsp;advice-ref=</span><span class="string">"transactionAdvice"</span><span>/&gt;&nbsp;&nbsp;</span></span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&lt;/aop:config&gt;&nbsp;&nbsp;</span></li><li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li><li class="alt"><span>lt;/beans&gt;&nbsp;&nbsp;</span></li></ol></div><pre class="java" name="code" style="display: none;"> &lt;/map&gt;
&lt;/property&gt;
&lt;property name="defaultTargetDataSource" ref="pepos"&gt;
&lt;/property&gt;
&lt;/bean&gt; &lt;bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"&gt;
&lt;property name="dataSource" ref="dynamicDataSource"&gt;&lt;/property&gt;
&lt;/bean&gt; &lt;!-- MyBatis配置 --&gt;
&lt;bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"&gt;
&lt;property name="dataSource" ref="dynamicDataSource" /&gt;
&lt;!-- 自动扫描entity目录, 省掉Configuration.xml里的手工配置 --&gt;
&lt;property name="typeAliasesPackage" value="com.threeweidu.mallmanage.entity" /&gt;
&lt;!-- 显式指定Mapper文件位置 --&gt;
&lt;property name="mapperLocations" value="classpath:/com/threeweidu/mallmanage/dao/mybatis/mapper/*Mapper.xml" /&gt;
&lt;/bean&gt; &lt;!-- 配置扫描器 --&gt;
&lt;bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"&gt;
&lt;!-- 扫描me.gacl.dao这个包以及它的子包下的所有映射接口类 --&gt;
&lt;property name="basePackage" value="com.threeweidu.mallmanage.dao.mybatis" /&gt;
&lt;property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" /&gt;
&lt;/bean&gt; &lt;!-- 配置Spring的事务管理器 --&gt;
&lt;bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"&gt;
&lt;property name="dataSource" ref="dynamicDataSource" /&gt;
&lt;/bean&gt; &lt;tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="true" /&gt; &lt;!-- 拦截器方式配置事务 --&gt;
&lt;tx:advice id="transactionAdvice" transaction-manager="transactionManager"&gt;
&lt;tx:attributes&gt;
&lt;tx:method name="get*" propagation="REQUIRED" read-only="true"/&gt;
&lt;tx:method name="find*" propagation="REQUIRED" read-only="true"/&gt;
&lt;tx:method name="load*" propagation="REQUIRED" read-only="true"/&gt;
&lt;tx:method name="init*" rollback-for="java.lang.Exception" propagation="REQUIRED" read-only="false"/&gt;
&lt;tx:method name="save*" rollback-for="java.lang.Exception" propagation="REQUIRED" read-only="false"/&gt;
&lt;tx:method name="add*" rollback-for="java.lang.Exception" propagation="REQUIRED" read-only="false"/&gt;
&lt;tx:method name="register*" rollback-for="java.lang.Exception" propagation="REQUIRED" read-only="false"/&gt;
&lt;tx:method name="update*" rollback-for="java.lang.Exception" propagation="REQUIRED" read-only="false"/&gt;
&lt;tx:method name="delete*" rollback-for="java.lang.Exception" propagation="REQUIRED" read-only="false"/&gt;
&lt;tx:method name="remove*" rollback-for="java.lang.Exception" propagation="REQUIRED" read-only="false"/&gt;
&lt;tx:method name="*" propagation="SUPPORTS" /&gt;
&lt;/tx:attributes&gt;
&lt;/tx:advice&gt;
&lt;aop:config&gt;
&lt;aop:pointcut id="transactionPointcut" expression="execution(* com.threeweidu.mallmanage.service..*Impl.*(..))"/&gt;
&lt;aop:advisor pointcut-ref="transactionPointcut" advice-ref="transactionAdvice"/&gt;
&lt;/aop:config&gt;

</beans>

多个sqlsessionFactroy 模式

spring-mybatis.xml 配置文件

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tx="http://www.springframework.org/schema/tx"
  4. xmlns:aop="http://www.springframework.org/schema/aop"
  5. xsi:schemaLocation="
  6. http://www.springframework.org/schema/beans
  7. http://www.springframework.org/schema/beans/spring-beans-4.1.xsd
  8. http://www.springframework.org/schema/tx
  9. http://www.springframework.org/schema/tx/spring-tx-4.1.xsd
  10. http://www.springframework.org/schema/aop
  11. http://www.springframework.org/schema/aop/spring-aop-4.0.xsd
  12. ">
  13. <import resource="spring-mybatis-shop.xml" />
  14. <import resource="spring-mybatis-payment.xml" />
  15. <!--
  16. <import resource="spring-mybatis-pepos.xml" />
  17. <import resource="spring-mybatis-peposlog.xml" />
  18. <import resource="spring-mybatis-peposchat.xml" />
  19. <import resource="spring-mybatis-vaservice.xml" />
  20. -->
  21. </beans>
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.1.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-4.1.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-4.0.xsd
">
&lt;import resource="spring-mybatis-shop.xml" /&gt;
&lt;import resource="spring-mybatis-payment.xml" /&gt;
&lt;!--
&lt;import resource="spring-mybatis-pepos.xml" /&gt;
&lt;import resource="spring-mybatis-peposlog.xml" /&gt;
&lt;import resource="spring-mybatis-peposchat.xml" /&gt;
&lt;import resource="spring-mybatis-vaservice.xml" /&gt;
--&gt;

</beans>

spring-mybatis-payment.xml 配置

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tx="http://www.springframework.org/schema/tx"
  4. xmlns:aop="http://www.springframework.org/schema/aop"
  5. xsi:schemaLocation="
  6. http://www.springframework.org/schema/beans
  7. http://www.springframework.org/schema/beans/spring-beans-4.1.xsd
  8. http://www.springframework.org/schema/tx
  9. http://www.springframework.org/schema/tx/spring-tx-4.1.xsd
  10. http://www.springframework.org/schema/aop
  11. http://www.springframework.org/schema/aop/spring-aop-4.0.xsd
  12. ">
  13. <!-- 数据库连接池 -->
  14. <bean id="dataSource_payment" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">
  15. <property name="url" value="${payment.url}" />
  16. <property name="username" value="${payment.username}" />
  17. <property name="password" value="${payment.password}" />
  18. <!-- 密码解密 -->
  19. <property name="filters" value="config" />
  20. <property name="connectionProperties" value="config.decrypt=true;config.decrypt.key=${payment.publickey}" />
  21. <!-- 初始化连接大小 -->
  22. <property name="initialSize" value="3" />
  23. <!-- 连接池最大使用连接数量 -->
  24. <property name="maxActive" value="200" />
  25. <!-- 连接池最大空闲 <property name="maxIdle" value="20" /> -->
  26. <!-- 连接池最小空闲 -->
  27. <property name="minIdle" value="0" />
  28. <!-- 获取连接最大等待时间 -->
  29. <property name="maxWait" value="60000" />
  30. <!-- 打开PSCache,并且指定每个连接上PSCache的大小 -->
  31. <property name="poolPreparedStatements" value="true" />
  32. <property name="maxPoolPreparedStatementPerConnectionSize" value="20" />
  33. <property name="validationQuery" value="SELECT 1" />
  34. <property name="testOnBorrow" value="false" />
  35. <property name="testOnReturn" value="false" />
  36. <property name="testWhileIdle" value="true" />
  37. <!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 -->
  38. <property name="timeBetweenEvictionRunsMillis" value="60000" />
  39. <!-- 配置一个连接在池中最小生存的时间,单位是毫秒 -->
  40. <property name="minEvictableIdleTimeMillis" value="25200000" />
  41. <!-- 打开removeAbandoned功能 -->
  42. <property name="removeAbandoned" value="true" />
  43. <!-- 1800秒,也就是30分钟 -->
  44. <property name="removeAbandonedTimeout" value="1800" />
  45. <!-- 关闭abanded连接时输出错误日志 -->
  46. <property name="logAbandoned" value="true" />
  47. </bean>
  48. <!-- MyBatis配置 -->
  49. <bean id="sqlSessionFactory_payment" class="org.mybatis.spring.SqlSessionFactoryBean">
  50. <property name="dataSource" ref="dataSource_payment" />
  51. <!-- 自动扫描entity目录, 省掉Configuration.xml里的手工配置 -->
  52. <property name="typeAliasesPackage" value="com.threeweidu.supplier.entity" />
  53. <!-- 显式指定Mapper文件位置 -->
  54. <property name="mapperLocations" value="classpath:/com/threeweidu/supplier/dao/mybatis/payment/mapper/*Mapper.xml" />
  55. </bean>
  56. <!-- 配置扫描器 -->
  57. <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
  58. <!-- 扫描me.gacl.dao这个包以及它的子包下的所有映射接口类 -->
  59. <property name="basePackage" value="com.threeweidu.supplier.dao.mybatis.payment" />
  60. <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory_payment" />
  61. </bean>
  62. <!-- 配置Spring的事务管理器 -->
  63. <bean id="transactionManager_payment" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
  64. <property name="dataSource" ref="dataSource_payment" />
  65. </bean>
  66. <tx:annotation-driven transaction-manager="transactionManager_payment" proxy-target-class="true" />
  67. <!-- 拦截器方式配置事务 -->
  68. <tx:advice id="transactionAdvice_payment" transaction-manager="transactionManager_payment">
  69. <tx:attributes>
  70. <tx:method name="get*"   propagation="REQUIRED" read-only="true"/>
  71. <tx:method name="find*"  propagation="REQUIRED" read-only="true"/>
  72. <tx:method name="load*"  propagation="REQUIRED" read-only="true"/>
  73. <tx:method name="init*" rollback-for="java.lang.Exception" propagation="REQUIRED" read-only="false"/>
  74. <tx:method name="save*" rollback-for="java.lang.Exception" propagation="REQUIRED" read-only="false"/>
  75. <tx:method name="add*" rollback-for="java.lang.Exception" propagation="REQUIRED" read-only="false"/>
  76. <tx:method name="register*" rollback-for="java.lang.Exception" propagation="REQUIRED" read-only="false"/>
  77. <tx:method name="update*" rollback-for="java.lang.Exception" propagation="REQUIRED" read-only="false"/>
  78. <tx:method name="delete*" rollback-for="java.lang.Exception" propagation="REQUIRED" read-only="false"/>
  79. <tx:method name="remove*" rollback-for="java.lang.Exception" propagation="REQUIRED" read-only="false"/>
  80. <tx:method name="*" propagation="SUPPORTS" />
  81. </tx:attributes>
  82. </tx:advice>
  83. <aop:config>
  84. <aop:advisor advice-ref="transactionAdvice_payment" pointcut="execution(* com.threeweidu.supplier.service..*Impl.*(..))" />
  85. </aop:config>
  86. </beans>
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.1.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-4.1.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-4.0.xsd
">
&lt;!-- 数据库连接池 --&gt;
&lt;bean id="dataSource_payment" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close"&gt;
&lt;property name="url" value="${payment.url}" /&gt;
&lt;property name="username" value="${payment.username}" /&gt;
&lt;property name="password" value="${payment.password}" /&gt; &lt;!-- 密码解密 --&gt;
&lt;property name="filters" value="config" /&gt;
&lt;property name="connectionProperties" value="config.decrypt=true;config.decrypt.key=${payment.publickey}" /&gt; &lt;!-- 初始化连接大小 --&gt;
&lt;property name="initialSize" value="3" /&gt;
&lt;!-- 连接池最大使用连接数量 --&gt;
&lt;property name="maxActive" value="200" /&gt;
&lt;!-- 连接池最大空闲 &lt;property name="maxIdle" value="20" /&gt; --&gt;
&lt;!-- 连接池最小空闲 --&gt;
&lt;property name="minIdle" value="0" /&gt;
&lt;!-- 获取连接最大等待时间 --&gt;
&lt;property name="maxWait" value="60000" /&gt; &lt;!-- 打开PSCache,并且指定每个连接上PSCache的大小 --&gt;
&lt;property name="poolPreparedStatements" value="true" /&gt;
&lt;property name="maxPoolPreparedStatementPerConnectionSize" value="20" /&gt; &lt;property name="validationQuery" value="SELECT 1" /&gt;
&lt;property name="testOnBorrow" value="false" /&gt;
&lt;property name="testOnReturn" value="false" /&gt;
&lt;property name="testWhileIdle" value="true" /&gt;
&lt;!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 --&gt;
&lt;property name="timeBetweenEvictionRunsMillis" value="60000" /&gt;
&lt;!-- 配置一个连接在池中最小生存的时间,单位是毫秒 --&gt;
&lt;property name="minEvictableIdleTimeMillis" value="25200000" /&gt;
&lt;!-- 打开removeAbandoned功能 --&gt;
&lt;property name="removeAbandoned" value="true" /&gt;
&lt;!-- 1800秒,也就是30分钟 --&gt;
&lt;property name="removeAbandonedTimeout" value="1800" /&gt;
&lt;!-- 关闭abanded连接时输出错误日志 --&gt;
&lt;property name="logAbandoned" value="true" /&gt;
&lt;/bean&gt; &lt;!-- MyBatis配置 --&gt;
&lt;bean id="sqlSessionFactory_payment" class="org.mybatis.spring.SqlSessionFactoryBean"&gt;
&lt;property name="dataSource" ref="dataSource_payment" /&gt;
&lt;!-- 自动扫描entity目录, 省掉Configuration.xml里的手工配置 --&gt;
&lt;property name="typeAliasesPackage" value="com.threeweidu.supplier.entity" /&gt;
&lt;!-- 显式指定Mapper文件位置 --&gt;
&lt;property name="mapperLocations" value="classpath:/com/threeweidu/supplier/dao/mybatis/payment/mapper/*Mapper.xml" /&gt;
&lt;/bean&gt; &lt;!-- 配置扫描器 --&gt;
&lt;bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"&gt;
&lt;!-- 扫描me.gacl.dao这个包以及它的子包下的所有映射接口类 --&gt;
&lt;property name="basePackage" value="com.threeweidu.supplier.dao.mybatis.payment" /&gt;
&lt;property name="sqlSessionFactoryBeanName" value="sqlSessionFactory_payment" /&gt;
&lt;/bean&gt; &lt;!-- 配置Spring的事务管理器 --&gt;
&lt;bean id="transactionManager_payment" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"&gt;
&lt;property name="dataSource" ref="dataSource_payment" /&gt;
&lt;/bean&gt; &lt;tx:annotation-driven transaction-manager="transactionManager_payment" proxy-target-class="true" /&gt; &lt;!-- 拦截器方式配置事务 --&gt;
&lt;tx:advice id="transactionAdvice_payment" transaction-manager="transactionManager_payment"&gt;
&lt;tx:attributes&gt;
&lt;tx:method name="get*" propagation="REQUIRED" read-only="true"/&gt;
&lt;tx:method name="find*" propagation="REQUIRED" read-only="true"/&gt;
&lt;tx:method name="load*" propagation="REQUIRED" read-only="true"/&gt;
&lt;tx:method name="init*" rollback-for="java.lang.Exception" propagation="REQUIRED" read-only="false"/&gt;
&lt;tx:method name="save*" rollback-for="java.lang.Exception" propagation="REQUIRED" read-only="false"/&gt;
&lt;tx:method name="add*" rollback-for="java.lang.Exception" propagation="REQUIRED" read-only="false"/&gt;
&lt;tx:method name="register*" rollback-for="java.lang.Exception" propagation="REQUIRED" read-only="false"/&gt;
&lt;tx:method name="update*" rollback-for="java.lang.Exception" propagation="REQUIRED" read-only="false"/&gt;
&lt;tx:method name="delete*" rollback-for="java.lang.Exception" propagation="REQUIRED" read-only="false"/&gt;
&lt;tx:method name="remove*" rollback-for="java.lang.Exception" propagation="REQUIRED" read-only="false"/&gt;
&lt;tx:method name="*" propagation="SUPPORTS" /&gt;
&lt;/tx:attributes&gt;
&lt;/tx:advice&gt;
&lt;aop:config&gt;
&lt;aop:advisor advice-ref="transactionAdvice_payment" pointcut="execution(* com.threeweidu.supplier.service..*Impl.*(..))" /&gt;
&lt;/aop:config&gt;

</beans>

参考:http://blog.csdn.net/xingxiupaioxue/article/details/51094091

Spring3 整合MyBatis3 配置多数据源 动态选择SqlSessionFactory(转)的更多相关文章

  1. Spring3 整合MyBatis3 配置多数据源 动态选择SqlSessionFactory

    一.摘要 上两篇文章分别介绍了Spring3.3 整合 Hibernate3.MyBatis3.2 配置多数据源/动态切换数据源 方法 和 Spring3 整合Hibernate3.5 动态切换Ses ...

  2. Spring3.3 整合 Hibernate3、MyBatis3.2 配置多数据源/动态切换数据源 方法

    一.开篇 这里整合分别采用了Hibernate和MyBatis两大持久层框架,Hibernate主要完成增删改功能和一些单一的对象查询功能,MyBatis主要负责查询功能.所以在出来数据库方言的时候基 ...

  3. Spring3.3 整合 Hibernate3、MyBatis3.2 配置多数据源/动态切换数据源方法

    一.开篇 这里整合分别采用了Hibernate和MyBatis两大持久层框架,Hibernate主要完成增删改功能和一些单一的对象查询功能,MyBatis主要负责查询功能.所以在出来数据库方言的时候基 ...

  4. Spring Boot整合Druid配置多数据源

    Druid是阿里开发的数据库连接池,功能强大,号称Java语言中最好的数据库连接池.本文主要介绍Srping Boot下用Druid配置多个数据源,demo环境为:Spring Boot 2.1.4. ...

  5. Spring Boot数据访问之多数据源配置及数据源动态切换

    如果一个数据库数据量过大,考虑到分库分表和读写分离需要动态的切换到相应的数据库进行相关操作,这样就会有多个数据源.对于一个数据源的配置在Spring Boot数据访问之数据源自动配置 - 池塘里洗澡的 ...

  6. Spring3 整合Hibernate3.5 动态切换SessionFactory (切换数据库方言)

    一.缘由 上一篇文章Spring3.3 整合 Hibernate3.MyBatis3.2 配置多数据源/动态切换数据源 方法介绍到了怎么样在Sping.MyBatis.Hibernate整合的应用中动 ...

  7. SpringBoot整合MyBatisPlus配置动态数据源

    目录 SpringBoot整合MyBatisPlus配置动态数据源 SpringBoot整合MyBatisPlus配置动态数据源 推文:2018开源中国最受欢迎的中国软件MyBatis-Plus My ...

  8. Spring3.2+mybatis3.2+Struts2.3整合

    1.Spring3.2不能用于JDK1.8,只能用于JDK1.7.JDK1.8用spring4.0. 2.导入的jar包 3.目录结构: 4.配置Spring 配置数据库信息: <?xml ve ...

  9. 一文读懂Spring动态配置多数据源---源码详细分析

    Spring动态多数据源源码分析及解读 一.为什么要研究Spring动态多数据源 ​ 期初,最开始的原因是:想将答题服务中发送主观题答题数据给批改中间件这块抽象出来, 但这块主要使用的是mq消息的方式 ...

随机推荐

  1. [洛谷P1156][codevs1684]垃圾陷阱

    题目大意:一头奶牛掉进了深度为d的坑里,现在有g个垃圾在特定时刻ti扔进来.奶牛可以吃垃圾以获得体力,吃第i个垃圾能获得mi的体力,也可以堆放垃圾以逃生,第i个垃圾高度为hi.当高度≥d时奶牛成功逃生 ...

  2. 在ubuntu上使用华为的3G无线上网卡 - usb_modeswitch

    众所周知,华为或者中兴的无线上网卡是比较好用的,U盘一样的东西,插进电脑的Usb口就能用,但是,这只是针对windows操作系统而言. 对于linux系统,该设备是无法自动加载驱动的. 因此,需要用到 ...

  3. Android调用camera错误setParameters failed深层解析

    1. Camera Camera是Android framework里面支持的,同意你拍照和拍摄视频的设备,那么,在使用camera开发中总是会遇到一些问题,比例如以下面这样子的: E/Android ...

  4. [Recompose] Refactor React Render Props to Streaming Props with RxJS and Recompose

    This lesson takes the concept of render props and migrates it over to streaming props by keeping the ...

  5. Android插件实例——360 DroidPlugin具体解释

    在中国找到钱不难,但你的一个点子不意味着是一个创业.你谈一个再好的想法,比方我今天谈一个创意说,新浪为什么不收购GOOGLE呢?这个创意非常好.新浪一收购GOOGLE.是不是新浪就变成老大了?你从哪儿 ...

  6. EBS 第一个项目 学习总结 ---- 发运模块

    EBS 组织架构: (一)业务组(BG) (二)法律实体(LE) (三)业务实体(OU) (四)库存组织(INV) (五)公司成本中心(Cost Center) (六)HR组织 (七)多组织接入控制 ...

  7. hdu2795Billboard(线段树,找第一个大于w的点)

    Billboard Time Limit: 20000/8000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total ...

  8. 离线安装 Chrome

    离线安装 Chrome 在这个帮助网页中最下面切换到中文 https://support.google.com/chrome/answer/95346 在网页的中上部点击 "离线安装 Chr ...

  9. 记一次struts2漏洞修复带来的问题

    struts2作为万年漏洞王,感觉已经被弃如敝屣了,除了一些古老的项目,比如我手上的一个项目,以前每次出现漏洞就如临大敌,手忙脚乱的赶在公司红头文件发出来前修复它.然后改了一两次后毅然决然用别的框架代 ...

  10. WCF项目启动时错误处理

    1. 原因:启动有wcf服务的项目时,报错,是因为wcf的服务没有启动. 解决办法:启动wcf的服务端口,127.0.0:4000,错误消失.