JDBCTemplate默认使用连接池吗?

AR1*_*AR1 8 java spring jdbc jdbctemplate spring-boot

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

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

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

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

use*_*900 5

Spring Boot 将尝试为您的 DataSource 加载可用的连接池

\n\n
\n

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

\n\n

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

\n\n

否则,如果 Tomcat 池数据源可用,我们就使用它。

\n\n

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

\n\n

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

\n\n

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

\n
\n\n

定义自己的 bean 的示例:

\n\n
@Bean\npublic DataSource dataSource() throws PropertyVetoException {\n    return MyDataSourceHolder.getDataSource();\n}\n
Run Code Online (Sandbox Code Playgroud)\n