Настройка Spring Bean с настраиваемыми свойствами
У меня есть конфигурация XML-компонента следующим образом:
<bean id="txManager" class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="entityManagerFactory" />
<property name="dataSource" ref="dataSource" />
<property name="jpaDialect" ref="openJPADialect" />
</bean>
Я хочу добавить новое свойство defaultTimeout, однако не хочу его жестко кодировать.
Я хочу вместо этого поместить некоторый класс, который будет извлекать значение этого свойства из некоторого в кэш-память (не имеет значения, откуда на самом деле)
Я слышал и использовал раньше - org.springframework.beans.factory.config.PropertyPlaceholderConfigurer Однако он извлекает значения из файла свойств, что не совсем то, что мне нужно.
Не могли бы вы посоветовать, пожалуйста, мое направление?
2 ответа
Попробуйте заглянуть в библиотеку com.typesafe.config https://www.javadoc.io/doc/com.typesafe/config/1.2.1. Это позволяет загружать файлы конфигурации.
Используйте эту библиотеку для создания компонента типа config. Что-то вроде этого. Это конфигурация Java, но ее можно адаптировать к реализации XML.
@Configuration
@EnableWebMvc
@ComponentScan(basePackages = "com.your.package")
public class WebMvcConfig extends WebMvcConfigurerAdapter {
@Bean
public Config properties() throws Exception {
String path = ""; // path to properties file
Config conf = ConfigFactory.parseFile(new File(path));
return conf;
}
}
Затем в ваших классах компонентов вы можете автоматически связывать компонент и использовать свойства, хранящиеся в компоненте памяти.
@Autowired
private Config properties;
...
properties.getString("your property key");
Я хочу поместить вместо этого свойства некоторый класс, который будет извлекать значение этого свойства из некоторого в кеш-памяти (не имеет значения, откуда на самом деле)
Как насчет внедрения вашего txManager в этот класс и установки там defaultTimeout?