SpringCloud 目前使用的公司比较多,虽然 Netflix 最近宣布一些开源项目不在支持和闭源《Eureka 闭源,Hystrix 停止开发,Neo4j 企业版彻底闭源》,但还是影响不了人们对微服务的热爱和追求。今年以来,我一直致力于公司现有项目的微服务改造,目前我们使用的 SpringCloud,今天在改造其中一个小项目时,报了'@' that cannot start any token异常。本文总结一下如何解决的这个异常。
首先,我在 yml 中做了以下配置:
server:
port: 8080
spring:
application:
name: xttblog
eureka:
instance:
hostname: localhost
instance-id: ${eureka.instance.hostname}:${spring.application.name}:${server.port}:@project.version@
然后,Eureka 注册中心中的实例显示不了版本号。
于是我又加了一个配置:
info:
version: @project.version@
启动项目,抛出了'@' that cannot start any token. (Do not use @ for indentation)….异常。
SpringBoot 的版本我尝试了 1.5.3.RELEASE 和 1.5.13.RELEASE 都不支持。我检查了一下已经完成改造的项目,在它们的 pom.xml 中发现了秘密。
这个改造的项目和其它项目最大的区别在于配置文件 yml 放的位置。
这个改造的项目中把配置文件放在了 src/main/resources/config/xttblog 下。对于这种情况,我们需要在 pom.xml build 中配置 resource。具体如下:
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
<resources>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/application.yml</include>
<include>**/logback-spring.xml</include>
<include>**/application-${env}.yml</include>
</includes>
<filtering>true</filtering>
</resource>
</resources>
</build>
注意 <filtering>true</filtering> 必须配置,该属性默认为 false。
当你添加了 <filtering>true</filtering> 后,再启动项目后。问题完美解决!
另外你的项目如果没有指定 spring-boot-starter-parent 的话,也可能会抛出这个异常!

: » 解决SpringBoot配置文件中使用@project.version@报’@’ that cannot start any token.问题
原创文章,作者:carmelaweatherly,如若转载,请注明出处:https://blog.ytso.com/tech/pnotes/251996.html