Расположение файла конфигурации Spring Boot из Tomcat - PullRequest
0 голосов
/ 19 марта 2019

Я пытаюсь настроить внутреннее приложение, чтобы оно получало разные файлы конфигурации в зависимости от env.

В dev env я хотел бы загрузить файл application.yml по умолчанию из classpath.Это должно быть в случае, когда я запускаю приложение через: mvn spring-boot:run или java -jar ./target/myapp.war

Но когда это приложение работает на Tomcat, оно должно загрузить application.yml из файла, специфичного для сервера, например /etc/apps/myapp/application.yml (не по умолчанию один из classpath), потому что сервер имеет разные учетные данные mongodb и т. д. *

Я не хочу использовать profiles, потому что это означает, что мне нужно поместить учетные данные сервера в проект на github в application.yml.Я просто хочу, чтобы это было известно администратору сервера, а разработчик ничего об этом не знает.

Можно ли как-то сказать этому приложению внутри tomcat загрузить другой файл конфигурации.

В этом Tomcat у меня есть другие приложения, которые используют пружинную загрузку, поэтому мне нужно какое-то независимое решение.Глобальная установка spring.config.location не так, потому что все приложения будут загружать этот файл.

Ответы [ 2 ]

0 голосов
/ 19 марта 2019

Вы можете использовать @PropertyResource аннотацию с контекстом xml.
ПРИМЕЧАНИЕ: ignoreResourceNotFound поможет не вызвать исключение, когда файл не найден, скажем для Dev env.

@Configuration
  @PropertySources({
    @PropertySource("classpath:application.properties"),
    @PropertySource(value = "file:${config.file}", ignoreResourceNotFound=true)
    })
public class AppConfig {
    //...
}

/ META-INF / context.xml

<Context>
    <Parameter name="config.file" value="/yourpath/application.properties"/>
</Context>

Если вы не хотите сохранять путь в context.xml внутри вашего проекта, существуют другие способы определения контекста уровня приложения в зависимости от вашей версии tomcat. Пожалуйста, см. здесь для деталей для кота 9.

0 голосов
/ 19 марта 2019

Если вы хотите прочитать свойства из внешнего местоположения , напишите bootstrap.yml в своем приложении и удалите application.yml.

bootstrap.yml:

spring:
  config:
    location: file:/home/external/properties/location/
    name: application
  profiles:
    active: dev

расположение файла: /home/external/properties/location/

предположим, что вам нужна среда разработки и разработки. Затем сохраните этот файл 3 свойств в этом месте.

application.yml

application-dev.yml

application-prod.yml

Spring boot read application.yml свойства в первую очередь. Если установить активный профиль dev в bootstrap.yml, то application.yml значение перегрузить на application-dev.yml.

Или вы можете использовать конфигурационный сервер

Посмотрите на это

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...