2016-11-05 1 views
0

Je veux insérer des données SQL lorsque j'exécute cette configuration de source de données, mais je ne peux pas obtenir les données dans ma classe de test. Cela fonctionne si je crée les données d'abord à l'intérieur de la classe de test et que je l'obtiens.Hsqldb n'est pas rempli avec des données

@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()); 
} 

l'intérieur d'un 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)); 

} 

Répondre

0

printemps cherchera data.sql ainsi que données - $ {} plateforme .SQL fichiers à exécuter. Il utilise Spring JDBC pour ce faire.

Renommez votre fichier sql à data.sql et adaptez votre méthode en conséquence:

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

au lieu de

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

Maintenant, je reçois cette erreur: « utilisateur n'a pas le privilège ou objet non trouvé: Utilisateur "Après avoir essayé de remplir avec un utilisateur, je devine que la mémoire de données ne conserve pas les données lorsque j'essaie d'exécuter le test – T3rraform