Spring boot множественный источник данных, таблицы H2 не найдены - PullRequest
0 голосов
/ 29 апреля 2018

Spring boot с множественными источниками данных H2 и Mysql, без создания таблиц H2 в консоли. при доступе к таблице h2 получаю ошибку, говоря, что таблица не найдена. при проверке консоли я мог убедиться, что таблицы не созданы.

У меня есть два источника данных: один - ibdemo, который использует MySQL, а другой - h2. И классы сущностей есть в соответствующих пакетах.

Th таблицы H2 создаются при удалении пользовательской конфигурации источника данных и пробуют автоматическую настройку, но таблицы MySQL также создаются в базе данных H2.

Я хочу использовать оба в моем приложении. Это свойства

## ibdemo proeprties
app.datasource.ibdemo.url=jdbc:mysql://url
app.datasource.ibdemo.username=username
app.datasource.ibdemo.password=password
app.datasource.ibdemo.driver-class-name=com.mysql.jdbc.Driver

## H2 DB properties

spring.h2.console.enabled=true
app.datasource.h2.url=jdbc:h2:mem:testdb
app.datasource.h2.driver-class-name=org.h2.Driver
app.datasource.h2.username=sa
app.datasource.h2.password=

IBDemoDataSource

@Configuration
@EnableJpaRepositories(
        entityManagerFactoryRef = "ibDemoEntityManager",
        transactionManagerRef = "ibDemoTransactionManager",
        basePackages = {"com.cavion.demo.repositories"}
        )
public class IBDemoConfig {

@Bean(name = "ibDemoEntityManager")
@Primary
public LocalContainerEntityManagerFactoryBean getIBDemoEntityManager(EntityManagerFactoryBuilder builder,
        @Qualifier("ibDemoDataSource") DataSource ibDemoDataSource){

    return builder
            .dataSource(ibDemoDataSource)
            .packages("com.cavion.demo.entity")
            .persistenceUnit("ibdemo")
            .build();
}


@Bean("ibDemoDataSourceProperties")
@Primary
@ConfigurationProperties("app.datasource.ibdemo")
public DataSourceProperties ibDemoDataSourceProperties(){
    return new DataSourceProperties();
}


@Bean("ibDemoDataSource")
@Primary
@ConfigurationProperties("app.datasource.ibdemo")
public DataSource ibDemoDataSource(@Qualifier("ibDemoDataSourceProperties") DataSourceProperties ibDemoDataSourceProperties) {
    return ibDemoDataSourceProperties().initializeDataSourceBuilder().build();
}

@Bean(name = "ibDemoTransactionManager")
public JpaTransactionManager transactionManager(@Qualifier("ibDemoEntityManager") EntityManagerFactory ibDemoEntityManager){
    JpaTransactionManager transactionManager = new JpaTransactionManager();
    transactionManager.setEntityManagerFactory(ibDemoEntityManager);
    return transactionManager;
}
}


H2DataSource

@Configuration
@EnableJpaRepositories(
        entityManagerFactoryRef = "h2DemoEntityManager",
        transactionManagerRef = "h2DemoTransactionManager",
        basePackages = {"com.tfs.repository"}
        )
public class H2DemoConfig {

@Bean(name = "h2DemoEntityManager")
public LocalContainerEntityManagerFactoryBean getServersEntityManager(EntityManagerFactoryBuilder builder,
        @Qualifier("h2DemoDataSource") DataSource h2DemoDataSource){

    return builder
            .dataSource(h2DemoDataSource)
            .packages("com.tfs.entity")
            .persistenceUnit("h2demo")
            .build();
}


@Bean("h2DemoDataSourceProperties")
@ConfigurationProperties("app.datasource.h2")
public DataSourceProperties h2DemoDataSourceProperties(){
    return new DataSourceProperties();
}


@Bean("h2DemoDataSource")
@ConfigurationProperties("app.datasource.h2")
public DataSource h2DemoDataSource(@Qualifier("h2DemoDataSourceProperties") DataSourceProperties h2DemoDataSourceProperties) {
    return h2DemoDataSourceProperties().initializeDataSourceBuilder().build();
}

@Bean(name = "h2DemoTransactionManager")
public JpaTransactionManager transactionManager(@Qualifier("h2DemoEntityManager") EntityManagerFactory h2DemoEntityManager){
    JpaTransactionManager transactionManager = new JpaTransactionManager();
    transactionManager.setEntityManagerFactory(h2DemoEntityManager);
    return transactionManager;
}
}


**Main method**

@SpringBootApplication(exclude = { DataSourceAutoConfiguration.class,
    DataSourceTransactionManagerAutoConfiguration.class})
@EnableAsync
@EntityScan({"com.cavion.demo.entity","com.tfs.entity"})
@ComponentScan({"com.cavion.controller","com.cavion.service",
             "com.udemanager.service", "com.udemanager.controller", "com.udemanager.entity" ,"com.tfs.controller","com.tfs.service"})

@Import({IBDemoConfig.class, H2DemoConfig.class})

public class UdeManagerServiceApplication extends SpringBootServletInitializer {

}

Журналы Похоже, что H2 DataSource все еще использует MySql5 Dialect

2018-04-29 13:13:29.173  INFO 1888 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean   : Mapping filter: 'httpPutFormContentFilter' to: [/*]
2018-04-29 13:13:29.173  INFO 1888 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean   : Mapping filter: 'requestContextFilter' to: [/*]
2018-04-29 13:13:57.987  INFO 1888 --- [  restartedMain] j.LocalContainerEntityManagerFactoryBean : Building JPA container EntityManagerFactory for persistence unit 'ibdemo'
2018-04-29 13:13:57.987  INFO 1888 --- [  restartedMain] o.hibernate.jpa.internal.util.LogHelper  : HHH000204: Processing PersistenceUnitInfo [
name: ibdemo
...]
2018-04-29 13:13:58.019  INFO 1888 --- [  restartedMain] org.hibernate.dialect.Dialect            : HHH000400: Using dialect: org.hibernate.dialect.MySQL5Dialect
2018-04-29 13:13:58.128  INFO 1888 --- [  restartedMain] j.LocalContainerEntityManagerFactoryBean : Initialized JPA EntityManagerFactory for persistence unit 'ibdemo'
2018-04-29 13:13:58.347  INFO 1888 --- [  restartedMain] j.LocalContainerEntityManagerFactoryBean : Building JPA container EntityManagerFactory for persistence unit 'h2demo'
2018-04-29 13:13:58.347  INFO 1888 --- [  restartedMain] o.hibernate.jpa.internal.util.LogHelper  : HHH000204: Processing PersistenceUnitInfo [
name: h2demo
...]
2018-04-29 13:13:58.394  INFO 1888 --- [  restartedMain] org.hibernate.dialect.Dialect            : HHH000400: Using dialect: org.hibernate.dialect.MySQL5Dialect
2018-04-29 13:13:58.440  INFO 1888 --- [  restartedMain] j.LocalContainerEntityManagerFactoryBean : Initialized JPA EntityManagerFactory for persistence unit 'h2demo'
2018-04-29 13:13:58.550  INFO 1888 --- [  restartedMain] o.h.h.i.QueryTranslatorFactoryInitiator  : HHH000397: Using ASTQueryTranslatorFactory
2018-04-29 13:13:58.846  INFO 1888 --- [  restartedMain] o.s.s.concurrent.ThreadPoolTaskExecutor  : Initializing ExecutorService

1 Ответ

0 голосов
/ 02 мая 2018

Как вы создаете таблицы? С весенним источником данных? Если вы исключите DataSourceAutoConfiguration.class в @SpringBootApplication, инициализация базы данных не произойдет.

Вы можете проверить код org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...