Bygger på Alfredos svar, detta är ett sätt att injicera databasinformation utan att anropa den inbäddade databasens standardskript. Detta kan till exempel vara användbart när du automatiskt vill bygga DDL åt dig - åtminstone i tester.
@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;
}
}
På detta sätt, runOnce()
metoden anropas en gång och endast en gång för testkörningen. Om du gör isInitialized
ett instansfält (icke-statiskt), kommer metoden att anropas före varje test. På så sätt kan du släppa/fylla i tabellerna, om det behövs, före varje testkörning.
Observera att detta fortfarande är en ganska snabb och smutsig lösning och det vettiga sättet att hantera databasen är i enlighet med Ralphs svar.