springboot注解@Value总是报Couldnotresolveplacehold。。。场景:
两个配置⽂件:db.properties,application.properties
在数据库配置⾥⾯引⽤db.properties
<bean id="propertyPlaceholderConfigurer" class="...">
<property name="locations">
<list>
<value>classpath*:/db.properties</value>
<value>file:/etc/db.properties</value>
</list>
</property>
</bean>
这时候,application.properties⾥⾯的属性就不会被加载进去了,如果你使⽤@Value,就会报Could not resolve placeholder
@Controller
public class FirstController {
@Value("${ssage}")
private String test;
@RequestMapping("/getw")
public String welcome(Map<String, Object> model) {
//model.put("message", ssage);
spring boot是啥
System.out.println(test);
return "my";
}
}
这样使⽤就会报Could not resolve placeholder
解决:
把db.properties的内容放到application.properties,然后这边引⽤:
<bean id="propertyPlaceholderConfigurer" class="...">
<property name="locations">
<list>
<value>classpath*:/application.properties</value>
<value>file:/etc/application.properties</value>
</list>
</property>
</bean>
或者两个⽂件都加载
<bean id="propertyPlaceholderConfigurer" class="...">
<property name="locations">
<list>
<value>classpath*:/application.properties</value>
<value>classpath*:/db.properties</value>
<value>file:/etc/application.properties</value>
</list>
</property>
</bean>
原因是spring的加载机制:Spring容器采⽤反射扫描的发现机制,在探测到Spring容器中有⼀个
org.springframework.fig.PropertyPlaceholderConfigurer的Bean就会停⽌对剩余PropertyPlaceholderConfigurer的扫描(Spring 3.1已经使⽤PropertySourcesPlaceholderConfigurer替代PropertyPlaceholderConfigurer了),所以根据加载的顺序,配置的第⼆个property-placeholder就被没有被spring加载,所以在使⽤@Value注⼊的时候占位符就解析不了

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。