Я разрабатываю настольное приложение с пружинной загрузкой с использованием среды IDE STS 4. Внутри STS все работает нормально, у меня разные файлы свойств для разных профилей и файл основных свойств application.properties внутри папки ресурсов
src/main/resources
application.properties
application-dev.properties
application-prod.properties
В application.properties я определяю окружение и пакеты для сканирования, чтобы найти сущности для двух баз данных приложения:
spring.profiles.active=dev
wms.basepackage=com.wms
app.basepackage=es.app
Я запускаю приложение, используя загрузочную панель и все в порядке. Проблема заключается в экспорте JAR, и я выполняю его из команды, используя инструкцию
java -jar -Dspring.profiles.active=dev RunableApp4.jar
Приложение завершается ошибкой:
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}"
Я заметил в журнале различия в шагах для запуска приложения из командной строки, чем при запуске с использованием STS:
STS STEPS (ИСПОЛЬЗОВАНИЕ BASH-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.
ConfigFileApplicationListener входит в сцену и загружается основной файл application.properties и файл среды application-dev.properties . Тогда RepositoryConfigurationDelegate правильно загружает репозитории
ШАГИ КОМАНДНОЙ ЛИНИИ:
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}"
ConfigFileApplicationListener и RepositorConfigurationDelegate не Прибытие на место происшествия AnnotationConfigApplicationContext начинает сканирование компонентов и завершается неудачей из-за невозможности разрешения значений свойств.
Я уже пытался отправить файл свойств в качестве аргумента, но результат тот же:
java -jar -Dspring.profiles.active=dev -Dspring.config.location=file:/InterfaceApp/src/main/resources/application.properties RunableApp4.jar
Основные классы:
@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 {
}
Что я делаю не так?