2016-11-05 2 views
0

Ich möchte SQL-Daten einfügen, wenn ich diese Datenquellenkonfiguration ausführen, aber ich kann nicht die Daten in meiner Testklasse abrufen. Es funktioniert, wenn ich die Daten zuerst innerhalb der Testklasse erzeuge und es bekomme.Hsqldb wird nicht mit Daten gefüllt

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

Innerhalb einer Testklasse:

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

} 

Antwort

0

Frühling data.sql sowie Daten für aussehen - $ {Plattform} .SQL Dateien auszuführen. Es verwendet Spring JDBC, um dies zu tun.

Versuchen Sie, Ihre SQL-Datei zu data.sql Umbenennen und Ihre Methode entsprechend anpassen:

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

statt

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

Jetzt bekomme ich diese Fehlermeldung: „user fehlt Privileg oder object not found: User "Nachdem ich versucht habe, mit einem Benutzer aufzufüllen, vermute ich, dass die im Speicher befindliche db die Daten nicht speichert, wenn ich versuche, den Test auszuführen – T3rraform

Verwandte Themen