【发布时间】:2018-06-24 00:59:35
【问题描述】:
我有一个正在运行的 Spring Boot 项目。我想从外部属性文件中读取一些特定于环境的属性。
我在启动服务器时提到了配置文件的名称和位置,如下所示:
java -jar AllergiesConditions.jar --spring.config.name=application,metadata --spring.config.location=classpath:/,/APPS/SpringBoot/
属性文件加载成功(因为我尝试在数据源 bean 中记录一个外部键值并成功打印)但是当我尝试使用 @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();
}
}
这个 test() 函数会在服务器运行后调用特定 API 时调用。
外部配置文件 - metadata.properties 包含此变量:
sso.server=1234test
编辑:正如this apparently duplicate question 中所建议的,我还尝试在主应用程序配置类中添加@PropertySource(name = "general-properties", value = { "classpath:path to your app.properties"}),它加载了文件,但我自己仍然得到空值。
有人可以帮忙解决这里出了什么问题吗?测试类是否需要一些特定的注释或者它需要是一个 bean 或其他东西??
在此先感谢 :)
【问题讨论】:
-
我尝试了上面帖子中建议的解决方案,仍然无法成功!
-
它不能是
null...如果${sso.server}无法解析,您的应用程序将在启动时中断。这意味着您没有使用托管实例,而是自己创建testclass的实例。 -
@M.Deinum 是的,我认为你提供了一些很好的线索。在我的一个控制器中,我只是打电话给
testclass obj = new testclass(); obj.test();。如果那是错误的方法,请告诉我如何在我的控制器中调用我的测试类的测试函数。如您所料,如果我在控制器本身内部使用@Value注释并将其记录到控制器本身,它可以工作!!
标签: spring spring-boot properties-file