Как получить значение из системного свойства при весенней загрузке

Я использую следующую команду для запуска своего весеннего загрузочного приложения

java -Dlibrary.system.property=value -jar myapp.jar

В настоящее время я могу получить к нему доступ с помощью следующей команды, как показано ниже

System.getProperty("library.system.property")

Однако мне нужно получить к нему доступ через любую аннотацию в Spring, например,

@value(${library.system.property})

Я пытался использовать

    @Value("${library.system.property")
    private String property;

    @Bean
    public SampleProvider getSampleProvider () {
        return SampleProvider.from(property);
    }

Но стоимость собственности null. Мне нужно использовать условный bean или что-то в этом роде?

@Value("${library.system.property}") должен работать.
talex 21.12.2018 09:20

Spring Boot объединяет переменные среды, системные свойства и аргументы командной строки с зарегистрированными файлами конфигурации и создает то, что он называет «средой». Это обеспечивает единый доступ ко всему вышеперечисленному - ваше предложение должно работать идеально; не так ли?

Boris the Spider 21.12.2018 09:22

Это не работает, когда я добавляю @Value ("$ {library.system.property}") в код ниже @Value("${library.system.property}") private String property; @Bean public void test() throws URISyntaxException { return testMethod(property); }

rocky 21.12.2018 09:57

Измените вашу команду на: java --library.system.property=value -jar myapp.jar

Rentius2407 21.12.2018 10:06

спасибо, это сработало для меня после передачи аргумента java -jar myapp.jar --library.system.property=value и доступа к нему через @Value("${library.system.property}")

rocky 21.12.2018 10:50
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
5
5
13 235
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Ответ принят как подходящий

Спасибо всем. Проблема была решена путем изменения способа передачи аргумента через командную строку, как показано ниже.

java -jar myapp.jar --library.system.property=value

Доступ к значению с помощью фрагмента кода ниже

@Value("${library.system.property}")
private String property;

@Bean
public SampleProvider getSampleProvider () {
    return SampleProvider.from(property);
}

Вы можете получить доступ к свойствам системы, используя следующее выражение:

@Value("#{systemProperties['library.system.property']}")
private String property

Вы также можете получить доступ к системной среде, используя следующее выражение:

@Value("#{systemEnvironment['SOME_ENV_VARIABLE']}")
private String property

Наконец, если вы используете Spring Boot, вы можете напрямую ссылаться на имя свойства, если вы передаете его в командной строке. Например, если вы запустите JAR как java -jar boot.jar --some.property=value, вы можете прочитать его как:

@Value("${some.property}")
private String property

Спасибо! В последнем примере это не должно быть @Value("${some.property}")?

MosheElisha 07.01.2020 08:40

Вы можете получить доступ к своим данным из файла свойств, используя @ Value на вашем контроллере. Например: @Value ("$ {library.system.property}") частная собственность String;

Теперь ваша ценность в собственности, теперь вы можете использовать ее где угодно.

Просто используйте

import org.springframework.boot.system.SystemProperties;
...
String propertyKey = "library.system.property";
String propertyValue = SystemProperties.get(propertyKey);

Другие вопросы по теме