无法从Spring Boot中的外部属性文件中读取值

时间:2018-01-15 11:40:14

标签: spring spring-boot properties-file

我有一个正在运行的Spring Boot项目。我想从外部属性文件中读取一些特定于环境的属性。

我在启动服务器时提到了配置文件名称和位置,如下所示:

java -jar AllergiesConditions.jar --spring.config.name=application,metadata --spring.config.location=classpath:/,/APPS/SpringBoot/

属性文件加载成功(因为我试图在datasource bean中记录一个外部键值并且It打印成功)但是当我尝试使用@Value注释访问一个值时 - 它返回null

我的测试类如下:

@Component
public class testclass {
    private Logger logger = LogManager.getLogger(testcla.class);

    @Value("${sso.server}")
    public String sso;

    public void test(){
        logger.info("sso url is: "+sso); //This sso is logged as null
        otherStuff();
    }
}

在服务器运行后命中特定API时,将调用此test()函数。

外部配置文件 - metadata.properties包含此变量:

sso.server=1234test

编辑:正如this apparently duplicate question中所建议的,我也尝试在主应用程序配置类中添加@PropertySource(name = "general-properties", value = { "classpath:path to your app.properties"})并且它加载了文件,但我仍然得到空值。

有人可以帮忙解决这里出了什么问题吗? testclass是否需要一些特定的注释,或者它需要是bean还是什么?

提前致谢:)

1 个答案:

答案 0 :(得分:0)

感谢M.Deinum提供了很好的投入并节省了我的时间

只是将他的评论发布为答案

事实上${sso.server}不能为空。如果无法解析${sso.server},我的应用程序将在启动时自行中断。

所以显而易见的问题是我使用

在我的控制器中创建了testclass的新实例
testclass obj = new testclass(); obj.test();

相反,我应该通过在我的控制器中自动装配testclass来使用spring托管实例。