zoukankan      html  css  js  c++  java
  • maven filter不起作用

    遇到的一个坑, spring boot + maven maven fileter没有起作用。spring boot把默认占位符改了

    参考:https://blog.csdn.net/mn960mn/article/details/78834875

    创建一个maven项目,项目结构如下:

    其中,pom.xml的内容如下:

    1.  
      <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    2.  
      xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    3.  
      <modelVersion>4.0.0</modelVersion>
    4.  
       
    5.  
      <groupId>com.pp.test</groupId>
    6.  
      <artifactId>properties-test</artifactId>
    7.  
      <version>0.0.1-SNAPSHOT</version>
    8.  
      <packaging>jar</packaging>
    9.  
       
    10.  
      <name>properties-test</name>
    11.  
      <url>http://maven.apache.org</url>
    12.  
       
    13.  
      <parent>
    14.  
      <groupId>org.springframework.boot</groupId>
    15.  
      <artifactId>spring-boot-starter-parent</artifactId>
    16.  
      <version>1.5.9.RELEASE</version>
    17.  
      </parent>
    18.  
       
    19.  
      <properties>
    20.  
      <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    21.  
      <maven.compiler.source>1.8</maven.compiler.source>
    22.  
      <maven.compiler.target>1.8</maven.compiler.target>
    23.  
      <java.version>1.8</java.version>
    24.  
      </properties>
    25.  
       
    26.  
      <dependencies>
    27.  
      <dependency>
    28.  
      <groupId>org.springframework.boot</groupId>
    29.  
      <artifactId>spring-boot-starter-web</artifactId>
    30.  
      </dependency>
    31.  
      </dependencies>
    32.  
       
    33.  
      <build>
    34.  
      <filters>
    35.  
      <filter>src/main/profiles/profile-${profiles.active}.properties</filter>
    36.  
      </filters>
    37.  
      <resources>
    38.  
      <resource>
    39.  
      <filtering>true</filtering>
    40.  
      <directory>src/main/resources</directory>
    41.  
      </resource>
    42.  
      </resources>
    43.  
      </build>
    44.  
       
    45.  
       
    46.  
      <profiles>
    47.  
      <profile>
    48.  
      <id>dev</id>
    49.  
      <properties>
    50.  
      <profiles.active>dev</profiles.active>
    51.  
      </properties>
    52.  
      <activation>
    53.  
      <activeByDefault>true</activeByDefault>
    54.  
      </activation>
    55.  
      </profile>
    56.  
      <profile>
    57.  
      <id>test</id>
    58.  
      <properties>
    59.  
      <profiles.active>test</profiles.active>
    60.  
      </properties>
    61.  
      </profile>
    62.  
      <profile>
    63.  
      <id>prod</id>
    64.  
      <properties>
    65.  
      <profiles.active>prod</profiles.active>
    66.  
      </properties>
    67.  
      </profile>
    68.  
      </profiles>
    69.  
      </project>

    application.properties 文件内容:

    1.  
      jdbc.driverClassName=${jdbc.driverClassName}
    2.  
      jdbc.url=${jdbc.url}
    3.  
      jdbc.username=${jdbc.username}
    4.  
      jdbc.password=${jdbc.password}


    profile-dev.properties 文件内容:

    1.  
      jdbc.driverClassName=com.mysql.jdbc.Driver
    2.  
      jdbc.url=jdbc:mysql:///db_users
    3.  
      jdbc.username=root
    4.  
      jdbc.password=root


    启动应用,报错了,错误如下:

    1.  
      Caused by: java.lang.IllegalArgumentException: Circular placeholder reference 'jdbc.url' in property definitions
    2.  
      at org.springframework.util.PropertyPlaceholderHelper.parseStringValue(PropertyPlaceholderHelper.java:141) ~[spring-core-4.3.13.RELEASE.jar:4.3.13.RELEASE]
    3.  
      at org.springframework.util.PropertyPlaceholderHelper.parseStringValue(PropertyPlaceholderHelper.java:162) ~[spring-core-4.3.13.RELEASE.jar:4.3.13.RELEASE]
    4.  
      at org.springframework.util.PropertyPlaceholderHelper.replacePlaceholders(PropertyPlaceholderHelper.java:126) ~[spring-core-4.3.13.RELEASE.jar:4.3.13.RELEASE]
    5.  
      at org.springframework.core.env.AbstractPropertyResolver.doResolvePlaceholders(AbstractPropertyResolver.java:236) ~[spring-core-4.3.13.RELEASE.jar:4.3.13.RELEASE]
    6.  
      at org.springframework.core.env.AbstractPropertyResolver.resolveRequiredPlaceholders(AbstractPropertyResolver.java:210) ~[spring-core-4.3.13.RELEASE.jar:4.3.13.RELEASE]
    7.  
      at org.springframework.core.env.AbstractPropertyResolver.resolveNestedPlaceholders(AbstractPropertyResolver.java:227) ~[spring-core-4.3.13.RELEASE.jar:4.3.13.RELEASE]
    8.  
      at org.springframework.core.env.PropertySourcesPropertyResolver.getProperty(PropertySourcesPropertyResolver.java:84) ~[spring-core-4.3.13.RELEASE.jar:4.3.13.RELEASE]
    9.  
      at org.springframework.core.env.PropertySourcesPropertyResolver.getProperty(PropertySourcesPropertyResolver.java:61) ~[spring-core-4.3.13.RELEASE.jar:4.3.13.RELEASE]
    10.  
      at org.springframework.core.env.AbstractEnvironment.getProperty(AbstractEnvironment.java:527) ~[spring-core-4.3.13.RELEASE.jar:4.3.13.RELEASE]
    11.  
      at org.springframework.context.support.PropertySourcesPlaceholderConfigurer$1.getProperty(PropertySourcesPlaceholderConfigurer.java:132) ~[spring-context-4.3.13.RELEASE.jar:4.3.13.RELEASE]
    12.  
      at org.springframework.context.support.PropertySourcesPlaceholderConfigurer$1.getProperty(PropertySourcesPlaceholderConfigurer.java:129) ~[spring-context-4.3.13.RELEASE.jar:4.3.13.RELEASE]
    13.  
      at org.springframework.core.env.PropertySourcesPropertyResolver.getProperty(PropertySourcesPropertyResolver.java:81) ~[spring-core-4.3.13.RELEASE.jar:4.3.13.RELEASE]
    14.  
      at org.springframework.core.env.PropertySourcesPropertyResolver.getPropertyAsRawString(PropertySourcesPropertyResolver.java:71) ~[spring-core-4.3.13.RELEASE.jar:4.3.13.RELEASE]
    15.  
      at org.springframework.core.env.AbstractPropertyResolver$1.resolvePlaceholder(AbstractPropertyResolver.java:239) ~[spring-core-4.3.13.RELEASE.jar:4.3.13.RELEASE]
    16.  
      at org.springframework.util.PropertyPlaceholderHelper.parseStringValue(PropertyPlaceholderHelper.java:147) ~[spring-core-4.3.13.RELEASE.jar:4.3.13.RELEASE]
    17.  
      at org.springframework.util.PropertyPlaceholderHelper.replacePlaceholders(PropertyPlaceholderHelper.java:126) ~[spring-core-4.3.13.RELEASE.jar:4.3.13.RELEASE]
    18.  
      at org.springframework.core.env.AbstractPropertyResolver.doResolvePlaceholders(AbstractPropertyResolver.java:236) ~[spring-core-4.3.13.RELEASE.jar:4.3.13.RELEASE]
    19.  
      at org.springframework.core.env.AbstractPropertyResolver.resolveRequiredPlaceholders(AbstractPropertyResolver.java:210) ~[spring-core-4.3.13.RELEASE.jar:4.3.13.RELEASE]
    20.  
      at org.springframework.context.support.PropertySourcesPlaceholderConfigurer$2.resolveStringValue(PropertySourcesPlaceholderConfigurer.java:172) ~[spring-context-4.3.13.RELEASE.jar:4.3.13.RELEASE]
    21.  
      at org.springframework.beans.factory.support.AbstractBeanFactory.resolveEmbeddedValue(AbstractBeanFactory.java:831) ~[spring-beans-4.3.13.RELEASE.jar:4.3.13.RELEASE]
    22.  
      at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1086) ~[spring-beans-4.3.13.RELEASE.jar:4.3.13.RELEASE]
    23.  
      at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1066) ~[spring-beans-4.3.13.RELEASE.jar:4.3.13.RELEASE]
    24.  
      at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:585) ~[spring-beans-4.3.13.RELEASE.jar:4.3.13.RELEASE]
    25.  
      at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:88) ~[spring-beans-4.3.13.RELEASE.jar:4.3.13.RELEASE]
    26.  
      at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:366) ~[spring-beans-4.3.13.RELEASE.jar:4.3.13.RELEASE]
    27.  
      ... 17 common frames omitted



    报这个错误的原因是,maven的filtering没有起作用,没有把占位符给替换掉。(大家可以执行mvn clean package,看看打包后的jar里面的application.properties文件,是否有替换占位符)

    filtering无效的原因是,pom.xml继承了spring boot的依赖

    1.  
      <parent>
    2.  
      <groupId>org.springframework.boot</groupId>
    3.  
      <artifactId>spring-boot-starter-parent</artifactId>
    4.  
      <version>1.5.9.RELEASE</version>
    5.  
      </parent>


    点开这个依赖的pom.xml,我们发现

    spring boot把默认的占位符号${}改成了@

    找到原因了,那怎么解决就很简单了。

    方法一:

    在pom.xml里面添加如下内容

    1.  
      <properties>
    2.  
      <resource.delimiter>${}</resource.delimiter>
    3.  
      </properties>

    方法二:

    application.properties里面不用${},改成@

    1.  
      jdbc.driverClassName=@jdbc.driverClassName@
    2.  
      jdbc.url=@jdbc.url@
    3.  
      jdbc.username=@jdbc.username@
    4.  
      jdbc.password=@jdbc.password@


    方法三:

    pom.xml不继承spring-boot-starter-parent,dependency里面配置全部的依赖和版本号(继承了之后,很多依赖不用写version)

    方法四:

    1.  
      <parent>
    2.  
      <groupId>org.springframework.boot</groupId>
    3.  
      <artifactId>spring-boot-starter-parent</artifactId>
    4.  
      <version>1.5.9.RELEASE</version>
    5.  
      </parent>

    改成

    1.  
      <dependencyManagement>
    2.  
      <dependencies>
    3.  
      <dependency>
    4.  
      <groupId>org.springframework.boot</groupId>
    5.  
      <artifactId>spring-boot-starter-web</artifactId>
    6.  
      <version>1.5.9.RELEASE</version>
    7.  
      <type>pom</type>
    8.  
      <scope>import</scope>
    9.  
      </dependency>
    10.  
      </dependencies>
    11.  
      </dependencyManagement>
    12.  

  • 相关阅读:
    numpy 笔记
    xdoj 1402 XY之说走就走的旅行
    红黑树 (洛谷 P3369 【模板】普通平衡树 )
    AVL树 (PAT甲级 Is It a Complete AVL Tree )
    xdoj-1297 Tr0y And His Startup
    C# 获取当前路径7种方法
    JQuery常用方法一览
    Jquery 处理字符串
    js 获取参数
    js cookie
  • 原文地址:https://www.cnblogs.com/luckygxf/p/9528152.html
Copyright © 2011-2022 走看看