Spring загружает аргументы командной строки из контекста приложения xml

#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
}