文档章节

spring boot 进行读写分离

q叉烧p
 q叉烧p
发布于 2016/07/06 07:46
字数 202
阅读 1025
收藏 4

配置多数据源

writeDB

write.datasource.url: 
write.datasource.username: 
write.datasource.password: a
write.datasource.driver-class-name: 
write.datasource.max-active: 5
write.datasource.max-idle: 3
write.datasource.min-idle: 2
write.datasource.max-wait: 60000
write.datasource.validation-query: select NOW()
write.datasource.test-while-idle: true

readDB

read.datasource.url:
read.datasource.username:
read.datasource.password:
read.datasource.driver-class-name: com.mysql.jdbc.Driver
read.datasource.max-active: 5
read.datasource.max-idle: 3
read.datasource.min-idle: 2
read.datasource.max-wait: 60000
read.datasource.validation-query: select NOW()
read.datasource.test-while-idle: true  

设置动态数据源

<bean id="dynamicDataSource" class="com.freeworker.config.db.DynamicDataSource" primary="true">
<property name="targetDataSources">
	<map key-type="java.lang.String">
		<entry key="readDataSource" value-ref="readDataSource"></entry>
	</map>
</property>
<property name="defaultTargetDataSource" ref="writeDataSource"/>
</bean>

public class DynamicDataSource extends AbstractRoutingDataSource{

@Override
protected Object determineCurrentLookupKey() {
	return DynamicDataSourceHolder.getDataSource();
}

}

public class DynamicDataSourceHolder {

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

public static void setDataSource(String customerType) {
	dataSources.set(customerType);
}

public static String getDataSource() {
	return (String) dataSources.get();
}

public static void clearDataSource() {
	dataSources.remove();
}
}

使用AOP进行数据源切换

@Aspect
@Component
public class DynamicDataSourceAspect {

@Around("execution(public * com.freeworker.service..*.*(..))")
public Object around(ProceedingJoinPoint pjp) throws Throwable {
	MethodSignature methodSignature = (MethodSignature) pjp.getSignature();
	Method targetMethod = methodSignature.getMethod();
	if(targetMethod.isAnnotationPresent(TargetDataSource.class)){
		String targetDataSource = targetMethod.getAnnotation(TargetDataSource.class).name() ;
		DynamicDataSourceHolder.setDataSource(targetDataSource);
	}
	
	Object result = pjp.proceed();
	
	DynamicDataSourceHolder.clearDataSource();
	
	return result;
}
}

设置注解

@Target({ ElementType.METHOD, ElementType.TYPE })
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface TargetDataSource {
String name();
}

@Service
public class AppService implements IAppService{
@TargetDataSource(name="writeDataSource")
public DataValue<AppConfigVo> getAppConfig() {}
}

© 著作权归作者所有

下一篇: Mysql 主从配置
q叉烧p
粉丝 21
博文 76
码字总数 75416
作品 0
东莞
程序员
私信 提问
Spring Boot中整合Sharding-JDBC读写分离示例

在我《Spring Cloud微服务-全栈技术与案例解析》书中,第18章节分库分表解决方案里有对Sharding-JDBC的使用进行详细的讲解。 之前是通过XML方式来配置数据源,读写分离策略,分库分表策略等,...

尹吉欢
2018/08/31
0
0
Redis 架构演变与 Redis-cluster 群集读写方案

原文出处:PingLee 导言 Redis-cluster 是近年来 Redis 架构不断改进中的相对较好的 Redis 高可用方案。本文涉及到近年来 Redis 多实例架构的演变过程,包括普通主从架构(Master、slave 可进...

PingLee
2018/08/14
0
0
Redis架构与Redis-cluster

导言 Redis-cluster 是近年来 Redis 架构不断改进中的相对较好的 Redis 高可用方案。本文涉及到近年来 Redis 多实例架构的演变过程,包括普通主从架构(Master、slave 可进行写读分离)、哨兵...

Java高级技术
2018/09/13
0
0
崛起于Springboot2.0.X之mysql读写分离升级版(22)

介绍:本人之前写了一篇博客关于mysql的读写分离,那个需要配置多个类,如今读写分离升级了,我们不需要配置任何java配置文件类就可以,因为有人为我们封装了,我们只管添加依赖就好了 注意:...

木九天
2018/07/19
819
0
苞米豆-多数据源 2.2.1 发布:全面适配 mybatis-plus 2.x 3.x

dynamic-datasource-spring-boot-starter v2.2.1 发布,更新如下: 适配mybatis2.x版本 简介 dynamic-datasource-spring-boot-starter 是一个基于springboot的快速集成多数据源的启动器。 其...

小锅盖
2018/09/04
2.2K
4

没有更多内容

加载失败,请刷新页面

加载更多

zk中ToBeAppliedRequestProcessor解析

ToBeAppliedRequestProcessor在Leader中 在已处理事务和最后处理事务处理器之间,处理器链上下一个是FinalRequestProcessor public void processRequest(Request request) throws RequestPro...

writeademo
36分钟前
3
0
Allegro快捷键设置-PCB环境

立题简介: 内容:简单介绍Allegro绘制的PCB环境下的快捷键; 来源:实际使用得出; 作用:对Allegro绘制PCB快捷键进行介绍; PCB环境:Cadence 16.6; 立题详解: 对“allegro”板而言,其在...

demyar
37分钟前
3
0
idea maven web项目启动build时报错java.lang.NullPointerException

之前还好好的,重启一下idea就报这个错了,大概率是tomcat没杀掉端口被占用了,在tomcat配置中更换一下sever端口就好了

宇辰OSC
40分钟前
3
0
weed3-2.3.1.查询之输出

Weed3 一个超轻量级ORM框架(只有0.1Mb哦) 源码:https://github.com/noear/weed3 源码:https://gitee.com/noear/weed3 查询可是个复杂的话题了,可能我们80%的数据库处理都在查询。 今天先...

刘之西东
40分钟前
3
0
【Android JetPack系列】数据绑定:DataBinding

参考MVVM

Agnes2017
49分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部