Spring Boot uygulamasındaki Ortama Özgü application.properties dosyası [kapalı]


87

Spring Boot uygulamamda, ortama özgü özellikler dosyası oluşturmak istiyorum. Uygulamamın paketlenme türü savaşta ve onu gömülü tomcat içinde yürütüyorum. Ben sts kullanıyorum ve main'i sts'den çalıştırıyorum.

  1. Application - $ {env-value} .properties gibi ortama özgü özellikler dosyasına sahip olabilir miyim?

Yukarıdaki durumda, env-değeri yerel / devl / test / prod gibi değerlere sahip olacaktır.

  1. Env-değer dosyası nerede ayarlanır? Yerel için, sts aracılığıyla jvm argümanı olarak ayarlayabilirim

  2. Spring Boot uygulamasındaki application.properties dosyasını kim okur.

  3. Ortama özgü özellikler dosyası nasıl yüklenir? Örneğin, ortama özel özellik dosyasında veritabanı kullanıcı kimliği, pwd, şema vb. Ayarlarsam, bu durumda veri kaynağı içindeki özellikleri anlayabilir mi?

  4. Application.properties ve application-local.properties dosyasını aynı anda kullanabilir miyim?


Okuduğunuz bu ? Temelde kutudan çıkar çıkmaz desteklenir.
M.Deinum

Yaptım ama bu çalışmıyor. Aynı konumda application.properties dosyası ve application-local.properties dosyası var. application-local.properties dosyası, db ile ilgili özellikleri içerir. application.properties, spring mvc ile ilgili olarak tek bir özelliğe sahiptir. Ayrıca hata ayıklama yapılandırması olarak -Dprofile = local ekledim ancak bu değer
alınmıyor

çünkü bunu spring.active.profileskullanmak için ayarlamanız gerekiyor -Dspring.active.profiles=local. yerine.
M.Deinum

Başarı Yok efendim. bu yüzden -Dprofile yerine, şimdi -Dspring.active.profiles = local kullanıyorum. Ve sonra yapılandırma dosyamda String driverClassName = env.getProperty ("driverClassName") değerini getirmeye çalışıyorum; env ilkbahardan itibaren
ortamdır

1
Üzgünüm benim hatam, karıştırdı :).
M.Deinum

Yanıtlar:


173

Bahar Boot zaten desteği vardır için profilin tabanlı özellikler sahiptir.

Sadece bir application-[profile].propertiesdosya ekleyin ve spring.profiles.activeözelliği kullanarak kullanılacak profilleri belirtin .

-Dspring.profiles.active=local

Bu, ilkinden ikinci geçersiz kılma özellikleri ile application.propertiesve öğesini yükleyecektir application-local.properties.


1
Her ikisini birden yüklemeden belirli bir profil için uygulama özelliklerinin başka bir dosya ile kullanımını geçersiz kılabilir miyiz? Örneğin testler veya geliştirme için?
Hassam Abdelillah

1
M. Deinum, benim de benzer bir sorunum var, application.yml ve application-qa.yml var ve -Dspring.profiles.active = qa verdim, her iki dosya da okunuyor ancak application-qa.yml'deki özellikler uygulama.yml'deki özellikler, her zaman yalnızca application.yml'deki özellikleri görüyorum? önceliği belirlemenin herhangi bir yolu var mı?
Suresh


Aws lambda için kod yazıyorum ve bu anahtarı = değeri ortam değeri olarak geçirebilirim - bu, System.getenv () kullanılarak erişilebilir - çalışacak mı?
Abdeali Chandanwala

4 uygulama- {profil} .properties dosyam var. Ve aynı jar dosyasını farklı bir ortamda çalıştırmak istiyorum, dev, test, prod diyelim. Bu yüzden -Dspring.profiles.active = local kullanamıyorum. Eksik bir şey varsa lütfen düzeltin.
Ashish Burnwal

25

Evet yapabilirsin. Yay kullandığınız için, @PropertySourcenota bakın.

Yapılandırmanızı şununla not edin:

@PropertySource("application-${spring.profiles.active}.properties")

İstediğiniz gibi adlandırabilir ve isterseniz birden fazla mülk dosyası ekleyebilirsiniz. Tüm ortamlara ait daha fazla kümeniz ve / veya varsayılanınız varsa güzel olabilir (@PropertySource {..., ..., ...} ile de yazılabilir).

@PropertySources({
  @PropertySource("application-${spring.profiles.active}.properties"),
  @PropertySource("my-special-${spring.profiles.active}.properties"),
  @PropertySource("overridden.properties")})

Ardından çevre ile uygulamaya başlayabilirsiniz.

-Dspring.active.profiles=test

Bu örnekte, ad, uygulama testi özellikleri ile değiştirilecektir.


3
Sorun, $spring.profiles.active}dizi / virgülle ayrılmış bir dizedir. Bu nedenle, aktif birden fazla profil varken beklediğiniz / yapmasını istediğiniz şeyi yapmayabilir.
M.Deinum

Bu doğrudur, ancak biri varsayılan diğeri PropertySource ile tanımlanan iki profil için sorunsuz çalışır. Daha gelişmiş mülk yönetimi için, Spring'in dışına bakmanız gerektiğini düşünüyorum. Ayrıca PropertySource yalnızca başlatma sırasında okunur. Özellik işleme için diğer, daha gelişmiş kitaplıklar da çalışma zamanı özelliklerini değiştirebilir.
Tzen

2
Bu işe yaradı, ancak bunu neden manuel olarak yapmak zorunda olduğumu hala anlamıyorum. Diğer depomlardan birinde bunu yapmak zorunda değildim.
The Java Guy

7

bunu yapabiliriz:

içinde application.yml :

spring:
  profiles:
    active: test //modify here to switch between environments
    include:  application-${spring.profiles.active}.yml

olarak uygulama test.yml :

server:
  port: 5000

ve application-local.yml içinde :

server:
  address: 0.0.0.0
  port: 8080

daha sonra Spring boot uygulamamızı istediğimiz gibi başlatacak.


2
Aktif profili bu şekilde kodlamıyor musunuz? :(
Anna Medyukh

0

My Point, bu şekilde geliştiriciden tek seferde ilgili tüm ortamı oluşturmasını istemiyor ve bu da Üretim Yapılandırmasını son geliştiriciye ifşa etme riskiyle sonuçlanıyor

12-Faktörüne göre, çevreye özgü olmamalıdır, yalnızca Çevre içinde ikamet edilmelidir.

CI CD için nasıl yaparız

  • Spring'i bir kez oluşturun ve başka bir ortama yükseltin, bu durumda, eğer yaylı kavanoz tüm çevreye sahipse, tüm çevre değişkenlerinin GIT'de olması güvenlik riskini taşır.
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.