Spring Boot 1.4 @DataJpaTest - 创建名为“dataSource”的 bean 时出错

Posted

技术标签:

【中文标题】Spring Boot 1.4 @DataJpaTest - 创建名为“dataSource”的 bean 时出错【英文标题】:Spring Boot 1.4 @DataJpaTest - Error creating bean with name 'dataSource' 【发布时间】:2017-05-09 23:34:36 【问题描述】:

我创建了一个新的 spring boot 1.4 应用程序,想尝试使用 @DataJpaTest 进行一些测试,但不断收到以下错误消息

原因:org.springframework.beans.factory.BeanCreationException:创建名为“dataSource”的bean时出错:调用init方法失败;嵌套异常是 java.lang.IllegalStateException:无法确定用于测试的嵌入式数据库。如果您想要一个嵌入式数据库,请在类路径中放置一个受支持的数据库。

src/main/resources/application.properties

spring.datasource.url=jdbc:mysql://localhost/my_db
spring.datasource.username=user
spring.datasource.password=password
spring.datasource.driver-class-name=com.mysql.jdbc.Driver

MyRepositoryTest

@RunWith(SpringRunner.class)
@DataJpaTest
final public class MyRepositoryTest 

build.gradle

dependencies 
    compile 'org.springframework.boot:spring-boot-starter-web',
            'org.springframework.boot:spring-boot-starter-data-jpa',
            'mysql:mysql-connector-java',
            'org.projectlombok:lombok:1.16.10'

    testCompile('org.springframework.boot:spring-boot-starter-test')

任何想法我做错了什么?

【问题讨论】:

@Matt,您必须添加 MySQL 配置类才能通过您的 mysql-connector-java 客户端建立连接。并检查是否在你的类路径中添加了MySQL驱动jar。 我希望使用嵌入式数据库进行 JPA 测试...@PraveenKumar 您需要在类路径中明确设置嵌入式数据库。 【参考方案1】:

默认情况下,我们不提供嵌入式数据库。默认情况下,DataJpaTest 将您的 DataSource 替换为嵌入式数据库,但您没有。

因此,如果您想使用 MySQL 进行测试,请将您的测试替换如下:

@RunWith(SpringRunner.class)
@DataJpaTest
@AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE)
final public class MyRepositoryTest 

如果您想为这些测试使用内存数据库,您需要在测试类路径中添加一个。将此添加到您的 gradle 文件中

testCompile('com.h2database:h2')

【讨论】:

如果不想提供 AutoConfigureTestDatabase,我可以在属性文件中指定它吗?即 spring.test.database.connection: H2 那么您需要告诉引导不要覆盖您的数据源,以便需要注释。完成后,您可以随意配置数据源。如果您需要更多详细信息,我会创建一个单独的问题 另外,我有create an issue in our tracker,因为我想知道我们是否不能在这里做一些更聪明的事情。随时订阅更新或分享您对 Spring Boot 在这种情况下应该做什么的看法。 谢谢,我会订阅,看到讨论会很有趣 @AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE)【参考方案2】:

请在课前添加。

@AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE)

它肯定会运行。

【讨论】:

以上是关于Spring Boot 1.4 @DataJpaTest - 创建名为“dataSource”的 bean 时出错的主要内容,如果未能解决你的问题,请参考以下文章

在 Spring Boot 1.4 中测试 Spring MVC 切片的问题

Spring boot 1.4 测试:配置错误:发现@BootstrapWith 的多个声明

spring cloud 版本 Brixton.SR5 with spring boot 1.4

Spring Boot 1.4 - REST API 测试

Spring Boot 1.4 QueryDSL 依赖问题

Spring Boot 1.4:Spring Data Cassandra 1.4.2 与 Cassandra 3.0 不兼容?