43

XML ファイルを作成せずにデータベースを初期化する方法を知りたいです。

私はすでにこの種の初期化を正常に使用していますが、現在のケースでは XML を作成したくありません。

<jdbc:initialize-database data-source="dataSource">
  <jdbc:script location="classpath:com/foo/sql/db-schema.sql"/>
  <jdbc:script location="classpath:com/foo/sql/db-test-data.sql"/>
</jdbc:initialize-database>

私は組み込みデータベースを作成できることを知っています:

EmbeddedDatabaseBuilder builder = new EmbeddedDatabaseBuilder();
EmbeddedDatabase db = builder.setType(H2).addScript("my-schema.sql").addScript("my-test-data.sql").build();

私の場合、データベースとスキーマは Liquibase を使用して作成されます。

そのためだけに毎回新しい XML ファイルを作成することなく、Spring とカスタマイズしたデータセットで初期化したいだけです。

出来ますか?

4

4 に答える 4

6

それは確かに可能です。

@ConfigurationSpring によってロードされているクラスがすでにある場合は、既にあるコードを含むApplicationContext新しいメソッドを作成するだけです(もちろん追加のステートメントを使用して)。@Beanreturn

EmbeddedDatabaseインターフェースを実装しているDataSourceので、 で簡単に使用できますJdbcTemplate

@Bean
public DataSource db() {
    EmbeddedDatabaseBuilder builder = new EmbeddedDatabaseBuilder();
    builder.setType(H2).addScript("my-schema.sql").addScript("my-test-data.sql");
    return builder.build();
}
于 2013-04-16T13:46:10.457 に答える
6

EmbeddedDatabaseBuilder に関連する Spring クラスを調べたところ、DatabaseBuilder が次のようなコードを使用していることがわかりました。

ResourceDatabasePopulator populator = new ResourceDatabasePopulator();
for (String sqlScript: sqlInitializationScripts ) {
  Resource sqlScriptResource = RESOURCE_LOADER.getResource(sqlScript);
  populator.addScript(sqlScriptResource);
}
DatabasePopulatorUtils.execute(populator, dataSource);

これは、Spring 構成ではなく @BeforeTest メソッドであっても、うまく機能します。

于 2013-04-16T14:26:59.783 に答える