Alfredosの回答に基づいて、これは組み込みデータベースのデフォルトスクリプトを呼び出さずにデータベース情報を挿入する方法です。たとえば、これは、少なくともテストでは、自動的にDDLを構築する場合に役立ちます。
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration({"/applicationContext.xml"})
public class TestClass {
@Autowired
private ApplicationContext ctx;
private JdbcTemplate template;
@Autowired
public void setDataSource(DataSource dataSource) {
template = new JdbcTemplate(dataSource);
}
private static boolean isInitialized = false;
@Before
public void runOnce() {
if (isInitialized) return;
System.out.println("Initializing database");
String script = "classpath:script.sql";
Resource resource = ctx.getResource(script);
JdbcTestUtils.executeSqlScript(template, resource, true);
isInitialized = true;
}
}
このように、runOnce()
メソッドは、テスト実行のために1回だけ呼び出されます。 isInitialized
を作成した場合 インスタンスフィールド(非静的)の場合、メソッドはすべてのテストの前に呼び出されます。このようにして、すべてのテストを実行する前に、必要に応じてテーブルを削除/再設定できます。
これはまだかなり迅速で汚い解決策であり、データベースを処理するための賢明な方法はラルフの答えに従っていることに注意してください。