У меня есть приложение для загрузки весны, которое я хочу запустить с внешним конфигурационным файлом. Когда я запускаю его как банку (со встроенным контейнером сервлетов), все в порядке. Но я хочу запустить его под внешним контейнером сервлетов (Tomcat), и здесь у меня проблема с внешней конфигурацией. Я попробовал @PropertySource, но в этом случае приложение получает только свойства, отсутствующие в конфигурации военного файла: внешняя конфигурация не переопределяет внутреннюю конфигурацию. Итак, вопрос: как настроить внешнюю конфигурацию, которая переопределит внутреннюю конфигурацию?Внешняя конфигурация для приложения весенней загрузки
ответ
Возможно, вы используете внешнюю конфигурацию в форме application.properties
в текущем каталоге, когда вы используете приложение в качестве банки. Однако «текущий каталог» не очень полезен при развертывании в качестве войны во внешнем коте. Даже если вы узнаете, что такое текущий каталог, это, скорее всего, одно и то же место для всех приложений, работающих в этом tomcat, поэтому, когда вы запускаете более одного приложения, это не будет работать очень хорошо.
Что мы делаем здесь, это объявить два PropertySources
на нашем приложении:
@PropertySources({@PropertySource(value={"classpath:internal.properties"}), @PropertySource(value={"file:${application.properties}"})})
internal.properties
содержит «встроенный» значения по умолчанию для СВОЙСТВ. Второй PropertySource
- это файл, содержащий внешнюю конфигурацию. Обратите внимание, как имя файла само по себе является свойством.
Определит это наружно в Context
элементе нашего приложения (в коте):
<Context docBase="/path/to/your/war/your.war">
<Parameter name="application.properties" value="/path/to/your/properties/application.properties"/>
</Context>
Это позволяет иметь несколько приложений, работающие в коте, каждое приложение, используя его файл собственных внешних свойств. Вы можете даже иметь несколько экземпляров того же приложения, работающего с различными свойствами.
Для экстернализации загрузочной application.properties пружины при развертывании в качестве военного файла вы можете установить spring.config.location
в начале, когда приложение Spring загрузки настраиваются:
public class Application extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder springApplicationBuilder) {
return springApplicationBuilder
.sources(Application.class)
.properties(getProperties());
}
public static void main(String[] args) {
SpringApplicationBuilder springApplicationBuilder = new SpringApplicationBuilder(Application.class)
.sources(Application.class)
.properties(getProperties())
.run(args);
}
static Properties getProperties() {
Properties props = new Properties();
props.put("spring.config.location", "classpath:myapp1/");
return props;
}
Для получения более подробной информации проверить это solution.
Хотя эта ссылка может ответить на вопрос, лучше включить здесь основные части ответа и предоставить ссылка для справки. Ответные ссылки могут стать недействительными, если связанная страница изменится. – Necreaux
Ok @Necreaux основные части были добавлены –
@Necreaux Я не понимаю downvote после добавления основных частей? Что-то еще не хватает? –
Spring Boot предлагает many ways для указания местоположения вашей недвижимости, не требуется изменять источники.
Yo можно определить значение spring.config.location, например:
В ваших
tomcat/conf/Catalina/<host>
контекстных дескрипторами:<Context> <Parameter name="spring.config.location" value="/path/to/application.properties" /> </Context>
В качестве параметра виртуальной машины Java в файле
setenv.sh
кот:-Dspring.config.location=/path/to/application.properties
В качестве переменной окружения
SPRING_CONFIG_LOCATION
.
- 1. Конфигурация весенней загрузки Keycloak
- 2. Внешняя конфигурация пружинной загрузки в автономном причале
- 3. Внешняя конфигурация приложения в Elixir
- 4. Android App Внешняя конфигурация
- 5. Внешняя конфигурация Cmake Конфигурация зависимостей
- 6. Предварительная внешняя конфигурация для библиотеки
- 7. Grails Внешняя конфигурация Конфигурация System.getenv
- 8. Внешняя конфигурация Spring Security?
- 9. Тест весенней загрузки с приложением весенней загрузки
- 10. application.json конфигурация приложения Spring загрузки
- 11. Hibernate - внешняя конфигурация столбца
- 12. Вложение приложения весенней загрузки Vaadin в HTML
- 13. Grails внешняя конфигурация
- 14. Внешняя конфигурация положения
- 15. Внешняя конфигурация сопоставлений JPA
- 16. Весенний ботинок - Внешняя конфигурация JNDI
- 17. Самоподписанные сертификаты весенней загрузки
- 18. Новая реликвия для весенней загрузки
- 19. Конфигурирование h2 для весенней загрузки
- 20. Модульное тестирование весенней загрузки
- 21. Стратегия развертывания весенней загрузки
- 22. Установка весенней загрузки Gradle
- 23. Порядок загрузки весенней конфигурации
- 24. Создать автоматическую конфигурацию библиотеки весны для приложения весенней загрузки
- 25. Вложенная директория каталога Tomcat для приложения весенней загрузки
- 26. Альтернативы распространения приложения весенней загрузки с использованием maven (кроме весенней загрузки: переупаковка)
- 27. Веб-приложение для весенней загрузки пакета .jar
- 28. Внешняя конфигурация для Android Интеграция/функциональные тесты
- 29. Внешняя конфигурация для платформы Play 2
- 30. показатели весенней загрузки, весенней безопасности и dropwizard
Спасибо за ваш ответ. Да, эта конфигурация будет работать, и, как я уже упоминал в своем вопросе, я пробовал это решение. недостатком этого решения является то, что внешняя конфигурация не переопределяет внутреннюю конфигурацию. Вопрос в том, как установить приоритет внешней конфигурации? –
Это должно сработать, это для меня. Обратите внимание, что я не использую имя по умолчанию application.properties, которое будет иметь другой приоритет. Вы уверены, что попробовали именно то, что в моем ответе? –
Да, это работает! :) Я изменил внутреннее имя конфигурации на internal.properties и работает отлично. Есть ли способ перезагрузить внешнюю конфигурацию во время выполнения? –