【问题标题】:How to combine multiple SQL files with different separators in one EmbeddedDatabaseBuilder?如何在一个 EmbeddedDatabaseBuilder 中组合多个具有不同分隔符的 SQL 文件?
【发布时间】:2017-07-05 17:24:46
【问题描述】:

我需要设置一个嵌入式数据库才能在 Spring Boot 项目中运行我的测试用例。

我已将我的 SQL 脚本分成两个文件,以便为它们设置不同的分隔符:

一个包含我的基本创建表脚本 (NAME = create-table.sql, SEPARATOR = ;),另一个包含存储过程 (NAME = stored-procedures.sql, ,分隔符 = /;)。

根据this post 上的 cmets,我可以通过在 applicationContext.xml 中执行此操作为两个 sql 文件配置不同的分隔符:

<jdbc:initialize-database data-source="mctDBDataSource" ignore-failures="DROPS" >    
  <jdbc:script location="classpath:databaseTesting/inMemory/createInMemoryDatabase.sql" separator=";"/>
  <jdbc:script location="classpath:databaseTesting/inMemory/createInMemoryDatabaseProcedures.sql" separator="/;"/>
</jdbc:initialize-database>

但就我而言,我正在尝试使用如下的非 XML 方法。

public DataSource myDataSource(){
   return new EmbeddedDatabaseBuilder().generateUniqueName(true)
   .setType(EmbeddedDatabaseType.HSQL).addScript("create-table").setSeparator(";").setEncryptEncoding("UTF-8")
   .ignoreFiledDrops(true).build();
}

如果我只使用一个 SQL 文件,上面的代码可以正常工作。

如何将两个不同分隔符的 SQL 文件组合成一个 DataSource。

这样做是行不通的:

public DataSource myDataSource(){
  return new EmbeddedDatabaseBuilder().generateUniqueName(true)
  .setType(EmbeddedDatabaseType.HSQL).addScript("create-table")
  .setSeparator(";").addScript("stored-procedures").setSeparator("/;")setEncryptEncoding("UTF-8")
  .ignoreFiledDrops(true).build();
}

【问题讨论】:

    标签: spring datasource embedded-database


    【解决方案1】:

    您不能直接使用EmbeddedDatabaseFactor 执行此操作,但您可以使用EmbeddedDatabaseFactor 中的一个脚本,然后使用新的ResourceDatabasePopulator 在数据库上执行第二个脚本。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-13
      • 1970-01-01
      相关资源
      最近更新 更多