专业的JAVA编程教程与资源

网站首页 > java教程 正文

SpringBoot2.x配置多数据源(springboot如何配置多数据源)

temp10 2024-10-13 09:27:48 java教程 7 ℃ 0 评论

pom引入

SpringBoot版本使用的是2.1.7

<!-- Druid -->
<dependency>
  <groupId>com.alibaba</groupId>
  <artifactId>druid-spring-boot-starter</artifactId>
  <version>1.1.16</version>
</dependency>

<!-- Mybatis Plus -->
<dependency>
  <groupId>com.baomidou</groupId>
  <artifactId>mybatis-plus-boot-starter</artifactId>
  <version>3.1.0</version>
</dependency>

添加各种配置类

yml

SpringBoot2.x配置多数据源(springboot如何配置多数据源)

spring:
  datasource:
    master:
      # 连接数据库的url
      url: jdbc:mysql://ip:3306/wbmp?useUnicode=true&characterEncoding=UTF-8&useSSL=false&autoReconnect=true&failOverReadOnly=false&serverTimezone=GMT%2B8
      # 连接数据库的账号
      username: 
      #  连接数据库的密码
      password: 
      # 使用druid数据源
      type: com.alibaba.druid.pool.DruidDataSource
    esb:
      # 连接数据库的url
      url: jdbc:mysql://ip:3306/ssamgt?useUnicode=true&characterEncoding=UTF-8&useSSL=false&autoReconnect=true&failOverReadOnly=false&serverTimezone=GMT%2B8
      # 连接数据库的账号
      username: 
      #  连接数据库的密码
      password: 
      # 使用druid数据源
      type: com.alibaba.druid.pool.DruidDataSource
    druid:
      # 扩展插件
      # 监控统计用的filter:stat 日志用的filter:log4j 防御sql注入的filter:wall
      filters: stat
      # 最大连接池数量
      max-active: 20spring:
      #其他更多项省略

java文件



MultipleDataSourceConfig

/**
 * 多数据源bean的配置类
 *
 * @author zzy
 */
@Configuration
public class MultipleDataSourceConfig {


    @Bean
    @ConfigurationProperties(prefix = "spring.datasource.master")
    public DataSource master() {
        DataSource build = DruidDataSourceBuilder.create().build();
        return build;
    }

    @Bean
    @ConfigurationProperties(prefix = "spring.datasource.esb")
    public DataSource esb() {
        DataSource build = DruidDataSourceBuilder.create().build();
        return build;
    }
    

    /**
     * 设置动态数据源,通过@Primary 来确定主DataSource
     *
     * @return
     */
    @Bean
    @Primary
    public DynamicDataSource dynamicDataSource() {
        DynamicDataSource dynamicDataSource = new DynamicDataSource();
        //设置默认数据源
        dynamicDataSource.setDefaultTargetDataSource(master());
        //配置多数据源
        Map<Object, Object> map = new HashMap<>();
        map.put(DynamicDataSourceSwitcher.Mater, master());
        map.put(DynamicDataSourceSwitcher.Slave, esb());
        dynamicDataSource.setTargetDataSources(map);
        return dynamicDataSource;
    }

}


DynamicDataSourceAspect

/**
 * 创建aop切面
 * @author zzy
 */
@Aspect
@Component
@Order(1)
@Slf4j
public class DynamicDataSourceAspect {
    @Pointcut(value="@within(org.springframework.stereotype.Service) && @annotation(dataSource)" )
    public void dynamicDataSourcePointCut(DataSource dataSource){}

    @Before(value = "dynamicDataSourcePointCut(dataSource)")
    public void switchDataSource(DataSource dataSource){
        log.info("##############数据源 :{}###############",dataSource.value());
        DynamicDataSourceSwitcher.setDataSource(dataSource.value());
    }

    @After(value="dynamicDataSourcePointCut(dataSource)")
    public void after(DataSource dataSource){
        DynamicDataSourceSwitcher.cleanDataSource();
    }
}


题外话:

如果你是要访问同一个实例中的不同数据库,那么只要你登陆的用户具有这几个库的权限,是不用配置多数据源的,直接使用库名.表名写sql即可,当然你非要配置也是可以的,但是没有必要。

多数据源一般针对的是,分布在不同实例中的数据库进行访问。

教程就到这里了

enjoy it。

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表