java - شرح - موقع spring




كيفية تجاوز application.properties أثناء الإنتاج في Spring-Boot؟ (3)

أنا باستخدام التمهيد الربيع و application.properties لتحديد قاعدة البيانات أثناء التطوير @Configuration @Profile("dev") .

spring.profiles.active=dev
spring.config.location=file:d:/application.properties

أثناء الإنتاج ، أريد إنشاء ملف خارج سياق التطبيق الذي يجب تحميله ثم تنشيط ملف تعريف تهيئة مختلف ، مع d: /application.properties:

spring.profiles.active=production

النتيجة: عندما أبدأ التطبيق ، لا يزال التكوين هو dev ، لذا لا يتم أخذ الموقع الإضافي لملف خصائص الإنتاج في الحسبان بطريقة ما. هل أفتقد أي شيء؟

spring boot 1.1.0.BUILD-SNAPSHOT

ملاحظة: هذا السؤال ليس عن tomcat .


أعلم أنك سألت كيفية القيام بذلك.

لكن الجواب هو ، لا يجب عليك القيام بذلك.

يمكن أن يكون لديك application.properties application-default.properties application-dev.properties etc

يمكنك تبديل ملفات التعريف من خلال سطر الأوامر args إلى jvm

يمكنك تجاوز بعض الأشياء في وقت الاختبار باستخدامTestPropertySource

من الناحية المثالية ، يجب أن يكون كل شيء في التحكم بالمصدر حتى لا تكون هناك مفاجآت - كيف تعرف ما هي الخصائص التي توجد في موقع الخادم الخاص بك ، وما هي تلك المفقودة. ماذا يحدث إذا قدم المطورون أشياء جديدة.

https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html

التمهيد الربيع يعطيك بالفعل وسائل كافية للقيام بذلك بشكل صحيح.


استكمال: هذا هو خلل في الربيع انظر here

يجب أن تكون خصائص التطبيق خارج جرة الخاص بك في أحد الأماكن التالية ، ثم يجب أن يعمل كل شيء.

21.2 Application property files
SpringApplication will load properties from application.properties files in the following    locations and add them to the Spring Environment:

A /config subdir of the current directory.
The current directory
A classpath /config package
The classpath root

لذلك على سبيل المثال يجب أن يعمل هذا ، عندما لا تريد تحديد args سطر cmd ولا تستخدم spring.config.location في التطبيق الأساسي الخاص بك.

d:\yourExecutable.jar
d:\application.properties

or

d:\yourExecutable.jar
d:\config\application.properties

انظر الربيع التكوين الخارجي وثيقة

تحديث: يمكنك استخدام \Configuration مع \PropertySource. وفقًا للمستند here يمكنك تحديد الموارد في أي مكان. يجب عليك توخي الحذر ، عندما يتم تحميل التهيئة للتأكد من فوز إنتاجك.


يمكنك أيضًا استخدام @PropertySources

@PropertySources({
        @PropertySource(value = "classpath:application.properties"),
        @PropertySource(value = "file:/user/home/external.properties", ignoreResourceNotFound = true)
})
public class Application {
    public static void main(String[] args) throws Exception {
        ConfigurableApplicationContext context = SpringApplication.run(Application.class, args);

    }


}






spring-boot