Я использую следующую команду для запуска своего весеннего загрузочного приложения
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 или что-то в этом роде?
Spring Boot объединяет переменные среды, системные свойства и аргументы командной строки с зарегистрированными файлами конфигурации и создает то, что он называет «средой». Это обеспечивает единый доступ ко всему вышеперечисленному - ваше предложение должно работать идеально; не так ли?
Это не работает, когда я добавляю @Value ("$ {library.system.property}") в код ниже @Value("${library.system.property}") private String property; @Bean public void test() throws URISyntaxException { return testMethod(property); }
Измените вашу команду на: java --library.system.property=value -jar myapp.jar
спасибо, это сработало для меня после передачи аргумента java -jar myapp.jar --library.system.property=value и доступа к нему через @Value("${library.system.property}")




Спасибо всем. Проблема была решена путем изменения способа передачи аргумента через командную строку, как показано ниже.
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}")?
Вы можете получить доступ к своим данным из файла свойств, используя @ Value на вашем контроллере. Например: @Value ("$ {library.system.property}") частная собственность String;
Теперь ваша ценность в собственности, теперь вы можете использовать ее где угодно.
Просто используйте
import org.springframework.boot.system.SystemProperties;
...
String propertyKey = "library.system.property";
String propertyValue = SystemProperties.get(propertyKey);
@Value("${library.system.property}")должен работать.