我有一个正在运行的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还是什么?
提前致谢:)
答案 0 :(得分:0)
感谢M.Deinum提供了很好的投入并节省了我的时间
只是将他的评论发布为答案
事实上${sso.server}
不能为空。如果无法解析${sso.server}
,我的应用程序将在启动时自行中断。
所以显而易见的问题是我使用
在我的控制器中创建了testclass
的新实例
testclass obj = new testclass(); obj.test();
相反,我应该通过在我的控制器中自动装配testclass
来使用spring托管实例。