当前位置: 首页 > 知识库问答 >
问题:

在Spring Boot的测试过程中,H2嵌入式数据库未拾取属性

邵阳德
2023-03-14

我正在尝试创建一个使用嵌入式H2数据库的测试。但是我必须更改spring.datasource.url,我不能使用由spring boot创建的默认的。(这是因为我要把H2数据库的模式改成MYSQL)

这是我的测试类:

@JdbcTest
@RunWith(SpringRunner.class)
@ActiveProfiles("test")
public class DemoApplicationTests {

    @Autowired
    JdbcTemplate jdbcTemplate;

    @Autowired
    DataSource dataSource;

    @Test
    public void contextLoads() {
        System.out.println(dataSource);
   }
}

这是我的application-test.properties:

 spring.datasource.url=jdbc:h2:mem:testdb;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE;MODE=MYSQL
 spring.datasource.username=dbuser
 spring.datasource.password=dbpass
compile('org.springframework.boot:spring-boot-starter-batch')
runtime('com.h2database:h2')
compile group: 'org.springframework.boot', name: 'spring-boot-starter-jdbc', version: '1.5.3.RELEASE'
compile group: 'org.springframework.boot', name: 'spring-boot-starter-test', version: '1.5.3.RELEASE'

控制台输出:

启动嵌入式数据库:url='jdbc:h2:mem:bfad6b71-3e2d-4a47-a32d-c76988b3c5f6;db_close_delay=-1;db_close_on_exit=false',username='sa'

我希望url是这样的:jdbc:h2:mem:testdb,我还希望它选择mode=mysql设置。

我试图跟踪这个帖子,但没有效果。

共有1个答案

方茂
2023-03-14

Spring Boot的@datajdbctest@datajpatest@jdbctest通过@autociguretestdatabase都将最终调用testdatabaseautociguration,默认情况下,后者将配置一个具有自动生成的唯一名称的内存中嵌入式数据库实例。

如果您碰巧使用一个带有@table的JPA实体,该实体具有非空的catalog属性,那么这可能会给您带来问题,因为H2要求目录名称与其数据库名称相同。

正如达内·萨沃特在回答中所说

@AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE)

将解决该测试类的问题,但如果要全局解决,请添加

spring.test.database.replace=none

您的src/test/resources/application.properties.yaml。该属性控制@AutoConfigureTestDatabase.Replace的行为。

 类似资料:
  • 问题内容: 使用嵌入式h2数据源以及JUnit(可选),用于集成测试的Spring配置看起来如何? 我第一次尝试使用SingleConnectionDataSource基本上可以成功,但是在更复杂的测试中失败了,在该测试中您需要同时进行多个连接或暂停事务。我认为基于tcp的服务器模式下的 h2 可能也能正常工作,但这可能不是内存中临时嵌入式数据库最快的通信模式。 有哪些可能性及其优势/劣势?另外,

  • 所以我用了这个嵌入Kafka的例子,还有这个 我对这个示例做了一点更改,并用一些数据库(如h2db)更新了kafka侦听器。 现在在我的单元测试中,当我想检查数据在数据库中是否可用时,我得到NULL。另外,我不确定如何手动检查数据库,因为h2是一个内存基础数据库。 这是更新的部分:在接收器类中 在单元测试中: 但 dt 始终为空。此外,我也无法检查数据库,因为它在测试停止后停止。有人知道如何使它可

  • 问题内容: 目前,我们使用HSQLDB作为嵌入式数据库,但是随着数据量的增长,我们将搜索内存占用更少的数据库。 Derby / JavaDB 目前无法选择,因为它在系统属性中全局存储属性。所以我们想到了h2。 当我们使用HSQLDB时,我们创建了一个Server对象,设置参数并启动它。这描述在这里(和如实施例中的类org.hsqldb.test.TestBase的给定)。 问题是:这也可以与h2数

  • 问题内容: 因此,我最近才开始学习有关数据库如何工作,如何使用SQL ect的知识。并决定开始在我的Java应用程序(特别是H2数据库)中实现嵌入式数据库,并且在我编写代码的计算机上似乎运行良好。 当我移到另一台计算机上继续进行编码时,我注意到,即使我移植了嵌入式数据库文件(h2-*。jar),我在第一台计算机上创建的所有准备好的表也不在第二台计算机上存在。我以某种方式先入为主,即通过数据库引擎生

  • 我正在用Cucumber编写验收测试,我想使用H2数据库进行测试。 应用程序测试属性如下所示: 在目录resources/db/migration中,我有一个包含这些脚本的sql文件: 但是当我运行测试时,H2用默认格式创建模式,而不是使用脚本: 如您所见,所有VARCHAR都是使用255大小创建的,而不是真实值。 你能帮我把飞行道和H2整合起来吗? 谢谢!

  • 我对一个应用程序的JPA层进行了几个单元测试。这个JPA层由JPA实体和一个提供持久化实体所需的基本API的服务组成。单元TET直接使用javax.Persistence类来处理PersistenceManager。然后测试持久性API,我可以在日志中看到创建表和序列等的SQL语句。 persistence.xml文件的相关部分如下所示: 我已经下载了Windows安装程序H2 1.4.200,并