在构建Spring启动项目时自动运行sql脚本

时间:2016-10-18 13:57:38

标签: sql spring maven spring-boot

我有一个简单的Spring Boot rest Api和一个MySql数据库。它目前只有一个表,所以为了创建表,如果它不存在,我只有一些Java代码在服务器初始化时完成工作。

但我不认为这是正确的方法。我相信更好的方法是拥有一个外部sql文件,每次运行我的项目时都会从Spring运行。

所以,假设我有一个名为TABLES.sql的文件,其中包含所有数据库表。如何配置Spring每次启动时自动运行它?

谢谢!

修改 为了进一步澄清,我已将我的项目配置为在“dev”环境中的Docker数据库上运行,并在“prod”环境中的实际实例上运行。 db用户,传递等都是可配置的。我只是搞乱基本上学习东西。 :)

3 个答案:

答案 0 :(得分:0)

您需要的是schema migration工具。我们在项目中使用Flyway,效果很好。

通过这种方式,您可以编写增量SQL脚本,这些脚本都可以运行以提供数据库的最终版本。要实际运行迁移,您需要使用flyway的迁移目标。

mvn -P<profile> flyway:migrate

答案 1 :(得分:0)

如果使用Hibernate,则会在启动时执行类路径根目录中名为import.sql的文件。这对于演示和测试很有用,如果你小心,但可能不是你想要在生产中的类路径上。这是一个Hibernate功能(与Spring无关)。

在此处获取更多信息:Database initialization

答案 2 :(得分:0)

好的,我想我找到了我想要的东西。根据本春季指南,我可以拥有一个schema-mysql.sql文件,所有我的表创建等:

Initialize a database using Spring JDBC

这基本上就是我想要的

感谢您的帮助!