2017-06-19 127 views
0

我的問題似乎很簡單,但我找不到實現它的方法。Spring引導application.properties重用值

考慮以下情況:

prop1 = value1 
prop2 = value2 
prop3 = value3 

prop4 = value2  (Value same as prop2) 
prop5 = value3  (Value same as prop3) 

如何再利用價值2和3(實際上,這是數據庫特定屬性),我希望用戶只提供一次,並不再重複了。

謝謝。

案例1: 我會闡述我的情況如下: 我有兩個屬性文件 - application.propertiesquartz.properties

application.properties:

prop1 = value1 
prop2 = value2 
prop3 = value3 

quartz.properties

prop4 = value2  (Value same as prop2) 
prop5 = value3  (Value same as prop3) 

請注意:我不能合併這兩個屬性文件的內容,它們是有原因的分開放置。

在正常情況下,我期望$ {}能夠正常工作,但當我猜測這些屬性位於兩個不同的文件時,它不起作用。

案例2:[簡單場景] 我試過只使用一個application.properties。但即使如此,我無法在相同的屬性文件中重複使用屬性值。

我的pom.xml

<?xml version="1.0" encoding="UTF-8"?> 
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 

    <groupId>com.abc</groupId> 
    <artifactId>abc</artifactId> 
    <version>0.0.1-SNAPSHOT</version> 
    <packaging>jar</packaging> 

    <name>xyz</name> 
    <description>xyz</description> 

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

    <properties> 
     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
     <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> 
     <java.version>1.8</java.version> 
    </properties> 

    <dependencies> 
     <dependency> 
      <groupId>com.oracle</groupId> 
      <artifactId>ojdbc6</artifactId> 
      <version>11.2.0.4</version> 
     </dependency> 
     <dependency> 
      <groupId>org.apache.commons</groupId> 
      <artifactId>commons-dbcp2</artifactId> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-data-jpa</artifactId> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-jersey</artifactId> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-web</artifactId> 
     </dependency> 

     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-test</artifactId> 
      <scope>test</scope> 
     </dependency> 


     <!-- Quartz dependencies start --> 
     <dependency> 
      <groupId>org.quartz-scheduler</groupId> 
      <artifactId>quartz</artifactId> 
      <version>2.2.1</version> 
     </dependency> 

     <!-- Includes spring's support classes for quartz --> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-context-support</artifactId> 
     </dependency> 

     <!-- Quartz dependencies End --> 
    </dependencies> 
    <build> 
     <plugins> 
      <plugin> 
       <groupId>org.springframework.boot</groupId> 
       <artifactId>spring-boot-maven-plugin</artifactId> 
      </plugin> 
     </plugins> 
    </build> 


</project> 
+1

不確定是否理解正確。 'prop4 = $ {prop2}'也許 – john

+0

謝謝約翰。我也認爲這可行,但它不會:( –

+0

然後你可以在任何需要它的地方使用$ {prop2},爲什麼要使用這個prop4? – john

回答

1

您可以使用佔位符,它是這樣的:

prop1 = value1 
prop2 = value2 
prop3 = value3 

prop4 = ${prop2}  (Value same as prop2) 
prop5 = ${prop3}  (Value same as prop3) 

但請注意,這應該是在application.properties所以春天是意識到這一點。如果你想與性能這將是有意義的配置PropertyPlaceholderConfigurer,您的自定義文件,如下圖所示:

@Configuration 
public class PropertyPlaceholderConfigurerConfig { 

    @Bean 
    public static PropertyPlaceholderConfigurer ppc() throws IOException { 
     PropertyPlaceholderConfigurer ppc = new PropertyPlaceholderConfigurer(); 
     ppc.setLocations(new ClassPathResource("custom.properties")); 
     ppc.setIgnoreUnresolvablePlaceholders(true); 
     return ppc; 
    } 
} 

現在你應該是安倍:

@Value("${prop4}") 
private String someValue; 

它應該注入你正確的價值在你的豆。

+0

prop4 = $ {value2} ??或者你的意思是prop4 = $ {prop2}? –

+0

是的,我犯了一個錯誤 –

+0

我認爲這是因爲Spring不知道你的屬性文件。爲了讓它知道嘗試使用PropertyPlaceholderConfigurer,我剛剛添加到答案。 –

相關問題