【问题标题】:DatasSourceBuilder vs DriverManagerDataSourceDatasSourceBuilder 与 DriverManagerDataSource
【发布时间】:2020-09-01 08:29:00
【问题描述】:

使用 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

【问题讨论】:

  • DriverManagerDataSource -> 50, DataSourceBuilder -> 取决于您的最大池大小设置。您不应该在生产中使用DriverManagerDataSource,而是将其用于测试和演示。它不是连接池,将在需要时打开连接(并在正确设置后关闭它)。但是打开连接速度很慢,您希望使用适当的连接池来连接连接。
  • 谢谢@M.Deinum 你能把你的评论作为答案吗?我将使用 DataSourceBuilder 。谢谢
  • 为什么还要使用DataSourceBuilder? Spring Boot 会自动为您配置一个数据源以及一个JdbcTemplate。除非您有多个数据源,否则感觉就像您正在围绕框架工作。

标签: spring spring-boot spring-data-jpa connection-pooling jdbctemplate


【解决方案1】:

简单的答案是

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

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

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

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

【讨论】:

  • 我的最后一个疑问是为什么 DriverManagerDataSource 有 50 个连接?因为我使用的是 jdbctemplate..一旦连接用完,jdbctemplate 不会关闭连接。
  • 是的,它将使用另一个,另一个。所以最终它将打开 50 个连接(并关闭它们)。虽然池重用了已经打开的连接。
猜你喜欢
  • 2013-07-30
  • 2021-02-28
  • 1970-01-01
  • 2019-08-10
  • 2012-10-29
  • 2017-09-23
  • 2012-07-15
  • 2021-11-03
  • 2011-04-11
相关资源
最近更新 更多