在内存H2数据库中,插入不在SpringBootTest中工作

时间:2016-09-21 22:07:34

标签: testing spring-boot h2

  

我有一个SpringBootApplicationWhich我希望测试。

以下是有关我的文件的详细信息

  

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

}

请帮忙! 用于Spring引导应用程序的PS正在挑选测试bean,因此bean实例化绝对不是问题。我想我错过了一些属性。

我不在我的应用程序中使用hibernate,即使在相同的应用程序上下文(子上下文)中数据也会消失。即我运行一个弹簧启动应用程序,它读取先前插入的数据

1 个答案:

答案 0 :(得分:0)

问题解决了。 从application.properties中删除spring.datasource.platform = h2。 使我的h2数据持续存在。 但我还是想知道h2是如何自动启动的?