spring boot执行sql_SpringBoot中文参考指南(2.1.6)31、使用 SQL 数据库

上一篇[30、安全]

下一篇[31.3、JPA 和 Spring Data JPA]

291cc323074df76e6ecd13591e10cc0f.png
英文原文:https://docs.spring.io/spring-boot/docs/2.1.6.RELEASE/reference/html/boot-features-sql.html
GitHub:https://github.com/jijicai/Spring/tree/master/spring-boot

31、使用 SQL 数据库

Spring Framework 为使用 SQL 数据库提供了广泛的支持,从使用 JdbcTemplate 的直接 JDBC 访问到 Hibernate 等完整的对象关系映射技术。Spring Data 提供了额外的功能级别:直接从接口创建 Repository 实现,并使用约定从方法名生成查询。

31.1、配置数据源

Java 的 javax.sql.DataSource 接口提供了处理数据库连接的标准方法。传统上,“DataSource”使用 URL 和一些凭据来建立数据库连接。

提示:有关更高级的示例,请参阅“如何”章节,通常是为了完全控制数据源的配置。(https://docs.spring.io/spring-boot/docs/2.1.6.RELEASE/reference/html/howto-data-access.html#howto-configure-a-datasource )

31.1.1、嵌入式数据库支持

使用内存中的嵌入式数据库开发应用程序通常很方便。显然,内存数据库不提供持久存储。你需要在应用程序启动时填充数据库,并准备在应用程序结束时丢弃数据。

提示:“如何”章节包括一个关于如何初始化数据库的部分。(https://docs.spring.io/spring-boot/docs/2.1.6.RELEASE/reference/html/howto-database-initialization.html )

Spring Boot 可以自动配置嵌入式 H2、HSQL 和 Derby 数据库。你不需要提供任何连接 URL。只需要包含要使用的嵌入式数据库的构建依赖项。

注释:如果你在测试中使用此功能,你可能会注意到整个测试套件会重用同一个数据库,而不管你使用的应用程序上下文的数量是多少。如果要确保每个上下文都有单独的嵌入数据库,则应将 spring.datasource.generate-unique-name 设置为 true。

例如,典型的 POM 依赖关系如下:

b70c686f6d309a28cb71b1d87d961845.png
org.springframework.boot    spring-boot-starter-data-jpaorg.hsqldb    hsqldb    runtime

注释:要自动配置嵌入式数据库,需要依赖 spring-jdbc。在本例中,它是通过 spring-boot-starter-data-jpa 以传递方式引入的。

提示:如果出于任何原因,你确实为嵌入式数据库配置了连接 URL,请注意确保数据库的自动关闭被禁用。如果使用 H2,则应使用 DB_CLOSE_ON_EXIT=FALSE 来执行此操作。如果使用 HSQLDB,则应确保不使用 shutdown=true。禁用数据库的自动关闭让 Spring Boot 可以控制何时关闭数据库,从而确保在不再需要访问数据库时关闭数据库。

31.1.2、连接到生产数据库

还可以使用池化 DataSource 自动配置生产数据库连接。Spring Boot 使用以下算法来选择特定的实现。

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

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

(3)如果 HikariCP 和 Tomcat 池化 DataSource 都不可用,并且 Commons DBCP2 可用,则使用它。

如果使用 spring-boot-starter-jdbc 或 spring-boot-starter-data-jpa “starters”,则自动地获得 HikariCP 的依赖项。

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

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

数据源配置由 spring.datasource.* 中的外部配置属性控制。例如,你可以在 application.properties 中声明以下部分:

cba8048b0049495a351bcfd0656d7cc5.png
spring.datasource.url=jdbc:mysql://localhost/testspring.datasource.username=dbuserspring.datasource.password=dbpassspring.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 连接池,可以自定义许多其他设置,如下面示例所示:

c2428f68fc7a4f9286e0fff7e65348b9.png
# 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 can be allocated from this pool at the same time.spring.datasource.tomcat.max-active=50# Validate the connection before borrowing it from the pool.spring.datasource.tomcat.test-on-borrow=true

31.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 中的以下部分显示了如何访问 JBoss AS 定义的 DataSource:

spring.datasource.jndi-name=java:jboss/datasources/customers

31.2、使用 JdbcTemplate

Spring 的 JdbcTemplate 和 NamedParameterJdbcTemplate 类是自动配置的,可以直接将它们 @Autowire 到自己的 bean 中,如下面示例所示:

33053287b503c7c00d939d4b52754702.png
import org.springframework.beans.factory.annotation.Autowired;import org.springframework.jdbc.core.JdbcTemplate;import org.springframework.stereotype.Component;@Componentpublic 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 实例。如果定义了多个 JDBC 模板,并且没有主候选存在,则 NamedParameterJdbcTemplate 不是自动配置的。

上一篇[30、安全]

下一篇[31.3、JPA 和 Spring Data JPA]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值