Spring boot 1.X ve Spring Boot 2.X, aynı seçenekleri ve davranışları sağlamaz. Externalized Configuration .
M. Deinum'un çok iyi cevabı Spring Boot 1 özelliklerine atıfta bulunuyor.
Spring Boot 2'yi burada güncelleyeceğim.
Çevre özellikleri kaynakları ve sırası
Spring Boot 2 PropertySource, değerlerin makul şekilde geçersiz kılınmasına izin vermek için tasarlanmış çok özel bir sıra kullanır . Özellikler aşağıdaki sırayla değerlendirilir:
Ana dizininizdeki Devtools global ayarlar özellikleri (devtools etkinken ~ / .spring-boot-devtools.properties).
@TestPropertySource testlerinizle ilgili ek açıklamalar.
@SpringBootTest#propertiestestlerinizdeki açıklama özelliği. Komut satırı argümanları.
Özellikleri SPRING_APPLICATION_JSON(bir ortam değişkenine veya sistem özelliğine gömülü satır içi JSON).
ServletConfig init parametreleri.
ServletContext init parametreleri.
JNDI öznitelikleri java:comp/env.
Java Sistem özellikleri ( System.getProperties()).
İşletim sistemi ortam değişkenleri.
Bir RandomValuePropertySourcetek rastgele özellikleri vardır. *.
Paketlenmiş kavanozunuzun ( application-{profile}.propertiesve YAML varyantlarının) dışındaki profile özgü uygulama özellikleri .
application-{profile}.propertiesJar'ınızın ( ve YAML varyantlarının) içinde paketlenmiş profile özgü uygulama özellikleri .
Paketlenmiş kavanozunuzun ( application.propertiesve YAML varyantlarının) dışındaki uygulama özellikleri .
application.propertiesJar'ınızın ( ve YAML varyantlarının) içinde paketlenmiş uygulama özellikleri .
@PropertySource@Configurationsınıflarınızda ek açıklamalar . Varsayılan özellikler (ayar ile belirtilir
SpringApplication.setDefaultProperties).
Harici özellik dosyalarını belirtmek için bu seçenekler ilginizi çekmelidir:
Paketlenmiş kavanozunuzun ( application-{profile}.propertiesve YAML varyantlarının) dışındaki profile özgü uygulama özellikleri .
Paketlenmiş kavanozunuzun ( application.propertiesve YAML varyantlarının) dışındaki uygulama özellikleri .
@PropertySource@Configurationsınıflarınızda ek açıklamalar . Varsayılan özellikler (ayar ile belirtilir
SpringApplication.setDefaultProperties).
Bu 3 seçenekten sadece birini kullanabilir veya ihtiyacınıza göre kombinleyebilirsiniz.
Örneğin, çok basit durumlar için yalnızca profile özgü özellikleri kullanmak yeterlidir, ancak diğer durumlarda hem profile özgü özellikleri, hem varsayılan özellikleri hem de@PropertySource .
Application.properties dosyaları için varsayılan konumlar
Hakkında application.propertiesvarsayılan Bahar yükleri onları ve aşağıdaki sırayla bunlardan ortamda özelliklerini eklemek tarafından dosyalar (ve varyant),:
Daha yüksek öncelikler böylece anlamıyla şunlardır:
classpath:/,classpath:/config/,file:./,file:./config/.
Özellikler dosyaları belirli adlarla nasıl kullanılır?
Varsayılan konumlar her zaman yeterli değildir: varsayılan dosya adı ( application.properties) gibi varsayılan konumlar uygun olmayabilir. Ayrıca, OP sorusunda olduğu gibi, application.properties(ve varyant) dışında birden çok yapılandırma dosyası belirtmeniz gerekebilir .
Yanispring.config.name yeterli olmayacak.
Bu durumda, spring.config.locationortam özelliğini (dizin konumlarının veya dosya yollarının virgülle ayrılmış bir listesidir) kullanarak açık bir konum sağlamalısınız .
Dosya adları kalıbı konusunda özgür olmak için, dizinler listesi yerine dosya yolları listesini tercih edin.
Örneğin şunu beğen:
java -jar myproject.jar --spring.config.location=classpath:/default.properties,classpath:/override.properties
Bu yol, sadece klasörü belirtmenin en ayrıntılı yoludur, ancak aynı zamanda yapılandırma dosyalarımızı çok ince bir şekilde belirtmenin ve etkin bir şekilde kullanılan özellikleri açık bir şekilde belgelemenin yoludur.
spring.config.location artık eklemek yerine varsayılan konumları değiştiriyor
Spring Boot 1 ile spring.config.locationargüman, Spring ortamında belirtilen konumları ekler.
Ancak Spring Boot 2'den, spring.config.locationSpring tarafından kullanılan varsayılan konumları , belgelerde belirtildiği gibi Spring ortamındaki belirtilen konumlarla değiştirir .
Özel yapılandırma konumları kullanılarak yapılandırıldığında
spring.config.location, varsayılan konumların yerini alırlar. Örneğin, spring.config.locationdeğeri ile konfigüre edilir
classpath:/custom-config/, file:./custom-config/arama düzeni şu hale gelir:
file:./custom-config/
classpath:custom-config/
spring.config.locationartık herhangi bir application.propertiesdosyanın açıkça belirtilmesi gerektiğinden emin olmanın bir yoludur . Dosyaları
paketlemesi gerekmeyen uber JAR'lar için bu application.propertiesoldukça hoş.
spring.config.locationSpring Boot 2'yi kullanırken eski davranışını korumak için , belgelerde belirtildiği gibi konumları eklemek spring.config.additional-locationyerine yeni özelliği kullanabilirsiniz :spring.config.location
Alternatif olarak, özel yapılandırma konumları kullanılarak yapılandırıldığında
spring.config.additional-location, varsayılan konumlara ek olarak kullanılırlar.
Uygulamada
Öyleyse, OP sorusundaki gibi, belirtilecek 2 harici özellikler dosyanız ve uber jar'e 1 özellikler dosyası dahil edildiğini varsayalım.
Yalnızca belirttiğiniz yapılandırma dosyalarını kullanmak için:
-Dspring.config.location=classpath:/job1.properties,classpath:/job2.properties,classpath:/applications.properties
Varsayılan konumlarda bunlara yapılandırma dosyaları eklemek için:
-Dspring.config.additional-location=classpath:/job1.properties,classpath:/job2.properties
classpath:/applications.properties son örnekte gerekli değildir, çünkü varsayılan konumlar buna sahiptir ve bu varsayılan konumlar burada üzerine yazılmaz, ancak genişletilir.
application.propertieszaman yüklenir,spring.config.locationdosyalar için kontrol edilen (yani a ile bittiği zaman) ek yapılandırma konumları ekleyebilirsiniz,/ancak buraya yüklenecek dosyaları işaret eden virgülle ayrılmış bir liste koyarsanız. Bu aynı zamanda Bahar Boot Başvuru Kılavuzu'nda açıklanmıştır burada