我如何使用@PropertySource中的属性

时间:2019-02-18 14:28:06

标签: java spring spring-boot spring-batch

我正在尝试使用 @PropertySource 以便从 .properties 文件加载属性并在Spring批处理中使用它们。

我有一个Config.java文件,该文件可以加载这些属性,其中有一个application.properties文件,其中包含数据,我正在尝试通过另一个文件中Config.java的实例访问这些数据。但看起来Config对象为空。

这是 Config.java 文件:

package demo;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import org.springframework.core.env.Environment;

@Configuration
@PropertySource("classpath:config/application.properties")
public class Config {

    @Autowired Environment env;

    //Attempt number 1
    @Value("${source.name}")
    public String name;

    //Attempt number 2
    public String getSource(){
        return env.getProperty("source.name"); 
    }

}

application.properties 文件:

source.name="OPTIQ"

另一个文件,我试图到达此特定行(我删除了很多过程,但只有这些行很重要):

public class Process{

   @Autowired Config configuration;
   String source;

   public setSource(){
       this.source = configuration.source;
       // this.source = configuration.getSource();
   }

}

结果将为“ OPTIQ”,但配置对象似乎为空或未初始化,因此我想我在这里错过了一步,或者我不太了解 @PropertySource 的工作方式

我没有文件访问错误,他似乎找到了文件。

第一个问题是,哪种尝试是正确的:
 -带有@Value的数字1?
 -带有public getSource()的2号吗?
第二个问题: 为了实现此目的,我需要更改什么?

1 个答案:

答案 0 :(得分:0)

自动连接您班上的org.springframework.core.env.Environment。然后,您将可以使用environment.getProperty(propertyName);

访问属性
@Component
public class Process{
   @Autowired
   private Environment environment;
   public void yourMethod(){
  // access it as below wherever required.
   environment.getProperty(propertyName);
 }
}

还要在Config类上添加@PropertySource

@Configuration
@PropertySource("classpath:some.properties")
public class Config {

}