SSM项目多数据源配置(MySQL+SQL Server)
核心代码百度云下载: https://pan.baidu.com/s/1eWVeVageYiRKyRbwiEAQVA 提取码:gioj
核心代码文件结构
一、MySQL 多数据源配置
1、pom.xml
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.10</version>
</dependency>
2、application.yml
# 多数据源配置
com:
ecenter:
boot:
#主动开启多数据源
multiDatasourceOpen: true
datasource[0]:
dbName: shimen
driverClassName: com.mysql.jdbc.Driver
url: jdbc:mysql://192.168.14.71:3306/shimen?useSSL=false&characterEncoding=utf-8
username: root
password: root
datasource[1]:
dbName: nzjc
driverClassName: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost:3306/datacenter?useSSL=false&characterEncoding=utf-8
username: root
password: root
3、注解类 MultiDataSource
package com.ecenter.boot.common.annotation;
import java.lang.annotation.*;
/**
* <p>多数据源标识</p>
* <p>使用方式:必须用在方法上</p>
*
* @author
* @date 2019-06-26 16:13
*/
@Inherited
@Retention(RetentionPolicy.RUNTIME)
@Target({
ElementType.METHOD})
public @interface MultiDataSource {
String name() default "main";
}
4、切面类 MultiDataSourceAop
package com.ecenter.boot.common.aop;
import com.ecenter.boot.common.annotation.MultiDataSource;
import com.ecenter.boot.config.source.DynamicDataSource;
import java.lang.reflect.Method;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.Signature;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.aspectj.lang.reflect.MethodSignature;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.core.Ordered;
import org.springframework.stereotype.Component;
/**
* <p>多数据源切换的 aop</p>
*
* @author
* @date 2019-06-26 16:22
*/
@Aspect
@Component
@ConditionalOnProperty(prefix = "com.ecenter.boot", name = "multiDatasourceOpen", havingValue = "true")
public class MultiDataSourceAop implements Ordered {
private Logger log = LoggerFactory.getLogger(this.getClass());
public MultiDataSourceAop() {
log.info("多数据源初始化 AOP ");
}
@Pointcut(value = "@annotation(com.ecenter.boot.common.annotation.MultiDataSource)")
private void cut() {
}
@Around("cut()")
public Object around(ProceedingJoinPoint point) throws Throwable {
Signature signature = point.getSignature();
MethodSignature methodSignature ;
if (!(signature instanceof