|
Активация профиля application.properties в зависимости от среды запуска
|
|||
---|---|---|---|
#18+
Приложение разрабатывается и тестируется на хосте под Windows и должно запускаться в контейнере Docker. Соответственно в Docker-compose запускается отдельный сервис с БД, параметры подключения к которому отличаются от параметров подключения на хосте под Windows. Чтобы решить проблему запуска приложения с разными параметрами в разных средах был найден следующий способ. Прописываем переменные среды в файле Docker-compose: Код: xml 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30.
Создаем 3 файла профиля properties : 1) тот, что должен грузиться 1-ым и из которого мы берем данные какой файл properties нам нужно будет использовать, в нем же прописываем и какой дефолтный - application.properties : Код: java 1. 2.
2) файл properties с настройками для контейнера Docker - application-server.properties : Код: java 1.
3) файл properties с настройками для локального сервера - application-local.properties : Код: java 1.
По идее должно работать следующим образом: 1) грузится файл application.properties 2) параметру spring.profiles.active присваивается значение переменной среды SPRING_PROFILES_ACTIVE или дефолтное значение, если данная переменная не определена 3) по свойству spring.profiles.active определяется какой должен использоваться файл properties Но тест запуска на локалке выдал ошибку с загрузкой Datasourse: авторCaused by: org.springframework.boot.autoconfigure.jdbc.DataSourceProper ties$DataSourceBeanCreationException: Failed to determine a suitable driver class at org.springframework.boot.autoconfigure.jdbc.DataSourceProper ties.determineDriverClassName(DataSourceProperties.java:234) at org.springframework.boot.autoconfigure.jdbc.DataSourceProper ties.initializeDataSourceBuilder(DataSourceProperties.java:1 75) at org.springframework.boot.autoconfigure.jdbc.DataSourceConfig uration.createDataSource(DataSourceConfiguration.java:43) at org.springframework.boot.autoconfigure.jdbc.DataSourceConfig uration$Hikari.dataSource(DataSourceConfiguration.java:85) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeM ethodAccessorImpl.java:62) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Del egatingMethodAccessorImpl.java:43) at java.base/java.lang.reflect.Method.invoke(Method.java:566) at org.springframework.beans.factory.support.SimpleInstantiatio nStrategy.instantiate(SimpleInstantiationStrategy.java:154) ... 88 more Т.е. не работает - загрузка файлов properties идет не как планировалось. В чем ошибка, что неверно сделал? ... |
|||
:
Нравится:
Не нравится:
|
|||
23.11.2020, 21:19 |
|
Активация профиля application.properties в зависимости от среды запуска
|
|||
---|---|---|---|
#18+
Vlad__i__mir, Я делаю через maven В pom.xml Код: xml 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20.
Создаю три properties файла application.properties Код: xml 1.
application-prod.properties - здесь все настройки для прода application-test.properties - здесь все настройки для теста Сборка для теста Код: powershell 1.
Сборка для прода Код: powershell 1.
Можно ещё посмотреть в сторону Spring cloud ... |
|||
:
Нравится:
Не нравится:
|
|||
24.11.2020, 15:11 |
|
Активация профиля application.properties в зависимости от среды запуска
|
|||
---|---|---|---|
#18+
Vlad__i__mir ... 1) грузится файл application.properties 2) параметру spring.profiles.active присваивается значение переменной среды SPRING_PROFILES_ACTIVE или дефолтное значение, если данная переменная не определена ... Можно ссылку на доку, откуда Вы взяли, что java properties что-то знает о переменных среды? Возможно, конечно, я отстал от жизни. Но спросил у гугля - он тоже не знает. https://docs.oracle.com/javase/7/docs/api/java/util/Properties.html#load(java.io.Reader) ... |
|||
:
Нравится:
Не нравится:
|
|||
24.11.2020, 15:25 |
|
Активация профиля application.properties в зависимости от среды запуска
|
|||
---|---|---|---|
#18+
Leonid Kudryavtsev, читал в нескольких источниках https://docs.spring.io/spring-boot/docs/current/reference/html/spring-boot-features.html#boot-features-external-config https://www.baeldung.com/spring-profiles https://stackoverflow.com/questions/46057625/externalising-spring-boot-properties-when-deploying-to-docker но повторить не получается ... |
|||
:
Нравится:
Не нравится:
|
|||
24.11.2020, 15:50 |
|
Активация профиля application.properties в зависимости от среды запуска
|
|||
---|---|---|---|
#18+
mad_nazgul Vlad__i__mir, Я делаю через maven В pom.xml Код: xml 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20.
Создаю три properties файла application.properties Код: xml 1.
application-prod.properties - здесь все настройки для прода application-test.properties - здесь все настройки для теста Сборка для теста Код: powershell 1.
Сборка для прода Код: powershell 1.
Можно ещё посмотреть в сторону Spring cloud Вариант, если не получится довести до ума тот что сейчас пытаюсь, то попробую. Но все-таки хочется понять, что не так в моем примере ... |
|||
:
Нравится:
Не нравится:
|
|||
24.11.2020, 15:54 |
|
Активация профиля application.properties в зависимости от среды запуска
|
|||
---|---|---|---|
#18+
IMHO НЕ специалиста по spring Мне кажется, сначала упростить задачу т.е. без "или дефолтное значение, если данная переменная не определена", если не поможет то и без "Profiles" Т.к. для Subj вполне достаточно If you do not like application as the configuration file name, you can switch to another file name by specifying a spring.config.name environment property. You can also refer to an explicit location by using the spring.config.location environment property (which is a comma-separated list of directory locations or file paths). The following example shows how to specify a different file name: $ java -jar myproject.jar --spring.config.name=myproject ... |
|||
:
Нравится:
Не нравится:
|
|||
24.11.2020, 16:11 |
|
Активация профиля application.properties в зависимости от среды запуска
|
|||
---|---|---|---|
#18+
Vlad__i__mir 1) тот, что должен грузиться 1-ым и из которого мы берем данные какой файл properties нам нужно будет использовать, в нем же прописываем и какой дефолтный - application.properties : Код: java 1. 2.
в spring.profiles.active должно же быть имя профиля(ей), а не имя файла? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.11.2020, 16:39 |
|
Активация профиля application.properties в зависимости от среды запуска
|
|||
---|---|---|---|
#18+
Я запускаю из командной строки. mvn spring-boot:run -Drun.jvmArguments='-Dspring.config.location=classpath:/application-local.properties' ... |
|||
:
Нравится:
Не нравится:
|
|||
24.11.2020, 18:05 |
|
Активация профиля application.properties в зависимости от среды запуска
|
|||
---|---|---|---|
#18+
Vlad__i__mir читал в нескольких источниках Код: plaintext
И такой синтаксис - фишка POSIX-shell. Как и разница между переменной и переменной окружения. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.11.2020, 18:27 |
|
Активация профиля application.properties в зависимости от среды запуска
|
|||
---|---|---|---|
#18+
Псевдомизантроп Vlad__i__mir 1) тот, что должен грузиться 1-ым и из которого мы берем данные какой файл properties нам нужно будет использовать, в нем же прописываем и какой дефолтный - application.properties : Код: java 1. 2.
в spring.profiles.active должно же быть имя профиля(ей), а не имя файла? Пробовал и так Код: java 1. 2.
результат тотже ... |
|||
:
Нравится:
Не нравится:
|
|||
24.11.2020, 18:46 |
|
Активация профиля application.properties в зависимости от среды запуска
|
|||
---|---|---|---|
#18+
Если я правильно понимаю буквы в документации, имя профиля "local", а дальше Spring сам имя соберет: 2.3.3. Profile Specific Files As well as application property files, Spring Boot will also attempt to load profile-specific files using the naming convention application-{profile}. For example, if your application activates a profile named prod and uses YAML files, then both application.yml and application-prod.yml will be considered. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.11.2020, 18:55 |
|
Активация профиля application.properties в зависимости от среды запуска
|
|||
---|---|---|---|
#18+
Basil A. Sidorov Vlad__i__mir читал в нескольких источниках Код: plaintext
И такой синтаксис - фишка POSIX-shell. Как и разница между переменной и переменной окружения. Не понял вас, мне не дает в properties прописать автор-D - синтаксическая ошибка. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.11.2020, 18:56 |
|
Активация профиля application.properties в зависимости от среды запуска
|
|||
---|---|---|---|
#18+
Leonid Kudryavtsev Если я правильно понимаю буквы в документации, имя профиля "local", а дальше Spring сам имя соберет: 2.3.3. Profile Specific Files As well as application property files, Spring Boot will also attempt to load profile-specific files using the naming convention application-{profile}. For example, if your application activates a profile named prod and uses YAML files, then both application.yml and application-prod.yml will be considered. Гениально!!! Вы правы! Заработало. Спасибо! ... |
|||
:
Нравится:
Не нравится:
|
|||
24.11.2020, 19:02 |
|
Активация профиля application.properties в зависимости от среды запуска
|
|||
---|---|---|---|
#18+
Прибереги восклицательные знаки Еще понадобятся. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.11.2020, 19:43 |
|
Активация профиля application.properties в зависимости от среды запуска
|
|||
---|---|---|---|
#18+
mayton Прибереги восклицательные знаки Еще понадобятся. Это да. Я пока на локалке протестировал, в контейнер ещё не деплоил ) ... |
|||
:
Нравится:
Не нравится:
|
|||
24.11.2020, 21:19 |
|
Активация профиля application.properties в зависимости от среды запуска
|
|||
---|---|---|---|
#18+
Zzz79 Vlad__i__mir пропущено... Это да. Я пока на локалке протестировал, в контейнер ещё не деплоил ) занимаешься куйней,в норм конторах это делают девопсы Вообще то по практике devops docker файл пишет программист. DevOps только pipline для CI/CD настраивает и поддерживает. :-) ... |
|||
:
Нравится:
Не нравится:
|
|||
26.11.2020, 06:08 |
|
Активация профиля application.properties в зависимости от среды запуска
|
|||
---|---|---|---|
#18+
Vlad__i__mir, Я вот таким способом варьирую список профилей в зависимости от OS: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40.
Это позволяет загружать дополнительный файл настроек application-[os-profile].properties ... |
|||
:
Нравится:
Не нравится:
|
|||
26.11.2020, 09:30 |
|
Активация профиля application.properties в зависимости от среды запуска
|
|||
---|---|---|---|
#18+
Lelouch, Черт, не проснулся и подумал, что вопрос в активации профилей в зависимости от OS. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.11.2020, 09:42 |
|
Активация профиля application.properties в зависимости от среды запуска
|
|||
---|---|---|---|
#18+
Zzz79, так я же не в конторе, я ВКР делаю ) Хочу чтобы когда все было готово не парится с настройками на хостинге - просто залить и запустить ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2020, 17:38 |
|
Активация профиля application.properties в зависимости от среды запуска
|
|||
---|---|---|---|
#18+
Lelouch, что за переменная application? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2020, 17:47 |
|
Активация профиля application.properties в зависимости от среды запуска
|
|||
---|---|---|---|
#18+
Vlad__i__mir, new SpringApplication(...) https://docs.spring.io/spring-boot/docs/current/api/org/springframework/boot/SpringApplication.html ... |
|||
:
Нравится:
Не нравится:
|
|||
28.11.2020, 01:14 |
|
Активация профиля application.properties в зависимости от среды запуска
|
|||
---|---|---|---|
#18+
Lelouch, а где и как вызывается метод initialize ? Если мы здесь уже активировали нужный профиль: Код: java 1. 2.
то что за файлы с настройками мы здесь грузим? Код: java 1. 2.
... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2020, 21:26 |
|
Активация профиля application.properties в зависимости от среды запуска
|
|||
---|---|---|---|
#18+
Vlad__i__mir Lelouch, а где и как вызывается метод initialize ? Если мы здесь уже активировали нужный профиль: Код: java 1. 2.
то что за файлы с настройками мы здесь грузим? Код: java 1. 2.
1) Метод initialize вызывается в процессе старта SpringApplication 2) Проблема в том, что загрузка файлов настроек происходит до ApplicationContextInitializer, и для дозагрузки новый файлов, активированных добавлением профиля нужно вызвать listener еще раз. Скорее всего можно преобразовать ApplicationContextInitializer в ApplicationListener и добиться того, чтобы он отработал до первого вызова ConfigFileApplicationListener, но мне на данный момент лень с этим копаться ... |
|||
:
Нравится:
Не нравится:
|
|||
03.12.2020, 19:05 |
|
Активация профиля application.properties в зависимости от среды запуска
|
|||
---|---|---|---|
#18+
Lelouch, Lelouch1) Метод initialize вызывается в процессе старта SpringApplication А параметр авторConfigurableApplicationContext context для метода initialize Spring где берет? ... |
|||
:
Нравится:
Не нравится:
|
|||
04.12.2020, 10:37 |
|
Активация профиля application.properties в зависимости от среды запуска
|
|||
---|---|---|---|
#18+
Vlad__i__mir Lelouch, Lelouch1) Метод initialize вызывается в процессе старта SpringApplication А параметр авторConfigurableApplicationContext context для метода initialize Spring где берет? Внутри себя создает?) На данный момент я настолько глубоко в процесс загрузки спринга не залезал (ибо не требовалось) ... |
|||
:
Нравится:
Не нравится:
|
|||
04.12.2020, 13:25 |
|
|
start [/forum/topic.php?fid=59&msg=40022923&tid=2120582]: |
0ms |
get settings: |
7ms |
get forum list: |
5ms |
check forum access: |
1ms |
check topic access: |
1ms |
track hit: |
29ms |
get topic data: |
2ms |
get forum data: |
1ms |
get page messages: |
402ms |
get tp. blocked users: |
1ms |
others: | 283ms |
total: | 732ms |
0 / 0 |