Я нахожусь в сценарии, когда я развертываю весеннюю загрузку как WAR на tomcat. Здесь, в этом приложении, у меня есть application.properties, у которого есть имя пользователя / пароль базы данных, некоторый URL-адрес, который помогает в использовании сервисов отдыха (URL-адреса зависят от среды). Теперь мне нужно получить учетные данные БД и URL-адреса в зависимости от среды, в которой он развернут. как этого добиться.




В соответствии с 24. Внешняя конфигурация этого должно быть достаточно для размещения определенных свойств профиля, например. application-dev.properties в пути к классам. Приоритет свойств:
...
- Profile-specific application properties outside of your packaged jar (application-{profile}.properties and YAML variants).
- Profile-specific application properties packaged inside your jar (application-{profile}.properties and YAML variants).
- Application properties outside of your packaged jar (application.properties and YAML variants).
- Application properties packaged inside your jar (application.properties and YAML variants).
...
Однако это может работать немного иначе, если вы упаковываете как JAR в соответствии с 24.3 Файлы свойств приложения. Приоритет свойств:
- A /config subdirectory of the current directory
- The current directory
- A classpath /config package
- The classpath root
Вы размещаете несколько веб-приложений в одном Tomcat и должны ли они использовать общую конфигурацию?
Нет только одного веб-приложения. Если я помещаю различные файлы свойств, например, appliaction.dev.properties, application.test.properties, appli cation.prod.properties, в папку resources / config приложения, тогда как приложение узнает, в какой среде оно находится. Я развертываю приложение как WAR, а не как JAR, а во внешний tomcat не встроен
Тогда действительно не имеет значения, как вы это сделаете, каталог tomcat/config, вероятно, предпочтительнее, но на вашем месте я бы переупаковал приложение как работающий JAR вместо развертывания в Tomcat.
его требование развернуть его на tomcat. Я пробовал сделать: @PropertySource (value = {"file: C: /Users/foo/apache-tomcat-8.5. 28 / webapps / applicationati on.properties}"}) это выдает ошибку 404, но если я скопирую путь из консоли и открыть его в файле проводника Windows фактически находится в этом месте.
Уф, жестко запрограммированный полный квалифицированный путь. Рассмотрите возможность использования, по крайней мере, таких переменных, как значение = {файл: config.path}, и передачи параметра через свойства системы, например -Dconfig.path = ...
согласно обсуждению с Каролем, я предполагаю, что использование источников свойств, ссылающихся на путь к файловой системе, должно быть в порядке:
@Configuration
@PropertySource("${mywebapp.config.dir}/application.properties")
public class SpringConfig {
}
И просто укажите путь к аргументам JVM при запуске tomcat, например
-Dmywebapp.config.dir=file:/etc/mywebapp
Таким образом, вы можете развернуть одно приложение application.properties, различное для каждой среды.
Что касается вашего комментария:
@PropertySource (значение = {"file: C: /Users/foo/apache-tomcat-8.5.28/webapps/application.properties}"})
поскольку это системный путь Windows, вам может потребоваться двойная обратная косая черта для вашего пути: C: \\ Users \\ foo ...
На внешнем контейнере ex tomcat Вы можете передать конфигурацию, используя переменную Jndi в context.xml Эта переменная переопределяет локальное свойство, определенное в application.properties.
Или передайте -Dspring.profiles.active = env в сценарии запуска tomcat для выбора приложения, зависящего от среды application.properties если вы предпочитаете конфигурацию внутри войны
Вопрос1: Могу ли я получить местоположение моих файлов свойств из tomcat context.xml в spring @Resource Вопрос2: Нужно ли мне указывать все содержимое, доступное в моем application.properties, в tomcat context.xml и читать их в Spring. Пожалуйста, предложите, как этого добиться, и оцените, может ли кто-нибудь предоставить рабочий пример / учебное пособие для этого.
Я могу прочитать файл свойств из местоположения tomcat / webapp
для каждой среды я могу попросить системных инженеров перетащить файл в нужное место, Я не знаю, хорошее ли это решение. Пожалуйста, предложите
@PropertySource(value = {"file:C:/Users/foo/Downloads/apache-tomcat-8.5.28/webapps/application.properties"})
Я хочу поместить файлы в папку tomcat / webapp, чтобы системные инженеры могли просто перетащить туда файл и легко перенести войну в другое окружение.