2016-04-18 15 views
9

Ich versuche, Eigenschaften aus pom.xml in application.properties zu laden. Ich möchte zwei Profile erstellen: dev und prod, um verschiedene Datenbank-URLs zu verwenden. Ich verwende Jenkins als CI, in allen meinen Apps (hauptsächlich Spring MVC, ohne Boot-Projekt) verwenden Maven-Profile Tomcat. Gibt es eine Möglichkeit, dies mit Maven-Eigenschaften zu tun? Ich habe so etwas versucht: spring.datasource.url=${jdbc.url}Verwenden von Maven-Eigenschaften in application.properties im Spring-Start

Antwort

29

Bevor Sie es tun, sollten Sie Externalisierung der Eigenschaften aus Ihrem einsetzbaren Paket-Datei. Auf diese Weise können Sie dieselbe Kompilierung für jede Umgebung bereitstellen. Es wird Ihre Jenkins etwas Arbeit sparen, die eigentlich unnötig ist. Die beste Vorgehensweise besteht darin, Ihre Anwendung nur einmal zu erstellen, wenn Sie jedoch nicht überzeugt sind, hier ist, wie es geht.

  1. In Ihrem pom.xml definieren die Profile mit den entsprechenden Werten für die Eigenschaft.

    <profile> 
        <id>dev</id> 
        <properties> 
         <jdbc.url>your_dev_URL</jdbc.url> 
        </properties> 
    </profile> 
    
  2. -Setup die Maven Resources Plugin das Verzeichnis zu filtern, die Ihre application.properties-Datei enthält.

    <build> 
        <resources> 
         <resource> 
          <directory>src/main/resources</directory> 
          <filtering>true</filtering> 
         </resource> 
        </resources> 
        ... 
    </build> 
    
  3. Wenn Sie Frühlings-Boot verwenden 1.3 oder mehr beträgt, sollten Sie sich die Tatsache bewusst sein, dass Konflikte zwischen Frühjahr Boot-Platzhalter und Tokens durch das Maven Plugin Ressourcen gefiltert, um zu vermeiden, führte der Rahmen a solution that requires using a different syntax für gefilterten Werte.

    Jetzt sollten Sie statt ${property.key}@[email protected] verwenden. In diesem Fall Ihre application.properties müssen folgende Probe enthalten zu arbeiten, wie Sie erwarten:

    [email protected]@ 
    

Sie auch über separating Spring properties files for different Maven profiles einen Beitrag überprüfen können. Auf diese Weise werden Sie die Werte aus Ihrer pom.xml externalisieren.

+0

Dies tut nicht Arbeit ohne Verwendung des -Tags. –

+0

Maven-Profile sind standardmäßig nicht aktiviert. Sie müssen es selbst aktivieren. Sie können das Profil mit dem Flag "-P" auslösen, wenn Sie den Build aufrufen. Sie sind nicht gezwungen, 'activeByDefault' zu verwenden. –

1

Natürlich gibt es. Verwenden Sie einfach Maven Filtering über Ihre application.properties Datei und Maven wird Ihre profilspezifischen Werte in die Datei schreiben.

Sie müssen jedoch verstehen, dass während Maven-Profile auf Anwendungspaket/Build-Zeit arbeiten, Spring Boot diejenigen zur Laufzeit tun. Mit anderen Worten, mit Maven-Profilen erhalten Sie profilspezifische, unveränderliche Builds, während Sie, wenn Sie die von Spring Boot verwenden, Ihre Anwendungskonfiguration jedes Mal ändern können, bevor Sie sie starten, oder even while it's running.

Siehe auch:

+0

Sie können meine Antwort hier sehen: http://stackoverflow.com/questions/36635163/spring-boot-externalizing-properties-not-working/36635367#36635367 für ein Beispiel zum Exportieren von Eigenschaften –