springmvc+mybatis+mysql 实现读写分离
来源:互联网 发布:java试题库及答案 编辑:程序博客网 时间:2024/05/16 13:56
上一篇文章实现了mysql的主从同步,所试着在springmcv中实现读写分离。
主要方式其实就是通过spingAop控制方法访问的数据库表,
由于我是基于前几文章的项目来实现的,所以项目搭建和jar都已经有了直接开始写实现,
第一步:sping配置文件
1,多数据源配置:
配置了两个一个读一个写:所以beanName分别为:readDataSource和writeDataSource数据源的ip分别为mysql主从的ip;
dataSource bean是自己用aop的方式写路由控制器,负责通过不同的key加载不同的数据源给最终调用数据库表操作的方法。
这个dataSource 最终的事物控制还是由
来控制,和一般的事物没什么却别;
现在看看路由的实现:
package com.java.spring.util.aspect;import java.lang.reflect.Method;import org.aspectj.lang.JoinPoint;import org.aspectj.lang.annotation.Aspect;import org.aspectj.lang.annotation.Before;import org.aspectj.lang.annotation.Pointcut;import org.aspectj.lang.reflect.MethodSignature;import org.springframework.stereotype.Component;import com.java.spring.util.dynamicDataSource.DataSource;import com.java.spring.util.dynamicDataSource.DynamicDataSourceHolder;/*** @author 作者:zhaofq* @version 创建时间:2017年4月14日 下午4:24:36* 类说明:在访问每个方法之前会进行拦截调用,其目的就是通过方法调用key来加载不同的数据源*/public class DataSourceAspect { //@Pointcut("execution(* com.apc.cms.service.*.*(..))") public void pointCut(){}; // @Before(value = "pointCut()") public void before(JoinPoint point) { Object target = point.getTarget(); System.out.println(target.toString()); String method = point.getSignature().getName(); System.out.println(method); Class<?>[] classz = target.getClass().getInterfaces(); Class<?>[] parameterTypes = ((MethodSignature) point.getSignature()) .getMethod().getParameterTypes(); try { Method m = classz[0].getMethod(method, parameterTypes); System.out.println(m.getName()); if (m != null && m.isAnnotationPresent(DataSource.class)) { DataSource data = m.getAnnotation(DataSource.class); //加载已经在内存中数据源, DynamicDataSourceHolder.putDataSource(data.value()); } } catch (Exception e) { e.printStackTrace(); } }}
package com.java.spring.util.dynamicDataSource;/*** @author 作者:zhaofq* @version 创建时间:2017年4月14日 下午4:22:41* 类说明*/public class DynamicDataSourceHolder { public static final ThreadLocal<String> holder = new ThreadLocal<String>(); public static void putDataSource(String name) { holder.set(name); } public static String getDataSouce() { return holder.get(); }}
package com.java.spring.util.dynamicDataSource;import java.lang.annotation.ElementType;import java.lang.annotation.Retention;import java.lang.annotation.RetentionPolicy;import java.lang.annotation.Target;/*** @author 作者:zhaofq* @version 创建时间:2017年4月14日 下午4:10:00* 类说明*/@Target(ElementType.METHOD)@Retention(RetentionPolicy.RUNTIME)public @interface DataSource { String value();}
package com.java.spring.util.dynamicDataSource;import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource;/*** @author 作者:zhaofq* @version 创建时间:2017年4月14日 下午4:21:59* 类说明*/public class DynamicDataSource extends AbstractRoutingDataSource { @Override protected Object determineCurrentLookupKey() { return DynamicDataSourceHolder.getDataSouce(); }}
对应的几个类,完成实现,、
调用的方式:已经控制到了业务从sping配置就能找到
所只需要在操作数据方式的时候注解就可以:
0 0
- springmvc+mybatis+mysql 实现读写分离
- mysql+spring+mybatis实现数据库读写分离
- spring集成mybatis实现mysql读写分离
- J2EE项目使用自定义注解实现基于SpringMVC + Mybatis + Mysql的读写分离
- springmvc+mybatis+druid+mysql proxy读写分离配置
- MYSQL实现读写分离
- mysql读写分离实现
- Mysql实现读写分离
- mysql+spring+mybatis实现数据库读写分离[代码配置]
- mysql+spring+mybatis实现数据库读写分离[代码配置]
- mysql+spring+mybatis实现数据库读写分离[代码配置]
- spring + mybatis实现读写分离
- Amoeba+mysql实现读写分离
- mysql读写分离的实现
- mysql主从+读写分离实现
- MySQL Proxy 实现读写分离
- mysql jdbc 实现读写分离
- Amoeba实现mysql读写分离
- stm32 JTAG和SWD的使用区别
- ajax 处理跨域请求
- C++普通函数指针与成员函数指针实例解析
- 【矩阵快速幂】POJ 3233 && NYOJ 298 Matrix Power Series
- 《敏捷软件开发:原则、模式与实践》--敏捷开发读书笔记
- springmvc+mybatis+mysql 实现读写分离
- 在线笔试编程技巧
- OSS简记述
- eclipse中的Link with Editor不能定位到js
- Hibernate学习-14:实体之间的关系及其配置,级联操作
- listView简单使用和出现的一些问题
- Binary Tree Inorder Traversal
- json字符串转成json对象
- 关于matlab中get和set的用法(转)