项目背景

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是默认值,可省略,加上可以防止没有配置该值导致报错。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐