spring 动态数据源切换

简介:       public clas...

 

 

<!-- 分散配置 -->
	<context:property-placeholder location="classpath:jdbc.properties"/>
	
	<!-- 配置(主库)数据源 -->
	<bean id="dataSource-main" class="com.mchange.v2.c3p0.ComboPooledDataSource">
		<property name="driverClass" value="${jdbc.driverclass}" />
		<property name="jdbcUrl" value="${jdbc.url}" />
		<property name="user" value="${jdbc.username}" />
		<property name="password" value="${jdbc.password}" />
		
		<property name="maxPoolSize" value="${c3p0.pool.size.max}" />
		<property name="minPoolSize" value="${c3p0.pool.size.min}" />
		<property name="initialPoolSize" value="${c3p0.pool.size.ini}" />
		<property name="acquireIncrement" value="${c3p0.pool.size.increment}" />
	</bean>
	
	<!-- 配置从库数据源 -->
	<bean id="dataSource-1" parent="dataSource-main">
		<property name="jdbcUrl" value="jdbc:mysql://localhost:3306/lsn_surveypark001_1" />
	</bean>
	
	<!-- 数据源路由器 -->
	<bean id="dataSourceRouter" class="com.surveypark.datasource.SurveyparkDataSourceRouter">
		<!-- 目标数据源集合 -->
		<property name="targetDataSources">
			<map>
				<entry key="odd" value-ref="dataSource-main" />
				<entry key="even" value-ref="dataSource-1" />
			</map>
		</property>
		<!-- 默认数据源集合 -->
		<property name="defaultTargetDataSource" ref="dataSource-main" />
	</bean>

 

public class SurveyparkDataSourceRouter extends AbstractRoutingDataSource {
 
	protected Object determineCurrentLookupKey() { 
		SurveyparkToken token = SurveyparkToken.getCurrentToken();
		if(token != null){
			Integer id = token.getSurvey().getId(); 
			SurveyparkToken.unbindToken();
			return ((id % 2) == 0) ? "even" : "odd" ;
		}
		return null;
	}
}

 

public class SurveyparkToken { 
	private static 	ThreadLocal<SurveyparkToken> l = new ThreadLocal<SurveyparkToken>();
	
	private Survey survey ;

	public Survey getSurvey() {
		return survey;
	}

	public void setSurvey(Survey survey) {
		this.survey = survey;
	}
	
	 
	public static void bindToken(SurveyparkToken token){
		l.set(token);
	}
	 
	public static void unbindToken(){
		l.remove();
	}
 
	public static SurveyparkToken getCurrentToken(){
		return l.get();
	}
}

 

 

SurveyparkToken token = new SurveyparkToken();
token.setSurvey(getCurrentSurvey());
SurveyparkToken.bindToken(token);
surveyService.saveAnswers(processAnswers());

  

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

捐助开发者

在兴趣的驱动下,写一个免费的东西,有欣喜,也还有汗水,希望你喜欢我的作品,同时也能支持一下。 当然,有钱捧个钱场(右上角的爱心标志,支持支付宝和PayPal捐助),没钱捧个人场,谢谢各位。



 
 
 谢谢您的赞助,我会做的更好!

 

 

目录
相关文章
|
11月前
|
前端开发 Java 数据库连接
基于Spring boot轻松实现一个多数据源框架
基于Spring boot轻松实现一个多数据源框架
233 0
|
12月前
|
XML Java 数据库连接
spring管理数据源和引入外部属性文件~
spring管理数据源和引入外部属性文件~
|
5月前
|
前端开发 Java 数据库连接
Spring Boot 3 整合 Mybatis-Plus 动态数据源实现多数据源切换
Spring Boot 3 整合 Mybatis-Plus 动态数据源实现多数据源切换
|
12月前
|
Java 数据库连接 Go
如何在Spring Boot应用中使用Nacos实现动态更新数据源
如何在Spring Boot应用中使用Nacos实现动态更新数据源
450 0
|
4月前
|
存储 Java 数据库
Spring Boot中的动态数据源切换
Spring Boot中的动态数据源切换
|
4月前
|
Java Spring
spring基于注解配置数据源
spring基于注解配置数据源
|
5月前
|
设计模式 Java 数据库连接
【Spring源码】JDBC数据源访问实现
我们再来看看阅读线索三,这方面我们从设计模式进行入手。阅读线索三:从这个模块可以学到什么我们看下以下代码,PreparedStatement实例的是由PreparedStatementCreator实现的。再来看看PreparedStatementCreator接口,一共有三个子类实现。也就是说PreparedStatement的三种不同实现被封装到三个子类中,而具体需要哪种实现,只需要传入不同。
【Spring源码】JDBC数据源访问实现
|
5月前
|
Java 数据库连接 数据库
【Spring技术专题】「实战开发系列」保姆级教你SpringBoot整合Mybatis框架实现多数据源的静态数据源和动态数据源配置落地
Mybatis是一个基于JDBC实现的,支持普通 SQL 查询、存储过程和高级映射的优秀持久层框架,去掉了几乎所有的 JDBC 代码和参数的手工设置以及对结果集的检索封装。 Mybatis主要思想是将程序中大量的 SQL 语句剥离出来,配置在配置文件中,以实现 SQL 的灵活配置。在所有 ORM 框架中都有一个非常重要的媒介——PO(持久化对象),PO 的作用就是完成持久化操作,通过该对象对数据库执行增删改的操作,以面向对象的方式操作数据库。
89 1
【Spring技术专题】「实战开发系列」保姆级教你SpringBoot整合Mybatis框架实现多数据源的静态数据源和动态数据源配置落地
|
Java Spring
java202304java学习笔记第六十天-ssm-spring配置文件-spring产生数据源对象2
java202304java学习笔记第六十天-ssm-spring配置文件-spring产生数据源对象2
39 0
java202304java学习笔记第六十天-ssm-spring配置文件-数据源开发步骤
java202304java学习笔记第六十天-ssm-spring配置文件-数据源开发步骤
31 0
下一篇
无影云桌面