Spring boot 2 - конфигурация с несколькими источниками данных с использованием HikariDataSource - PullRequest
0 голосов
/ 30 апреля 2020

Я настроил две базы данных Oracle с пружинной загрузкой, но Spring всегда выбирает первичную базу данных и игнорирует вторичную, любая помощь будет оценена.

моя конфигурация выглядит как это

приложение .properties

#=======================================
##### DB1 Configuration ######
spring.db1.datasource.url=jdbc:oracle:thin:@dr02sc-c1-scan.db1:1660
spring.db1.datasource.username=test
spring.db1.datasource.password=test
spring.db1.datasource.driver-class-name=oracle.jdbc.OracleDriver

spring.db1.hibernate.dialect=org.hibernate.dialect.Oracle10gDialect
spring.db1.hibernate.show_sql=false
spring.db1.hibernate.format_sql=false
spring.db1.hibernate.hbm2ddl.auto=none
spring.db1.entitymanager.packagesToScan=com.test.entity.db1
##### DB1 Configuration ######

##### DB2 Configuration ######
spring.db2.datasource.url=jdbc:oracle:thin:@dr01-scan.db2:1580
spring.db2.datasource.username=test2
spring.db2.datasource.password=test2
spring.db2.datasource.driver-class-name=oracle.jdbc.OracleDriver

spring.db2.hibernate.dialect=org.hibernate.dialect.Oracle10gDialect
spring.db2.hibernate.show_sql=true
spring.db2.hibernate.format_sql=false
spring.db2.hibernate.hbm2ddl.auto=none
spring.db2.entitymanager.packagesToScan=com.test.entity.db2
##### DB2 Configuration #####

это мой основной источник данных DB1. У него есть только один репозиторий.

@EnableTransactionManagement
@PropertySource("classpath:application.properties")
@EnableJpaRepositories(entityManagerFactoryRef = "db1EntityManagerFactory", transactionManagerRef = "db1TransactionManager", basePackages = {
        "com.test.dao.db1" })
public class Db1DBConfig {

    private static final Logger LOGGER = LoggerFactory.getLogger(Db1DBConfig.class);

    @Value("${spring.db1.datasource.driver-class-name}")
    private String driverClassName;

    @Value("${spring.db1.datasource.username}")
    private String user;

    @Value("${spring.db1.datasource.password}")
    private String password;

    @Value("${spring.db1.datasource.url}")
    private String url;

    @Value("${spring.db1.hibernate.dialect}")
    private String hibernateDialect;

    @Value("${spring.db1.hibernate.show_sql}")
    private String hibernateShowSql;

    @Value("${spring.db1.hibernate.format_sql}")
    private String hibernateFormatSql;

    @Value("${spring.db1.hibernate.hbm2ddl.auto}")
    private String hibernateHbm2DdlAuto;

    @Value("${spring.db1.entitymanager.packagesToScan}")
    private String packagesToScan;

    @Primary
    @Bean("db1DataSource")
    public DataSource getDataSource() {
        LOGGER.debug("db1: getDataSource");
        HikariDataSource dataSource = new HikariDataSource();
        dataSource.setDriverClassName(driverClassName);
        dataSource.setUsername(user);
        dataSource.setPassword(password);
        dataSource.setJdbcUrl(url);
        dataSource.setMaximumPoolSize(10);
        dataSource.setMaxLifetime(2000000);
        dataSource.setIdleTimeout(30000);
        dataSource.setConnectionTimeout(30000);
        dataSource.setMinimumIdle(5);

        dataSource.addDataSourceProperty("cachePrepStmts", "true");
        dataSource.addDataSourceProperty("prepStmtCacheSize", "250");
        dataSource.addDataSourceProperty("prepStmtCacheSqlLimit", "2048");
        dataSource.addDataSourceProperty("useServerPrepStmts", "true");

        return dataSource;
    }

    @Primary
    @Bean("db1TransactionManager")
    @Autowired
    public PlatformTransactionManager getTransactionManager(
            @Qualifier("db1EntityManagerFactory") EntityManagerFactory entityManagerFactory) throws NamingException {
        LOGGER.debug("db1: getTransactionManager");
        JpaTransactionManager jpaTransaction = new JpaTransactionManager();
        jpaTransaction.setEntityManagerFactory(entityManagerFactory);
        return jpaTransaction;
    }

    @Primary
    @Bean("db1EntityManagerFactory")
    public LocalContainerEntityManagerFactoryBean getEntityManagerFactory() {
        LOGGER.debug("db1: getEntityManagerFactory");
        LocalContainerEntityManagerFactoryBean emf = new LocalContainerEntityManagerFactoryBean();
        emf.setDataSource(getDataSource());
        emf.setPackagesToScan(packagesToScan);
        emf.setJpaVendorAdapter(getHibernateAdapter());
        emf.setPersistenceUnitName("db1");
        Properties jpaProperties = new Properties();
        jpaProperties.put("hibernate.dialect", hibernateDialect);
        jpaProperties.put("hibernate.hbm2ddl.auto", hibernateHbm2DdlAuto);
        jpaProperties.put("hibernate.show_sql", hibernateShowSql);
        jpaProperties.put("hibernate.format_sql", hibernateFormatSql);
        jpaProperties.put("hibernate.temp.use_jdbc_metadata_defaults", "false");
        emf.setJpaProperties(jpaProperties);
        return emf;
    }

    @Primary
    @Bean("db1HibernateAdapter")
    public JpaVendorAdapter getHibernateAdapter() {
        return new HibernateJpaVendorAdapter();
    }
}

Это мой вторичный источник данных DB2. В нем более одного репозитория.

@EnableTransactionManagement
@PropertySource("classpath:application.properties")
@EnableJpaRepositories(entityManagerFactoryRef = "db2EntityManagerFactory", transactionManagerRef = "db2TransactionManager", basePackages = {
        "com.test.dao.db2" })
public class Db2DBConfig {

    private static final Logger LOGGER = LoggerFactory.getLogger(Db2DBConfig.class);

    @Value("${spring.db2.datasource.driver-class-name}")
    private String driverClassName;

    @Value("${spring.db2.datasource.username}")
    private String user;

    @Value("${spring.db2.datasource.password}")
    private String password;

    @Value("${spring.db2.datasource.url}")
    private String url;

    @Value("${spring.db2.hibernate.dialect}")
    private String hibernateDialect;

    @Value("${spring.db2.hibernate.show_sql}")
    private String hibernateShowSql;

    @Value("${spring.db2.hibernate.format_sql}")
    private String hibernateFormatSql;

    @Value("${spring.db2.hibernate.hbm2ddl.auto}")
    private String hibernateHbm2DdlAuto;

    @Value("${spring.db2.entitymanager.packagesToScan}")
    private String packagesToScan;

    @Bean("db2DataSource")
    public DataSource getDataSource() {
        LOGGER.debug("db2: getDataSource");
        HikariDataSource dataSource = new HikariDataSource();
        dataSource.setDriverClassName(driverClassName);
        dataSource.setUsername(user);
        dataSource.setPassword(password);
        dataSource.setJdbcUrl(url);
        dataSource.setMaximumPoolSize(10);
        dataSource.setMaxLifetime(30000);
        dataSource.setIdleTimeout(30000);
        dataSource.setConnectionTimeout(30000);
        dataSource.setMinimumIdle(5);

        dataSource.addDataSourceProperty("cachePrepStmts", "true");
        dataSource.addDataSourceProperty("prepStmtCacheSize", "250");
        dataSource.addDataSourceProperty("prepStmtCacheSqlLimit", "2048");
        dataSource.addDataSourceProperty("useServerPrepStmts", "true");

        return dataSource;
    }

    @Bean("db2TransactionManager")
    @Autowired
    public PlatformTransactionManager getTransactionManager(
            @Qualifier("db2EntityManagerFactory") EntityManagerFactory entityManagerFactory) throws NamingException {
        JpaTransactionManager jpaTransaction = new JpaTransactionManager();
        jpaTransaction.setEntityManagerFactory(entityManagerFactory);
        return jpaTransaction;
    }

    @Bean("db2EntityManagerFactory")
    public LocalContainerEntityManagerFactoryBean getEntityManagerFactory() {
        LOGGER.debug("db2: getEntityManagerFactory");
        LocalContainerEntityManagerFactoryBean emf = new LocalContainerEntityManagerFactoryBean();
        emf.setDataSource(getDataSource());
        emf.setPackagesToScan(packagesToScan);
        emf.setJpaVendorAdapter(getHibernateAdapter());
        emf.setPersistenceUnitName("db2");
        Properties jpaProperties = new Properties();
        jpaProperties.put("hibernate.dialect", hibernateDialect);
        jpaProperties.put("hibernate.hbm2ddl.auto", hibernateHbm2DdlAuto);
        jpaProperties.put("hibernate.show_sql", hibernateShowSql);
        jpaProperties.put("hibernate.format_sql", hibernateFormatSql);
        jpaProperties.put("hibernate.temp.use_jdbc_metadata_defaults", "false");
        emf.setJpaProperties(jpaProperties);
        return emf;
    }

    @Bean("db2HibernateAdapter")
    public JpaVendorAdapter getHibernateAdapter() {
        return new HibernateJpaVendorAdapter();
    }
} ```




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