【问题标题】:Spring bean customization with configurable properties具有可配置属性的 Spring bean 定制
【发布时间】:2019-01-07 21:30:54
【问题描述】:

我有一个xml bean配置如下:

<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 但是它从属性文件中检索值,这并不是我所需要的。

你能告诉我的方向吗?

【问题讨论】:

    标签: java spring spring-bean property-placeholder


    【解决方案1】:

    我想用 some class 代替这个属性,它会从内存缓存中的某些地方检索这个属性的值(实际上从哪里来并不重要)

    如何将您的 txManager 注入到这个某个类并在那里设置 defaultTimeout?

    【讨论】:

      【解决方案2】:

      尝试查看 com.typesafe.config 库 https://www.javadoc.io/doc/com.typesafe/config/1.2.1。这允许您加载配置文件。

      使用这个库来创建一个 config 类型的 bean。像这样的东西。这是一个 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;
          }
      }
      

      然后在您的组件类中,您可以自动装配 bean 并使用存储在内存 bean 中的属性。

      @Autowired
      private Config properties;
      ...
      properties.getString("your property key");
      

      【讨论】:

        猜你喜欢
        • 2020-11-24
        • 1970-01-01
        • 1970-01-01
        • 2012-10-28
        • 2019-11-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多