首页 > 解决方案 > DatasSourceBuilder 与 DriverManagerDataSource

问题描述

使用 DatasSourceBuilder 创建数据源

@Bean
    DataSource dataSource() throws SQLException {
        DatasSourceBuilder dataSource = DatasSourceBuilder.create();
        dataSource.url("");
        ...
        ..
        
        return dataSource.build();
        
    }

使用 DriverManagerDataSource 创建数据源

@Bean
    DriverManagerDataSource dataSource() throws SQLException {
    
        DriverManagerDataSource dataSource = DriverManagerDataSource();
        dataSource.setUrl("");
        ...
        ..
        
        return dataSource;
        
    }

我正在使用上述两种方法创建 jdbc

@Bean
public JdbcTemplate jdbcTemplate()
{
return new jdbcTemplate(dataSource());
}

我正在使用 jdbcTemplate,如下所示

void m1()
{
simpleJdbc = new simpleJdbc(jdbcTemplate);
simpleJdbc.execute(procedure)
}

所以我的问题是,如果我重复调用 m1() 50 次,那么在这两种情况下将创建多少个连接,即 DriverManagerDataSource 和 DatasSourceBuilder

标签: springspring-bootspring-data-jpaconnection-poolingjdbctemplate

解决方案


简单的答案是

  • DriverManagerDataSource-> 与您调用该方法一样多的连接
  • DataSourceBuilder-> max poolsize 属性指定的连接数。

然而,真正的答案将取决于它。如果您调用m1单个事务并调用它 50 次,那么它将以任何一种方式打开一个连接。打开的连接绑定到事务并重用。

话虽如此,您不应该将其DriverManagerDataSource用于生产就绪的应用程序。它不是连接池,会在需要时打开连接,打开连接速度很慢,并且会创建无限数量的连接(取决于需要),因此如果您有 100 个需要连接的请求,它将打开 100 个连接(可能淹没你的数据库)。

仅用于DriverManagerDataSource测试和演示,而不用于生产应用程序。


推荐阅读