1. 程式人生 > >基於Mybatis+Spring+SpringAOP實現Mybatis多資料來源切換

基於Mybatis+Spring+SpringAOP實現Mybatis多資料來源切換

package com.hoo.framework.spring.interceptor;
import java.lang.reflect.Proxy;
import org.aopalliance.intercept.MethodInterceptor;
import org.aopalliance.intercept.MethodInvocation;
import org.apache.commons.lang.ClassUtils;
import org.springframework.beans.factory.InitializingBean;
import com.hoo.framework.log.ApplicationLogging;
import com.hoo.framework.spring.support.CustomerContextHolder;
/**
 * <b>function:</b> 動態設定資料來源攔截器
 * @author hoojo
 * @createDate 2013-9-27 下午02:00:13
 * @file DataSourceMethodInterceptor.java
 * @package com.hoo.framework.spring.interceptor
 * @project SHMB
 * @blog http://blog.csdn.net/IBM_hoojo
 * @email [email protected]
 * @version 1.0
 */
public class DataSourceMethodInterceptor extends ApplicationLogging implements MethodInterceptor, InitializingBean {
    @Override
    public Object invoke(MethodInvocation invocation) throws Throwable {
        Class<?> clazz = invocation.getThis().getClass();
        String className = clazz.getName();
        if (ClassUtils.isAssignable(clazz, Proxy.class)) {
            className = invocation.getMethod().getDeclaringClass().getName();
        }
        String methodName = invocation.getMethod().getName();
        Object[] arguments = invocation.getArguments();
        trace("execute {}.{}({})", className, methodName, arguments);
        if (className.contains("MySQL")) {
            CustomerContextHolder.setCustomerType(CustomerContextHolder.DATA_SOURCE_MYSQL);
        } else if (className.contains("Oracle")) {
            CustomerContextHolder.setCustomerType(CustomerContextHolder.DATA_SOURCE_ORACLE);
        } else if (methodName.contains("MySQL")) {
            CustomerContextHolder.setCustomerType(CustomerContextHolder.DATA_SOURCE_MYSQL);
        } else if (methodName.contains("Oracle")) {
            CustomerContextHolder.setCustomerType(CustomerContextHolder.DATA_SOURCE_ORACLE);
        } else {
            CustomerContextHolder.clearCustomerType();
        }
        /*
        if (className.contains("MySQL") || methodName.contains("MySQL")) {
            CustomerContextHolder.setCustomerType(CustomerContextHolder.DATA_SOURCE_MYSQL);
        } else if (className.contains("Oracle") || methodName.contains("Oracle")) {
            CustomerContextHolder.setCustomerType(CustomerContextHolder.DATA_SOURCE_ORACLE);
        } else {
            CustomerContextHolder.clearCustomerType();
        }
        */
        Object result = invocation.proceed();
        return result;
    }
    @Override
    public void afterPropertiesSet() throws Exception {
        log.trace("afterPropertiesSet……");
    }
}

相關推薦

基於Mybatis+Spring+SpringAOP實現Mybatis資料來源切換

package com.hoo.framework.spring.interceptor; import java.lang.reflect.Proxy; import org.aopalliance.intercept.MethodInterceptor; import org.aopalliance.

spring boot整合mybatis通用mapper實現Druid資料來源

      在以前的專案中用springMVC加原生的mybatis框架使用過多資料來源的配置,是用xml配置的。在這次的新專案裡面使用到了tk的通用mapper,剛好專案結束,利用空閒時間寫了個全註解的多資料來源配置小demo

Spring Boot 整合 Mybatis 實現 Druid 資料來源詳解

“清醒時做事,糊塗時跑步,大怒時睡覺,獨處時思考” 本文提綱 一、多資料來源的應用場景 二、執行 springboot-mybatis-mutil-datasource 工程案例 三、springboot-mybatis-mutil-datasource 工程程式碼配置詳解 一、多資料來

Spring AOP實現註解式的Mybatis資料來源切換

一、為什麼要使用多資料來源切換? 多資料來源切換是為了滿足什麼業務場景?正常情況下,一個微服務或者說一個WEB專案,在使用Mybatis作為資料庫連結和操作框架的情況下通常只需要構建一個系統庫,在該系統庫建立業務表來滿足需求,當然也有分為測試庫和正式庫dev/prod,不過這倆庫的切換是使用配置

SpringBoot31 整合SpringJDBC、整合MyBatis、利用AOP實現資料來源切換

  一、整合SpringJDBC 1  JDBC   JDBC(Java Data Base Connectivity,Java 資料庫連線)是一種用於執行 SQL 語句的 Java API,可以為多種關係資料庫提供統一訪問,它由一組用 Java 語言編寫的類和介面組成。JDBC 提

Spring Boot + MyBatis + Druid環境下配置資料來源

專案中採用Spring Boot + MyBatis + Druid的架構,在原資料來源的基礎上需要新增一個新的資料來源。 除錯期間,發現添加了SqlSessionFactoryBean後,原資料來源有一部分欄位無法取值,後發現是application.yml中的配置失效,

spring 整合mybatis——資料來源切換(附帶定時器的配置,儲存過程連線,資料多於50條,分批進行操作)

新建com.millery.utils包在其下新建DataSourceContextHolder類 package com.millery.utils; public class DataSourceContextHolder { private

Spring Boot筆記之資料來源(Mysql+MyBatis

Mysql+MyBatis多資料來源配置 SpringBoot單資料來源配置 pom.xml application.yml SpringBoot多資料來源配置 修改application.yml Confi

整合springboot+mvc+mybatis(通用mapper)+druid+jsp+bootstrap實現許可權管理檔案上傳下載資料來源切換操作日誌記錄等功能

花了兩週,學習了下springboot,然後做個小東西練練手.專案基於jdk1.8+maven整合了springboot+mvc+mybatis(通用mapper)+druid+jsp+bootstrap等技術,springboot+Listener(監聽器),Filter

spring+mybatis 資料來源切換失敗的可能原因。

可能因為,加了事務。 //@Transactional(readOnly = false) // 需要事務操作必須加入此註解 就因為加了事務,導致了,問題的出現。 不然setCustomerType,也沒有出現應有的結果。 害得我把spring的框架都改寫了,不過由於

Maven+Mybatis+Spring+SpringMVC實現分頁查詢

XML lec www tails odin build 效果 servle lpad 轉載:http://www.cnblogs.com/zhangtan/p/5846955.html 一、項目搭建 關於項目搭建,小寶鴿以前寫過一篇Spirng+SpringMVC+Ma

mybatis xml中實現一對查詢時, 子查詢帶個引數

1、mapper檔案中: List<Object> getXXXXX(@Param("taskId")String taskId,@Param("taskType")String taskType); 2、xml檔案中 <select id="" resultMap

Spring使用Spring的AbstractRoutingDataSource實現資料來源切換

最近因為專案需要在做兩個專案間資料同步的需求,具體是專案1的資料通過訊息佇列同步到專案2中,因為這個更新操作還涉及到更新多個庫的資料,所以就需要多資料來源切換的操作。下面就講講在Spring中如何進行資料來源切換。這裡是使用AbstractRoutingDataSource類

Spring AOP實現資料來源切換

有時候我們會遇到這樣的場景:一個應用系統中存在多個數據源,需要根據不同業務場景進行臨時切換。比如讀寫分離(也可以考慮使用Mycat等資料庫中介軟體)等。 Spring提供了動態資料來源的功能,可以讓我們實現在對資料庫操作前進行切換。 下面我們演示怎麼在專案中配置多資料來源並根據不用業務場

Spring boot 基於註解的的資料來源切換

一.建立以下類import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource;/** * 動態資料來源 * * @author liwc * @version V1.0 * @date 2

Maven+Mybatis+Spring+SpringMVC實現分頁

一、專案搭建 二、分頁外掛的介紹 博主採用的外掛是PageHelper這個外掛,使用起來十分方便。該外掛支援以下資料庫: Oracle Mysql MariaDB SQLite Hsqldb PostgreSQL DB2 SqlServer(2005+) Info

Maven+Mybatis+Spring+SpringMVC實現(oracle)分頁查詢(附原始碼)

關於專案搭建,小寶鴿以前寫過一篇Spirng+SpringMVC+Maven+Mybatis+MySQL專案搭建,這篇文章提供了詳細的搭建過程,而且提供了原始碼下載,接下來的將在這個原始碼的基礎上繼續開發。所以建議各位猿友可以把猿友下載一下。 二、分頁外掛的介紹 博主採用的外掛是PageHelpe

Spring中AOP方式實現資料來源切換

spring動態配置多資料來源,即在大型應用中對資料進行切分,並且採用多個資料庫例項進行管理,這樣可以有效提高系統的水平伸縮性。而這樣的方案就會不同於常見的單一資料例項的方案,這就要程式在執行時根據當時的請求及系統狀態來動態的決定將資料儲存在哪個資料庫例項中,以及從

SpringBoot+mybatis+Druid資料來源切換

1. 配置application.properties #primary db spring.datasource.primary.url=jdbc:mysql://127.0.0.1:3306/master?characterEncoding=utf-8

Mybatis中collection實現一對的問題

今天在使用Mybatis中的Collection獲取集合資訊時,資料庫中對應了多條資料,但在做單元測試時只能獲取到一條資料。 糾結了很久,突然想到是不是主鍵的問題,結果一試,還真是這麼回事。 Myba