前言:昨天的项目正常启动,今天刚启动就发现这个字符@使用的问题。

Caused by: org.yaml.snakeyaml.scanner.ScannerException: while scanning for the next token
found character '@' that cannot start any token. (Do not use @ for indentation)
 in 'reader', line 10, column 13:
        active: @spring.active@
                ^

application.yml配置

 解决:

1、检查maven配置

1.1 pom文件中配置

 1.2  maven默认使用配置文件打钩

2、使用单引号或双引号包住@@之间的配置

最后解决,原因待分析。

 

最近看到一遍原因分析的文章

https://blog.verysu.com/article/391

你可以使用Maven的资源过滤(resource filter)自动暴露来自Maven项目的属性,如果使用spring-boot-starter-parent,你可以通过@..@占位符引用Maven项目的属性,例如:

app.encoding=@project.build.sourceEncoding@
app.java.version=@java.version@
注 如果启用addResources标识,spring-boot:run可以将src/main/resources直接添加到classpath(出于热加载目的),这就绕过了资源过滤和本特性。你可以使用exec:java目标进行替代,或自定义该插件的配置,具体查看插件使用页面。

如果不使用starter parent,你需要将以下片段添加到pom.xml中(<build/>元素内):

<resources>
    <resource>
        <directory>src/main/resources</directory>
        <filtering>true</filtering>
    </resource>
</resources>
和(<plugins/>元素内):

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-resources-plugin</artifactId>
    <version>2.7</version>
    <configuration>
        <delimiters>
            <delimiter>@</delimiter>
        </delimiters>
        <useDefaultDelimiters>false</useDefaultDelimiters>
    </configuration>
</plugin>
注 如果你在配置中使用标准的Spring占位符(比如${foo})且没有将useDefaultDelimiters属性设置为false,那构建时这些属性将被暴露出去。

Logo

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

更多推荐