您的位置:首页 > 编程语言 > Java开发

spring多数据源配置

2016-03-29 10:34 561 查看
前段时间由于公司项目需求,需要多数据源的支持,苦b折腾了两天程序猿,话不多说,直接撸码。

application-context.xml配置:

<!-- 引入jdbc配置文件 -->
<bean id="propertyConfigurer"
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<list>
<value>classpath:jdbc.properties</value>
</list>
</property>
</bean>

<!-- 配置数据源 one-->
<bean id="dataSourceone" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="${jdbc.driver}">
</property>
<property name="url" value="${jdbc.url}"></property>
<property name="username" value="${jdbc.user}"></property>
<property name="password" value="${jdbc.pass}"></property>
<!--initialSize: 初始化连接 -->
<property name="initialSize" value="5" />
<!--maxIdle: 最大空闲连接 -->
<property name="maxIdle" value="10" />
<property name="minIdle" value="5" />
<property name="maxActive" value="15" />
<property name="removeAbandoned" value="true" />
<property name="removeAbandonedTimeout" value="180" />
<!-- maxWait: 超时等待时间以毫秒为单位 6000毫秒/1000等于60秒 -->
<property name="maxWait" value="3000" />
<property name="validationQuery">
<value>SELECT 1</value>
</property>
<property name="testOnBorrow">
<value>true</value>
</property>
</bean>

<!-- 配置数据源 two-->
<bean id="dataSourcetwo" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="${jdbc.driver1}">
</property>
<property name="url" value="${jdbc.url1}"></property>
<property name="username" value="${jdbc.user1}"></property>
<property name="password" value="${jdbc.pass1}"></property>
<!--initialSize: 初始化连接 -->
<property name="initialSize" value="5" />
<!--maxIdle: 最大空闲连接 -->
<property name="maxIdle" value="10" />
<property name="minIdle" value="5" />
<property name="maxActive" value="15" />
<property name="removeAbandoned" value="true" />
<property name="removeAbandonedTimeout" value="180" />
<!--maxWait: 超时等待时间以毫秒为单位 6000毫秒/1000等于60秒 -->
<property name="maxWait" value="3000" />
<property name="validationQuery">
<value>SELECT 1</value>
</property>
<property name="testOnBorrow">
<value>true</value>
</property>
</bean>

<!-- 通过key-value的形式来关联数据源 -->
<bean id="dynamicDataSource" class="com.jeekup.rp.util.DynamicDataSource" >
<property name="targetDataSources">
<map>
<entry value-ref="dataSourcethree" key="dataSourcethree"></entry>
<entry value-ref="dataSourceone" key="dataSourceone"></entry>
<entry value-ref="dataSourcetwo" key="dataSourcetwo"></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>

<!-- 配置sessionFactory -->
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
<!-- 读取数据源 -->
<property name="dataSource" ref="dynamicDataSource" />
<!-- 找到实体类的对象 -->
<property name="packagesToScan" value="com.jeekup.rp.model" />
<!-- 	数据库规则 -->
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
<prop key="hibernate.show_sql">false</prop>
<prop key="hibernate.hbm2ddl.auto">update</prop>
<prop key="hibernate.format_sql">true</prop>
</props>
</property>
</bean>

<!-- 配置sessionFactory事物 -->
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory">
<ref bean="sessionFactory" />
</property>
</bean>

<!-- 注入BaseDao -->
<bean id="BaseDaoimp"  class="com.base.imp.BaseDaoimp">
<property name="sessionFactory">
<ref bean="sessionFactory"/>
</property>
</bean>

<!-- 配置事务的传播特性 -->
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="save*" propagation="REQUIRED" />
<tx:method name="add*" propagation="REQUIRED" />
<tx:method name="delete*" propagation="REQUIRED" />
<tx:method name="update*" propagation="REQUIRED" />
<tx:method name="execute*" propagation="REQUIRED" />
<tx:method name="get*" read-only="true"/>
<tx:method name="*" read-only="true" />
</tx:attributes>
</tx:advice>


创建一个动态数据源类:

import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource;

public class DynamicDataSource extends AbstractRoutingDataSource{

@Override
protected Object determineCurrentLookupKey() {
return DBContextHolder.getDBType();
}
}


再创建一个数据源管理控制类:

public class DBContext{

public static final String DATA_one = "dataSourceone";
public static final String DATA_tow = "dataSourcetwo";

private static final ThreadLocal<String> context = new ThreadLocal<String>();

public static void setDBType(String dbType) {
context.set(dbType);
}

public static String getDBType() {
return context.get();
}

public static void clearDBType() {
contextHolder.remove();
}

}


写到这里,配置基本完毕了,接下来就可以读取不同的数据源,来进行持久化操作了:

@Service
public class adminService{
@Autowired
private BaseDao dao;
public List<admin> get_admin() {
DBContext.setDBType(DBContext.DATA_one);//这里就可以用来切换了!
return (List<admin>) dao.findByHql("from admin",new Object[]{});
}


我dao层封装方法:

public List<?> findByHql(String hql, Object[] obj) {
return getHibernateTemplate().find(hql, obj);
}


上面就是spring多数据源的全部代码,写的不好的地方,技术大神请指出。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: