windows环境下导入老项目,启动项目后提示org.yaml.snakeyaml.scanner.ScannerException: while scanning for the next token found character '@' that cannot start any token
即在yml文件中使用如下方式:@符号无法识别
spring: application: name: @artifactId@
springboot项目使用@@占位符引用maven项目属性。
这是因为, spring-boot-starter-parent自带自动化的资源过滤,那什么是资源过滤呢。我们为本地环境和开发环境配置了不同的profile,在我们的代码里,就可以使用@xxx@来引用到属性,例如上面例子中,我们默认开启的环境是 带有 activeByDefault = true 的local环境,所以@profileActive@读到的是 profile id = local 的文件下,profileActive的值,即local。
但是如果你的springboot项目如果没有指定spring-boot-starter-parent的话,使用@@的时候就会报ScannerException异常:
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 28, column 20: defaultZone: @eurekaDefaultZone@ ^
这时候,需要在你pom文件的build节点加上如下的配置:
1 2 3 4 5 6 7 8 9 |
|
启动项目,一切正常,这是因为我们这里手动配置了资源过滤。