Как прочитать переменную системного окружения в контексте приложения?
Я хочу что-то вроде:
<util:properties id="dbProperties"
location="classpath:config_DEV/db.properties" />
или
<util:properties id="dbProperties"
location="classpath:config_QA/db.properties" />
в зависимости от окружающей среды.
Могу ли я иметь что-то подобное в моем контексте приложения?
<util:properties id="dbProperties"
location="classpath:config_${systemProperties.env}/db.properties" />
где фактическое значение устанавливается на основе ПЕРЕМЕННОЙ СИСТЕМНОЙ СРЕДЫ
Я использую Spring 3.0
assert System.getProperty("env") == "QA";
export
и т.д.), он позволяет только читать системные свойства Java.System.getProperty("prop")
. Если вы хотите прочитать свойство ОС, используйтеSystem.getenv("os-env-variable")
. См. Javadoc#{systemEnvironment['ENV_VARIABLE_NAME']}
.В настоящее время можно поставить
в вашем
@Component
,@Bean
и т.д., а затем получить доступ к свойствам черезEnvironment
класс:Для отдельной собственности в
@Bean
Другой способ - удобные
@ConfigurationProperties
бобы:Примечание: просто не забудьте перезапустить eclipse после установки новой переменной среды.
источник
Environment
интерфейс?java.lang.System
получаете к ним доступ с тем же ключом, что и при запросе, например, чтобы получить тип ОС, который, как выenv.getProperty("os.name")
предполагаете,env
является вашим экземпляромorg.springframework.core.env.Environment
.@Autowired private Environment environment;
не работает для моегоComponent
окружения всегда nullДа,
<property name="defaultLocale" value="#{ systemProperties['user.region']}"/>
например, можно.Переменная systemProperties предопределена, см. 6.4.1 Конфигурация на основе XML .
источник
Не забудьте включить в определение вашего bean-компонента searchSystemEnvironment и установить для него значение true. И если вы используете его для создания пути к файлу, укажите его как file: /// url.
Так, например, если у вас есть файл конфигурации, расположенный в
затем установите переменную среды следующим образом:
и ваше приложение может загрузить файл, используя такое определение bean-компонента:
например
источник
Используя Spring EL, вы можете написать пример следующим образом
источник
Для моего варианта использования мне нужно было получить доступ только к свойствам системы, но предоставить значения по умолчанию, если они не определены.
Вот как вы это делаете:
источник
Объявите владельца места собственности следующим образом
Затем допустим, что вы хотите прочитать
System.property("java.io.tmpdir")
свой bean-компонент Tomcat или любой компонент, а затем добавьте следующее в свой файл свойств:источник
Вот как вы это делаете:
Но помните, что сначала загружается spring, а затем загружается этот компонент MethodInvokingFactoryBean. Так что, если вы пытаетесь использовать это в своем тестовом примере, убедитесь, что вы используете файл depends-on. Например, в этом случае
Если вы используете его для своего основного класса, лучше установить это свойство, используя свой pom.xml как
источник
Вы можете указать свои атрибуты переменных в файле свойств и определить файлы свойств для конкретной среды, такие как local.properties, production.propertied и т. Д.
Теперь, в зависимости от среды, один из этих файлов свойств может быть прочитан в одном из прослушивателей, вызываемых при запуске, например ServletContextListener.
Файл свойств будет содержать специфические для среды значения для различных ключей.
Пример "local.propeties"
Образец "production.properties"
Для использования этого файла свойств вы можете использовать REsource, как указано ниже.
SERVER_TYPE можно определить как переменную среды с соответствующими значениями для локальной и производственной среды.
С этими изменениями appplicationContext.xml будет иметь следующие изменения
Надеюсь это поможет .
источник
Спасибо @Yiling. Это был намек.
После этого у вас должна быть одна переменная среды с именем FILE_PATH. Обязательно перезапустите свой терминал / IDE после создания этой переменной среды.
источник