我有一个简单的spring boot应用程序,它返回系统环境变量的值
application.properties
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;
}
}
我遵循使用mvn clean package
创建可执行jar的过程
现在,当我以/home/ubuntu/sample-app/target/demo-0.0.1-SNAPSHOT.jar
的身份执行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
正在加载,因为我可以在日志中看到其他条目,这些条目显示了所有系统环境的加载情况
有人可以帮我吗?谢谢。
答案 0 :(得分:1)
您用于$ {my-var}的值不应为$ {SYSTEM_ENV_VAR},而应为系统变量的实际路径。 因此,您的application.properties应该具有
my-var=path/to/system/variable
而不是
my-var=${SYSTEM_ENV_VAR}
答案 1 :(得分:0)
好的。所以这就是我最终要做的。
我注意到删除export
中的/etc/environment
关键字会导致SYSTEM_ENV_VAR
的值被解释和显示。
但是现在apache开始抱怨,因为它找不到SYSTEM_ENV_VAR
的值。因此,我将声明分为两部分。因此文件看起来像:
/ etc / environment
export SYSTEM_ENV_VAR
SYSTEM_ENV_VAR=the-value
这样,apache和spring boot都很高兴。