#java #xml #spring #applicationcontext
#java #xml #spring #applicationcontext
Вопрос:
Как я могу использовать переменные значения из xml контекста приложения Spring?
java -jar my.jar --variable=value
application-context.xml
<bean id="fooClassInstance" class="my.package.FooClass">
<property name="myproperty" value="${variable}" />
</bean>
Комментарии:
1. Вы написали свой собственный
main()
метод и создали контекст приложения там? Итак, у вас есть доступ кString[] args
параметруmain()
? На самом деле ваш вопрос «как я могу передать произвольные строковые значения в контекст приложения»?
Ответ №1:
Попробуйте использовать системные свойства:
java -Dvariable=value -jar my.jar
Это либо работает из коробки, либо вам нужно указать контексту приложения просматривать системные свойства при расширении переменных. Прошло некоторое время с тех пор, как я пытался это сделать.
Хорошей отправной точкой является PropertySourcesPlaceholderConfigurer
.
Комментарии:
1. но если я хочу использовать переменные, передаваемые аргументами?
2. Вы написали свой собственный
main()
метод и создали контекст приложения там? Итак, у вас есть доступ кString[] args
параметруmain()
?
Ответ №2:
Когда вы делаете что-то подобное в своей конфигурации Spring XML
<bean id="fooClassInstance" class="my.package.FooClass">
<property name="myproperty" value="${variable}" />
</bean>
Spring использует PropertyPlaceholderConfigurer
для поиска этих переменных в системных переменных / переменных среды и / или списке предопределенных файлов свойств.
Итак, самый простой способ — передать это значение в качестве системной переменной или переменной окружения с помощью -Dvariable=value
.
Если вы хотите передать эти значения в качестве аргументов в min
, вы все равно можете выполнить такие хаки, как
public static void main(String[] args) {
// parse arguments into key, value pairs
System.setProperty(<key>, <value>);
ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext(<your XML config file>);
// use Spring context to get beans
}