【问题标题】:Does JDBCTemplate use Connections Pool by default?JDBCTemplate 默认使用连接池吗?
【发布时间】:2019-03-14 05:16:30
【问题描述】:

我有一个 Spring Boot 微服务,它使用 JDBCTemplate 通过 JDBC 连接连接到多个数据库:

@Bean(name = "mysqlJdbcTemplate")
    public JdbcTemplate jdbcTemplate(@Qualifier("mysqlDb") DataSource dsMySQL) {
        return new JdbcTemplate(dsMySQL);
    }

每个数据库都有不同的模板,然后休息模板控制器根据请求中传递的参数选择要使用的正确模板。 我阅读了文档,但不清楚:

  • 连接池是开箱即用还是需要通过配置指定?
  • 在这种情况下,每个 JDBCTemplate 都使用一个连接池吗?

【问题讨论】:

  • 您需要配置您的池。多个模板使用同一个池;除非您明确将其配置为这样,否则不会向客户提供。

标签: java spring spring-boot jdbc jdbctemplate


【解决方案1】:

Spring Boot 将尝试为您的 DataSource 加载可用的 connection pool

Spring Boot 使用以下算法来选择特定的实现:

我们更喜欢 HikariCP 的性能和并发性。如果 HikariCP 可用,我们总是选择它。

否则,如果Tomcat池化DataSource可用,我们就使用它。

如果 HikariCP 和 Tomcat 池数据源都不可用,并且 Commons DBCP2 可用,我们将使用它。 如果你使用 spring-boot-starter-jdbc 或 spring-boot-starter-data-jpa “starters”,你会自动获得对 HikariCP 的依赖。

您可以完全绕过该算法并通过设置 spring.datasource.type 属性来指定要使用的连接池。如果您在 Tomcat 容器中运行应用程序,这一点尤其重要,因为默认情况下会提供 tomcat-jdbc。

其他连接池始终可以手动配置。如果您定义自己的 DataSource bean,则不会发生自动配置。

定义自己的bean的例子:

@Bean
public DataSource dataSource() throws PropertyVetoException {
    return MyDataSourceHolder.getDataSource();
}

【讨论】:

  • 不确定这是什么'如果您定义自己的 DataSource bean,则不会发生自动配置。'意思是
  • @AR1 添加定义自己的bean的例子
猜你喜欢
  • 2018-09-08
  • 2017-10-26
  • 1970-01-01
  • 1970-01-01
  • 2015-03-16
  • 2015-02-20
  • 1970-01-01
  • 2017-04-27
  • 1970-01-01
相关资源
最近更新 更多