Open soid opened 1 month ago
Hey @soid, thanks for the question. The easiest way is to use a database migration tool like Flyway or Liquibase. Then you can be sure that the production and test schemas are the same. Alternatively, you can use a DataSourceInitializer bean for this purpose: https://stackoverflow.com/questions/23029722/how-to-execute-sql-insert-queries-to-populate-database-during-application-start
I'm trying to use
@Sql
annotation for initializing the db schema like this:@Sql(scripts = ["/schema.sql"])
(the code is in Kotlin here)But it seems it is only executed after spring context in initialized. So, if my components rely on loading the db in initialization then it fails. For example, if I want to use the db in
@PostConstruct
method of my component:then it fails during Spring context initialization due to missing table. This is because
schema.sql
is only executed after the initialization.I also tried to no avail:
@Sql(scripts = ["/schema.sql"], executionPhase = Sql.ExecutionPhase.BEFORE_TEST_CLASS)
InitializingBean.afterPropertiesSet
instead of@PostConstruct
for component initializationspring.jpa.defer-datasource-initialization=true
in properties (link)