Существует ли какой-либо синтаксис, подобный: #{SystemProperties[‘environment_variable_name’]} для получения системной переменной?

#java #spring #spring-mvc #jakarta-ee #system-variable

#java #spring #spring-mvc #джакарта-ee #системная переменная

Вопрос:

Использует ли #{SystemProperties[‘environment’]} в applicationcontext.xml файл Spring возвращает значение, связанное со средой?

Или есть какой-либо способ изменить значение системной переменной весной applicationcontext.xml .

Комментарии:

1. Вы говорите о системных свойствах или переменных среды? Это две разные вещи, вы знаете…

Ответ №1:

Если я правильно помню, то есть разница между:

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

  • #{systemProperties['databaseName']}
  • #{systemProperties.databaseName}
  • ${databaseName} //$ вместо # !!

С #{systemProperties['databaseName']} у вас есть доступ к system-system-properties.

С помощью #{systemProperties.databaseName} у вас есть доступ к системным свойствам, считываемым, например, из командной строки ( -DdatabaseName="testDB" ).

С помощью ${databaseName} у вас есть доступ к свойствам из файлов свойств, загруженных и предоставленных, например, PropertyPlaceholderConfigurer , а также к системным настройкам

 @Value("#{systemProperties['java.version']}")
private String javaVersionMap;

//Dont know how
//@Value("#{systemProperties.javav.version}")
//private String javaVersionDirect;

@Value("${java.version}")
private String javaVersionProp;
  

 //-DcmdParam=helloWorld
@Value("#{systemProperties['cmdParam']}")
private String cmdParamMap;

@Value("#{systemProperties.cmdParam}")
private String cmdParamDirect;

@Value("${cmdParam}")
private String cmdParamProp
  

Вы можете использовать их все в @Value аннотации или config.xml файлы ( <property name="databaseName" value="#{systemProperties.databaseName}"/> )

Комментарии:

1. Кто-нибудь знает правильные имена для этих двух разных системных свойств (предоставляемых системой и командной строкой)?

2. такой вещи не существует. Версия командной строки устанавливает «реальные» системные свойства: download.oracle.com/javase/6/docs/technotes/tools/windows/… . Такая разница существует только в Maven: системные свойства (командная строка) против свойств проекта (pom.xml )

3. @Шон Патрик Флойд: Я протестировал это, и вы правы (видно, что мои записи были неправильными). — Я исправил ответ

Ответ №2:

Один из способов сделать такого рода вещи — использовать PropertyPlaceholderConfigurer, который может быть настроен на использование системных свойств.

Я также заметил, что в записи в блоге Spring 3.1 M1 говорится о новых материалах для доступа к информации о конфигурации из «среды». Конечно, это только веха … не готовый к производству релиз.