springboot druid 多数据源初始化

本文详细讲解了如何在SpringBoot项目中使用Druid实现多个数据源的初始化,重点讨论了@Primary注解的作用以及如何确保其他非@Primary数据源在项目启动时同步初始化。通过指定initMethod属性,解决了数据源延迟加载的问题。
摘要由CSDN通过智能技术生成

springboot druid 多数据源初始化

springboot druid 整合,项目初始化的时候只初始化了 Primary 数据源
	@Bean(name = "primaryDataSource")
    @Primary
    public DataSource primaryDataSource() {
        DruidDataSource dataSource = new DruidDataSource();
        dataSource.setDriverClassName(driverClass);
        dataSource.setUrl(url);
        dataSource.setUsername(user);
        dataSource.setPassword(password);
        return dataSource;
    }
其他数据源在注入的时候并没有进行初始化,而是等到调用的时候才进行注入。
    @Bean(name = "secondaryDataSource")
    public DataSource secondaryDataSource() {
        DruidDataSource dataSource = new DruidDataSource();
        dataSource.setDriverClassName(driverClass);
        dataSource.setUrl(url);
        dataSource.setUsername(user);
        dataSource.setPassword(password);
        return dataSource;
    }

在服务调用的时候初始化了cluster数据源,druid源码显示druid 在获取连接的时候才进行数据源的初始化,而@Primary 注解的数据源在项目启动的时候会初始化数据源,@Primary注解 会从多个候选的实现中 选择有这个注解的bean 去注入
在这里插入图片描述

为了让其他数据源在项目初始化的时候也进行初始化,可以在其他数据源@Bean注解中指定initMethod,这样就可以在项目初始化的时候 也初始化其他的数据源了

    @Bean(name = "secondaryDataSource" inMethod="init")
    public DataSource secondaryDataSource() {
        DruidDataSource dataSource = new DruidDataSource();
        dataSource.setDriverClassName(driverClass);
        dataSource.setUrl(url);
        dataSource.setUsername(user);
        dataSource.setPassword(password);
        return dataSource;
    }
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,关于Spring Boot中使用Druid实现多数据源配置,你可以按照以下步骤进行操作: 1. 添加Druid和JDBC依赖 在pom.xml文件中,添加以下依赖: ```xml <!-- Druid依赖 --> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid-spring-boot-starter</artifactId> <version>1.1.21</version> </dependency> <!-- JDBC依赖 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> </dependency> ``` 2. 配置Druid数据源 在application.yml配置文件中,添加Druid数据源的配置,包括主数据源和从数据源的配置,例如: ```yml spring: datasource: master: url: jdbc:mysql://localhost:3306/db_master?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=UTC username: root password: 123456 driver-class-name: com.mysql.cj.jdbc.Driver # Druid配置 initialSize: 5 minIdle: 5 maxActive: 20 maxWait: 60000 timeBetweenEvictionRunsMillis: 60000 minEvictableIdleTimeMillis: 300000 validationQuery: SELECT 1 FROM DUAL testWhileIdle: true testOnBorrow: false testOnReturn: false poolPreparedStatements: true maxPoolPreparedStatementPerConnectionSize: 20 filters: stat,wall,log4j connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000 slave: url: jdbc:mysql://localhost:3306/db_slave?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=UTC username: root password: 123456 driver-class-name: com.mysql.cj.jdbc.Driver # Druid配置 initialSize: 5 minIdle: 5 maxActive: 20 maxWait: 60000 timeBetweenEvictionRunsMillis: 60000 minEvictableIdleTimeMillis: 300000 validationQuery: SELECT 1 FROM DUAL testWhileIdle: true testOnBorrow: false testOnReturn: false poolPreparedStatements: true maxPoolPreparedStatementPerConnectionSize: 20 filters: stat,wall,log4j connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000 ``` 3. 配置数据源路由 在配置类中,使用@Primary注解指定主数据源,使用@Qualifier注解指定从数据源,使用@DependsOn注解保证数据源初始化顺序,例如: ```java @Configuration public class DataSourceConfig { @Primary @Bean(name = "masterDataSource") @ConfigurationProperties(prefix = "spring.datasource.master") public DataSource masterDataSource() { return DruidDataSourceBuilder.create().build(); } @Bean(name = "slaveDataSource") @ConfigurationProperties(prefix = "spring.datasource.slave") @DependsOn("masterDataSource") public DataSource slaveDataSource() { return DruidDataSourceBuilder.create().build(); } @Bean @DependsOn({"masterDataSource", "slaveDataSource"}) public DataSourceRouting dataSourceRouting(@Qualifier("masterDataSource") DataSource masterDataSource, @Qualifier("slaveDataSource") DataSource slaveDataSource) { return new DataSourceRouting(masterDataSource, slaveDataSource); } } ``` 4. 配置数据源切换 使用ThreadLocal实现数据源切换,例如: ```java public class DataSourceRouting { private final ThreadLocal<String> dataSourceKey = new ThreadLocal<>(); private final DataSource masterDataSource; private final DataSource slaveDataSource; public DataSourceRouting(DataSource masterDataSource, DataSource slaveDataSource) { this.masterDataSource = masterDataSource; this.slaveDataSource = slaveDataSource; } public DataSource determineDataSource() { String key = dataSourceKey.get(); if (key != null && !key.isEmpty()) { if ("master".equals(key)) { return masterDataSource; } else if ("slave".equals(key)) { return slaveDataSource; } } return masterDataSource; } public void setDataSourceKey(String key) { dataSourceKey.set(key); } public void clearDataSourceKey() { dataSourceKey.remove(); } } ``` 5. 在需要切换数据源的地方调用setDataSourceKey方法进行切换 例如: ```java @Service public class UserServiceImpl implements UserService { @Autowired private UserDao userDao; @Autowired private DataSourceRouting dataSourceRouting; @Override public User getUserById(Long id) { dataSourceRouting.setDataSourceKey("slave"); User user = userDao.getUserById(id); dataSourceRouting.clearDataSourceKey(); return user; } @Override @Transactional public void addUser(User user) { dataSourceRouting.setDataSourceKey("master"); userDao.addUser(user); dataSourceRouting.clearDataSourceKey(); } } ``` 以上就是使用Druid实现Spring Boot多数据源配置的步骤,希望对你有所帮助。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值