1.数据源配置
<?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:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation=
"http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd">
<!-- 自动扫描bean -->
<context:component-scan base-package="com.sq.platform.testData"/>
<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<list>
<value>classpath:conf/conf.properties</value>
</list>
</property>
</bean>
<bean id="dataSourceOne" class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close" p:driverClassName="${drivenClassName}" p:url="${jdbcUrlOne}"
p:username="${user}" p:password="${password}" />
<bean id="dataSourceTwo" class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close" p:driverClassName="${drivenClassName}" p:url="${jdbcUrlTwo}"
p:username="${user}" p:password="${password}" />
<bean id="dynamicDataSource" class="com.sq.platform.testData.dao.DynamicDataSource" >
<!-- 通过key-value的形式来关联数据源 -->
<property name="targetDataSources">
<map>
<entry value-ref="dataSourceOne" key="one"></entry>
<entry value-ref="dataSourceTwo" key="Two"></entry>
</map>
</property>
<property name="defaultTargetDataSource" ref="dataSourceOne" />
</bean>
<!--JdbcTemplate使用动态数据源的配置-->
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource">
<ref bean="dynamicDataSource" />
</property>
</bean>
</beans>
2.资源配置文件conf.properties
#***************database configure************************
drivenClassName=org.postgresql.Driver
jdbcUrlOne=jdbc:xxxx
jdbcUrlTwo=jdbc:xxxxx
user=admin
password=admin
3.创建两个类DBContextHolder.java 和 DynamicDataSource.java
package com.sq.platform.testData.dao;
public class DBContextHolder{
public static final String OneUrl= "one";
public static final String TwoUrl= "two";
private static final ThreadLocal<String> contextHolder = new ThreadLocal<String>();
public static void setDBType(String dbType) {
contextHolder.set(dbType);
}
public static String getDBType() {
return contextHolder.get();
}
public static void clearDBType() {
contextHolder.remove();
}
}
package com.sq.platform.testData.dao;
import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource;
public class DynamicDataSource extends AbstractRoutingDataSource {
@Override
protected Object determineCurrentLookupKey() {
return DBContextHolder.getDBType();
}
}
@Autowired
private JdbcTemplate jdbcTemplate;
public void insertData(String tableName, int value_id, float value, String sampleTime){
String sql = "insert into " + tableName+ " values(?,?,?)";
DBContextHolder.setDBType(DBContextHolder.OneUrl);
jdbcTemplate.update(sql, new Object[]{value_id, value, sampleTime}, new int[]{Types.INTEGER, Types.FLOAT, Types.TIMESTAMP});
}