Настройка 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?

Другие вопросы по тегам