配置hikari数据库连接池时多数据源不生效

文章描述了如何在SpringBoot应用中使用动态配置管理多个数据源,起初配置中将HikariCP连接池放在与dynamic同级,但多数据源不生效。经过调整,将HikariCP移到dynamic下面,解决了配置问题,使得新的数据源配置生效。

1.原始配置,改造前:

spring:
   # 配置数据源信息
  datasource:
    dynamic:
      #设置默认的数据源或者数据源组,默认值即为master
      primary: master
      strict: true
      datasource:
        #这里采用了配置文件取值的方式,可以直接替换为数据库连接
        master:
          url: jdbc:postgresql://127.0.0.1:1921/check_db
          username: check_db
          password: 123456789
          driver-class-name: org.postgresql.Driver
          # 数据源2
        slave_1:
          url: jdbc:postgresql://127.0.0.2:1921/check_db
          username: check_db
          password: 123456789
          driver-class-name: org.postgresql.Driver
    hikari:
      #连接池名
      pool-name: MyHikariCP
      #最小空闲数
      minimum-idle: 5
      #连接池最大数 默认是10
      maximum-pool-size: 100
      #空闲连接存活最大时间 默认:60000(10分钟)
      idle-timeout: 60000
      #此属性控制池中的最长生命周期,0: 表示无限生命周期,默认为1800000(30分钟)
      max-lifetime: 1800000
      #数据库连接超时时间默认30秒(30000)
      connection-timeout: 60000
       #此属性控制从池返回的链接默认自动提交行为,默认为true
      auto-
<think>好的,我现在需要帮助用户解决在MyBatis和HikariCP多数据源场景下单独配置每个数据库连接池的连接数的问题。首先,我需要回顾一下用户提供的引用内容,特别是引用[1]、[2]、[3]中的相关信息,确保回答准确。 用户的需求很明确,是要在多数据源的情况下,每个数据源都能独立配置HikariCP的连接池参数,比如最大连接数、最小空闲连接数等。根据引用[2],HikariCP的配置参数包括maximum-pool-size、minimum-idle等,所以需要指导用户如何为每个数据源分别设置这些参数。 首先,我需要考虑在Spring Boot中如何配置多数据源。通常,多数据源配置需要手动定义每个DataSource的Bean,并指定不同的配置属性。引用[1]提到使用aop动态切换数据源,这可能涉及到AbstractRoutingDataSource,但用户的问题更侧重于连接池配置,而不是动态切换本身。 接下来,引用[3]指出,如果配置不当,可能会出现连接超的问题,这说明正确配置连接池参数的重要性。用户需要每个数据源的连接池参数独立,因此每个DataSource的配置必须隔离,不能共用默认的配置。 我需要给出一个具体的配置示例。通常,在Spring Boot中,可以通过在配置文件中为每个数据源指定不同的前缀,然后在Java配置类中分别创建DataSource实例。例如,使用application.yml中的datasource.db1和datasource.db2来分别配置两个数据源。 然后,在Java配置类中,使用@ConfigurationProperties注解来绑定这些配置到不同的HikariDataSource实例上。每个DataSource Bean都需要设置不同的配置前缀,并且指定对应的HikariCP参数,如jdbc-url、username、password、maximum-pool-size等。 此外,需要确保每个DataSource的Bean名称不同,并且在MyBatis的配置中分别指向对应的DataSource。比如,为每个数据源创建独立的SqlSessionFactory和TransactionManager,并指定对应的DataSource Bean。 可能还需要注意事务管理的问题,确保每个事务管理器对应正确的数据源。此外,动态切换数据源可能需要AOP切面,但根据用户的问题,这部分可能不是重点,但可以提及以确保配置的完整性。 最后,需要验证配置是否正确,例如检查每个数据源的连接池参数是否生效,可以通过日志或监控工具查看HikariCP的启动信息,确认各个参数如maximumPoolSize是否按配置设置。 总结步骤应该是:配置文件分数据源设置参数,Java配置类创建多个DataSource Bean,配置MyBatis的SqlSessionFactory和TransactionManager,以及可能的动态数据源切换配置。同,提醒用户注意配置项的正确性和可能遇到的超问题,如引用[3]中的连接超错误,可能由于连接数不足或超间设置不合理导致。 现在需要将这些步骤整理成结构化的教程,并给出示例代码,确保符合用户的要求,同引用正确的引用来源。</think>### MyBatis+HikariCP多数据源连接池独立配置教程 #### 一、配置原理 在SpringBoot中,通过为每个数据源创建独立的`HikariDataSource`实例,并分别绑定不同配置参数来实现独立配置。关键配置参数包括: - `jdbc-url`:数据库连接地址 - `username`:数据库用户名 - `password`:数据库密码 - `maximum-pool-size`:最大连接数(默认10) - `minimum-idle`:最小空闲连接数(默认等于最大连接数) - `connection-timeout`:获取连接超间(默认30秒)[^2] #### 二、配置文件示例(application.yml) ```yaml datasource: db1: jdbc-url: jdbc:mysql://localhost:3306/db1 username: root password: 123456 maximum-pool-size: 20 minimum-idle: 5 connection-timeout: 30000 db2: jdbc-url: jdbc:mysql://192.168.1.100:3306/db2 username: admin password: admin@123 maximum-pool-size: 15 minimum-idle: 3 max-lifetime: 1800000 ``` #### 三、Java配置类 ```java @Configuration public class DataSourceConfig { // 主数据源 @Bean("db1") @ConfigurationProperties(prefix = "datasource.db1") public DataSource db1DataSource() { return new HikariDataSource(); // 自动绑定配置参数[^2] } // 次数据源 @Bean("db2") @ConfigurationProperties(prefix = "datasource.db2") public DataSource db2DataSource() { return new HikariDataSource(); } // 动态数据源路由 @Bean public DataSource dynamicDataSource( @Qualifier("db1") DataSource db1, @Qualifier("db2") DataSource db2) { DynamicDataSource dynamicDataSource = new DynamicDataSource(); Map<Object, Object> targetDataSources = new HashMap<>(); targetDataSources.put("db1", db1); targetDataSources.put("db2", db2); dynamicDataSource.setTargetDataSources(targetDataSources); dynamicDataSource.setDefaultTargetDataSource(db1); return dynamicDataSource; } } ``` #### 四、MyBatis集成配置 ```java @Configuration @MapperScan(basePackages = "com.example.mapper") public class MybatisConfig { @Bean public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception { SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean(); sessionFactory.setDataSource(dataSource); sessionFactory.setMapperLocations(...); return sessionFactory.getObject(); } // 事务管理器配置 @Bean public PlatformTransactionManager transactionManager(DataSource dataSource) { return new DataSourceTransactionManager(dataSource); } } ``` #### 五、验证配置 在应用启动日志中可看到: ``` HikariPool-1 - Starting... HikariPool-1 - Added connection com.mysql.cj.jdbc.ConnectionImpl@a1b2c3d HikariPool-2 - Starting... HikariPool-2 - Added connection com.mysql.cj.jdbc.ConnectionImpl@d4e5f6a ``` 不同连接池会显示独立ID,通过`/actuator/metrics/hikaricp.connections`端点可查看各连接池状态。 #### 六、常见问题解决 1. **连接超错误**:检查`connection-timeout`是否过小,建议不低于30秒[^3] 2. **连接泄漏**:启用`leak-detection-threshold`配置(单位毫秒) 3. **连接数不足**:根据业务压力调整`maximum-pool-size`,建议公式: $$ \text{建议最大连接数} = \frac{\text{核心线程数} \times 2}{数据库实例数量} $$
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值