【问题标题】:spring.jpa.hibernate.ddl-auto=update not working in spring bootspring.jpa.hibernate.ddl-auto=更新在 Spring Boot 中不起作用
【发布时间】:2021-04-09 02:12:56
【问题描述】:

我正在集成 spring boot + jpa + oracle。我用spring.jpa.hibernate.ddl-auto=create-drop成功创建和删除数据库,但是当我将属性更改为spring.jpa.hibernate.ddl-auto=update时,spring boot挂了,应用程序没有启动。

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::        (v2.3.1.RELEASE)

2021-01-03 00:54:49.024  INFO 40612 --- [           main] com.walmart.DemoApplication     : Starting DemoApplication on m-c02dj138ml85 with PID 40612 (/Users/b0j02tw/Documents/demo/target/classes started by b0j02tw in /Users/b0j02tw/Documents/demo)
2021-01-03 00:54:49.026  INFO 40612 --- [           main] com.walmart.DemoApplication     : No active profile set, falling back to default profiles: default
2021-01-03 00:54:49.325  INFO 40612 --- [           main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data JPA repositories in DEFERRED mode.
2021-01-03 00:54:49.367  INFO 40612 --- [           main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 35ms. Found 1 JPA repository interfaces.
2021-01-03 00:54:49.656  INFO 40612 --- [           main] o.s.s.concurrent.ThreadPoolTaskExecutor  : Initializing ExecutorService 'applicationTaskExecutor'
2021-01-03 00:54:49.684  INFO 40612 --- [         task-1] o.hibernate.jpa.internal.util.LogHelper  : HHH000204: Processing PersistenceUnitInfo [name: default]
2021-01-03 00:54:49.719  INFO 40612 --- [         task-1] org.hibernate.Version                    : HHH000412: Hibernate ORM core version 5.4.17.Final
2021-01-03 00:54:49.733  INFO 40612 --- [           main] DeferredRepositoryInitializationListener : Triggering deferred initialization of Spring Data repositories…
2021-01-03 00:54:49.823  INFO 40612 --- [         task-1] o.hibernate.annotations.common.Version   : HCANN000001: Hibernate Commons Annotations {5.1.0.Final}
2021-01-03 00:54:49.891  INFO 40612 --- [         task-1] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Starting...
2021-01-03 00:54:53.118  INFO 40612 --- [         task-1] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Start completed.
2021-01-03 00:54:53.148  INFO 40612 --- [         task-1] org.hibernate.dialect.Dialect            : HHH000400: Using dialect: org.hibernate.dialect.Oracle10gDialect

application.properties:

#==== Looging properties ======#
#debug=true
#==== Looging root levels - TRACE, DEBUG, INFO, WARN, ERROR, OFF ======#
logging.level.root=INFO


spring.datasource.driver-class-name=oracle.jdbc.OracleDriver
##===== START - OracleDB connection settings ======#
spring.datasource.url=jdbc:oracle:thin:@//****
spring.datasource.username=***
spring.datasource.password=******
spring.jpa.hibernate.ddl-auto=update
##===== END - OracleDB connection settings ======#
#

##====== START - JPA settings ======

##===== END - OracleDB connection settins ======#
#

#SQL FOR DEBUGGING
spring.jpa.show-sql=true

【问题讨论】:

  • 你能分享错误日志吗?
  • @dm_tr 2021-01-03 00:54:53.148 INFO 40612 --- [ task-1] org.hibernate.dialect.Dialect : HHH000400: Using dialect: org.hibernate.dialect.Oracle10gDialect 这是日志中打印的最后一行,之后没有任何内容。
  • 这是一个信息日志。您的控制台中没有错误?
  • @dm_tr 没什么
  • 这很难猜。也许手动删除表并使用update 参数启动应用程序?您可以在 bootify.io 上创建一个 Oracle 项目,它使用 18 xe 的 update 属性。

标签: java spring spring-boot hibernate jpa


【解决方案1】:

这可能是一条评论,但它是一种很适合评论的工具,所以我将其发布为答案。以下是一些可以为您指明正确方向的想法:

想法 1

当您使用update 作为此属性值时,实际上会发生很多事情,远远超过drop-create。事实上,Java 尝试读取大量关于您的架构的“元数据”,并根据 JPA/Hibernate 中定义的映射调整表。

要了解更多详情,请确保您阅读的是this SO thread。顺便说一句,在阅读详细解释了当您将此属性设置为 update 时会发生什么的答案后 - 也许您会得出结论,您并不真的需要它;)

长话短说,有可能(这只是猜测)您的应用程序确实在后台“做”某事,一些耗时的操作可能需要相当长的时间。因此,请尝试进行线程转储并检查您是否看到任何“正在运行”的线程。

想法 2

另一个可能的原因是您没有读取元数据/任何其他操作的权限(这实际上取决于您设置 Oracle 数据库的准确程度)。缓解在这里很难描述——可能你应该看看 DBA 发生了什么,可能有很多原因导致卡在 java 中,或者可能有一个锁——谁知道呢。

想法 3

您可能还想记录 Spring Boot 应用程序在启动时运行的 SQL 命令。它可以启用对oracle驱动程序的跟踪(在驱动程序级别),在休眠/弹簧级别等。所以再次考虑这个方向。

【讨论】:

    猜你喜欢
    • 2015-12-15
    • 2017-12-25
    • 1970-01-01
    • 1970-01-01
    • 2022-08-11
    • 2020-08-02
    • 2017-06-27
    • 2018-09-16
    • 2017-09-17
    相关资源
    最近更新 更多