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#properties
testlerinizdeki 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 RandomValuePropertySource
tek rastgele özellikleri vardır. *.
Paketlenmiş kavanozunuzun ( application-{profile}.properties
ve YAML varyantlarının) dışındaki profile özgü uygulama özellikleri .
application-{profile}.properties
Jar'ınızın ( ve YAML varyantlarının) içinde paketlenmiş profile özgü uygulama özellikleri .
Paketlenmiş kavanozunuzun ( application.properties
ve YAML varyantlarının) dışındaki uygulama özellikleri .
application.properties
Jar'ınızın ( ve YAML varyantlarının) içinde paketlenmiş uygulama özellikleri .
@PropertySource
@Configuration
sı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}.properties
ve YAML varyantlarının) dışındaki profile özgü uygulama özellikleri .
Paketlenmiş kavanozunuzun ( application.properties
ve YAML varyantlarının) dışındaki uygulama özellikleri .
@PropertySource
@Configuration
sı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.properties
varsayı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.location
ortam ö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.location
argüman, Spring ortamında belirtilen konumları ekler.
Ancak Spring Boot 2'den, spring.config.location
Spring 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.location
değ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.location
artık herhangi bir application.properties
dosyanın açıkça belirtilmesi gerektiğinden emin olmanın bir yoludur . Dosyaları
paketlemesi gerekmeyen uber JAR'lar için bu application.properties
oldukça hoş.
spring.config.location
Spring Boot 2'yi kullanırken eski davranışını korumak için , belgelerde belirtildiği gibi konumları eklemek spring.config.additional-location
yerine 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.properties
zaman yüklenir,spring.config.location
dosyalar 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