Voortbouwend op het antwoord van Alfredos, is dit een manier om database-informatie te injecteren zonder het standaardscript van de ingesloten database aan te roepen. Dit kan bijvoorbeeld handig zijn als u de DDL automatisch voor u wilt bouwen - in ieder geval in tests.
@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;
}
}
Op deze manier wordt de runOnce()
methode wordt één keer en slechts één keer aangeroepen voor de testrun. Als u isInitialized
. maakt een instantieveld (niet-statisch), wordt de methode voor elke test aangeroepen. Op deze manier kunt u, indien nodig, de tabellen laten vallen/opnieuw vullen voor elke testrun.
Merk op dat dit nog steeds een nogal snelle en vuile oplossing is en dat de verstandige manier om met de database om te gaan in overeenstemming is met het antwoord van Ralph.