springboot 配置多环境使用yml配置 active: @envProperties@ 启动报错Do not use @ for indentation

yml配置文件中添加了下面配置

spring:
profiles:
active: @envProperties@
启动会报错:@envProperties@ 启动报错Do not use @ for indentation

maven配置如下:


   
      dev
      
         
         dev
      
      
         
         true
      
   
   
      test
      
         test
      
   
   
      prod
      
         prod
      
   

现象及错误解决:

项目启动时报错说不能使用‘@’符号,根据网上的步骤将@activatedProperties@使用单引号括起来

spring:
  profiles:
    active: '@activatedProperties@'

结果:被当成字符串处理,引用未生效
springboot在启动的时候会识别当前环境,用引号之后识别的是一串字符串"@activatedProperties@“,而下面才是我们需要的"dev”

原因发现:

springboot项目如果没有直接继承SpringBoot即定义parent关系,pom.xml如下代码


    org.springframework.boot
    spring-boot-starter-parent
    2.2.1.RELEASE

而是如下方式(或者其它)


    org.springframework.boot
    spring-boot-dependencies
    ${spring.boot.version}
    pom
    import


    org.springframework.boot
    spring-boot-starter-web
    ${spring.boot.version}

则不能暴露配置,需要在build标签内添加如下配置即可


    org.apache.maven.plugins
    maven-resources-plugin
    2.7
    
        
            @
        
        false
    


    
        src/main/resources
        true
        
            application-${activatedProperties}.yml
            application.yml
        
    

解决办法:

一、需要在pom文件中添加以下代码

org.apache.maven.plugins maven-resources-plugin @ false 二、在pom文件添加(我引了这个依赖没做别的处理就好了)
    
        org.yaml
        snakeyaml
        1.25
    

在这里强调一下,当时碰到这个问题的时候再网上看了很多博客,发现大部分都是说用单引号或者双引号引起来,比如

“@envProperties@”,这是错误的,因为用双引号引起来后,会被当成字符串解析,如下图:

来源1:https://blog.csdn.net/li_jiazhi/article/details/102466753  
来源2:https://blog.csdn.net/chentainshao/article/details/105409903

你可能感兴趣的:(spring,boot,java,spring)