30.1.2连接到生产数据库
也可以使用池 DataSource 自动配置生产数据库连接。Spring Boot使用以下算法选择特定实现:
1. 我们更喜欢HikariCP的性能和并发性。如果HikariCP可用,我们总是选择它。
2. 否则,如果Tomcat池 DataSource 可用,我们将使用它。
3. 如果HikariCP和Tomcat池化数据源都不可用,并且 Commons DBCP2可用,我们就会使用它。
如果您使用 spring-boot-starter-jdbc 或 spring-boot-starter-data-jpa “starters”,则会自动获得 HikariCP 的依赖关系。
您可以完全绕过该算法,并通过设置 spring.datasource.type 属性指定要使用的连接池。如果您在Tomcat容器中运行应用程
序,这一点尤为重要,因为默认情况下会提供 tomcat-jdbc 。
始终可以手动配置其他连接池。如果您定义自己的 DataSource bean,则不会进行自动配置。
DataSource配置由 spring.datasource.* 中的外部配置属性控制。例如,您可以在 application.properties 中声明以下部分:
spring.datasource.url=jdbc:mysql://localhost/test
spring.datasource.username=dbuser
spring.datasource.password=dbpass
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
您至少应该通过设置 spring.datasource.url 属性来指定URL。否则,Spring Boot会尝试自动配置嵌入式数据库。
您通常不需要指定 driver-class-name ,因为Spring Boot可以从 url 中为大多数数据库推断出它。
对于要创建的池 DataSource ,我们需要能够验证有效的 Driver 类是否可用,因此我们在执行任何操作之前检查它。换句话说,
如果设置 spring.datasource.driver-class-name=com.mysql.jdbc.Driver ,那么该类必须是可加载的。
有关 DataSourceProperties 更多支持的选项,请参阅 。无论实际实施如何,这些都是标准选项。还可以使用各自的前缀
( spring.datasource.hikari.* , spring.datasource.tomcat.* 和 spring.datasource.dbcp2.* )来微调特定于实现的设置。有关更
多详细信息,请参阅您正在使用的连接池实现的文档。
例如,如果使用 Tomcat连接池,则可以自定义许多其他设置,如以下示例所示:
# Number of ms to wait before throwing an exception if no connection is available.
spring.datasource.tomcat.max-wait=10000
# Maximum number of active connections that ca
30.1.3连接到JNDI数据源
如果将Spring Boot应用程序部署到Application Server,则可能希望使用Application Server的内置功能配置和管理DataSource,并使用JNDI
访问它。
spring.datasource.jndi-name 属性可用作 spring.datasource.url , spring.datasource.username
和 spring.datasource.password 属性的替代,以从特定JNDI位置访问 DataSource 。例如, application.properties 中的以下部分显示
了如何访问定义的 DataSource JBoss AS:
spring.datasource.jndi-name=java:jboss/datasources/customers
30.2使用JdbcTemplate
Spring的 JdbcTemplate 和 NamedParameterJdbcTemplate 类是自动配置的,您可以 @Autowire 直接将它们放入您自己的beans中,如以下示
例所示:
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Component;
@Component
public class MyBean {
private final JdbcTemplate jdbcTemplate;
@Autowired
public MyBean(JdbcTemplate jdbcTemplate) {
this.jdbcTemplate = jdbcTemplate;
}
// ...
}
您可以使用 spring.jdbc.template.* 属性自定义模板的某些属性,如以下示例所示:
spring.jdbc.template.max-rows=500
NamedParameterJdbcTemplate 在幕后重用了相同的 JdbcTemplate 实例。如果定义了多个 JdbcTemplate 并且不存在主要候选
者,则不会自动配置 NamedParameterJdbcTemplate 。