spring多数据源的配置和使用
来源:互联网 发布:网络吸毒聊天室 编辑:程序博客网 时间:2024/06/05 15:32
本篇文章为大家讲述我自己配置的双数据源过程,小伙伴们按照步骤一步一步按照文章所说便可完成多数据源的配置
步骤如下:
1:在pom中配置两个数据库的链接信息
<properties><p.package.suffix>dev</p.package.suffix><maven.build.timestamp.format>yyyyMMddHHmm</maven.build.timestamp.format><!-- mysql --><p.jdbc.url>***********:3306</p.jdbc.url><p.jdbc.dbname>dbname</p.jdbc.dbname><p.jdbc.username>username</p.jdbc.username> <p.jdbc.password>password</p.jdbc.password> <p.c3p0.minPoolSize>2</p.c3p0.minPoolSize><p.c3p0.maxPoolSize>10</p.c3p0.maxPoolSize><p.c3p0.acquireIncrement>2</p.c3p0.acquireIncrement><p.c3p0.initialPoolSize>2</p.c3p0.initialPoolSize><!-- mongo --><p.mongo.url>*******</p.mongo.url><p.mongo.port>35010</p.mongo.port><p.mongo.dbname>dbname</p.mongo.dbname><p.mongo.username>username</p.mongo.username><p.mongo.password>username</p.mongo.password> </properties>
2:数据源的配置文件dataSource.xml
<?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:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd"> <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close"> <property name="description" value="DataSource for SkyCloudVNS" /> <property name="driverClass" value="${jdbc.driverClassName}" /> <property name="jdbcUrl" value="${jdbc.url}" /> <property name="user" value="${jdbc.username}" /> <property name="password" value="${jdbc.password}" /> <property name="minPoolSize" value="${c3p0.minPoolSize}" /> <property name="maxPoolSize" value="${c3p0.maxPoolSize}" /> <property name="maxStatements" value="${c3p0.maxStatements}" /> <property name="initialPoolSize" value="${c3p0.initialPoolSize}" /> <property name="acquireIncrement" value="${c3p0.acquireIncrement}" /> <property name="maxIdleTime" value="${c3p0.maxIdleTime}" /> <property name="idleConnectionTestPeriod" value="${c3p0.idleConnectionTestPeriod}" /> <property name="preferredTestQuery" value="${c3p0.preferredTestQuery}" /> <property name="testConnectionOnCheckin" value="${c3p0.testConnectionOnCheckin}" /> </bean><bean id="dataSourceTwo" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close"> <property name="description" value="DataSource for SkyCloudVNS" /> <property name="driverClass" value="${jdbc.driverClassName}" /> <property name="jdbcUrl" value="${jdbc.urllog}" /> <property name="user" value="${jdbc.username}" /> <property name="password" value="${jdbc.password}" /> <property name="minPoolSize" value="${c3p0.minPoolSize}" /> <property name="maxPoolSize" value="${c3p0.maxPoolSize}" /> <property name="maxStatements" value="${c3p0.maxStatements}" /> <property name="initialPoolSize" value="${c3p0.initialPoolSize}" /> <property name="acquireIncrement" value="${c3p0.acquireIncrement}" /> <property name="maxIdleTime" value="${c3p0.maxIdleTime}" /> <property name="idleConnectionTestPeriod" value="${c3p0.idleConnectionTestPeriod}" /> <property name="preferredTestQuery" value="${c3p0.preferredTestQuery}" /> <property name="testConnectionOnCheckin" value="${c3p0.testConnectionOnCheckin}" /> </bean> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource" /> </bean> <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"> <property name="dataSource" ref="dataSource" /> </bean> <bean id="transactionManagerTwo" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSourceTwo" /> </bean> <bean id="jdbcTemplateTwo" class="org.springframework.jdbc.core.JdbcTemplate"> <property name="dataSource" ref="dataSourceTwo" /> </bean> <bean id="dynamicDataSource" class="com.yoyo.oss.common.utils.datasource.DynamicDataSource"> <property name="targetDataSources"> <map key-type="java.lang.String"> <!-- 指定lookupKey和与之对应的数据源 --> <entry key="dataSource" value-ref="dataSource"></entry> <entry key="dataSourceTwo" value-ref="dataSourceTwo"></entry> </map> </property> <!-- 这里可以指定默认的数据源 --> <property name="defaultTargetDataSource" ref="dataSource" /> </bean> <tx:annotation-driven transaction-manager="transactionManager" /> <tx:annotation-driven transaction-manager="transactionManagerTwo" /></beans>3:在applicationContext.xml中引用dataSource.xml
<import resource="classpath:/dataSource.xml" />
4:创建多数据源配置的工具类
package com.common.utils.datasource;public class DynamicDataSourceHolder { /** * 数据源标识保存在线程变量中,避免多线程操作数据源时互相干扰 */ private static final ThreadLocal<String> THREAD_DATA_SOURCE = new ThreadLocal<String>(); public static String getDataSource() { return THREAD_DATA_SOURCE.get(); } public static void setDataSource(String dataSource) { THREAD_DATA_SOURCE.set(dataSource); } public static void clearDataSource() { THREAD_DATA_SOURCE.remove(); } }
package com.common.utils.datasource;import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource;public class DynamicDataSource extends AbstractRoutingDataSource{@Override protected Object determineCurrentLookupKey() { // 从自定义的位置获取数据源标识 return DynamicDataSourceHolder.getDataSource(); }}
5:在自己的dao中引用数据源
@Autowiredprivate JdbcTemplate jdbcTemplate;
@Autowiredprivate JdbcTemplate jdbcTemplateTwo;
private static final BeanPropertyRowMapper<MyModel> rowMapper = new BeanPropertyRowMapper<MyModel>(
MyModel.class);
@Override
public List<MyModel> serch(String param) throws Exception{
DynamicDataSourceHolder.setDataSource("dataSourceTwo");//在此选择数据源,如果不做操作,默认数据源1(默认数据源在dataSource.xml中配置 )
String sql = "SELECT * from .....";
List<MyModel> myModels= new ArrayList<MyModel>();
myModels= jdbcTemplateTwo.query(sql, rowMapper, param);
return myModels;
}
至此双数据源生效正常使用,希望可以给小伙伴们解决一些问题。
阅读全文
3 0
- Spring多数据源的配置和使用
- Spring多数据源的配置和使用
- Spring多数据源的配置和使用
- 基于注解的Spring多数据源配置和使用
- 基于xml的Spring多数据源配置和使用
- spring多数据源的配置和使用
- Spring多数据源的配置和使用
- Spring多数据源的配置和使用
- 基于注解的Spring多数据源配置和使用
- Spring多数据源的配置和使用
- Spring多数据源的配置和使用
- Spring多数据源的配置和使用
- Spring多数据源的配置和使用
- Spring+ibatis 多数据源的配置和使用
- 基于注解的Spring多数据源配置和使用
- 基于注解的Spring多数据源配置和使用
- 基于注解的Spring多数据源配置和使用
- spring多数据源的配置和使用
- ROC AUC的原理详解
- 002 Django学习之第一个Django程序(Python2.7)
- 在Mac和Window上配置android自动打包
- UVA 1605Building for UN
- 花(cnm加强)
- spring多数据源的配置和使用
- vim编辑器的基本操作
- 获取ODI执行session ID
- Elasticsearch之基础
- JavaScript Date Format (JavaScript 处理日期 )
- 【机房合作】WPF报表
- QC功能测试大揭秘(1)
- PAT 1004. 成绩排名 (20)
- shell中$(( ))与$( )还有${ }的区别