java - spring boot 在命令行上运行时不读取 application.properties 文件但在 STS 中工作
问题描述
我正在使用 STS 4 IDE 开发一个带有 Spring Boot 的桌面应用程序。在 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 步骤(使用引导仪表板):
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 {
}
我究竟做错了什么?
解决方案
阅读application.properties
您的应用程序,如下所示:
ClassLoader.class.getResourceAsStream("/path/to/application.properties");
或者,
ClassLoader.getResourceAsStream("/application.properties");
推荐阅读
- java - 将 pojo 列表复制到剪贴板
- layout - 在 Cs-Cart 中为所有已安装的语言设置相同的布局
- javascript - 如何使用 d3.force 对散点图进行动态、非重叠标记
- reactjs - 无法安装反应路由器
- arrays - Swift 4.1 可编码/可解码嵌套数组和字典
- php - Codeigniter:登录时使用验证码始终存储验证码图像
- java - 如何编写客户端以从 Rest webservice 获取数据和图像文件
- c# - 将值绑定到 DataTemplate 内的 UserControl 的 DependencyProperty 会返回 UserControl 本身而不是值
- python - MATLAB 的 sgolay(k, f) 的 Python 等价物是什么?
- javascript - Html5 日期字段无法设置回来自后端的日期字段