内存H2数据库,插入不工作在SpringBootTest
问题描述:
我有一个SpringBootApplication我想测试。内存H2数据库,插入不工作在SpringBootTest
下面是详细信息我的文件
application.properties
PRODUCT_DATABASE_PASSWORD=
PRODUCT_DATABASE_USERNAME=sa
PRODUCT_DATABASE_CONNECTION_URL=jdbc:h2:file:./target/db/testdb
PRODUCT_DATABASE_DRIVER=org.h2.Driver
RED_SHIFT_DATABASE_PASSWORD=
RED_SHIFT_DATABASE_USERNAME=sa
RED_SHIFT_DATABASE_CONNECTION_URL=jdbc:h2:file:./target/db/testdb
RED_SHIFT_DATABASE_DRIVER=org.h2.Driver
spring.datasource.platform=h2
ConfigurationClass
@SpringBootConfiguration
@SpringBootApplication
@Import({ProductDataAccessConfig.class, RedShiftDataAccessConfig.class})
public class TestConfig {
}
主测试类
@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest(classes = {TestConfig.class,ConfigFileApplicationContextInitializer.class}, webEnvironment = SpringBootTest.WebEnvironment.NONE)
public class MainTest {
@Autowired(required = true)
@Qualifier("dataSourceRedShift")
private DataSource dataSource;
@Test
public void testHourlyBlock() throws Exception {
insertDataIntoDb(); //data sucessfully inserted
SpringApplication.run(Application.class, new String[]{}); //No data found
}
}
数据访问在Application.class;
try (Connection conn = dataSourceRedShift.getConnection();
Statement stmt = conn.createStatement() {
//access inserted data
}
请帮助! PS对于spring启动应用程序来说,测试bean正在被选中,所以bean实例化绝对不是问题。我想我错过了一些属性。
我没有在我的应用程序中使用hibernate,即使在相同的应用程序上下文(子上下文)中数据也会关闭。即我运行一个弹簧启动应用程序,它读取先前插入的数据
答
问题已解决。 从application.properties中删除spring.datasource.platform = h2。 使我的h2数据持续存在。 但我仍想知道h2是如何自动启动的?
在测试中,默认情况下更改会回滚,您是否禁用事务回滚? –
我没有使用任何事务管理器。 是否默认配置? 在每次查询都没有帮助之后,我确实尝试了connection.commit! – user1615664
您可以参考thie [docs](http://docs.spring.io/spring/docs/4.3.2.RELEASE/spring-framework-reference/htmlsingle/#testcontext-tx-enabling-transactions) –