最近做了个项目,他们要求在主数据库中存一个表,记录了所有要连接的数据库,然后客户可以任意选择要连接哪个数据库。但是,连到那个数据库,只是获取某一部分信息,而像日志、注释等信息还要存在主库中。
我们选的是ibatis框架作为数据库层,用mysql实验的时候,是用c3p0创建动态数据库,然后调用getSqlMapClientTemplate().setDataSource(DataSource dataSource)方法将数据源赋给ibtis,这样换数据源时,spring不用重启就可以。
但后来换了sqlserver发现不行,虽然数据库照样创建,但是ibatis还是连接的以前的主库,所以为这个烦恼了很长时间,现在想了一个方法,用aop来实现切换库。
@Before("execution(public * com.casic.dao.DmRleaseDao.*(..)) or execution(public * com.casic.dao.ReleaseHistoryDao.*(..)) or execution(public * com.casic.dao.ReleaseObjectDao.*(..)) "
+ " or execution(public * com.casic.dao.ReleaseResourceDao.*(..)) or execution(public * com.casic.dao.SecuritLevelDao.*(..)) or execution(public * com.casic.dao.StructureDmoduleDao.*(..))"
+ " or execution(public * com.casic.dao.StructureObjectDao.*(..))")
public void changeDataSource() {
//得到当前项目的action
ProjectAction pa = new ProjectAction();
//获得用户选择的数据库
String dataSource = (String) pa.getSession().get("dataSource");
if (dataSource != null && !dataSource.equals("")) {
System.out.println("改变数据源++++++++++++++++++++++++++++++++++++");
System.out.println(pa.getSession().size()
+ ".....................................");
System.out.println(pa.getSession().get("dataSource")
+ "------------------------------");
this.getSqlMapClientTemplate().update(
"DataSource.changeDataSource", dataSource);
}
}
而在DataSource.xml里,这样
<update id="changeDataSource" parameterClass="java.lang.String">
use #value#;
</update>
就可以在每一个dao类中的方法执行前执行一次use XXX,来切换数据库。虽然方法烂了点,但总算是达到功能了。
分享到:
相关推荐
使用JAVA aop技术,实现mysql 数据库读写分离(密码:111111)
aop方式实现数据库读写分离
通过SpringAop实现多数据源的动态切换 并采用Druid连接池,可扩展继续增加数据库配置。
2、能够清楚的知道如何用spring aop实现自定义注解以及注解的逻辑实现 (需要知道原理的请看spring aop源码,此处不做赘述) 3、可在现有源码上快速进行功能扩展 4、spring boot,mybatis,druid,spring aop的使用
源码主要用于学习通过SpringBoot结合AOP简单实现数据库读写分离,数据源使用Alibaba Druid,数据
springaop多数据库读写分离
主要介绍了Spring AOP实现Redis缓存数据库查询的相关内容,源码部分还是不错的,需要的朋友可以参考下。
分布式环境下数据库的读写分离策略是解决数据库读写性能瓶颈的一个关键解决方案,这篇文章主要介绍了使用Spring AOP实现MySQL数据库读写分离案例分析(附demo),有兴趣的可以了解一下。
Spring+SpringMvc+MybatisPlus实现多数据源切换、利用自定义Aop注解,只需要在需要切换数据库的方法上加上注解即可实现、极大避免了代码冗余。
SpringBoot2.1.5+Druid+MySQL+SQL server实现多数据源连接,AOP注解动态切换数据源。
基于SpringAOP的数据库读写分离的实现,可以点击查看我的博客,有详细讲解http://blog.csdn.net/qism007
资源中整合了SSM,并实现了数据库读写分离。使用mybatis-generator动态生成mapper、dao、po,封装了常用的工具类,后期还继续维护,加上分布式缓存等等。
这是公司新项目POC阶段的一个小DEMO,可以实现客户端无需使用代理,并且有路由中心实现透传转发,实现了AOP拦截消息并处理
引入之后,在启动类加包扫描 @SpringBootApplication(scanBasePackages = {"com.czc"}),工具才会生效
自己搭建的一个SpringBoot+MyBatis的小项目,代码很完整,里面写了AOP、HTTPS、过滤器、拦截器等等,可以相互学习借鉴。
本代码通过使用spring aop+ehcache的技术,实现了方法级别的查询缓存,主要原理是 方法的完整路径+方法参数值,作为key,放入cache中,下次访问时先判断cache中是否有该key.
主要介绍了Spring+Mybatis 实现aop数据库读写分离与多数据库源配置操作,需要的朋友可以参考下
最近项目要支持读写分离, 网上找了很多,但都是不太完整,我自己整理了下供大家参考。 我的项目使用的框架: springMvc+spring+hibernate+springJPA+maven, 数据库连接池用阿里的druid。
基于Springboot结合aop实现读写分离实例工程系统源码+项目说明.zip 以Java语言来说,如今大部分的项目都是基于Spring Boot框架来搭建项目架构的,结合Spring本身自带的AOP工具,我们可以很容易就构建能实现读写分离...
Spring mvc mybatis plus 实现AOP 切面日志系统,带有数据库。可以自行拓展