我有一个springboot应用程序,作为systemd服务运行。我的systemd应用程序服务文件如下所示:
[Unit]
Description=app name
After=syslog.target
[Service]
EnvironmentFile=/etc/environment
User=springboot
ExecStart="/opt/jar-folder-name/app-name.jar"
SuccessExitStatus=143
[Install]
WantedBy=multi-user.target
在/etc/environment文件中指定了一个环境变量:
some_env_var=某个值。该值包含\u内容
在我的springboot应用程序中,我尝试使用system.getenv方法访问环境变量:
@Bean
public SomeBean someBean() {
System.out.println("SOME_ENV_VAR was: ");
System.out.println(System.getenv("SOME_ENV_VAR"));
return new ServiceX(System.getenv("SOME_ENV_VAR"));
}
在我的服务器上,这会打印出:
某些环境变量为:null
在我自己的机器上本地运行带有mvn spring的springboot时-boot:run it 找到环境变量并很好地打印出来。我还测试了在服务器中,如果在terminal中运行env命令,就会找到/etc/environment中定义的环境变量。
那么,当springboot应用程序作为systemd服务运行时,如何让springboot检测环境变量呢?
我的springboot版本:2.3.0服务器操作系统:ubuntu18
im使用ansible systemd模块重新启动应用程序和服务:
---
- name: "Restart application"
systemd:
name: "{{ springboot_application_name }}.service"
enabled: yes
daemon-reload: yes
state: restarted
1条答案
按热度按时间ukxgm1gy1#
我不能评论这个问题的答案,从SpringBoot的观点来看,应用程序可以从多个地方获得配置值,
application.properties
就是这样一个地方,环境变量就是这样一个地方。更具体地说,环境。变量优先于属性文件中的值。对于指定配置所支持的方法的完整列表,请考虑阅读文档现在,考虑到这一点,显然这个问题基本上与spring boot无关,它基本上归结为如何在systemd服务中指定环境变量。
你可以试着创建一个以
*.conf
:把变量放在那里:
另外,我在“serverfault”站点中找到了一个答案,它讨论了几乎所有指定环境变量的可能方法。所以请考虑阅读这篇文章