Spring Boot特定于环境的配置

时间:2014-07-16 18:10:58

标签: spring-mvc jpa spring-boot environment microservices

我有一个使用执行器,自动配置和JPA 的弹簧启动应用程序。我希望能够在测试配置文件中使用内存数据库,在开发期间使用MySQL数据库配置,以及单独的生产数据库配置在应用程序部署到生产中时。据推测,从java命令行我应该能够指定环境,并且将选择正确的配置文件或 application.properties (或.yml)中的配置块。

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

谢谢。

2 个答案:

答案 0 :(得分:7)

感谢@Richard提到spring.profiles.active JVM变量。由于我的问题特定于 Spring Boot 这样做的方式,而且由于答案还有很多,我倾向于自己回答这个问题并包括我如何得到答案的所有细节。希望它能节省其他时间。

首先,您可以通过在运行Spring Boot应用程序时添加java来在-Dspring.profiles.active=profile_name命令行中选择正确的配置文件。 (假设您的部署首选项是具有嵌入式容器的超级jar - 在我的情况下为Tomcat)

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

我最终不得不在默认配置文件下放置H2配置,然后创建一个包含MySQL数据源配置的 本地 配置文件。这是我在spring.profiles.active

中最终得到的结果
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,我可以在默认配置文件和本地配置文件之间切换。因为测试配置文件继承自默认值,所以它也使用H2

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

答案 1 :(得分:0)

本文介绍了如何使用弹簧3.1和更高版本中提供的弹簧轮廓。它会完全符合您的要求。

http://chariotsolutions.com/blog/post/spring-3-1-environment-profiles-2/

设置一个像这样的JVM变量:spring.profiles.active = development

然后在您的配置xml中,您可以使用配置文件标记

包装特定于环境的xml
<beans profiles="development">  
  <bean id="dataSource" class="..."></bean>
  <bean id="messagingProvider" class="..."></bean>
</beans>

您还可以在课程开头使用@Profile(&#34; development&#34;)在注释驱动的类上设置配置文件。只有在配置文件匹配时,该类才会自动装配。

对于单元测试,您可以使用@ActiveProfile(profiles =&#34; test&#34;,&#34; CI&#34;)在测试类上设置活动配置文件,它将使用测试和CI资源运行< / p>