多数据源配置 (两个SQL server数据库)
配置文件
- 数据库配置文件
jdbc.driverClassName=com.microsoft.sqlserver.jdbc.SQLServerDriver
##数据源1
jdbc.url1=jdbc:sqlserver://ip地址:端口;databaseName=数据库名称
jdbc.username1=用户名
jdbc.password1=密码
##数据源2
jdbc.url2=jdbc:sqlserver://ip地址:端口;databaseName=数据库名称;allowMultiQueries=true
jdbc.username2=用户名
jdbc.password2=密码
druid.pool.size.max=20
druid.pool.size.min=3
druid.pool.size.init=3
- applicationContext.xml
<!--1、配置数据库相关参数-->
<context:property-placeholder location="classpath:jdbc.properties" ignore-unresolvable="true"/>
<!--2、 数据源druid -->
<!-- 数据源1 start -->
<bean id="dataSource1" class="org.springframework.jdbc.datasource.DriverManagerDataSource" >
<property name="driverClassName" value="${jdbc.driverClassName}"/>
<property name="url" value="${jdbc.url1}"/>
<property name="username" value="${jdbc.username1}"/>
<property name="password" value="${jdbc.password1}"/>
</bean>
<!-- 数据源1 end -->
<!-- 数据源2 start -->
<bean id="dataSource2" class="org.springframework.jdbc.datasource.DriverManagerDataSource" >
<property name="driverClassName" value="${jdbc.driverClassName}"/>
<property name="url" value="${jdbc.url2}"/>
<property name="username" value="${jdbc.username2}"/>
<property name="password" value="${jdbc.password2}"/>
</bean>
<!-- 数据源2 end -->
<bean id="dynamicDataSource" class="cn.khdl.source.DynamicDataSource">
<property name="targetDataSources">
<map key-type="java.lang.String">
<entry key="ds1" value-ref="dataSource1"/>
<entry key="ds2" value-ref="dataSource2"/>
</map>
</property>
<!--默认数据源-->
<property name="defaultTargetDataSource" ref="dataSource2"/>
</bean>
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dynamicDataSource"/>
<property name="typeAliasesPackage" value="cn.duoshujvyuan.domain"/>
<property name="mapperLocations" value="classpath:cn.duoshujvyuan.mapper/*.xml"/>
</bean>
Java文件
- DynamicDataSource.java
public class DynamicDataSource extends AbstractRoutingDataSource {
@Override
protected Object determineCurrentLookupKey() {
return DataSourceHolder.getDataSources();
}
}
- DataSourceEnum.java (枚举)
public enum DataSourceEnum {
DS1("ds1"), DS2("ds2");
private String key;
DataSourceEnum(String key) { this.key = key; }
public String getKey() { return key; }
public void setKey(String key) { this.key = key; }
}
- DataSourceHolder.java
public class DataSourceHolder {
private static final ThreadLocal<String> dataSources = new ThreadLocal<String>();
public static void setDataSources(String dataSource) {
dataSources.set(dataSource);
}
public static String getDataSources() {
return dataSources.get();
}
}
- 业务层
@Service("userService")
public class UserServiceImpl implements UserService {
@Autowired
private UserDao userDao;
@Override
public String findUserByUserId(String userid) {
DataSourceHolder.setDataSources(DataSourceEnum.DS1.getKey());
return userDao.findUserByUserId(userid);
}
}