2017-06-19 1 views
0

Ma question semble assez simple mais je n'ai pas trouvé de moyen de l'implémenter.Spring boot application.properties réutiliser les valeurs

Prenons le cas suivant:

prop1 = value1 
prop2 = value2 
prop3 = value3 

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

Comment réutiliser la valeur 2 et 3 (ce sont en fait des propriétés spécifiques de la base de données) que je veux que l'utilisateur de lui fournir une seule fois et non répéter.

Merci.

Cas 1: J'élaborerait mon cas comme ci-dessous: je dépose deux propriétés - application.properties et quartz.properties.

application.properties:

prop1 = value1 
prop2 = value2 
prop3 = value3 

quartz.properties

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

S'il vous plaît noter: Je ne peux pas fusionner le contenu des deux fichiers de propriétés et ils sont mis séparément pour une raison.

Dans un scénario normal, je m'attendais à ce que $ {} fonctionne, mais cela ne fonctionne pas lorsque les propriétés sont dans deux fichiers différents, je suppose.

Cas 2: [Scénario simple] J'ai essayé d'utiliser une seule application.properties. Mais même alors, je ne suis pas en mesure de réutiliser les valeurs de propriété dans le même fichier de propriétés.

Mon 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

Je ne sais pas si vous avez bien compris. 'prop4 = $ {prop2}' peut-être – john

+0

Merci John. Je pensais aussi que cela fonctionnerait mais ce n'est pas le cas :( –

+0

Ensuite, vous pourriez juste utiliser $ {prop2} partout où vous en avez besoin, pourquoi avoir ce prop4 du tout? – john

Répondre

1

Vous pouvez utiliser l'espace réservé pour elle comme ceci:

prop1 = value1 
prop2 = value2 
prop3 = value3 

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

Mais attention, que cela devrait être dans le application.properties si le printemps est au courant. Si vous voulez que votre fichier personnalisé avec des propriétés, il serait logique de config PropertyPlaceholderConfigurer, comme indiqué ci-dessous:

@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; 
    } 
} 

Maintenant, vous devriez être abe à:

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

Et si vous injecter la bonne valeur dans ton haricot.

+0

prop4 = $ {value2} ?? ou vouliez-vous dire prop4 = $ {prop2}? –

+0

ouais, j'ai fait une erreur –

+0

Je suppose que c'est parce que Spring n'est pas au courant de votre fichier de propriétés. Pour le rendre conscient essayez d'utiliser PropertyPlaceholderConfigurer comme je viens d'ajouter à la réponse. –