【发布时间】:2019-07-11 23:09:12
【问题描述】:
我正在尝试使用 @PropertySource 来从 .properties 文件加载属性并在我的 Spring-batch 中使用它们。
我有一个 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 的工作原理.
我没有文件访问错误,他似乎找到了文件。
第一个问题是,哪种尝试是正确的:
- 数字 1 与 @Value ?
- 带有公共 getSource() 的 2 号?
第二个问题:
我需要改变什么才能做到这一点?
【问题讨论】:
-
如果 Config 为空,可能您在 Process 类中的 Config 字段上缺少 @Autowired 注释?
-
@Spasoje 即使这样,对象仍然是空的......
-
感兴趣如果不是
@Autowired,你如何初始化configuration?你的 Process 类是如何初始化的?如果您这样做new Process(..),Autowire 将不起作用 -
你说得对@pirho,我在其他地方做
new Process()。我对注释和弹簧不太满意。您认为实现我在这里尝试的最佳方式是什么?
标签: java spring spring-boot spring-batch