2016-11-05 131 views
0

我想在我运行此数据源配置时插入sql数据,但无法获取测试类中的数据。如果我首先在测试类中创建数据并获取它,它就可以工作。Hsqldb没有填充数据

@Configuration 
@EnableJpaRepositories("se.system.repository") 
public class DBConfig{ 

@Bean(name = "hsqldb") 
public DataSource InMemoryDataSource() { 

    EmbeddedDatabaseBuilder builder = new EmbeddedDatabaseBuilder(); 
    EmbeddedDatabase database = builder 
      .setType(EmbeddedDatabaseType.HSQL) 
      .addScript("classpath:se/system/sql/create-db.sql") 
      .setName("database") 
      .build(); 

    return database; 
} 

@Bean 
public JpaTransactionManager transactionManager(EntityManagerFactory factory) { 
    return new JpaTransactionManager(factory); 
} 

@Bean 
public JpaVendorAdapter jpaVendorAdapter() { 

    HibernateJpaVendorAdapter adapter = new HibernateJpaVendorAdapter(); 
    adapter.setDatabase(Database.HSQL); 
    adapter.setShowSql(false); 
    adapter.setGenerateDdl(true); 
    return adapter; 
} 

@Bean 
public LocalContainerEntityManagerFactoryBean entityManagerFactory() { 

    LocalContainerEntityManagerFactoryBean factory = new LocalContainerEntityManagerFactoryBean(); 

    factory.setDataSource(InMemoryDataSource()); 
    factory.setJpaVendorAdapter(jpaVendorAdapter()); 
    factory.setPackagesToScan("se.system.model"); 
    return factory; 
} 

@Bean 
public ResourceDatabasePopulator databasePopulator() { 
    ResourceDatabasePopulator populator = new ResourceDatabasePopulator(); 
    populator.setSqlScriptEncoding("UTF-8"); 
    populator.addScript(new ClassPathResource("se/system/sql/insert-data.sql")); 
    return populator; 
} 

@Bean 
public InitializingBean populatorExecutor() { 
    return() -> DatabasePopulatorUtils.execute(databasePopulator(), InMemoryDataSource()); 
} 

里面一个识别TestClass:

@BeforeClass 
public static void setUp() throws ServiceException { 

    try (AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext()) { 

     context.scan("se.system"); 
     context.refresh(); 

     userService = context.getBean(UserService.class); 


     System.out.println(userService.getUserById(1L)); 

} 

回答

0

Spring就会查找data.sql以及数据 - $ {}平台.SQL文件运行。它使用Spring JDBC来执行此操作。

尝试重命名你的SQL文件data.sql并相应地调整你的方法:

populator.addScript(new ClassPathResource("se/system/sql/data.sql")); 

,而不是

populator.addScript(new ClassPathResource("se/system/sql/insert-data.sql")); 

http://docs.spring.io/spring-boot/docs/current/reference/html/howto-database-initialization.html

+0

现在我得到这个错误:“用户缺少特权或找不到对象:用户“我试图用用户填充后,我猜测在我尝试运行测试时,内存数据库不会保留数据 – T3rraform