如何配置Spring应用程序,以便在运行单元测试时使用内存中的数据库(如H2/HSQL ),而在运行Spring应用程序时使用生产数据库Postgre/MySQL?
发布于 2015-08-14 02:45:16
弹簧配置文件可用于此。这将是一种具体的方式:
具有特定于环境的属性文件:
application.properties
spring.profiles.active: dev
application-dev.properties
spring.jpa.database: MYSQL
spring.jpa.hibernate.ddl-auto: update
spring.datasource.url: jdbc:mysql://localhost:3306/dbname
spring.datasource.username: username
spring.datasource.password: password
application-test.properties
spring.jpa.database: HSQL
在MySQL和H2驱动程序中都有pom.xml
,如下所示:
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.hsqldb</groupId>
<artifactId>hsqldb</artifactId>
<scope>test</scope>
</dependency>
最后但并非最不重要的是,用@ActiveProfiles("test")
注释测试类。
发布于 2016-10-22 08:41:53
另一种方法是将注释@AutoConfigureTestDatabase
添加到测试类中。我的测试通常是这样的:
@RunWith(SpringRunner.class)
@DataJpaTest
@AutoConfigureTestDatabase(connection = EmbeddedDatabaseConnection.H2)
public class MyRepositoryTest {
@Autowired
MyRepository repository;
@Test
public void test() throws Exception {
// Tests...
}
}
请注意,需要在pom.xml文件中添加嵌入式数据库依赖项。对于嵌入式数据库,即使只有依赖项被添加到pom文件中,这个注释也是不必要的。
发布于 2019-04-26 07:36:46
使用@SpringBootTest魔术,只需执行以下两个更改即可。
com.h2database h2试验
@RunWith(SpringRunner.class) @SpringBootTest(子类= MySpringBootApplication.class) @AutoConfigureTestDatabase公共类SpringBootTest{ @Autowired私有RequestRepository requestRepository;}
现在,测试中使用的所有spring /存储库都将使用h2作为后台数据库。
2019年-04-26 13:13:34.198 INFO 28627 -主beddedDataSourceBeanFactoryPostProcessor :用嵌入式版本取代' DataSource‘DataSource bean 2019年-04-26 13:13:34.199 INFO 28627 --主o.s.b.f.s.DefaultListableBeanFactory :重写bean 'dataSource‘定义 2019年-04-26 13:13:36.194 INFO 28627 --主o.s.j.d.e.EmbeddedDatabaseFactory :启动嵌入式数据库:o.s.j.d.e.EmbeddedDatabaseFactory用户名=‘sa’
注意:我仍然在'application.properties‘中定义了’spring‘属性,并且我不使用任何配置文件。@AutoConfigureTestDatabase将使用测试默认值AutoConfigureTestDatabase.Replace覆盖现有的jpa配置。
https://stackoverflow.com/questions/32001391
复制相似问题