Приложение разрабатывается и тестируется на хосте под Windows и должно запускаться в контейнере Docker. Соответственно в Docker-compose запускается отдельный сервис с БД, параметры подключения к которому отличаются от параметров подключения на хосте под Windows. Чтобы решить проблему запуска приложения с разными параметрами в разных средах был найден следующий способ. Прописываем переменные среды в файле Docker-compose:
services:
authorizationService:
image: tomcat
volumes:
- E:\Authorization_service_prjct\war_arсhive:/usr/local/tomcat/webapps
environment:
- SPRING_PROFILES_ACTIVE: application-server
- SPRING_DATASOURCE_URL: jdbc:mysql://database:3306/db_users?allowPublicKeyRetrieval=true&useSSL=false&serverTimezone=UTC
- DB_USER: root
- DB_PASSWORD: root
ports:
- "8888:8080"
links:
- "database:db_users"
database:
image: mysql
command: --default-authentication-plugin=mysql_native_password
restart: always
environment:
MYSQL_ROOT_USER: root
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: db_users
ports:
# <Port exposed> : < MySQL Port running inside container>
- '3316:3306'
expose:
# Opens port 3306 on the container
- '3306'
Создаем 3 файла профиля properties:
тот, что должен грузиться 1-ым и из которого мы берем данные какой файл properties нам нужно будет использовать, в нем же прописываем и какой дефолтный - application.properties:
spring.config.name=application spring.profiles.active=${SPRING_PROFILES_ACTIVE:application-local.properties}
файл properties с настройками для контейнера Docker - application-server.properties:
spring.config.name=application-server spring.datasource.url=${SPRING_DATASOURCE_URL} spring.datasource.username=${DB_USER} spring.datasource.password=${DB_PASSWORD} spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver spring.jpa.show-sql=true spring.jpa.generate-ddl=false spring.jpa.hibernate.ddl-auto=update spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQLDialect
файл properties с настройками для локального сервера - application-local.properties:
spring.config.name=application-local spring.datasource.url=jdbc:mysql://localhost:3306/db_users?allowPublicKeyRetrieval=true&useSSL=false&serverTimezone=UTC spring.datasource.username=root spring.datasource.password=root spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver spring.jpa.show-sql=true spring.jpa.generate-ddl=false spring.jpa.hibernate.ddl-auto=update spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQLDialect
По идее должно работать следующим образом:
Но тест запуска на локалке выдал ошибку с загрузкой 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 идет не как планировалось.
В чем ошибка, что я неверно понял?
Я думаю, что проблема в неправильном значении параметра spring.profiles.active
. Он принимает название профиля (local
, server
), а не файла или части файла. Вот как должно быть:
environment:
- SPRING_PROFILES_ACTIVE: server
и
spring.profiles.active=${SPRING_PROFILES_ACTIVE:local}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
C клавиатуры вводится "Hello", по почему-то выдает false,хотя вроде бы строки равны
Создаю приложение, которое каждый день даёт заданияЗадание даётся раз в 24 часа
Для вывода трёхмерного пространства необходимо таким образом заполнить массив, вроде как лёгкое дело, но мне в районе x[i],y[j],z[i][j] выводит ошибку:
Встречал много статей, где предлагают как вполне возможный вариант использовать javautil