启动时如何配置 Spring Boot 应用程序以在特定数据库上运行
Posted
技术标签:
【中文标题】启动时如何配置 Spring Boot 应用程序以在特定数据库上运行【英文标题】:How to configure Spring Boot Application to run on a specific database when launching 【发布时间】:2018-03-01 00:50:30 【问题描述】:我有一个使用 Spring Boot 开发的 Spring MVC 应用程序。顺便说一下,这个应用程序仅用于学习目的。
默认情况下,应用程序启动并使用 mysql 数据库。对于单元和集成测试,我使用了一个内存 H2 数据库,它运行良好。
因此,我有两个 application.properties。一个在 /src/main/resources/application.properties 下。
spring.datasource.driver-class-name = com.mysql.jdbc.Driver
spring.datasource.url = jdbc:mysql://localhost/myDatabase
spring.datasource.username = root
spring.datasource.password = mysql
spring.thymeleaf.mode=LEGACYhtml5
spring.thymeleaf.cache=false
/src/test/resources/application.properties
下的其他application.propertiesspring.datasource.driver-class-name=org.h2.Driver
spring.datasource.url=jdbc:h2:mem:db;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE"
spring.datasource.username=sa
spring.datasource.password=sa
现在,我必须使用 Selenium 进行自动化网站测试,并且我不希望我的 MySQL 数据库填充测试数据。
我以前在 Spring 中没有这样做过,但我希望我的应用程序可以这样工作:
使用某些命令从终端启动我的应用程序,指定它应该使用什么数据库。它应该在 localhost:8080 上启动 然后,在 localhost:8080 中运行所有 Selenium 测试。使用 Selenium 测试生成的所有数据仅在应用程序运行时保存在内存中如何使用 application.properties 或其他配置在 Spring Boot 应用程序中执行此操作?
【问题讨论】:
这种方法有什么问题?当您运行测试用例时,您可以从 /src/test/resources/application.properties 加载 application.properties,它应该适合您。 你读过this吗?只需在启动应用程序java -Dspring.datasource.url=<your-test-db> -jar your.jar
时指定系统属性。或者包括配置文件特定的属性文件并在启动前使用-Dspring.profiles.active=<your-test-profile>
。
将您的数据库设置放入 application-mysql.properties 和 application-h2.properties 并使用 -Dspring.profiles.active=mysql(或 h2) 运行您的应用程序
【参考方案1】:
-
创建一个名为
application-test.properties
的单独属性文件并将其放在/src/test/resources
下。测试数据库属性(或任何其他测试特定属性)应放在此处。
在你的测试类之上,使用这个注解@ActiveProfiles("test")
。
@ActiveProfiles("test")
public class MyTest
...
【讨论】:
【参考方案2】:Spring 应该会自动为您执行此操作。在运行测试时从 src/test/resources 运行 application.properties,因为 spring 使用“test”配置文件运行。如果没有,请在您的测试类上添加 @ActiveProfiles("test")
注释(我的意思是您进行测试的类,而不是被测类)。如果这不起作用,您可以将 src/test/resources/application.properties 重命名为 src/test/resources/application-test.properties 并在运行配置中选择您的配置文件(有一个名为“配置文件”的字段)。 Reference 和 more info。
【讨论】:
以上是关于启动时如何配置 Spring Boot 应用程序以在特定数据库上运行的主要内容,如果未能解决你的问题,请参考以下文章
如何在 spring-boot 配置中加载 application.yaml 配置以进行硒测试
Spring Boot 2 启动时加载properties文件