启动时如何配置 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.properties
spring.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 应用程序已准备好工作?

Spring Boot(XML配置)和Jasypt集成

Spring Boot 2 启动时加载properties文件

运行 Spring Boot 应用程序时如何显示自动配置报告

spring boot应用启动原理分析