Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在spring boot中使用嵌入式数据库进行测试_Java_Mysql_Spring_Spring Boot_Junit - Fatal编程技术网

Java 在spring boot中使用嵌入式数据库进行测试

Java 在spring boot中使用嵌入式数据库进行测试,java,mysql,spring,spring-boot,junit,Java,Mysql,Spring,Spring Boot,Junit,我有一个spring启动应用程序,它有两个@Entity类和@RepositoryRestResourcerepositort接口。现在我想写一些测试,在那里我可以检查我是否可以使用这些存储库将新记录添加到我的数据库中,但我不想使用我配置的MySQL数据库,而是想使用一些嵌入式数据库,如H2。目前,我有一个application.properties文件,看起来如下: spring.jpa.hibernate.ddl-auto=create spring.datasource.url=jdbc:

我有一个spring启动应用程序,它有两个
@Entity
类和
@RepositoryRestResource
repositort接口。现在我想写一些测试,在那里我可以检查我是否可以使用这些存储库将新记录添加到我的数据库中,但我不想使用我配置的MySQL数据库,而是想使用一些嵌入式数据库,如H2。目前,我有一个
application.properties
文件,看起来如下:

spring.jpa.hibernate.ddl-auto=create
spring.datasource.url=jdbc:mysql://localhost:3306/mydb
spring.datasource.username=root
spring.datasource.password=qwerty123

问题:如何配置我的应用程序以使用其他db进行测试?我的项目中没有xml,所有内容都基于注释。我试图用
@Bean
定义
@Configuration
类来创建
数据源
,然后将其与测试类上的
@ContextConfiguration
注释一起使用,但它说它无法加载上下文。

您需要使用Spring概要文件-

您将使用“spring.profiles.active=development”定义活动概要文件,然后在开发概要文件中包含H2


示例使用YAML,但它们也在标准属性文件中工作。

如果您使用的是Maven项目,则可以将
应用程序.properties
文件添加到
src/test/resources
中,例如,添加以下内容

# Create DDL
spring.jpa.hibernate.ddl-auto=create

# H2 in local file system allowing other simultaneous connections
spring.datasource.url=jdbc:h2:~/test;AUTO_SERVER=TRUE
此外,还需要将H2作为依赖项(
pom.xml
):


com.h2数据库
氢
1.4.193

Spring Boot为测试提供了两个与JPA自动配置相关的神奇注释:
@DataJpaTest
@AutoConfigureTestDatabase
。 javadoc说:

默认情况下,用@DataJpaTest注释的测试将使用嵌入的 内存中数据库(替换任何显式或通常自动配置的 数据源)。@AutoConfigureTestDatabase注释可用于 覆盖这些设置

如果您希望加载完整的应用程序配置,但是 使用嵌入式数据库,你应该考虑@ SpringBootTest组合 使用@AutoConfigureTestDatabase而不是此批注

因此,您唯一绝对需要的是pom文件中的依赖项:

    <dependency>
        <groupId>com.h2database</groupId>
        <artifactId>h2</artifactId>
        <scope>test</scope>
    </dependency>

com.h2数据库

如果我这样做,它仍然使用MySQL db。我应该提供更多关于测试类的信息吗?一些注释来明确定义这些属性,而不是那些来自
main
文件夹的属性?好的,我为测试类添加了
@PropertySource(“path/to/properties”)
注释,现在它可以工作了,谢谢
    <dependency>
        <groupId>com.h2database</groupId>
        <artifactId>h2</artifactId>
        <scope>test</scope>
    </dependency>