I am developing a desktop application with spring boot using the STS 4 IDE. Everything works fine inside STS, I have different properties files for different profiles and the main properties file application.properties all inside the resources folder
src/main/resources
application.properties
application-dev.properties
application-prod.properties
In the application.properties I define the environment and the packages to scan to find the entities for the two app databases:
spring.profiles.active=dev
wms.basepackage=com.wms
app.basepackage=es.app
I run the app using boot dasboard and everything is OK. The problem is when exporting the JAR and I execute it from the command using the instruction
java -jar -Dspring.profiles.active=dev RunableApp4.jar
The application fails with the error:
org.springframework.beans.factory.BeanDefinitionStoreException: Failed to parse configuration class [es.app.InterfaceApplication]; nested exception is java.lang.IllegalArgumentException: Could not resolve placeholder 'wms.basepackage' in value "${wms.basepackage}"
I noticed in the log Differences in steps for run the application from the command line than when run using STS:
STS STEPS (USING BOOT DASHBOARD):
es.app.InterfaceApplication Starting InterfaceApplication on matias-pc with PID 27945 (/home/matias/desarrollo/InterfaceApp/bin/main started by matias in /home/matias/desarrollo/InterfaceApp)
es.app.InterfaceApplication The following profiles are active: dev
o.s.boot.SpringApplication Loading source class es.app.InterfaceApplication
o.s.b.c.c.ConfigFileApplicationListener Activated activeProfiles dev
o.s.b.c.c.ConfigFileApplicationListener Profiles already activated, '[dev]' will not be applied
o.s.b.c.c.ConfigFileApplicationListener Loaded config file 'file:/home/matias/desarrollo/InterfaceApp/bin/main/application.properties' (classpath:/application.properties)
o.s.b.c.c.ConfigFileApplicationListener Loaded config file 'file:/home/matias/desarrollo/InterfaceApp/bin/main/application-dev.properties' (classpath:/application-dev.properties) for profile dev
m.s.d.r.c.RepositoryConfigurationDelegate Bootstrapping Spring Data JPA repositories in DEFAULT mode.
m.s.d.r.c.RepositoryConfigurationDelegate Finished Spring Data repository scanning in 60ms. Found 13 JPA repository interfaces.
m.s.d.r.c.RepositoryConfigurationDelegate Bootstrapping Spring Data JPA repositories in DEFAULT mode.
m.s.d.r.c.RepositoryConfigurationDelegate Finished Spring Data repository scanning in 8ms. Found 4 JPA repository interfaces.
The ConfigFileApplicationListener enters the scene and loads the main
application.properties file and the application-dev.properties environment file. Then the RepositoryConfigurationDelegate correctly loads the repositories
COMMAND LINE STEPS:
java -jar -Dspring.profiles.active=dev RunableApp4.jar
13:07:49.453 [main] DEBUG org.springframework.core.env.PropertySourcesPropertyResolver - Found key 'spring.profiles.active' in PropertySource 'systemProperties' with value of type String
13:07:49.455 [main] DEBUG org.springframework.core.env.StandardEnvironment - Activating profiles [dev]
13:07:49.455 [main] DEBUG org.springframework.core.env.StandardEnvironment - Activating profiles [dev]
3:07:49.537 [main] INFO es.app.InterfaceApplication - Starting InterfaceApplication on matias-pc with PID 32173 (/home/matias/Documentos/JARS/RunableApp4.jar started by matias in /home/matias/Documentos/JARS)
13:07:49.537 [main] DEBUG es.app.InterfaceApplication - Running with Spring Boot, Spring
13:07:49.537 [main] INFO es.app.InterfaceApplication - The following profiles are active: dev
13:07:49.538 [main] DEBUG org.springframework.boot.SpringApplication - Loading source class es.app.InterfaceApplication
13:07:49.580 [main] DEBUG org.springframework.context.annotation.AnnotationConfigApplicationContext - Refreshing org.springframework.context.annotation.AnnotationConfigApplicationContext#7a1ebcd8
13:07:49.584 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'org.springframework.context.annotation.internalConfigurationAnnotationProcessor'
13:07:49.642 [main] DEBUG org.springframework.context.annotation.ClassPathBeanDefinitionScanner - Identified candidate component class: URL [jar:file:/home/matias/Documentos/JARS/RunableApp4.jar!/mx/gm3s/configuracion/ConfiguracionDSErp.class]
.
.
Read candidate components
13:07:49.861 [main] WARN org.springframework.context.annotation.AnnotationConfigApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanDefinitionStoreException: Failed to parse configuration class [es.app.InterfaceApplication]; nested exception is java.lang.IllegalArgumentException: Could not resolve placeholder 'wms.basepackage' in value "${wms.basepackage}"
13:07:49.864 [main] ERROR org.springframework.boot.SpringApplication - Application run failed
org.springframework.beans.factory.BeanDefinitionStoreException: Failed to parse configuration class [es.app.InterfaceApplication]; nested exception is java.lang.IllegalArgumentException: Could not resolve placeholder 'wms.basepackage' in value "${wms.basepackage}"
The ConfigFileApplicationListener and RepositorConfigurationDelegate do not arrive at the scene, The AnnotationConfigApplicationContext starts to scan components and fails due to being unable to resolve properties values.
I already tried to send properties file as argument but the result is the same:
java -jar -Dspring.profiles.active=dev -Dspring.config.location=file:/InterfaceApp/src/main/resources/application.properties RunableApp4.jar
The main classes are:
#SpringBootApplication
#Import(ConfigInterfaceApp.class)
#EnableScheduling
public class InterfaceApp {
public static void main(String[] args) {
SpringApplication.run(InterfaceApp.class, args);
}
#Configuration
#EnableAutoConfiguration
#ComponentScan(basePackages = {"${wms.basepackage}", "${app.basepackage}"})
public class ConfigInterfaceApp {
}
What am I doing wrong?
Read application.properties in your application as follows:
ClassLoader.class.getResourceAsStream("/path/to/application.properties");
Alternatively,
ClassLoader.getResourceAsStream("/application.properties");
would you try this one
java -jar RunableApp4.jar --spring.config.location=<relative-path-to-configs>/InterfaceApp/src/main/resources/ --spring.profiles.active=dev
I've some kind of weird and frustrating bug wich block debug mode. It started suddenly and i can't get rid of it even trying to revert last changes.
When running my webApp in normal mode, it deploy and run properly, but when running it in debug mode, it can't finish, my last stacktrace info sais:
[...] INFO : org.springframework.beans.factory.xml.XmlBeanDefinitionReader - Loading XML bean definitions from ServletContext resource [/WEB-INF/spring/mvc/i18n.xml]
DEBUG: org.springframework.web.context.support.XmlWebApplicationContext - Bean factory for WebApplicationContext for namespace 'appServlet-servlet': org.springframework.beans.factory.support.DefaultListableBeanFactory#2222af8c: defining beans [gruposTrabajoServiceImpl,usuarioServiceImpl,vacacionesServiceImpl,calendarioServiceImpl,administracionServiceImpl,empleadosServiceImpl,aeropuertosServiceImpl,rotacionesServiceImpl,rotacionesController,empleadosController,vacacionesController,aeropuertosController,loginController,includeController,administracionController,gruposTrabajoController,informesController,festivoDAOImpl,empleadoDAOImpl,limitacionDAOImpl,habilidadEmpDAOImpl,fpCalendarioEmpDAOImpl,autorizacionDAOImpl,minimosPatronDAOImpl,ceAnoEmpDAOImpl,poaUpaDAOImpl,turnoRotacionDAOImpl,patronRotacionDAOImpl,anoEmpDAOImpl,grupoTrabajoDAOImpl,incidenciaDiaDAOImpl,telefonoEmpDAOImpl,usuarioDAOImpl,escalaDAOImpl,limitacionEmpDAOImpl,visibleCntMinimosDAOImpl,configuracionContratoEscalaDAOImpl,puntuacionDAOImpl,vpCalendarioEmpDAOImpl,usuarioEscalaDAOImpl,anoEscalaDAOImpl,vpCupoGtDAOImpl,habilidadDAOImpl,formacionEmpDAOImpl,dominioDAOImpl,formacionDAOImpl,tipoTurnoDAOImpl,incidenciaDAOImpl,observacionDiaDAOImpl,rotacionDAOImpl,turnoDAOImpl,calendario,mes,perfilAspect,excelEscala,excelAnual_,excelEscala_,globalConstants,dominioConstants,org.springframework.context.annotation.internalConfigurationAnnotationProcessor,org.springframework.context.annotation.internalAutowiredAnnotationProcessor,org.springframework.context.annotation.internalRequiredAnnotationProcessor,org.springframework.context.annotation.internalCommonAnnotationProcessor,org.springframework.context.annotation.internalPersistenceAnnotationProcessor,org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping#0,org.springframework.format.support.FormattingConversionServiceFactoryBean#0,org.springframework.validation.beanvalidation.LocalValidatorFactoryBean#0,org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter#0,org.springframework.web.servlet.handler.MappedInterceptor#0,org.springframework.web.servlet.mvc.method.annotation.ExceptionHandlerExceptionResolver#0,org.springframework.web.servlet.mvc.annotation.ResponseStatusExceptionResolver#0,org.springframework.web.servlet.mvc.support.DefaultHandlerExceptionResolver#0,org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping,org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter,org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter,org.springframework.aop.config.internalAutoProxyCreator,org.springframework.transaction.annotation.AnnotationTransactionAttributeSource#0,org.springframework.transaction.interceptor.TransactionInterceptor#0,org.springframework.transaction.config.internalTransactionAdvisor,org.springframework.web.servlet.resource.ResourceHttpRequestHandler#0,org.springframework.web.servlet.handler.SimpleUrlHandlerMapping#0,org.springframework.web.servlet.resource.ResourceHttpRequestHandler#1,org.springframework.web.servlet.handler.SimpleUrlHandlerMapping#1,org.springframework.web.servlet.resource.ResourceHttpRequestHandler#2,org.springframework.web.servlet.handler.SimpleUrlHandlerMapping#2,org.springframework.web.servlet.resource.ResourceHttpRequestHandler#3,org.springframework.web.servlet.handler.SimpleUrlHandlerMapping#3,org.springframework.web.servlet.view.InternalResourceViewResolver#0,org.springframework.web.servlet.handler.SimpleMappingExceptionResolver#0,messageSource,localeResolver,org.springframework.web.servlet.handler.MappedInterceptor#1]; parent: org.springframework.beans.factory.support.DefaultListableBeanFactory#4349e631
DEBUG: org.springframework.web.context.support.XmlWebApplicationContext - Using MessageSource [org.springframework.context.support.ResourceBundleMessageSource: basenames=[messages]]
DEBUG: org.springframework.web.context.support.XmlWebApplicationContext - Unable to locate ApplicationEventMulticaster with name 'applicationEventMulticaster': using default [org.springframework.context.event.SimpleApplicationEventMulticaster#6e3f6d73]
INFO : org.springframework.beans.factory.support.DefaultListableBeanFactory - Pre-instantiating singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory#2222af8c: defining beans [gruposTrabajoServiceImpl,usuarioServiceImpl,vacacionesServiceImpl,calendarioServiceImpl,administracionServiceImpl,empleadosServiceImpl,aeropuertosServiceImpl,rotacionesServiceImpl,rotacionesController,empleadosController,vacacionesController,aeropuertosController,loginController,includeController,administracionController,gruposTrabajoController,informesController,festivoDAOImpl,empleadoDAOImpl,limitacionDAOImpl,habilidadEmpDAOImpl,fpCalendarioEmpDAOImpl,autorizacionDAOImpl,minimosPatronDAOImpl,ceAnoEmpDAOImpl,poaUpaDAOImpl,turnoRotacionDAOImpl,patronRotacionDAOImpl,anoEmpDAOImpl,grupoTrabajoDAOImpl,incidenciaDiaDAOImpl,telefonoEmpDAOImpl,usuarioDAOImpl,escalaDAOImpl,limitacionEmpDAOImpl,visibleCntMinimosDAOImpl,configuracionContratoEscalaDAOImpl,puntuacionDAOImpl,vpCalendarioEmpDAOImpl,usuarioEscalaDAOImpl,anoEscalaDAOImpl,vpCupoGtDAOImpl,habilidadDAOImpl,formacionEmpDAOImpl,dominioDAOImpl,formacionDAOImpl,tipoTurnoDAOImpl,incidenciaDAOImpl,observacionDiaDAOImpl,rotacionDAOImpl,turnoDAOImpl,calendario,mes,perfilAspect,excelEscala,excelAnual_,excelEscala_,globalConstants,dominioConstants,org.springframework.context.annotation.internalConfigurationAnnotationProcessor,org.springframework.context.annotation.internalAutowiredAnnotationProcessor,org.springframework.context.annotation.internalRequiredAnnotationProcessor,org.springframework.context.annotation.internalCommonAnnotationProcessor,org.springframework.context.annotation.internalPersistenceAnnotationProcessor,org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping#0,org.springframework.format.support.FormattingConversionServiceFactoryBean#0,org.springframework.validation.beanvalidation.LocalValidatorFactoryBean#0,org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter#0,org.springframework.web.servlet.handler.MappedInterceptor#0,org.springframework.web.servlet.mvc.method.annotation.ExceptionHandlerExceptionResolver#0,org.springframework.web.servlet.mvc.annotation.ResponseStatusExceptionResolver#0,org.springframework.web.servlet.mvc.support.DefaultHandlerExceptionResolver#0,org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping,org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter,org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter,org.springframework.aop.config.internalAutoProxyCreator,org.springframework.transaction.annotation.AnnotationTransactionAttributeSource#0,org.springframework.transaction.interceptor.TransactionInterceptor#0,org.springframework.transaction.config.internalTransactionAdvisor,org.springframework.web.servlet.resource.ResourceHttpRequestHandler#0,org.springframework.web.servlet.handler.SimpleUrlHandlerMapping#0,org.springframework.web.servlet.resource.ResourceHttpRequestHandler#1,org.springframework.web.servlet.handler.SimpleUrlHandlerMapping#1,org.springframework.web.servlet.resource.ResourceHttpRequestHandler#2,org.springframework.web.servlet.handler.SimpleUrlHandlerMapping#2,org.springframework.web.servlet.resource.ResourceHttpRequestHandler#3,org.springframework.web.servlet.handler.SimpleUrlHandlerMapping#3,org.springframework.web.servlet.view.InternalResourceViewResolver#0,org.springframework.web.servlet.handler.SimpleMappingExceptionResolver#0,messageSource,localeResolver,org.springframework.web.servlet.handler.MappedInterceptor#1,org.springframework.context.annotation.ConfigurationClassPostProcessor$ImportAwareBeanPostProcessor#0]; parent: org.springframework.beans.factory.support.DefaultListableBeanFactory#4349e631
It always stays in the same place Pre-instantiating singletons in...
I've tried running my app in both Tomcat 7 and weblogic 10.3.4 but i get the same result.
Any idea? I'm lost without debug mode.
Thank you very much for your help
A long shot, but maybe you added some breakpoints to the code of one of your classes, and when in debug mode, the execution waits for you to explicitly signal it to continue?
You probably have some debug window open. What does it show there?
Just encountered the exact same issue with STS IDE version 3.6.4 and it seems that it was stopped at a breakpoint without highlighting it. Thus I was unawered of the situation. I cleared all of the breakpoints and it magically works now.