How to tell Spring Boot to use another DB for test? How to tell Spring Boot to use another DB for test? mysql mysql

How to tell Spring Boot to use another DB for test?


I had application.properties in /src/main/java/resources with a data source configuration for the main application.

I added application-test.properties to /src/test/java/resources with a data source configuration to a database for testing. Additionally, I added @ActiveProfiles("test") to the test that should use that database. Note that Spring configures itself using the word test in application-test.properties and in the annotation. As such, Spring "overwrites" the configuration of application.properties.

application.properties:

spring.datasource.url=jdbc:mysql://localhost:3306/databasespring.datasource.username=userspring.datasource.password=secretspring.datasource.driverClassName=com.mysql.jdbc.Driver

application-test.properties:

spring.datasource.url=jdbc:mysql://localhost:3306/database_testspring.datasource.username=userspring.datasource.password=secretspring.datasource.driver-class-name=com.mysql.jdbc.Driver


Though the question already has an answer.

We can also use @DataJpaTest if you want to test JPA applications. By default it will configure an in-memory embedded database, scan for @Entity classes and configure Spring Data JPA repositories. Regular @Component beans will not be loaded into the ApplicationContext.

It is one of the testing improvements made in spring boot application.

Read Docs : https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-testing.html


The in-memory database is used by default on tests. You can disable that behavior and get it to use the application-configured database adding the annotation @AutoConfigureTestDatabase(replace = Replace.NONE) to your tests (see Auto-configured Data JPA Tests).

You can then either add an application.properties or equivalent to src/test/resources or a separate application file such as application-test.properties and make the tests use it by annotating them with @ActiveProfiles("test").