Настроить MySql для различных сред и развернуть в Google App Engine через IntelliJ

Я использую IntelliJ IDE для разработки сервисов Spring Boot с Maven и использую плагин Google Cloud Tools для развертывания в App Engine Flexible. Пока я использую следующее (для подключения к локальной сети) и запускаю приложение. локально работает нормально (в application.properties).

spring.datasource.url = JDBC: MySQL:// локальный:3309/ тест

Тем не менее, когда я пытаюсь развернуть в GAE со следующим (в application.properties),

spring.datasource.url = JDBC: MySQL:// Google/ тест cloudSqlInstance=[облако SQL-экземпляр]& SocketFactory = com.google.cloud.sql.mysql.SocketFactory

при попытке построить проект перед загрузкой в ​​GAE выдается исключение UnknownHostException: "google".

Вопросы:

  1. Как я могу создать различные конфигурации для различных сред (dev (локальная) / qa(gae) / production(gae)) и развернуть в этих средах с соответствующими значениями среды?

  2. Выполняя сборку из IDE, она проверяет строку подключения к БД (которая указывает на экземпляр SQL sql) и выдает исключение, если оно недостижимо (однако оно будет из среды QA / Prod, если сборка будет успешной). Как решить этот случай?

Любая помощь по этому вопросу будет принята с благодарностью.

Заранее спасибо.

1 ответ

Решение

Вам нужно использовать Spring Profiles. Пожалуйста, прочитайте всю информацию в документации для подробного объяснения.

Кратко:

Профили Spring предоставляют способ разделения частей конфигурации вашего приложения и делают его доступным только в определенных средах.

Теперь перейдем к проблеме. Это можно решить, введя "локальный" профиль для своей разработки и оставив профиль "по умолчанию" для использования в производстве (GAE).

application.properties

# this file is for the "default" profile that will be used when 
# no spring.profiles.active is defined. So consider this production config.

spring.datasource.url=jdbc:mysql://google/test?cloudSqlInstance=[cloud-sql-instance]&socketFactory=com.google.cloud.sql.mysql.SocketFactory

application-local.properties

# this file is for the "local" profile that will be used when 
# -Dspring.profiles.active=local is specified when running the application. 
# So consider this "local" development config

spring.datasource.url=jdbc:mysql://localhost:3309/test

# In this file you can also override any other property defined in application.properties, or add additional ones

Теперь для запуска приложения во время разработки все, что вам нужно указать в IntelliJ в конфигурации запуска, - это -Dspring.profiles.active=local под VM optionsили, если вы используете конфигурацию запуска "Spring Boot", вы можете просто добавить локальный в Active Profiles поле.

А в GAE не указывайте никаких профилей вообще, и будут использоваться значения по умолчанию.

Другие вопросы по тегам