为什么当我关闭Spring应用程序时,所有表都被删除了?

wmvff8tz  于 2023-05-05  发布在  Spring
关注(0)|答案(2)|浏览(146)

我正在EC2示例上运行Sping Boot 应用程序。它似乎和数据库连接得很好。但是,当我关闭它(Ctrl+C)时,它删除了数据库中的所有表
休眠:如果存在表,则删除表table1休眠:drop table if exists table2休眠:如果存在则删除表3
这是我希望在示例化开始时发生的事情。这是我在applications.properties中设置的方式。但我不希望在关闭时发生这种情况。我怀疑我的属性文件中有一些东西需要更改,但我不确定具体是什么。

spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://my-database.cggorzw3flvw.us-east-1.rds.amazonaws.com:3306/db_name
spring.datasource.username=username
spring.datasource.password=password

spring.jpa.hibernate.ddl-auto=create-drop #this is probably what's deleting my tables
#spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=true
spring.jpa.properties.hibernate.format_sql=trace
spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQL5InnoDBDialect
#spring.jpa.database-platform=org.hibernate.dialect.MySQL5InnoDBDialect
logging.level.org.hibernate.type=trace
server.port=8080
2jcobegt

2jcobegt1#

您已正确识别问题:spring.jpa.hibernate.ddl-auto=create-drop将在启动时创建模式,删除当前存在的所有数据,并在关闭时删除模式。对于生产环境来说,这当然不是一个合适的设置。
您可以尝试将该设置更改为spring.jpa.hibernate.ddl-auto=update,以仅更新现有模式。
在生产环境中,Sping Boot 更合适的配置是使用与数据库迁移工具Luquibase或Flyway的集成。

gcuhipw9

gcuhipw92#

create-drop:当SessionFactory显式关闭时(通常是在应用程序停止时),删除模式
我建议您使用Spring docs中所述的高级迁移工具(如flyway)。
这对于生产来说也更安全。

相关问题