前言
公司项目基于ssm结构,在使用spring @value注解的时候出现异常。尝试了许久,一直未能解决,新年伊始,解决历史问题,成为首要任务。
问题
问题是源于我使用swagger配置文档的时候,需要指定host参数。
该参数来源于
通过spring.xml的配置是
<context:property-placeholder location="classpath:jdbc.properties" />
<context:property-placeholder location="classpath:swagger.properties" />
运行程序之后,提示错误。
解决方案
这里的错误存在2个。
-
context:property-placeholder
只能配置1个,配置多个的话则只有第一个生效。因此正常的配置应该是
以上虽然解决了配置载入问题,但是由于我的项目是基于ssm 。需要在spring.xml和spring-mvc.xml中均引入该配置。否则依旧找不到配置值。
后续
以上配置只解决了正常运行的情况。如果运行单元测试,则依旧报错。
需要修改配置为
<context:property-placeholder location="classpath*:*.properties" />
区别:
classpath 和 classpath* 区别:
classpath:只会到你的class路径中查找找文件;
classpath*:不仅包含class路径,还包括jar文件中(class路径)进行查找.
另外可能有同学打算在static变量中使用value注解。不好意思,不支持如此调用。
但是可以间接实现。如下
public static String smtpHost;
@Value("${smtpHost}")
public void setSmtpHost(String smtpHost) {
MailUtil.smtpHost = smtpHost;
}