Въз основа на отговора на 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()
методът се извиква веднъж и само веднъж за тестовото изпълнение. Ако направите isInitialized
поле на екземпляра (нестатично), методът ще бъде извикан преди всеки тест. По този начин можете да пуснете/попълвате отново таблиците, ако е необходимо, преди всяко тестово изпълнение.
Имайте предвид, че това все още е доста бързо и мръсно решение и разумният начин за работа с базата данни е в съответствие с отговора на Ралф.