我有一个Jhipster单片应用程序。我删除了Liquibase,我想使用data.sql文件来插入初始数据。我创建了一个包含插入脚本的data.sql和data-h2.sql。他们位于src/main/resources
。但似乎没有插入任何数据。如何使用JHipster和Spring Boot加载数据data.sql
如何在不使用Liquibase的情况下使用data.sql在启动过程中插入数据?
我有一个Jhipster单片应用程序。我删除了Liquibase,我想使用data.sql文件来插入初始数据。我创建了一个包含插入脚本的data.sql和data-h2.sql。他们位于src/main/resources
。但似乎没有插入任何数据。如何使用JHipster和Spring Boot加载数据data.sql
如何在不使用Liquibase的情况下使用data.sql在启动过程中插入数据?
评论spring.datasource.type
属性和添加spring.jpa.hibernate.create-drop
属性帮助解决此问题。我认为一些jhipster配置会覆盖默认的spring-boot配置。
这里是我想出了这个解决方案:
在调试DataSourceInitializedPublisher.publishEventIfRequired
,我看到下面的行返回null
参考:
private void publishEventIfRequired(EntityManagerFactory entityManagerFactory) {
DataSource dataSource = findDataSource(entityManagerFactory);
...
}
我application-dev.yml
评论spring.datasource.type
财产。这样,spring自动切换到tomcat连接池。
然后,我发现DataSourceInitializedPublisher.isInitializingDatabase
需要spring.jpa.hibernate.hbm2ddl.auto
属性在配置上进行定义:
private boolean isInitializingDatabase(DataSource dataSource) {
...
if (hibernate.containsKey("hibernate.hbm2ddl.auto")) {
return true;
}
return false;
}
添加缺少的属性后,弹簧启动开始执行data.sql
文件。
更新
对于那些谁想要执行特定于平台的data.sql
文件,如data-h2.sql
,你还应该添加以下属性:
spring.datasource.platform=h2
更新
对于那些需要将存储在csv文件中的默认Jhipster数据转换为sql格式,您可以参考以下要点:
https://gist.github.com/hkarakose/cf7f1b5b241dad611ba01c0211f42108
貌似https://stackoverflow.com/questions/24508223/multiple-sql-import-files-in-spring-boot –
的副本嗯,这是不完全的答案,我题。我想用Spring初始化我的数据库('https://docs.spring.io/spring-boot/docs/current/reference/html/howto-database-initialization.html#howto-initialize-a-database-using-弹簧jdbc')。 顺便说一下,作者引用了'DataSourceInitializer'类,它帮助我发现了我的问题。 – Halil