Skip to content

Application fails to start if migration script location folder is empty #27

@nilskuhn

Description

@nilskuhn

Observed behaviour:

If we configure a migration script location in Springs application.yml, which doesn't contain any migration scripts yet, application doesn't start due to the following error:

Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.
2021-03-08 13:30:26,966 ERROR [main] o.s.b.SpringApplication:837 Application run failed
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'elasticsearchEvolutionInitializer' defined in class path resource [com/senacor/elasticsearch/evolution/spring/boot/starter/autoconfigure/ElasticsearchEvolutionAutoConfiguration.class]: Invocation of init method failed; nested exception is org.reflections.ReflectionsException: Scanner ResourcesScanner was not configured
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1794)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:594)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:516)
	at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:324)
	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)
	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:322)
	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202)
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:897)
	at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:879)
	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:551)
	at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:143)
	at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:758)
	at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:750)
	at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:405)
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:315)
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1237)
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1226)
	at <app-package>.MainKt.main(Main.kt:15)
Caused by: org.reflections.ReflectionsException: Scanner ResourcesScanner was not configured
	at org.reflections.Store.get(Store.java:39)
	at org.reflections.Store.get(Store.java:61)
	at org.reflections.Store.get(Store.java:56)
	at org.reflections.Reflections.getResources(Reflections.java:564)
	at com.senacor.elasticsearch.evolution.core.internal.migration.input.MigrationScriptReaderImpl.readScriptsFromClassPath(MigrationScriptReaderImpl.java:126)
	at com.senacor.elasticsearch.evolution.core.internal.migration.input.MigrationScriptReaderImpl.readFromLocation(MigrationScriptReaderImpl.java:88)
	at com.senacor.elasticsearch.evolution.core.internal.migration.input.MigrationScriptReaderImpl.lambda$read$0(MigrationScriptReaderImpl.java:68)
	at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:271)
	at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1655)
	at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:484)
	at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:474)
	at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:913)
	at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
	at java.base/java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:578)
	at com.senacor.elasticsearch.evolution.core.internal.migration.input.MigrationScriptReaderImpl.read(MigrationScriptReaderImpl.java:75)
	at com.senacor.elasticsearch.evolution.core.ElasticsearchEvolution.migrate(ElasticsearchEvolution.java:101)
	at com.senacor.elasticsearch.evolution.spring.boot.starter.autoconfigure.ElasticsearchEvolutionInitializer.afterPropertiesSet(ElasticsearchEvolutionInitializer.java:29)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1853)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1790)
	... 17 common frames omitted

Process finished with exit code 1

This is the part of the configuration which lets the application fail to start:

spring:
  elasticsearch:
    evolution:
      locations:
        - classpath:es/migration/app-name

Without the locations part, the app starts correctly.

Expected behaviour:

The application should start without any errors, if we configure an empty folder as one of the migration script locations.

Metadata

Metadata

Assignees

Labels

bugSomething isn't working

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions