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

如何在集成测试阶段使用Spring嵌入式数据库初始化脚本?

云鸿祯
2023-03-14

我可以使用Spring以编程方式创建和初始化嵌入式数据库:

@Before
public void setUp() {
    database = new EmbeddedDatabaseBuilder()
            .setType(EmbeddedDatabaseType.H2)
            .addScript("schema.sql")
            .addScript("init.sql")
            .build();
    ....
}

或通过Spring配置:

<jdbc:initialize-database data-source="dataSource">
  <jdbc:script location="classpath:schema.sql"/>
  <jdbc:script location="classpath:init.sql"/>
</jdbc:initialize-database>

这里,我的脚本schema.sqlinit.sql存储在目录src/test/resources中。因此,如果使用嵌入式数据库运行测试时:

mvn test

然后,src/test/resources中的文件就可用了,一切都很好。

mvn integration-test

由:java.io.FileNotFoundException引起:无法打开类路径资源[schema.sql],因为它不存在

现在,如果我将脚本放入src/main/resources中,一切都可以工作了,但是这些脚本只是用来填充嵌入式数据库进行测试,它们根本不属于war文件。有没有人知道如何设置集成测试,以便可以使用Emeded数据库,而不污染将要部署的实际war文件?

我希望Spring的嵌入式数据库初始化可以使用文件以外的东西。我考虑过JNDI,但这似乎需要用测试数据的资源定义污染web.xml文件,而测试数据将(再次)出现在可部署的WAR中。或者也许有使用货物的选择?一些我不知道的Spring编程技巧?

共有1个答案

太叔高义
2023-03-14

您应该能够这样做:

<jdbc:initialize-database data-source="dataSource">
    <jdbc:script location="file:///${project.basedir}/src/test/resources/schema.sql"/>
    <jdbc:script location="file:///${project.basedir}/src/test/resources/init.sql"/>
</jdbc:initialize-database>
 类似资料:
  • 我正在尝试执行以下操作: > 在mvn测试阶段将一些数据库脚本执行到hsqldb中 将该数据库用于测试目的 我能够配置maven,以便每次调用测试阶段时,所有脚本都成功执行,但是(当然有但是),我所有的测试都失败了。 我的配置: pom.xml 测试Spring配置: 输出: 但后来我所有的测试都失败了。我需要你的帮助,找出为什么它不起作用,并帮助我找到解决方案。非常感谢。 @安德鲁洛维诺夫 这是

  • 我正在尝试用一个视图和一个规则来初始化我的数据库,遵循75.3使用Spring JDBC初始化数据库。 75.3使用Spring JDBC初始化数据库 Spring JDBC有一个数据源初始化器特性。Spring Boot默认情况下启用它,并从标准位置schema.SQL和data.SQL(在类路径的根目录中)加载SQL。此外,Spring Boot将加载模式-${platform}.sql和数据

  • 我有一个基于maven的J2EE项目。此项目包含到数据库的连接,该连接是通过资源设置的。xml和持久性。xml。正常部署时,连接工作正常。 我的问题是,我想运行嵌入式TomEE服务器进行集成测试。对于这些测试,我需要使用内存数据库。 要启动TomEE,我使用如下所示的maven插件组合。 当我启动maven goal mvn安装时,服务器按预期运行,但数据库连接错误。我没有找到方法,如何设置,我需

  • 我正在定义自己的Liquibase自动配置来管理多租户,这涉及一个原型bean: 原型bean在运行时通过

  • 我有一个使用kotlin开发的spring-boot应用程序--总体来说一切都很顺利。(spring 1.5.6.发行版,kotlin 1.1.4-3) 我尝试过的一些addl方法:-确保我没有使用不推荐的TestRestTemplate-尝试使用setter注入而不是field注入,但这是浪费时间。-禁用kotlin编译器插件