0

我正在使用 IntelliJ IDE 使用 Maven 开发 Spring Boot 服务,并使用 Google Cloud Tools 插件部署到 App Engine Flexible。虽然我使用以下(连接到本地)并运行应用程序。在本地,它工作正常(在 application.properties 中)。

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

但是,当我尝试使用以下内容(在 application.properties 中)部署到 GAE 时,

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

在上传到 GAE 之前尝试构建项目时,它会抛出 UnknownHostException:“google”。

问题:

  1. 如何为各种环境(dev (local) / qa(gae) / production(gae) )创建不同的配置并部署到具有相应环境值的那些环境?

  2. 在从 IDE 进行构建时,它会验证数据库连接字符串(指向云 sql 实例)并在无法访问时抛出异常(但是,如果构建成功,它将来自 QA / Prod 环境)。如何解决这种情况?

对此的任何帮助将不胜感激。

提前致谢。

4

1 回答 1

3

您需要使用Spring Profiles。请阅读文档中的所有信息以获取详细说明。

简要地:

Spring Profiles 提供了一种分离应用程序配置部分并使其仅在某些环境中可用的方法

现在,到手头的问题上。可以通过为您的开发引入“本地”配置文件并将“默认”配置文件用于生产 (GAE) 来解决此问题。

应用程序属性

# 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

应用程序-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=localVM options或者如果您使用“Spring Boot”运行配置,您只需在该字段中添加本地。Active Profiles

在 GAE 上,根本不指定任何配置文件,将使用默认值。

于 2017-08-15T07:31:56.560 回答