这里分两种情况:有或者没有jdbc.properties。先说有:
1.1.DynamicDataSource.java(多数据源切换的基础类)
public class DynamicDataSource extends AbstractRoutingDataSource { @Override protected Object determineCurrentLookupKey() { // TODO Auto-generated method stub return DBContextHolder.getDbType(); } }
1.2.DBContextHolder.java(数据库切换工具类)
使用的时候调用 DbContextHolder.setDbType 方法,传入相应的在 spring 配置文件里面的配置的数据源名称就可以了
public class DBContextHolder { private static final ThreadLocal<String> contextHolder = new ThreadLocal<String>(); public static void setDbType(String dbType) { contextHolder.set(dbType); } public static String getDbType() { return ((String) contextHolder.get()); } public static void clearDbType() { contextHolder.remove(); } }
1.3.JDBC.properties.
jdbc.driverclass=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://localhost:3306/cpdata?characterEncoding=utf-8 jdbc.username=root jdbc.password=123456 jdbc1.driverclass=com.mysql.jdbc.Driver jdbc1.url=jdbc:mysql://devdb.jointforce.com:3306/jf_dd?characterEncoding=utf-8 jdbc1.username=dduser jdbc1.password=Eek2jae2ThahGha_ c3p0.pool.size.max=10 c3p0.pool.size.min=2 c3p0.pool.size.ini=3 c3p0.pool.size.increment=2 hibernate.dialect=org.hibernate.dialect.MySQL5Dialect hibernate.show_sql=true
1.4.配置文件xml
<!-- 数据源 --> <bean id="dataSource1" class="org.apache.commons.dbcp.BasicDataSource"> <property name="driverClassName" value="${jdbc.driverclass}" /> <property name="url" value="${jdbc.url}"></property> <property name="username" value="${jdbc.username}" /> <property name="password" value="${jdbc.password}" /> <property name="maxActive" value="${c3p0.pool.size.max}" /> <property name="minIdle" value="${c3p0.pool.size.min}" /> <property name="maxIdle" value="${c3p0.pool.size.ini}" /> <property name="initialSize" value="${c3p0.pool.size.increment}" /> </bean> <!-- 数据源 2--> <bean id="dataSource2" class="org.apache.commons.dbcp.BasicDataSource"> <property name="driverClassName" value="${jdbc1.driverclass}" /> <property name="url" value="${jdbc1.url}"></property> <property name="username" value="${jdbc1.username}" /> <property name="password" value="${jdbc1.password}" /> <property name="maxActive" value="${c3p0.pool.size.max}" /> <property name="minIdle" value="${c3p0.pool.size.min}" /> <property name="maxIdle" value="${c3p0.pool.size.ini}" /> <property name="initialSize" value="${c3p0.pool.size.increment}" /> </bean> <!-- 编写spring 配置文件的配置多数源映射关系 --> <bean class="com.db.DynamicDataSource" id="dataSource"> <property name="targetDataSources"> <map key-type="java.lang.String"> <entry value-ref="dataSource1" key="dataSource1"></entry> <entry value-ref="dataSource2" key="dataSource2"></entry> </map> </property> <property name="defaultTargetDataSource" ref="dataSource1"></property> <!--默认--> </bean> <beans profile="dev"> <context:property-placeholder location="classpath:jdbc.properties"/> </beans> <beans profile="prd"> <context:property-placeholder location="classpath:jdbc.properties"/> </beans>
指定jdbc.properties