Spring boot не читает файл application.properties при запуске из командной строки, но работает в STS - PullRequest
0 голосов
/ 27 марта 2020

Я разрабатываю настольное приложение с пружинной загрузкой с использованием среды 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 {

}

Что я делаю не так?

Ответы [ 2 ]

0 голосов
/ 27 марта 2020

вы бы попробовали это

java -jar RunableApp4.jar --spring.config.location=<relative-path-to-configs>/InterfaceApp/src/main/resources/ --spring.profiles.active=dev
0 голосов
/ 27 марта 2020

Прочитайте application.properties в вашем приложении следующим образом:

ClassLoader.class.getResourceAsStream("/path/to/application.properties");

В качестве альтернативы,

ClassLoader.getResourceAsStream("/application.properties");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...