启动时如何在特定数据库上将 Spring 引导应用程序配置为 运行
How to configure Spring Boot Application to run on a specific database when launching
我有一个 Spring 使用 Spring Boot 开发的 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
另一个application.properties在/src/test/resources/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 测试。只要应用程序 运行ning
,Selenium 测试生成的所有数据只会保存在内存中
如何使用 application.properties 或其他配置在 Spring 引导应用程序中执行此操作?
Spring 应该会自动为您执行此操作。 运行 application.properties 从 src/test/resources 当你 运行 宁测试因为 spring 运行s 与 "test" 配置文件。如果没有,请在您的测试 class 上添加 @ActiveProfiles("test")
注释(我的意思是您进行测试的 class,而不是正在测试的 class)。如果这仍然不起作用,您可以将 src/test/resources/application.properties 重命名为 src/test/resources/application-test.properties 和 select 您在 [=28] 中的个人资料=] 配置(有一个名为 'profile' 的字段)。 Reference and more info.
- 创建一个名为
application-test.properties
的单独属性文件并将其放在 /src/test/resources
下。测试数据库属性(或任何其他测试特定属性)应该放在这里。
在您的测试 class 之上,使用此注释 @ActiveProfiles("test")
。
@ActiveProfiles("test")
public class MyTest {
...
}
我有一个 Spring 使用 Spring Boot 开发的 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
另一个application.properties在/src/test/resources/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 测试。只要应用程序 运行ning ,Selenium 测试生成的所有数据只会保存在内存中
如何使用 application.properties 或其他配置在 Spring 引导应用程序中执行此操作?
Spring 应该会自动为您执行此操作。 运行 application.properties 从 src/test/resources 当你 运行 宁测试因为 spring 运行s 与 "test" 配置文件。如果没有,请在您的测试 class 上添加 @ActiveProfiles("test")
注释(我的意思是您进行测试的 class,而不是正在测试的 class)。如果这仍然不起作用,您可以将 src/test/resources/application.properties 重命名为 src/test/resources/application-test.properties 和 select 您在 [=28] 中的个人资料=] 配置(有一个名为 'profile' 的字段)。 Reference and more info.
- 创建一个名为
application-test.properties
的单独属性文件并将其放在/src/test/resources
下。测试数据库属性(或任何其他测试特定属性)应该放在这里。 在您的测试 class 之上,使用此注释
@ActiveProfiles("test")
。@ActiveProfiles("test") public class MyTest { ... }