无法从 Spring Boot 中的外部属性文件中读取值
Posted
技术标签:
【中文标题】无法从 Spring Boot 中的外部属性文件中读取值【英文标题】:Unable to read values from external property file in Spring Boot 【发布时间】: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 或其他东西??
在此先感谢 :)
【问题讨论】:
***.com/questions/44179065/… Spring Boot - set value from an external properties file的可能重复 我尝试了上面帖子中建议的解决方案,仍然无法成功! 它不能是null
...如果$sso.server
无法解析,您的应用程序将在启动时中断。这意味着您没有使用托管实例,而是自己创建 testclass
的实例。
@M.Deinum 是的,我认为你提供了一些很好的线索。在我的一个控制器中,我只是打电话给testclass obj = new testclass(); obj.test();
。如果那是错误的方法,请告诉我如何在我的控制器中调用我的测试类的测试函数。如您所料,如果我在控制器本身内部使用@Value
注释并将其记录到控制器本身,它可以工作!!
【参考方案1】:
感谢 M.Deinum 的大力投入并节省了我的时间
只是发布他的评论作为答案
其实$sso.server
不能为空。如果$sso.server
无法解析,我的应用程序将在启动时中断。
所以明显的问题是我正在使用
在我的控制器中创建testclass
的新实例
testclass obj = new testclass(); obj.test();
我应该通过在我的控制器中自动装配 testclass
来使用 Spring 托管实例。
【讨论】:
以上是关于无法从 Spring Boot 中的外部属性文件中读取值的主要内容,如果未能解决你的问题,请参考以下文章
无法从 JUnit 中的 Spring Boot 读取应用程序属性?
“当前目录”中的 Spring Boot 外部属性文件被忽略
使用 Spring Boot 和 Docker 的外部属性文件