我有一个简单的Spring Boot rest Api和一个MySql数据库。它目前只有一个表,所以为了创建表,如果它不存在,我只有一些Java代码在服务器初始化时完成工作。
但我不认为这是正确的方法。我相信更好的方法是拥有一个外部sql文件,每次运行我的项目时都会从Spring运行。
所以,假设我有一个名为TABLES.sql的文件,其中包含所有数据库表。如何配置Spring每次启动时自动运行它?
谢谢!
修改 为了进一步澄清,我已将我的项目配置为在“dev”环境中的Docker数据库上运行,并在“prod”环境中的实际实例上运行。 db用户,传递等都是可配置的。我只是搞乱基本上学习东西。 :)
答案 0 :(得分:0)
您需要的是schema migration工具。我们在项目中使用Flyway,效果很好。
通过这种方式,您可以编写增量SQL脚本,这些脚本都可以运行以提供数据库的最终版本。要实际运行迁移,您需要使用flyway的迁移目标。
mvn -P<profile> flyway:migrate
答案 1 :(得分:0)
如果使用Hibernate,则会在启动时执行类路径根目录中名为import.sql
的文件。这对于演示和测试很有用,如果你小心,但可能不是你想要在生产中的类路径上。这是一个Hibernate功能(与Spring无关)。
在此处获取更多信息:Database initialization。
答案 2 :(得分:0)
Initialize a database using Spring JDBC
这基本上就是我想要的
感谢您的帮助!