yml配置多个连接

mybatis:configuration:map-underscore-to-camel-case: truecall-setters-on-nulls: truelog-impl: org.apache.ibatis.logging.stdout.StdOutImpl  # 打印SQLmapper-locations: classpath*:mybatis/**/*Mapper.xmltype-aliases-package: com.itun.cloud
spring:datasource:type: com.alibaba.druid.pool.DruidDataSourcedatasource1:#数据源的基本配置username: **password: **driver-class-name: oracle.jdbc.driver.OracleDriverurl: jdbc:oracle:thin:@//172.10.0*****his.com#数据源的其他配置initialSize: 5minIdle: 5maxActive: 20maxWait: 60000timeBetweenEvictionRunsMillis: 60000minEvictableIdleTimeMillis: 300000validationQuery: SELECT 1 FROM DUALtestWhileIdle: truetestOnBorrow: falsetestOnReturn: falsepoolPreparedStatements: true#   配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙filters: stat,wall,self4jmaxPoolPreparedStatementPerConnectionSize: 20useGlobalDataSourceStat: trueconnectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=500datasource2:#数据源的基本配置username: **password: **driver-class-name: oracle.jdbc.driver.OracleDriverurl: jdbc:oracle:thin:@//172.10***RCL#数据源的其他配置initialSize: 5minIdle: 5maxActive: 20maxWait: 60000timeBetweenEvictionRunsMillis: 60000minEvictableIdleTimeMillis: 300000validationQuery: SELECT 1 FROM DUALtestWhileIdle: truetestOnBorrow: falsetestOnReturn: falsepoolPreparedStatements: true#   配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙filters: stat,wall,self4jmaxPoolPreparedStatementPerConnectionSize: 20useGlobalDataSourceStat: trueconnectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=500
#mybatis的配置

配置多个数据源连接与配置文件对应

package com.example.duoshujuyuan.config;import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceBuilder;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;import javax.sql.DataSource;/*** @author Li Zongyang* @Date 2022/6/10*/
@Configuration
public class DatabaseConfig {@Bean@ConfigurationProperties(prefix = "spring.datasource.datasource1")public DataSource dataSource1() {return DruidDataSourceBuilder.create().build();}@Bean@ConfigurationProperties(prefix = "spring.datasource.datasource2")public DataSource dataSource2() {return DruidDataSourceBuilder.create().build();}}

设置数据源表示,当连接jdbc时根据返回的数据源进行判断  name为数据源

package com.example.duoshujuyuan.datacourceconfig;import com.example.duoshujuyuan.eumnn.DataSourceEnum;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Primary;
import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource;
import org.springframework.stereotype.Component;import javax.sql.DataSource;
import java.util.HashMap;
import java.util.Map;/*** @author Li Zongyang* @Date 2022/6/10*/
@Component
@Primary
public class DyConfig extends AbstractRoutingDataSource {//数据源标识public static ThreadLocal<String> name = new ThreadLocal<>();//写@Autowiredprivate DataSource dataSource1;//读@Autowiredprivate DataSource dataSource2;//返回当前数据源标识@Overrideprotected Object determineCurrentLookupKey() {return name.get();}@Overridepublic void afterPropertiesSet() {Map<Object, Object> targetDataSources = new HashMap<>(2);targetDataSources.put(DataSourceEnum.SORECE1.getResult(),dataSource1);targetDataSources.put(DataSourceEnum.SORECE2.getResult(),dataSource2);//targetDataSources  初始化数据源super.setTargetDataSources(targetDataSources);//  defaultTargetDataSource默认数据源super.setDefaultTargetDataSource(dataSource1);super.afterPropertiesSet();}}

添加自定义注解方便解耦调用

package com.example.duoshujuyuan.annotation;import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;/*** @author Li Zongyang* @Date 2022/6/11*/
@Target(value = {ElementType.METHOD,ElementType.TYPE})
@Retention(value = RetentionPolicy.RUNTIME)
public @interface DataSourceAnno {String value() default "W";}

Aop拦截访问,通过设置数据源进行访问jdbc路径

定义切面  使用调用前@Before 获取注解内容进行设置

package com.example.duoshujuyuan.aspect;import com.example.duoshujuyuan.annotation.DataSourceAnno;
import com.example.duoshujuyuan.datacourceconfig.DyConfig;
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 java.lang.reflect.Method;/*** @author Li Zongyang* @Date 2022/6/13*/
@Component
@Aspect
public class DataSourceAspect {@Pointcut(value = "execution( * com.example.duoshujuyuan.controller.*.*(..))")public void myPointcut() {}@Before(value = "myPointcut()")public void before(JoinPoint jp) {MethodSignature methodSignature = (MethodSignature) jp.getSignature();Method method = methodSignature.getMethod();DataSourceAnno action = method.getAnnotation(DataSourceAnno.class);String s = action.value();DyConfig.name.set(s);}}

在controller层方法上添加注解

package com.example.duoshujuyuan.controller;import com.example.duoshujuyuan.annotation.DataSourceAnno;
import com.example.duoshujuyuan.datacourceconfig.DyConfig;
import com.example.duoshujuyuan.entity.Allowances;
import com.example.duoshujuyuan.eumnn.DataSourceEnum;
import com.example.duoshujuyuan.service.AllowancesService;
import org.springframework.web.bind.annotation.*;import javax.annotation.Resource;/*** (Allowances)表控制层** @author makejava* @since 2022-06-10 10:14:35*/
@RestController
//@RequestMapping("allowances")
public class AllowancesController {/*** 服务对象*/@Resourceprivate AllowancesService allowancesService;@DataSourceAnno(value = "R")@GetMapping("/list")public Object getList(){//DyConfig.name.set("W");return allowancesService.queryAllByLimit(0,3);}@DataSourceAnno@GetMapping("/list2")public Object getList2(){//DyConfig.name.set("R");return allowancesService.queryAllByLimit(0,3);}}

一个项目配置多数据源Aop调用相关推荐

  1. (支付宝支付)Spring实现一个项目配置多个信息、付款给对应商户

    如何实现一个项目配置多个商户信息付款给对应商户 最近在对接支付宝支付时,遇到了一个问题 用户在付款时,需要直接付款到指定支付宝账户. 这个需求也无可厚非,就像我们公司有四个分公司,分别在北京.上海等地 ...

  2. java项目配置多数据源

    有些web应用需要连接多个数据源,本文讲解一下如何使用多个数据源,大题思路是这样的,系统启动的时候创建多个数据源,然后具体执行sql的时候去切换数据源执行对应的sql.如何切换数据源呢?spring提 ...

  3. Java外卖多商户_如何实现如何一个项目配置多个商户信息付款给对应商户

    说明: 本帖主要说明如何实现给一个平台配置多个商户的号实现多个商户收款.适用于所有支付接口 支付宝最终是根据请求过来的appid来判断哪一个商户收款(也就是请求是谁的appid就收款到谁的账号下) 方 ...

  4. myeclipse中如何为一个项目配置spring

    如何在myeclipse中为一个普通的项目导入spring框架呢? 1.新建一个工程,在src目录下,新建一个lib文件夹,存放spring所需要的jar包 2.导入springjar包: commo ...

  5. SpringBoot项目配置多数据源

    1. 修改application.yml 注意 连接多个数据库时,url要更改为jdbc-url,否则会报错. 多数据源的配置中需要指定具体的名称来区分不同的数据库(上述配置中的dev和local,名 ...

  6. log4jdbc oracle,通过weblogic配置log4jdbc数据源,在项目中使用该数据源,输出sql

    通过weblogic配置log4jdbc数据源,在项目中使用该数据源,输出sql 通过weblogic配置log4jdbc数据源,在项目中使用该数据源,输出sql 说一下配置: 服务器weblogic ...

  7. Java 阿里巴巴数据源_阿里P7教你如何使用 Spring 配置动态数据源实现读写分离

    最近搭建的一个项目需要实现数据源的读写分离,在这里将代码进行分享,以供参考. 关键词:DataSource .AbstractRoutingDataSource.AOP 首先是配置数据源 //配置省略 ...

  8. Pycharm新建项目配置虚拟环境

    Pycharm新建项目配置虚拟环境 1.概述 使用python开发项目通常都会创建一个虚拟环境,将项目依赖包安装到虚拟环境中,避免一台电脑上开发多个项目时依赖包版本号不兼容造成冲突. 2.新项目配置虚 ...

  9. SpringBoot JPA配置多数据源(同类型库)教程

    SpringBoot项目配置多数据源主要分为以下个步骤: 确定好所连接的数据库的资源(包括url username password) 将两个库的信息写入到配置文件中(application.yaml ...

最新文章

  1. 优化你的CPU来做深度学习
  2. 微服务为什么一定要用docker ?
  3. 吵架后一个老公的检讨书(超经典)
  4. c#连接oracle11,C#连接Oracle 11g 无需安装Oracle客户端
  5. 微信小程序购物商城系统开发系列-工具篇
  6. 开启Apache mod_rewrite模块完全解答
  7. 数据结构链表之循环链表——4
  8. ElasticSearch 快照 备份、恢复数据
  9. 1103: 平均学分绩点(函数专题)
  10. 从文件扩展名获取MIME类型
  11. 斐波那契数列(复习)
  12. JSON格式输出Struts2
  13. JSON编码MySQL结果
  14. 两个三维向量叉积_三维向量叉乘推导
  15. 读书随笔《36岁, 半熟人生》
  16. 计算机pdf转换word,PDF怎么转换成Word?解决PDF转Word的小妙招
  17. [LeetCode][沙雕氵]如何用LeetCode130写一个故事?
  18. [原创]我眼中的乔布斯
  19. android 利用shape做控件背景(小圆点,空心带边框背景)
  20. EFS加密文件重装系统无法打开图标带小锁显示绿色解密

热门文章

  1. Linux-less
  2. 全景探秘游戏设计艺术 笔记
  3. Linux远程桌面的选择
  4. id 和 class的区别
  5. 感冒病毒 suspects 并查集
  6. 是谁在我的心里打了个结(二十六)乱七八糟
  7. Deeplav V3总结
  8. Ubuntu 20.04视频播放
  9. 论文笔记:高精度室内定位研究评述及未来演进展望
  10. 什么是掩膜(Mask)?