用于java.util.Properties字段的Spring JavaConfig

时间:2013-03-13 13:52:48

标签: spring inject


您能否告诉我如何使用Spring Javaconfig直接将属性文件加载/自动装配到java.util.Properties字段?

谢谢!

稍后编辑 - 仍在搜索答案: 是否可以使用Spring JavaConfig将属性文件直接加载到java.util.Properties字段中?

6 个答案:

答案 0 :(得分:8)

XML基础方式:

在spring config中:

<util:properties id="myProperties" location="classpath:com/foo/my-production.properties"/>
你班上的

@Autowired
@Qualifier("myProperties")
private Properties myProperties;

仅限JavaConfig

看起来有一个注释:

@PropertySource("classpath:com/foo/my-production.properties")

使用this注释类会将文件中的属性加载到Environment中。然后,您必须将环境自动装配到类中以获取属性。

@Configuration
@PropertySource("classpath:com/foo/my-production.properties")
public class AppConfig {

@Autowired
private Environment env;

public void someMethod() {
    String prop = env.getProperty("my.prop.name");
    ...
}

我没有看到将它们直接注入Java.util.properties的方法。但是你可以创建一个使用这个注释作为包装器的类,并以这种方式构建属性。

答案 1 :(得分:4)

声明PropertiesFactoryBean

@Bean
public PropertiesFactoryBean mailProperties() {
    PropertiesFactoryBean bean = new PropertiesFactoryBean();
    bean.setLocation(new ClassPathResource("mail.properties"));
    return bean;
}

旧版代码有以下配置

<bean id="mailConfiguration" class="org.springframework.beans.factory.config.PropertiesFactoryBean">
  <property name="location" value="classpath:mail.properties"/>
</bean>

将其转换为Java配置非常简单,如上所示。

答案 2 :(得分:2)

这是一个古老的主题,但也有一个更基本的解决方案。

@Configuration
public class MyConfig {
    @Bean
    public Properties myPropertyBean() {
        Properties properties = new Properties();
        properties.load(...);
        return properties;
    }
}

答案 3 :(得分:1)

还有一种使用xml配置直接注入属性的方法。上下文xml有这个

<util:properties id="myProps" location="classpath:META-INF/spring/conf/myProps.properties"/>

并且java类只使用

@javax.annotation.Resource
private Properties myProps;

瞧!!它加载。 Spring使用xml中的'id'属性绑定到代码中的变量名称。

答案 4 :(得分:0)

<强> application.yml

MyViewHolder

您的类型安全pojo:

root-something:
    my-properties:
        key1: val1
        key2: val2

您的容器配置:

import java.util.Properties;
import org.springframework.boot.context.properties.ConfigurationProperties;

@ConfigurationProperties(prefix = "root-something")
public class RootSomethingPojo {

    private Properties myProperties;

这会将键值对直接注入@Configuration @EnableConfigurationProperties({ RootSomethingPojo .class }) public class MySpringConfiguration { 字段。

答案 5 :(得分:0)

你可以试试这个

@Configuration  
public class PropertyConfig { 

 @Bean("mailProperties")  
 @ConfigurationProperties(prefix = "mail")   
  public Properties getProperties() {
     return new Properties();  
  }

}

确保在 application.properties 中定义属性