maven项目引入spring boot依赖之后filter不生效的问题

from : http://blog.csdn.net/mn960mn/article/details/78834875

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


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

[html]  view plain  copy
  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 文件内容:

[plain]  view plain  copy
  1. jdbc.driverClassName=${jdbc.driverClassName}  
  2. jdbc.url=${jdbc.url}  
  3. jdbc.username=${jdbc.username}  
  4. jdbc.password=${jdbc.password}  

profile-dev.properties 文件内容:

[plain]  view plain  copy
  1. jdbc.driverClassName=com.mysql.jdbc.Driver  
  2. jdbc.url=jdbc:mysql:///db_users  
  3. jdbc.username=root  
  4. jdbc.password=root  

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

[java]  view plain  copy
  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的依赖

[html]  view plain  copy
  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里面添加如下内容

[html]  view plain  copy
  1. <properties>  
  2.     <resource.delimiter>${}</resource.delimiter>  
  3. </properties>  


方法二:

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

[plain]  view plain  copy
  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)


方法四:

[html]  view plain  copy
  1. <parent>  
  2.     <groupId>org.springframework.boot</groupId>  
  3.     <artifactId>spring-boot-starter-parent</artifactId>  
  4.     <version>1.5.9.RELEASE</version>  
  5. </parent>  
改成

[html]  view plain  copy
  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>  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值