Не удается загрузить системные переменные среды, когда JAR с весенней загрузкой запускается как служба - PullRequest
0 голосов
/ 05 июня 2019

У меня есть простое приложение весенней загрузки, которое возвращает значение системной переменной env

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, я получаю правильное значение моей системной переменной среды

Я создал сервис

/ и т.д. / Systemd / система / 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 загружается, так как я вижу другие записи в журнале, которые показывают загрузку всех моих системных envs

Может ли кто-нибудь помочь мне с этим? Спасибо.

Ответы [ 2 ]

1 голос
/ 05 июня 2019

Значение, которое вы используете для $ {my-var}, не должно быть $ {SYSTEM_ENV_VAR}, а должно быть фактическим путем к системной переменной.Таким образом, ваше application.properties должно иметь

my-var=path/to/system/variable

, а не

my-var=${SYSTEM_ENV_VAR}

0 голосов
/ 05 июня 2019

Хорошо. Так что это то, что я в итоге сделал.

Я заметил, что удаление ключевого слова export в моем /etc/environment привело к интерпретации и отображению значения SYSTEM_ENV_VAR.

Но теперь apache начал жаловаться, так как не смог найти значение для SYSTEM_ENV_VAR. Поэтому я разделил декларацию на 2 части. Итак, файл выглядит так:

/ и т.д. / окружающая среда

export SYSTEM_ENV_VAR
SYSTEM_ENV_VAR=the-value

Таким образом, Apache и Spring Boot счастливы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...