Springboot druid dynamic-datasource 配置

本文介绍如何在项目中配置并使用多个数据源,包括引入依赖、YAML配置及排除默认DRUID配置的方法,并展示了如何通过DRUID进行数据源监控。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、引入依赖

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

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

2、application.yml 配置

#Spring配置
spring:
  application:
    name: ifina
  jackson:
    date-format: yyyy-MM-dd HH:mm:ss
    time-zone: GMT+8
  servlet:
    multipart:
      maxFileSize: 5MB  #单位必须大写MB或不写(即为B)
      maxRequestSize: 10MB
  datasource:
    # 可以先在这里配置好通用的配置,比如
      druid:
        filters: stat,wall
        maxActive: 20
        initialSize: 1
        maxWait: 60000
        minIdle: 10
        #maxIdle:15
        timeBetweenEvictionRunsMillis: 60000
        minEvictableIdleTimeMillis: 300000
        validationQuery: SELECT 'x'
        testWhileIdle: true
        testOnBorrow: false
        testOnReturn: false
        #poolPreparedStatements:true
        maxOpenPreparedStatements: 20
        web-stat-filter:
          enabled: true
          url-pattern: /*
          exclusions: /druid/*,*js,*gif,*jpg,*bmp,*png,*css,*ico
          session-stat-enable: true
          session-stat-max-count: 10
          principal-session-name: session_name
          principal-cookie-name: cookie_name
          profile-enable: true
        stat-view-servlet:
          enabled: true
          url-pattern: /druid/*
          reset-enable: false
          login-username: admin
          login-password: 123456
          allow: 127.0.0.1,192.168.179.116
          aop-patterns: com.hieasy.ifina.service.*
      dynamic:
        primary: threetp #设置默认的数据源或者数据源组,默认值即为master
        strict: false #设置严格模式,默认false不启动. 启动后在未匹配到指定数据源时候会抛出异常,不启动则使用默认数据源.
        p6spy: false
        datasource:
            threetp:
              url: jdbc:sqlserver://192.168.179.214:8899;SelectMethod=cursor;DatabaseName=CWINF_3Q
              username: ENC(H1yLPJFx92iVQyOS+Et1pw==)
              password: ENC(KGsBr0kVGYvW6AWtUXqZXCsnTNcWgpJO)
              driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
            kingdee:
              url: jdbc:sqlserver://192.168.179.214:8899;SelectMethod=cursor;DatabaseName=CWINF_JD
              username: ENC(H1yLPJFx92iVQyOS+Et1pw==)
              password: ENC(KGsBr0kVGYvW6AWtUXqZXCsnTNcWgpJO)
              driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver

3、启动类排除DRUID默认配置

import com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cache.annotation.EnableCaching;

@EnableCaching
//去掉Druid 默认的数据源配置,动态加载数据源
@SpringBootApplication(exclude= {DruidDataSourceAutoConfigure.class})
public class IfinaApplication {

    public static void main(String[] args) {

        SpringApplication.run(IfinaApplication.class, args);
        System.out.println("(♥◠‿◠)ノ゙  数据服务启动成功   ლ(´ڡ`ლ)゙  \n"  );
    }

}

启动如下图:

访问druid监控  http://localhost:11020/druid,输入配置的用户名密码

切换数据源,主数据源不需要注解,再从数据源那里加上@DS注解

@DS("kingdee")
@Service
@Transactional
public class DSDemoServiceImpl implements IDSDemoService {





}

 

 

 

### Spring Boot 中使用 Druid 实现动态数据源 #### Maven 依赖配置 为了在 Spring Boot 项目中实现动态数据源管理,需引入特定的 Maven 依赖项。这些依赖不仅包含了用于连接池功能的 `druid-spring-boot-starter`,还加入了支持多数据源切换逻辑的组件 `dynamic-datasource-spring-boot-starter`。 ```xml <dependencies> <!-- 数据库连接池 --> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid-spring-boot-starter</artifactId> <version>1.1.10</version> </dependency> <!-- 动态数据源 --> <dependency> <groupId>com.baomidou</groupId> <artifactId>dynamic-datasource-spring-boot-starter</artifactId> <version>3.5.1</version> </dependency> </dependencies> ``` #### 主数据源配置类 (MasterDataSourceConfig.java) 主数据源作为默认的数据访问入口,在应用程序启动时会被优先加载并初始化。通过继承自 `AbstractRoutingDataSource` 的方式来定义主数据源的具体参数设置。 ```java @Configuration public class MasterDataSourceConfig { @Bean(name = "masterDataSource") @ConfigurationProperties(prefix = "spring.datasource.master") public DataSource masterDataSource() { return new DruidDataSource(); } } ``` #### 多数据源注册与路由策略设定 除了指定主数据源外,还需声明其他可能用到的次级数据源,并将其加入到全局上下文中以便于后续操作。同时,应制定一套合理的数据源选择机制,确保每次请求都能被导向至合适的数据库实例上执行查询或更新动作。 ```java @Configuration @EnableTransactionManagement @MapperScan(basePackages = {"com.example.mapper"}, sqlSessionFactoryRef="sqlSessionFactory") public class DynamicDataSourceConfig { @Autowired private List<Object> dataSourceList; @Primary @Bean(name = "dataSource") public DynamicDataSource dataSource(@Qualifier("masterDataSource") DataSource masterDataSource, @Qualifier("slaveDataSource") DataSource slaveDataSource) { Map<Object, Object> targetDataSources = new HashMap<>(); targetDataSources.put(DataSourceEnum.MASTER.name(), masterDataSource); targetDataSources.put(DataSourceEnum.SLAVE.name(), slaveDataSource); DynamicDataSource dynamicDataSource = new DynamicDataSource(); dynamicDataSource.setTargetDataSources(targetDataSources); // 添加 N 个数据源 dynamicDataSource.setDefaultTargetDataSource(masterDataSource); // 默认数据源 return dynamicDataSource; } ... } ``` #### 应用属性文件中的数据源配置 (`application.yml`) 最后一步是在应用配置文件内补充各个数据源的相关细节信息,比如 URL、用户名以及密码等必要字段。这里采用 YAML 格式的配置文档来进行表述: ```yaml spring: datasource: type: com.alibaba.druid.pool.DruidDataSource master: url: jdbc:mysql://localhost:3306/master_db?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8 username: root password: 123456 driver-class-name: com.mysql.cj.jdbc.Driver slave: url: jdbc:mysql://localhost:3307/slave_db?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8 username: root password: 123456 driver-class-name: com.mysql.cj.jdbc.Driver ``` 上述方法能够有效帮助开发者快速搭建起具备高可用性和灵活性特点的企业级 Java Web 应用程序[^2]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值