为了减轻一些我们数据库的压力,我们准备再配置另一个数据源。
1.jeesite.properties 添加数据源信息,(url2,username2,pawwword2)
2.修改spring-context.xml(src/main/resources/)
1> 配置两个数据源
第一个数据源
- <property name="url" value="${jdbc.url}" />
- <property name="username" value="${jdbc.username}" />
- <property name="password" value="${jdbc.password}" />
第二个数据源
- <property name="url" value="${jdbc2.url}" />
- <property name="username" value="${jdbc2.username}" />
- <property name="password" value="${jdbc2.password}" />
我这里只罗列了连接地址,账号,密码。还有其他配置大家可以根据需要自行来配置
2>将dataSource修改为dynamicDataSource
-
- <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
- <property name="dataSource" ref="dynamicDataSource"/>
- <property name="typeAliasesPackage" value="com.scliwei.cms"/>
- <property name="typeAliasesSuperType" value="com.scliwei.cms.common.persistence.BaseEntity"/>
- <property name="mapperLocations" value="classpath:/mappings/**/*.xml"/>
- <property name="configLocation" value="classpath:/mybatis-config.xml">property>
- bean>
3>将dataSource修改为dynamicDataSource
3.添加DynamicDataSource.java(package com.scliwei.cms.modules.bus.bestpay.config)
- package com.scliwei.cms.modules.bus.bestpay.config;
-
- import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource;
-
- //多个数据源切换
- public class DynamicDataSource extends AbstractRoutingDataSource {
-
- private static final ThreadLocal
contextHolder = new ThreadLocal(); -
- public static String getCurrentLookupKey() {
- return (String) contextHolder.get();
- }
-
- public static void setCurrentLookupKey(String currentLookupKey) {
- contextHolder.set(currentLookupKey);
- }
-
-
- @Override
- protected Object determineCurrentLookupKey() {
- return getCurrentLookupKey();
- }
- }
4测试
在controller测试。
测试结果。成功
注意:切换数据源,使用非默认的数据源的时候,使用完成要切换回来,否则有可能会发生错误。
一定要在调用dao层之前用否则会报错
特别注意:
- try {
- DynamicDataSource.setCurrentLookupKey("dataSource2");
- orderDao.updateSelective(partner);
-
- } catch (Exception e) {
- e.printStackTrace();
- } finally {
- DynamicDataSource.setCurrentLookupKey("dataSource");
- }
因为在线上的时候 切换数据源后,有时候就会出现切换不回去,导致报错,最后加了 try catch finally 来切换回来默认的数据源