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);
}
}