当前位置: 首页 > 知识库问答 >
问题:

Spring Boot-多个DataSource的连接池属性

慎芷阳
2023-03-14

我使用的是spring boot版本1.5.2,我有一个用例,需要在一个应用程序中配置两个数据源。我已经成功地让应用程序连接到2个数据库,但我无法为它们设置连接池属性。

下面是配置类:

@Configuration
public class DataSourceConfig {

@Bean(name = "oneDataSource")
@ConfigurationProperties(prefix = "spring.datasource.one")
@Primary
public DataSource oneDataSource() {
    return DataSourceBuilder.create().build();        
}

@Bean(name = "twoDataSource")
@ConfigurationProperties(prefix = "spring.datasource.two")
public DataSource twoDataSource() {
    return DataSourceBuilder.create().build();
}
}

在调试DataSourceBuilder时,我可以看到它正在实例化org类型的bean。阿帕奇。公猫jdbc。水塘DataSource,这是我想要的,但是DataSource对象中的poolProperties字段总是包含一些默认属性,而不是我想要的。

这是我的application.yml:

spring:
  profiles: dev

  datasource:
    one:
        url: jdbc:mariadb://localhost:3306/one
        username: user1
        password: password
        driverClassName: org.mariadb.jdbc.Driver
        initialize: true
        tomcat:
            testOnBorrow: true
            validation-query: SELECT 1
            testWhileIdle: true
            continueOnError: true
            initialSize: 2
            timeBetweenEvictionRunsMillis: 5000
            minEvictableIdleTimeMillis: 5000
            minIdle: 2
            maxIdle: 3
            maxActive: 30
    two:
        url: jdbc:mariadb://localhost:3306/two
        username: user1
        password: password
        driverClassName: org.mariadb.jdbc.Driver
        initialize: true
        tomcat:
            testOnBorrow: true
            validation-query: SELECT 1
            testWhileIdle: true
            continueOnError: true
            initialSize: 2
            timeBetweenEvictionRunsMillis: 5000
            minEvictableIdleTimeMillis: 5000
            minIdle: 2
            maxIdle: 3
            maxActive: 30

我错过什么了吗?DataSourceBuilder是否能够查找以这种方式配置的池属性?用我想要的池属性配置2个数据源的最佳html" target="_blank">方法是什么?

共有1个答案

岳志义
2023-03-14

首先,您应该忽略DataSourceAutoConfiguration:

@SpringBootApplication(exclude = {
        DataSourceAutoConfiguration.class
})
public class Main{
    public static void main(String[] args) {
        SpringApplication.run(Main.class, args);
    }
}

然后,将您的配置保留在您的问题中。如果您使用mybatis作为DAO Framework,您应该添加这些配置,如下所示:

@Configuration
@MapperScan(basePackages = {"mapperpackage1"}, sqlSessionFactoryRef = "sqlSessionFactory1")
public class MybatisDbAConfig {

    @Autowired
    @Qualifier("oneDataSource")
    private DataSource ds1;


    @Bean
    public SqlSessionFactory sqlSessionFactory1() throws Exception {
        SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean();
        factoryBean.setDataSource(ds1); 

        return factoryBean.getObject();

    }

    @Bean
    public SqlSessionTemplate sqlSessionTemplate1() throws Exception {
        SqlSessionTemplate template = new SqlSessionTemplate(sqlSessionFactory1()); 
        return template;
    }
}

同样地:

@Configuration
@MapperScan(basePackages = {"mapperpackage2"}, sqlSessionFactoryRef = "sqlSessionFactory2")
public class MybatisDbAConfig2 {

    @Autowired
    @Qualifier("twoDataSource")
    private DataSource ds2;


    @Bean
    public SqlSessionFactory sqlSessionFactory2() throws Exception {
        SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean();
        factoryBean.setDataSource(ds2); 

        return factoryBean.getObject();

    }

    @Bean
    public SqlSessionTemplate sqlSessionTemplate2() throws Exception {
        SqlSessionTemplate template = new SqlSessionTemplate(sqlSessionFactory2()); 
        return template;
    }
}
 类似资料:
  • 我必须跟踪作为数据源bean在Java web服务器中连接的Oracle会话。 假设,在spring框架中,有一个bean: 并且我必须在池的每个连接上调用PL/SQL。 我该怎么做? 请告诉我在mybatis或JDBC中如何做。 谢谢

  • 我正在开发一个查询多个数据库的监控插件。我想使用HikariCP来保持连接打开,但我不知道如何实例化连接池。 HikariCP是否只使用一个池来存储多个数据库?或者一个数据库只有一个池,我的责任是实例化我将使用的数据库中的尽可能多的池。

  • 我对连接池的理解是;如果connectionstring完全相同,那么我们重用该连接,而不是建立新的连接。 我的问题是,我正在为并行处理创建许多线程。在这个“虚拟”程序中,我创建了500个线程,并让线程池函数处理这些线程。 步骤是: > < li> 每个线程在SQL中创建一个更新表。(说明更新的时间戳) 然后线程Hibernate1到10秒(随机)。 最后,线程在 SQL 中进行另一次更新(说明结

  • 问题内容: 要指定SQLite连接属性,请使用org.sqlite.SQLiteConfig,它的内容如下: 使用c3p0创建连接池的过程如下: 问题:如何创建结合了两者的数据源,让我设置诸如连接池的最大池大小和sqlite的同步模式之类的东西? 问题答案: 尝试 现在,数据源将是c3p0 PooledDataSource,它包装了已根据需要配置的SQLite未池化数据源。 请参阅C3P0的文档,

  • 是否可以配置WebLogic的JDBC连接池,以便在经过一定时间后重置已建立的连接,即使该连接处于活动状态?

  • 我有一个Spring Boot应用程序,可以连接到不同的MySQL数据库。我计划将连接池支持添加到此应用程序。Tomcat JDBC连接池(默认的Spring Boot池)是否为我的每个数据库支持多个池?