spring-data-jpa Spring Boot 和Jpa相关澄清

35g0bw71  于 2022-11-10  发布在  Spring
关注(0)|答案(2)|浏览(207)

假设我有一个spring-boot应用程序,它具有starter-JPA依赖关系,我需要知道spring在启动时是否检查到数据库的连接?
例如,如果我提到了一个我没有访问权限的数据库(如下所示),应用程序是否会无法启动?如果是,异常情况是什么?

spring.datasource.url=jdbc:postgresql://localhost:5432/postgres
spring.datasource.username=root
spring.datasource.password=root
spring.jpa.hibernate.dialect=org.hibernate.dialect.PostgreSQL94Dialect
spring.datasource.driver-class-name=org.postgresql.Driver
spring.datasource.continue-on-error=true
holgip5t

holgip5t1#

对于Sping Boot 2.7.2的最新版本,Spring Boot本身并不检查连接,而是获取一个连接来确定一些属性。Hibernate本身也需要一个连接来确定一些属性(由spring.jpa.properties.hibernate.temp.use_jdbc_metadata_defaults控制)。
此外,如果您将spring-boot-starter-actuator作为依赖项,则将在启动时检查连接(由management.health.db.enabled控制)。
它需要显式指定所有自动确定的属性,以便在启动期间不获取连接(甚至spring.jpa.hibernate.ddlAuto
将此添加到application.yaml

spring.jpa.hibernate.ddlAuto: "none"
spring.datasource.driver-class-name: org.postgresql.Driver
spring.jpa.database-platform: org.hibernate.dialect.PostgreSQL94Dialect

spring.jpa.properties.hibernate.temp.use_jdbc_metadata_defaults: false #Hibernate

# disable datasource check on startup

management.health.db.enabled: false #spring-boot-starter-actuator

默认情况下,Hikari被用作连接池。连接池在第一次尝试获取连接时获取所有连接。这就是为什么它在启动时不获取连接的原因。

nhaq1z21

nhaq1z212#

没什么,只要执行查询即可。如果连接已经断开,JDBC驱动程序将重新连接(如果它支持它,并且您在连接字符串中启用了它--大多数不支持它),否则您将得到一个异常。
我们最好的机会是只对一个表执行一个简单的查询,例如:

select 1 from SOME_TABLE;

相关问题