2016-04-18 27 views
9

Próbuję wczytać właściwości z pom.xml do application.properties. Chcę utworzyć dwa profile: dev i prod, aby używać różnych adresów URL baz danych. Używam Jenkinsa jako CI, we wszystkich moich aplikacjach (Spring MVC głównie, bez projektu Boot) używa profili maven do wdrożenia na Tomcat. Czy można to zrobić za pomocą właściwości maven? Próbowałem coś takiego: spring.datasource.url=${jdbc.url}Używanie właściwości Maven w application.properties w Spring Boot

Odpowiedz

29

Zanim to zrobić, należy rozważyć uzewnętrzniania plik z pakietu uruchamianą właściwości. W ten sposób możesz wdrożyć tę samą kompilację w każdym środowisku. To uratuje twoją Jenkins pracę, która jest w rzeczywistości niepotrzebna. Najlepszą praktyką jest budowanie aplikacji tylko raz, jednak jeśli nie jesteś przekonany, oto jak to zrobić.

  1. W swojej pom.xml zdefiniowanie profili z odpowiednimi wartościami dla nieruchomości.

    <profile> 
        <id>dev</id> 
        <properties> 
         <jdbc.url>your_dev_URL</jdbc.url> 
        </properties> 
    </profile> 
    
  2. Konfiguracja Maven Resources Plugin filtrować katalog, który zawiera swoją application.properties pliku.

    <build> 
        <resources> 
         <resource> 
          <directory>src/main/resources</directory> 
          <filtering>true</filtering> 
         </resource> 
        </resources> 
        ... 
    </build> 
    
  3. Jeśli używasz Wiosna Boot 1.3 lub więcej, należy zdawać sobie sprawę z faktu, że w celu uniknięcia konfliktów między zastępcze Wiosna Boot i żetonów przefiltrowanych przez wtyczkę Maven Resources, ramy wprowadzone a solution that requires using a different syntax dla filtrowanych wartości.

    Teraz zamiast tego ${property.key} powinieneś użyć @[email protected]. W tym przypadku, twoje application.properties musi zawierać następujące próbki do pracy zgodnie z oczekiwaniami:

    [email protected]@ 
    

Można również sprawdzić wiadomość o separating Spring properties files for different Maven profiles. W ten sposób będziesz uzewnętrzniać wartości z twojego pom.xml.

+0

To nie pracować bez użycia znacznika . –

+0

Profile Maven nie są domyślnie włączone. Musisz go aktywować samodzielnie. Możesz wywołać profil z flagą '-P' podczas wywoływania kompilacji. Nie jesteś zmuszony do używania 'activeByDefault'. –

1

Oczywiście, że istnieje. Po prostu użyj Maven Filtering na swoim pliku application.properties, a Maven zapisze w pliku określone wartości twojego profilu.

Należy jednak zrozumieć, że podczas gdy profile Maven działają w pakiecie aplikacji/czasie kompilacji, Spring Boot robią to w czasie wykonywania. Innymi słowy, w profilach Mavena otrzymasz niezmienne kompilacje profilów, a podczas korzystania z tych z Spring Boot będziesz mógł zmienić konfigurację aplikacji za każdym razem przed jej uruchomieniem lub even while it's running.

Zobacz także:

+0

Możesz zobaczyć moją odpowiedź tutaj: http://stackoverflow.com/questions/36635163/spring-boot-externalizing-properties-not-working/36635367#36635367 dla przykładu na temat eksternalizacji właściwości –