Dựa trên câu trả lời của Alfredos, đây là một cách để đưa thông tin cơ sở dữ liệu vào mà không cần gọi tập lệnh mặc định của cơ sở dữ liệu nhúng. Ví dụ, điều này có thể hữu ích khi bạn muốn tự động xây dựng DDL cho mình - ít nhất là trong các thử nghiệm.
@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;
}
}
Bằng cách này, runOnce()
phương thức được gọi một lần và chỉ một lần cho quá trình chạy thử nghiệm. Nếu bạn thực hiện isInitialized
một trường thể hiện (không tĩnh), phương thức sẽ được gọi trước mỗi lần kiểm tra. Bằng cách này, bạn có thể thả / tái tạo lại các bảng, nếu cần, trước mỗi lần chạy thử nghiệm.
Lưu ý rằng đây vẫn là một giải pháp khá nhanh và khó xử lý và cách hợp lý để xử lý cơ sở dữ liệu phù hợp với câu trả lời của Ralph.