Spring @PropertySources qiymati noto'g'ri

Men Spring Boot dasturini Tomcatdagi WAR fayli sifatida tarqatyapman. Application.local.properties faylini my application.properties faylida mavjud bo'lgan qiymatlarni bekor qilish uchun kutib qolaman. Biroq application-local.properties qiymatlaridan faqatgina ushbu kalitlar application.properties-da mavjud bo'lmasa o'qiladi. My application.properties faylim loyihaning src/main/resources/qismida joylashgan va application-local.properties $ {catalina.home}/property_files/com/demo/config papkasida joylashgan.

context.xml


catalina.properties

shared.loader=${catalina.home}/property_files

AppConfig.java

@Configuration
@PropertySources({
    @PropertySource("classpath:application.properties"),
    @PropertySource("classpath:com/demo/config/application-${spring.profiles.active}.properties")
})
public class AppConfig extends WebMvcConfigurerAdapter {
}

E'tiroz 1: Aslida mening atrof-muhitga qaram bo'lgan mulk fayli yuklanmoqda. Lekin ichki mulk faylidan biron bir qiymatni bekor qilmaydi.

EDIT 2: Barcha takliflaringiz uchun tashakkur. Lekin muammoim katalogning ustunligidan kelib chiqqanini angladim. Ildiz klaspathidagi ushbu xususiyat fayllarini e'lon qilingan tartibdan qat'i nazar, har qanday xususiyat fayllaridan ko'ra ustunlikka egadir.

4
Asosan, men faqat src/main/resources/application.properties funktsiyalarini boshqa muhitda (dev integratsiya, QA, uat, ishlab chiqarish) boshqa xususiyat fayli tomonidan bekor qilinishi mumkin bo'lgan mahalliy ishlab chiqarish uchun ishlatmoqchiman.
qo'shib qo'ydi muallif Nikki Nicholas Romero, manba

6 javoblar

Ko'p xususiyatni ishlatish o'rnigaSource annotatsiyasi ishga tushirilganda sozlashni sinab ko'ring   dastur

java -jar myproject.jar --spring.config.location = {your_location} /application.properties.classpath:/override.properties.

Buyruqning bir qismi sifatida nima ta'min qilsangiz, eng yuqori bo'ladi   ustunligi    Yoki shunga o'xshash narsa va testni amalga oshiring

@Configuration
@PropertySource("classpath:application.properties")
public class DefaultConfiguration {}
@Configuration
@PropertySource("classpath:{environment_specific_property_name}.properties")
public class EnvironmentSpecific{

    @Configuration
    @Import(DefaultConfiguration .class)
    static class Configuration {}

}
3
qo'shib qo'ydi
Aslida, atrof-muhitga qaram bo'lgan mulk fayli yuklanmoqda. Lekin ichki mulk faylidan biron bir qiymatni bekor qilmaydi.
qo'shib qo'ydi muallif Nikki Nicholas Romero, manba
Ehtimol, sizning yechimingiz ishlaydi. Lekin muammoim katalogning ustunligidan kelib chiqqanini angladim. Ildiz klaspathidagi ushbu xususiyat fayllarini e'lon qilingan tartibdan qat'i nazar, har qanday xususiyat fayllaridan ko'ra ustunlikka egadir.
qo'shib qo'ydi muallif Nikki Nicholas Romero, manba
Yaxshi amaliyot - barcha mulk faylini classpath-dan olib tashlash va uni {specific_config_location} manzilida saqlash va serverni ishga tushirish vaqtida bahorni bahorda taqdim etish
qo'shib qo'ydi muallif Karthik Bharadwaj, manba
Javobni tahrir qildim. Iltimos, buni tekshirib ko'ring. :)
qo'shib qo'ydi muallif Karthik Bharadwaj, manba
Yaxshi kuzatuv, lekin siz loyihaning xatti-harakatlariga ta'sir qiladigan bunday cheklovlarga ega bo'lmasligingiz kerak. Loyihaning boshlang'ich bosqichida bu anomaliyalarni olib tashlashga harakat qiling.
qo'shib qo'ydi muallif Karthik Bharadwaj, manba

foydalanishingiz mumkin:

@Configuration
@PropertySources({
    @PropertySource("classpath:application.properties"),
    @PropertySource("file:${catalina.base}/property_files/com/demo/config/application-${spring.profiles.active}.properties")
})
public class AppConfig extends WebMvcConfigurerAdapter {
}

Agar fayl haqiqatda ko'rsatilgan joyda joylashgan bo'lsa va kerakli qiymatlarni qabul qilsa, bu ishlashi kerak.

0
qo'shib qo'ydi
Aslida, atrof-muhitga qaram bo'lgan mulk fayli yuklanmoqda. Lekin ichki mulk faylidan biron bir qiymatni bekor qilmaydi.
qo'shib qo'ydi muallif Nikki Nicholas Romero, manba

Bo'lishi kerak :

@Configuration
@PropertySources({
    @PropertySource("classpath:application.properties"),
    @PropertySource("file:${catalina.home}/property_files/com/demo/config/application-${spring.profiles.active}.properties")
})
public class AppConfig extends WebMvcConfigurerAdapter {
}

Sinovsiz

0
qo'shib qo'ydi
Ishlamadi. My catalina.properties faylida shared.loader = $ {catalina.home}/property_files e'lon qilganda profilga qaram bo'lgan mulk fayli allaqachon classpathga qo'shilganligiga ishonaman. Application.properties faylida har qanday qarama-qarshi yozuvni o'chirganimda aslida hech qanday muammo yuzaga kelmaydi. Men faqat shu kalitlarni bekor qilishni kutardim
qo'shib qo'ydi muallif Nikki Nicholas Romero, manba

Application.properties o'rniga, asl qiymati konfiguratsiyani/xususiyatlarini boshqa faylga joylashtiring. Application.properties dasturida belgilangan xususiyat qiymatlari eng yuqori ustunlikka ega.

Shunday qilib, shunday bir narsa ishlaydi:

@Configuration
@PropertySource("classpath:application-env.properties")
@PropertySource(value="file:${application.home}/application-env.properties",ignoreResourceNotFound=true)
public class GlobalSettings {
  //configuration values
}

Bahor 4.x va Java 8da testlangan

0
qo'shib qo'ydi

Ushbu konfiguratsiyani sinf kodi application.properties dan tashqi application.properties fayl bilan xususiyatlarini bekor qilish uchun foydalanishingiz mumkin, agar bunday fayl mavjud bo'lmasa, keyinroq e'tibor bermasangiz order parametrini eslang, agar bir nechta fayl bo'lsa, ustuvor tartibni belgilashingiz mumkin.

<!--load from external file first-->

<!--load any properties not found in file from class path-->

0
qo'shib qo'ydi

Barcha takliflaringiz uchun tashakkur. Lekin muammoim katalogning ustunligidan kelib chiqqanini angladim. Ildiz klaspathidagi ushbu xususiyat fayllarini e'lon qilingan tartibdan qat'i nazar, har qanday xususiyat fayllaridan ko'ra ustunlikka egadir.

0
qo'shib qo'ydi