spring 数据源动态切换 与dubbo服务

1:问题描述

项目用了spring数据源动态切换,服务用的是dubbo。在运行一段时间后程序异常,更新操作没有切换到主库上。这个问题在先调用读操作后再调用写操作会出现。经分析原因有3: 第一:当程序运行一段时间后调用duboo服务时,读操作与写操作有可能会在一个线程里,当这种情况出现时

2:数据源配置

<idclass>
   <name>
      <key-type>
         <keyvalue-ref/>
         <keyvalue-ref/>
      </>
   </>
   <nameref/>
</>
<idtransaction-manager>
   <>
      <namepropagation/>
      <namepropagation/>
      <namepropagation/>
      <namepropagation/>
      <namepropagation/>
      <namepropagation/>
      <namepropagation/>
      <namepropagationread-only/>
      <namepropagationread-only/>
      <namepropagationread-only/>
      </>
</>
<>
   <pointcutadvice-ref/>
</>

<idclass/>
<>
   <pointcutadvice-ref/>
</>
com.flzc.user.aop;

org.slf4j.Logger;
org.springframework.aop.AfterReturningAdvice;
org.springframework.aop.MethodBeforeAdvice;
org.springframework.aop.ThrowsAdvice;

java.lang.reflect.Method;

DataSourceAdvice MethodBeforeAdvice, AfterReturningAdvice, ThrowsAdvice {

   Logger  = org.slf4j.LoggerFactory.(DataSourceAdvice.);
   
   before(Method method, Object[] args, Object target) Throwable {
      .info(+ target.().getName() + + method.getName() + );
      (method.getName().startsWith() || method.getName().startsWith()
            || method.getName().startsWith() || method.getName().startsWith()
            || method.getName().startsWith() || method.getName().startsWith()
            || method.getName().startsWith()) {
         DataSourceSwitcher.();
         .info();
      } {
         DataSourceSwitcher.();
         .info();
      }
   }

   afterReturning(Object arg0, Method method, Object[] args, Object target) Throwable {
      .info(+ target.().getName() + + method.getName() + );

      }

   afterThrowing(Method method, Object[] args, Object target, Exception ex) Throwable {
      DataSourceSwitcher.();
      .error();
   }

}
时间: 2024-10-28 11:21:48

spring 数据源动态切换 与dubbo服务的相关文章

基于Struts2 Spring ibatis Oracle10g架构 多数据源动态切换实例

一.概述 基于Spring动态配置多数据源,在大型的应用中对数据进行切分,并且采用多个数据库实例进行管理,这样可以有效的提高系统的水平伸缩性,而这样的解决方案就会补同于常见的单一数据实例的方案,这就要程序在运行时根据当时的请求以及系统状态来动态的决定将数据存储在哪个数据库实例中,以及从哪个数据库提取数据. Spring配置多个数据源的方式和具体使用过程,Spring对于多数据源,以数据库表为参照,大体上可以分为两大类情况: 1.表级上的跨数据库,即对于不同的数据库却有不相同的表(表名和表结构完全

基于spring的aop实现多数据源动态切换

https://lanjingling.github.io/2016/02/15/spring-aop-dynamicdatasource/ 基于spring的aop实现多数据源动态切换 发表于 2016-02-15   |   分类于 spring  | 一.多数据源动态切换原理 项目中我们经常会遇到多数据源的问题,尤其是数据同步或定时任务等项目更是如此:又例如:读写分离数据库配置的系统. 1.多数据源设置: 1)静态数据源切换:一般情况下,我们可以配置多个数据源,然后为每个数据源写一套对应的

Spring3.3 整合 Hibernate3、MyBatis3.2 配置多数据源/动态切换数据源 方法(转)

一.开篇 这里整合分别采用了Hibernate和MyBatis两大持久层框架,Hibernate主要完成增删改功能和一些单一的对象查询功能,MyBatis主要负责查询功能.所以在出来数据库方言的时候基本上没有什么问题,但唯一可能出现问题的就是在hibernate做添加操作生成主键策略的时候.因为我们都知道hibernate的数据库本地方言会针对不同的数据库采用不同的主键生成策略. 所以针对这一问题不得不采用自定义的主键生成策略,自己写一个主键生成器的表来维护主键生成方式或以及使用其他的方式来生成

springboot多数据源动态切换和自定义mybatis件分页插

1.配置多数据源 增加druid依赖 完整pom文件 数据源配置文件 route.datasource.driver-class-name= com.mysql.jdbc.Driver route.datasource.url= jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8 route.datasource.username= root route.datasource.password= 1234

koala 多数据源动态切换

koala 特点:多数据源动态切换,数据源分组和负载均衡(轮询) 项目源码以及demo:https://github.com/zeq9069/koala 请大家关注一下哦!!哈哈! 最近,在开发项目的时候后,要用到多个数据源的动态切换,于是就开发了koala 这个小小得框架,koala支持多数据源的切换,数据源的分组和负载均衡(轮询)! 只需要将jar引入到你自己的项目中之后,然后进行简单配置就可以使用了!!使用起来 非常方便,该项目提供了三个核心的注解@ChangeTo,@DataSource

Spring MVC动态切换数据源(多数据库类型)

最近由于项目需求,需要将Sql Server 和 Mysql 两种数据库整合到一个项目,项目的用到的框架是SSM. 因此尝试了利用AOP切面来切每次执行的Servcie方法,根据Service所在的包名来实现数据源自动切换. 1.项目架构如下: 2.在com.jiefupay.database包中建立四个类: 其中 DataSourceContextHolder.java类源码如下: package com.jiefupay.datebase; public class DataSourceCo

spring+mybatis多数据源动态切换

spring mvc+mybatis+多数据源切换 选取oracle,mysql作为例子切换数据源.oracle为默认数据源,在测试的action中,进行mysql和oracle的动态切换. web.xml <context-param> <param-name>webAppRootKey</param-name> <param-value>trac</param-value> </context-param> <!-- Spr

springAOP实现基于注解的数据源动态切换

需求 代码实现读写数据库分离 武器 spring3.0以上版本 实现思路 1.继承org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource,自定义数据源路由. 2.实现数据源类型管理工具,诸如DBContextHolder,包含设置和读取当前数据源配置. 3.实现数据源切换的AOP. 4.自定义只读注解,诸如@ReadOnlyKey. 5.配置transactionManager,实现aop. 代码示例 1.自定义的

基于Spring+Mybatis的多数据源动态切换

Spring单数据源直接在<bean id="dataSource">下配置数据源的各种连接参数.但动态数据源需要配置个各个数据源例如ds1.ds2等.然后在dataSource中动态根据传递过来的参数动态调用不同的数据源. 1.当进行访问时,首先通过DbContextHolder.setDbType("ds1");设置需要使用的数据源.DbContextHolder就是一个用来存储数据源信息的类,其中通过ThreadLocal来记录数据源信息. 2.D