微服务架构之Spring Boot(四十二)

2022-04-07 20:02:52 浏览数 (1)

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 。

0 人点赞