springBoot微服务项目启动报错:Could not resolve placeholder ‘xss.enabled‘ in value “${xss.enabled}“
最近本地环境更新代码后报@Value注解的参数值获取不到错的解决过程,在这里记录一下。
项目背景
Spring Cloud Alibaba微服务项目,系统的配置文件统一放在nacos服务注册中心管理,我们的业务系统是其中一个微服务,采用springBoot 2.3进行开发,JDK1.8。
问题描述
本地环境代码很久没更新了,最近要去出差所以更新了代码重新运行,发现项目启动到一半报错了,错误信息:
nested exception is org.springframework.boot.web.server.WebServerException: Unable to start embedded Tomcat
下面还有个重要信息
Caused by: java.lang.IllegalArgumentException: Could not resolve placeholder ‘xss.enabled’ in value “${xss.enabled}”
这俩报错我都搜了一下,第一个有的说jar包冲突的,感觉跟我项目对不上,我这个更新代码之前是能正常跑通的,代码结构没怎么变,多了几个jar也不至于冲突,然后又搜了一下代码中xss.enabled这个关键字但没找到,这里就是比较坑的地方,如果一开始找到了就一下子解决了。网上的答案大致是说有个注解@Value有问题,可能是yaml配置文件中缩进影响的.
我又查了一下新增代码中有@Value注释的地方,发现了这个地方:
@Service
public class ChangeServiceImpl implements IChangeService
{
public static final Logger logger = LoggerFactory.getLogger(ChangeServiceImpl.class);
@Autowired
private ICommonService commonService;
@Value("${xss.enabled}")
private boolean xssEnabled;
......
}
解决方法
找到问题原因就好办了,这个代码中注入的变量值肯定取自配置文件,比对我本地和公司内网nacos中的配置文件内容,发现确实少了这个参数配置,加上就解决了,项目启动成功。
小知识点
@Value()注解在项目中通常用来获取配置文件中配置的参数值,如某些个开关,或者访问路径等。
写法 @Value(${ property : default_value })
property是配置文件中的参数名称, : default_value是默认值,可省略,加上可以防止没有配置该值导致报错。
更多推荐
所有评论(0)