gpt4 book ai didi

spring-mvc - Spring Boot 环境特定的配置

转载 作者:行者123 更新时间:2023-12-04 17:21:34 25 4
gpt4 key购买 nike

我有一个使用 执行器、自动配置和 JPA 的 Spring Boot 应用程序。我希望能够在我的 test 配置文件中使用内存数据库、开发 期间的 MySQL 数据库配置和单独的 生产 数据库配置当应用程序部署在生产环境中时。大概从 java 命令行中,我应该能够指定环境,并且将拾取 application.properties(或 .yml)中的正确配置文件或配置 block 。

我还没有找到一个很好的帖子,其中包含描述如何进行这种切换的示例,所以我想我会问是否有人有一个很好的例子。我的主要目标是在构建时预定义 spring.datasourcespring.jpa 属性,然后在运行时使用“动态”切换每个环境的应用程序配置java命令行参数。次要目标是对 management 配置等做同样的事情。

谢谢。

最佳答案

感谢@Richard 提到 spring.profiles.active JVM 变量。由于我的问题是针对 Spring Boot 执行此操作的方式所特有的,并且由于答案还有很多,我倾向于自己回答这个问题,并将我如何得出答案的所有细节都包含在希望它能节省其他人的时间。

首先,您确实可以通过在运行 Spring Boot 应用程序时添加 java-Dspring.profiles.active=profile_name 命令行上选择正确的配置文件。 (这是假设您的部署偏好是 带有嵌入式容器的 uber jar - 就我而言是 Tomcat)

我想将 MySQL 数据源配置保留在 default 配置文件下,并将 H2 内存数据源配置放在 test 个人资料。但是,Spring Boot 根据配置文件选择正确的 datasource 的方式并不那么明显。即使我在 default 配置文件下有 MySQL 详细信息,并且我在 test 配置文件下有内存中 H2 数据源详细信息,即使在 spring.profiles.active 时它仍然会选择 H2 作为数据源从命令行省略。这与我的假设相反,即默认情况下会选择 default 配置文件:-)

我最终不得不将 H2 配置放在 default 配置文件下,然后创建一个包含 MySQL 数据源配置的 local 配置文件。这是我在 application.yml 中得到的结果

spring:
profiles: default

spring:
datasource:
driverClassName: org.h2.Driver
url: jdbc:h2:mem:sampletest;MODE=MySQL

---
spring:
profiles: test

spring.jpa:
hibernate:
ddl-auto: create-drop

---
spring:
profiles: local

spring.datasource:
driverClassName: com.mysql.jdbc.Driver
url: jdbc:mysql://127.0.0.1/sampledev
username: sample
password: sample

spring.jpa:
hibernate:
dialect: org.hibernate.dialect.MySQLInnoDBDialect
ddl-auto: update

这行得通。通过在 -Dspring.profiles.active=local 命令行上省略或添加 java,我能够在 default 配置文件和 local 配置文件之间切换。因为测试配置文件继承自默认,它也使用 H2

还有一个细微差别:我在 test 配置文件中添加了 ddl-auto: create-drop,该配置文件使用内存数据库来促进单元测试的自动表创建/拆卸。但是对于使用 MySQL 的本地配置文件,我将其更改为 update 。这意味着对于本地配置文件,我必须首先在应用程序之外创建数据库。

关于spring-mvc - Spring Boot 环境特定的配置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24787801/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com