为各种环境配置 MySql 并通过 IntelliJ 部署到 Google App Engine
Configure MySql for various environments and deploy to Google App Engine via IntelliJ
我正在使用 IntelliJ IDE 通过 Maven 开发 Spring 引导服务,并使用 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"。
问题:
如何为各种环境(dev(本地)/ qa(gae)/ production(gae))创建不同的配置并部署到具有相应环境值的那些环境?
从 IDE 进行构建时,它会验证数据库连接字符串(指向云 sql 实例)并在无法访问时抛出异常(但是,如果构建成功,它将来自 QA / Prod 环境)。如何解决这个案例?
如有任何帮助,我们将不胜感激。
提前致谢。
您需要使用Spring Profiles。请阅读文档中的所有信息以获得详尽的解释。
简要说明:
Spring Profiles provide a way to segregate parts of your application
configuration and make it only available in certain environments
现在,进入手头的问题。可以通过为您的开发引入 "local" 配置文件并将 "default" 配置文件用于生产 (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
应用-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
字段中添加local即可。
并且在 GAE 上,根本不指定任何配置文件,将使用默认值。
我正在使用 IntelliJ IDE 通过 Maven 开发 Spring 引导服务,并使用 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"。
问题:
如何为各种环境(dev(本地)/ qa(gae)/ production(gae))创建不同的配置并部署到具有相应环境值的那些环境?
从 IDE 进行构建时,它会验证数据库连接字符串(指向云 sql 实例)并在无法访问时抛出异常(但是,如果构建成功,它将来自 QA / Prod 环境)。如何解决这个案例?
如有任何帮助,我们将不胜感激。
提前致谢。
您需要使用Spring Profiles。请阅读文档中的所有信息以获得详尽的解释。
简要说明:
Spring Profiles provide a way to segregate parts of your application configuration and make it only available in certain environments
现在,进入手头的问题。可以通过为您的开发引入 "local" 配置文件并将 "default" 配置文件用于生产 (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
应用-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
字段中添加local即可。
并且在 GAE 上,根本不指定任何配置文件,将使用默认值。