我正在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
2条答案
按热度按时间2jcobegt1#
您已正确识别问题:
spring.jpa.hibernate.ddl-auto=create-drop
将在启动时创建模式,删除当前存在的所有数据,并在关闭时删除模式。对于生产环境来说,这当然不是一个合适的设置。您可以尝试将该设置更改为
spring.jpa.hibernate.ddl-auto=update
,以仅更新现有模式。在生产环境中,Sping Boot 更合适的配置是使用与数据库迁移工具Luquibase或Flyway的集成。
gcuhipw92#
create-drop:当SessionFactory显式关闭时(通常是在应用程序停止时),删除模式
我建议您使用Spring docs中所述的高级迁移工具(如flyway)。
这对于生产来说也更安全。