【问题标题】:Spring read values for @Bean class from properties fileSpring从属性文件中读取@Bean类的值
【发布时间】:2018-05-24 06:55:46
【问题描述】:

我正在尝试仅使用注释来创建 Spring bean。我无法从属性文件中为我的 @Bean 类加载值。

这是我的代码:

这是我的主要课程

public class AnnotationDI {

public static void main(String[] args) {
    ApplicationContext context = new AnnotationConfigApplicationContext(ConfigurationProvider.class);
    
    ApplicationProperties properties = (ApplicationProperties)context.getBean(ApplicationProperties.class);
    
    System.out.println(properties);
    
}}

配置类

@Configuration
public class ConfigurationProvider {

private ApplicationProperties m_applicationProperties;

@Bean
public ApplicationProperties getApplicationProperties() {
    return new ApplicationProperties();
}
}

豆类

@PropertySource(value = { "classpath:application.properties" })
public class ApplicationProperties {

@Value("${longThreadCount}")
private String m_longProcessThread;

@Value("${routeTimeout}")
private String m_routeTimeout;

@Value("${updateDirectoryPath}")
private String m_updateDirectoryPath;

public String getLongProcessThread() {
    return m_longProcessThread;
}
@Override
public String toString() {
    return "ApplicationProperties [m_longProcessThread=" +m_longProcessThread"]";
}
}

当我运行这个程序时,我得到以下输出

m_longProcessThread=${longThreadCount}

知道我做错了什么吗?

【问题讨论】:

  • 您需要将PropertySourcesPlaceholderConfigurer 添加为public static @Bean 才能正确解析@Value
  • 谢谢,它有效。您能否将其作为答案提及,以便我接受。

标签: java spring


【解决方案1】:

为了能够解析占位符的@Value,您需要注册PropertySourcesPlaceholderConfigurer。由于这是一个BeanFactoryPostProcessor,因此需要将其注册为static bean,以便可以在此过程的早期检测到它。

@Bean
public static PropertySourcesPlaceholderConfigurer placeholderConfigurer() {
     return new PropertySourcesPlaceholderConfigurer();
}

【讨论】:

    【解决方案2】:

    @PropertySource 注解必须像这样与@Configuration 注解结合使用,

    @Configuration
    @PropertySource(value = { "classpath:application.properties" })
    public class ApplicationProperties {
        ...
    }
    

    添加@Configuration 注释可以解决这种情况。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-10-08
      • 2014-08-30
      • 2013-11-14
      • 1970-01-01
      • 2020-07-01
      • 2015-12-23
      • 2023-02-03
      相关资源
      最近更新 更多