2016-01-29 88 views
0

我之前使用过此技术并明确指定了所有配置。日志表明它是创建数据源和加载脚本:在springboot测试中未从嵌入式H2数据源中检索数据

o.s.j.d.e.EmbeddedDatabaseFactory - Starting embedded database: url='jdbc:h2:mem:balancer;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=false', username='sa' 
o.s.j.d.i.ScriptUtils - Executing SQL script from class path resource [db/migration/V1_0001__create_queue_server_table.sql] 
o.s.j.d.i.ScriptUtils - Executed SQL script from class path resource [db/migration/V1_0001__create_queue_server_table.sql] in 20 ms. 
o.s.j.d.i.ScriptUtils - Executing SQL script from class path resource [db/migration/V1_0002__queue_server_entries.sql] 
o.s.j.d.i.ScriptUtils - Executed SQL script from class path resource [db/migration/V1_0002__queue_server_entries.sql] in 8 ms. 
o.s.o.j.LocalContainerEntityManagerFactoryBean - Building JPA container EntityManagerFactory for persistence unit 'default' 

我能够调用REST Web服务和呼叫经过到存储库,但什么都不会返回。当连接到mysql并返回加载的数据时,应用程序工作正常。我看不出有什么缺失WRT配置:

测试用例:

@RunWith(SpringJUnit4ClassRunner.class) 
@SpringApplicationConfiguration(classes = {QueueServiceApplication.class, TestConfig.class}) 
@WebAppConfiguration 
@ActiveProfiles({"test"}) 
public class QueueServiceApplicationTests { 

    private static final int EXPECTED_SERVER_COUNT = 10; 

    @Autowired 
    private WebApplicationContext webCtx; 

    private MockMvc mvc; 

    @Before 
    public void init() { 
     mvc = MockMvcBuilders.webAppContextSetup(webCtx).build(); 
    } 

    @Test 
    public void successListAll() throws Exception { 
    mvc.perform(get("/listall")).andExpect(status().isOk()) 
      .andExpect(content().contentType(MediaType.APPLICATION_JSON)) 
      .andExpect(jsonPath("$", hasSize(EXPECTED_SERVER_COUNT))); 


    } 
} 

测试配置对象的嵌入式数据源:

@Configuration 
@Profile("test") 
public class TestConfig { 
    @Bean 
    public DataSource dataSource() { 
     return new EmbeddedDatabaseBuilder() 
      .addScript("classpath:/db/migration/V1_0001__create_queue_server_table.sql") 
      .addScript("classpath:/db/migration/V1_0002__queue_server_entries.sql") 
      .setType(EmbeddedDatabaseType.H2) 
      .setName("vitel-balancer") 
      .setScriptEncoding("UTF8") 
      .build(); 
    } 
} 

启动:

@SpringBootApplication 
public class QueueServiceApplication { 

    public static void main(String[] args) { 
     SpringApplication.run(QueueServiceApplication.class, args); 
    } 
} 

我使用的是春天-boot 1.3.2,java 8 update 72

回答

0

我已经能够通过改变我的TestConfig类

@Configuration 
@Profile("test") 
public class TestConfig { 

    @Bean 
    public DataSource dataSource() { 
     return new EmbeddedDatabaseBuilder() 
       .setType(EmbeddedDatabaseType.H2) 
       .build(); 
    } 

    @Bean 
    public ResourceDatabasePopulator populator() { 
     ResourceDatabasePopulator pop = new ResourceDatabasePopulator(); 
     pop.addScript(new ClassPathResource("db/migration/V1_0001__create_queue_server_table.sql")); 
     pop.addScript(new ClassPathResource("db/migration/V1_0002__queue_server_entries.sql")); 
     pop.setContinueOnError(true); 

     return pop; 
    } 

    @Bean 
    public DataSourceInitializer dbInit(DataSource ds, ResourceDatabasePopulator populator) { 
     DataSourceInitializer init = new DataSourceInitializer(); 
     init.setDataSource(ds); 
     init.setDatabasePopulator(populator); 
     init.setEnabled(true); 

     return init; 
    } 
} 

我不知道这是为什么,使用EmbeddedDatabaseBuilder并添加脚本给它不同的解决这一问题。如果有解释会很有帮助