zoukankan      html  css  js  c++  java
  • 2021.12.12(springboot报ScannerException)

    今日学习内容:

    springboot报ScannerException:character ‘@‘ that cannot start any token. (Do not use @ for indentation

    1、springboot @@,报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@
    

      

    2、springboot项目使用@@占位符引用maven项目属性
    我们知道,在springboot项目中,可以使用Maven的资源过滤(resource filter)自动暴露来自Maven项目的属性,如果使用parent

     <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>2.1.4.RELEASE</version>
            <relativePath/> <!-- lookup parent from repository -->
        </parent>
    

     在maven配置文件 pom.xml中设置启动文件:

    <profiles>
            <profile>
                <id>local</id>
                <activation>
                    <activeByDefault>true</activeByDefault>
                </activation>
                <properties>
                    <build.profile.id>local</build.profile.id>
                    <profileActive>local</profileActive>
                </properties>
            </profile>
            <profile>
                <id>production</id>
                <properties>
                    <build.profile.id>production</build.profile.id>
                    <profileActive>production</profileActive>DefaultZone>
            </profile>
        </profiles>
    

      可以在application.yml文件里读取到上面profileActive的值:

    spring:
      profiles:
        active: @profileActive@
    

      

    这是因为, spring-boot-starter-parent自带自动化的资源过滤,那什么是资源过滤呢?

    上面我们为本地环境和开发环境配置了不同的profile,在我们的代码里,就可以使用@xxx@来引用到属性,例如上面例子中,我们默认开启的环境是 带有 activeByDefault = true 的local环境,所以@profileActive@读到的是 profile id = local 的文件下,profileActive的值,即local。

    3、ScannerException

    但是如果你的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节点加上如下的配置:

     <build>     
            <resources>
                <resource>
                    <directory>src/main/resources</directory>
                    <!--开启过滤,用指定的参数替换directory下的文件中的参数-->
                    <filtering>true</filtering>
                </resource>
            </resources>
        </build>
    

      启动项目,一切正常,这是因为我们这里手动配置了资源过滤。

    转载于:https://blog.csdn.net/weixin_40910372/article/details/108199525

  • 相关阅读:
    async/await使用深入详解
    尴尬的事情又发生Newtonsoft.Json vs Protobuf.net
    在dotnet core下去中心化访问HTTP服务集群
    条件随机场CRF(一)从随机场到线性链条件随机场
    用hmmlearn学习隐马尔科夫模型HMM
    隐马尔科夫模型HMM(四)维特比算法解码隐藏状态序列
    隐马尔科夫模型HMM(三)鲍姆-韦尔奇算法求解HMM参数
    隐马尔科夫模型HMM(二)前向后向算法评估观察序列概率
    隐马尔科夫模型HMM(一)HMM模型
    EM算法原理总结
  • 原文地址:https://www.cnblogs.com/marr/p/15641776.html
Copyright © 2011-2022 走看看