I am developing a Spring Boot application. At the moment some of my configs are hard coded (e.g. Hystrix properties).
So I would like to get these configs on my application start up time or just after that.
Is it possible to do that using Spring Boot? I mean to run SQL script on start up and get data.
How should properties/configs be retrieved and stored in my application?
I am using MyBatis and Oracle DB.
Spring Boot can automatically create the schema (DDL scripts) of your DataSource and initialize it (DML scripts). It loads SQL from the standard root classpath locations: schema. sql and data. sql , respectively.
By default, Spring-Boot loads data.sql
and/or data-${platform}.sql
.
However, keep in mind that the script would be loaded at every start, so I would think it makes more sense (at least for production), to just have the values already present in the database, not re-inserted at every start. I've personally only used database initialization for test/dev purposes when using a memory database. Still, this is the feature provided by Spring-Boot.
source: spring-boot-howto-database-initialization:
Spring JDBC has a DataSource initializer feature. Spring Boot enables it by default and loads SQL from the standard locations schema.sql and data.sql (in the root of the classpath). In addition Spring Boot will load the schema-${platform}.sql and data-${platform}.sql files (if present).
src/main/resources/data-oracle.sql:
insert into... insert into...
spring.datasource.platform=oracle
.spring.datasource.data=myscript.sql
.data.sql
, Spring-boot also loads schema.sql
(before data.sql
).What worked for me is using 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; }
Used to set up a database during initialization and clean up a database during destruction.
https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/jdbc/datasource/init/DataSourceInitializer.html
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With