如何在应用程序启动时运行SQL脚本并获取数据?
我正在开发一个Spring Boot应用程序。目前,我的一些配置是硬编码的(例如Hystrix属性)。
因此,我想在我的应用程序启动时间或之后获得这些配置。
使用Spring Boot可以做到这一点吗?我的意思是在启动时运行SQL脚本并获取数据。
应如何检索属性/配置并将其存储在我的应用程序中?
我正在使用MyBatis和Oracle DB。
我正在开发一个Spring Boot应用程序。目前,我的一些配置是硬编码的(例如Hystrix属性)。
因此,我想在我的应用程序启动时间或之后获得这些配置。
使用Spring Boot可以做到这一点吗?我的意思是在启动时运行SQL脚本并获取数据。
应如何检索属性/配置并将其存储在我的应用程序中?
我正在使用MyBatis和Oracle DB。
默认情况下,Spring-Boot 将加载和/或 .data.sql
data-${platform}.sql
但是,请记住,脚本将在每次启动时加载,因此我认为将值已存在于数据库中,而不是在每次启动时重新插入更有意义(至少对于生产环境而言)。我个人在使用内存数据库时仅将数据库初始化用于测试/开发目的。不过,这是Spring-Boot提供的功能。
来源:spring-boot-howto-database-initialization:
Spring JDBC 有一个 DataSource 初始值设定项功能。默认情况下,Spring Boot 启用它,并从标准位置架构.sql和数据.sql(在类路径的根目录中)加载 SQL。此外,Spring Boot 将加载 schema-${platform}.sql 和 data-${platform}.sql 文件(如果存在)。
src/main/resources/data-oracle.sql:
insert into...
insert into...
spring.datasource.platform=oracle
spring.datasource.data=myscript.sql
data.sql
schema.sql
data.sql
对我有用的是使用:DataSourceInitializer
@Bean
public DataSourceInitializer dataSourceInitializer(@Qualifier("dataSource") final DataSource dataSource) {
ResourceDatabasePopulator resourceDatabasePopulator = new ResourceDatabasePopulator();
resourceDatabasePopulator.addScript(new ClassPathResource("/data.sql"));
DataSourceInitializer dataSourceInitializer = new DataSourceInitializer();
dataSourceInitializer.setDataSource(dataSource);
dataSourceInitializer.setDatabasePopulator(resourceDatabasePopulator);
return dataSourceInitializer;
}
用于在初始化期间设置数据库,在销毁期间清理数据库。