java - spring boot JAR作为服务运行时无法加载系统环境变量
问题描述
我有一个简单的弹簧启动应用程序,它返回系统环境变量的值
应用程序属性
my-var=${SYSTEM_ENV_VAR}
哪里SYSTEM_ENV_VAR
是定义的系统变量/etc/environment
DemoApp.java
@SpringBootApplication
@RestController
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
@Value("${my-var}")
String env;
@GetMapping(path = "/")
public String get() {
return "This: " + env;
}
}
我遵循创建可执行jar的过程mvn clean package
现在,当我将 jar 执行为 时/home/ubuntu/sample-app/target/demo-0.0.1-SNAPSHOT.jar
,我得到了系统环境变量的正确值
我创建了一个服务
/etc/systemd/system/demoapp.service
[Unit]
Description=desc
After=syslog.target
[Service]
EnvironmentFile=-/etc/environment
User=root
ExecStart=/home/ubuntu/sample-app/target/demo-0.0.1-SNAPSHOT.jar
SuccessExitStatus=143
[Install]
WantedBy=multi-user.target
我将服务执行为sudo systemctl start demoapp.service
.
当我检查状态sudo systemctl status demoapp.service
时,我看到一个错误跟踪
Caused by: java.lang.IllegalArgumentException: Could not resolve placeholder
'SYSTEM_ENV_VAR' in value "${SYSTEM_ENV_VAR}"
但我知道/etc/environment
正在加载,因为我可以在日志中看到其他条目,这些条目显示了我所有系统环境的加载
谁能帮我这个?谢谢。
解决方案
您用于 ${my-var} 的值不应该是 ${SYSTEM_ENV_VAR} 而应该是系统变量的实际路径。所以你的 application.properties 应该有
my-var=path/to/system/variable
并不是
my-var=${SYSTEM_ENV_VAR}
推荐阅读
- react-native - 未找到名称为“默认”的配置 - 文档选择器
- google-cloud-platform - 数据流工作器无法启动
- python - 在 django 中迁移时出错
- c++ - 单行类声明和实例化
- asp.net - 将城市名称替换为“City”
- android - Ionic 3 版本未更新——Android/Mac
- tensorflow - 您的内核可能是在没有 NUMA 支持的情况下构建的
- javascript - setInterval 在卸载前未清除
- azure - Microsoft Graph - 如何以非交互方式获取令牌?
- python-3.x - 熊猫:当第一行不是列名 Excel 文件时读取 excel 文件