Spring Boot 集成 Dynamic多数据源配置

Spring Boot 集成 Dynamic多数据源配置

基础配置添加

引入依赖

        <!--mysql-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.19</version>
        </dependency>

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

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

        <!--dynamic-datasource-->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>dynamic-datasource-spring-boot-starter</artifactId>
            <version>2.5.5</version>
        </dependency>

其中 mysql-connector-java ,druid-spring-boot-starter, mybatis-plus-boot-starter 为数据库基础配置数据。Spring Boot在1.X到2.X的版本过程中,说用HikariCP做为默认连接池,使用默认连接池,这边使用Duird替换原有连接池,实现数据监控与日志输出。

application.yml配置

server:
  port: 8080
spring:
  application:
    name: spring-boot-demo
  profiles:
    active: druid

# MyBatis配置
mybatis:
  # 搜索指定包别名
  typeAliasesPackage: com.windsoft.springboot.demo.domain
  # 配置mapper的扫描,找到所有的mapper.xml映射文件
  mapperLocations: classpath*:mapper/**/*Mapper.xml

mybatis-plus:
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #开启sql日志
    map-underscore-to-camel-case: true
    # 该配置就是将带有下划线的表字段映射为驼峰格式的实体类属性

其中 profiles: 为标注拓展配置文件,这里将多数据源的配置文件独立出来做为单独的文件,方便管理

application-druid.yml

# 数据源配置
spring:
    datasource:
        dynamic:
            primary: master #设置默认的数据源或者数据源组,默认值即为master
            strict: false #严格匹配数据源,默认false. true未匹配到指定数据源时抛异常,false使用默认数据源
            datasource:
                master:
                    url: jdbc:mysql://localhost:3306/spring-boot-demo?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8&useSSL=false
                    username: root
                    password: 
                slave:
                    url: jdbc:mysql://localhost:3306/spring-boot-demo-back?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8&useSSL=false
                    username: root
                    password: 

修改启动类配置

去除DruidDataSourceAutoConfigure的自动配置

@SpringBootApplication(exclude = {DruidDataSourceAutoConfigure.class})

需要排除自动配置,否则会导致配置类在原始的配置文件中寻找数据库的配置属性,从而导致项目无法启动。

注解使用

@DS("slave")

默认不带注解使用master数据源进行配置,注解中的名称为配置文件中多数据源的名称保持一致。

@DS("slave")
public Information search(int id) {
    return informationMapper.selectById(id);
}

带有注解的 方法 会被多数多数据源进行托管,访问不同的数据源进行数据操作,其中,注解的作用范围遵循 类 > 方法的原则

手动事务开启

默认情况下 dynamic-datasource不添加默认不添加事务管理器 DataSourceTransactionManager 需要手动添加管理类
其中dynamicDataSource为dynamic的数据源名称,使用这个Bean名称进行注入

@Configuration
public class TransactionConfig{

    @Bean
    public DataSourceTransactionManager dataSourceTransactionManager(DataSource dynamicDataSource) {
        return new DataSourceTransactionManager(dynamicDataSource);
    }
}

手动事务启动方式

@Service
public class Test {
    @Autowired
    private DataSourceTransactionManager dataSourceTransactionManager;
 
    @Autowired
    private TransactionDefinition transactionDefinition;
 
    public void testTransaction(){
        TransactionStatus transactionStatus = dataSourceTransactionManager.getTransaction(transactionDefinition);
        // 代码逻辑 ..
        try {
 			System.out.println("事务代码");
 			// 手动提交
            dataSourceTransactionManager.commit(transactionStatus); 
        } catch (Exception e) {
            // 事务回滚
            dataSourceTransactionManager.rollback(transactionStatus); 
            e.printStackTrace();
        }
    }
}
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值