2016-11-05 7 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

весна будет искать 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

Теперь я получаю эту ошибку: «пользователь не имеет привилегий или объект не найден: пользователь «После того, как я попытаюсь заполнить с пользователем, я предполагаю, что в db памяти не сохраняются данные, когда я пытаюсь запустить тест – T3rraform