Приложение Spring Spring JPA НЕ работает с конфигурацией HikariCP

Мы настроили наше приложение spring boot(v1.5.1)-jpa так, чтобы оно указывало на HikariCP, но по какой-то странной причине приложение все еще указывает на пул tomcat-jdbc, по умолчанию используемый spring-boot вместо Hikari-CP. Я упомянул конфигурацию, использованную ниже.

Обновления
После внесения изменений сейчас, когда HikariCP пытается загрузить, мы получаем исключение SQLNotSupportedFeature. Обратите внимание, что мы используем комбинацию Springboot-JPA-Hibernate вместе с hikari.

Любая помощь приветствуется.

Gradle

    // https://mvnrepository.com/artifact/com.zaxxer/HikariCP
    compile group: 'com.zaxxer', name: 'HikariCP', version: '2.3.2'

    // Exclusions
    compile('org.springframework.boot:spring-boot-starter-web'){
    exclude module: "spring-boot-starter-tomcat"
    }
    compile('org.springframework.boot:spring-boot-starter-data-jpa') {
    exclude module: "spring-boot-starter-tomcat"
    }
    compile("org.springframework.boot:spring-boot-starter-jdbc") {
    exclude module: "spring-boot-starter-tomcat"
    }
    //spring integration
    compile("org.springframework.boot:spring-boot-starter-integration"){
    exclude module: "spring-boot-starter-tomcat"
    }  

application.properties

hibernate.show.sql=true
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.Oracle10gDialect
spring.datasource.hikari.maximum-pool-size=50
spring.datasource.hikari.idle-timeout=1000
spring.datasource.hikari.pool-name=pooool
spring.datasource.type=com.zaxxer.hikari.HikariDataSource

spring.datasource.url=jdbc:oracle:thin:@<hostname>:1521/<instance>
spring.datasource.username=<user>
spring.datasource.password=<password>
spring.datasource.driver-class-name=oracle.jdbc.driver.OracleDriver

Dataconfiguration

Для конфигурации мы используем комбинацию Spring JPA Hibernate вместе с PCF (Pivotal Cloud Foundry).

        public class DataSourceConfiguration {

            @Value("${spring.datasource.hikari.maximum-pool-size}")
            private int maxSize;

            @Value("${spring.datasource.hikari.idle-timeout}")
            private String idleTimeout;

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

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

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

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

            @Bean("destroyMethod=close")
            @Primary
            public DataSource dataSource() {
                HikariDataSource dataSource = new HikariDataSource();
                dataSource.setUrl(url);
                dataSource.setPassword(password);
                dataSource.setUsername(username);
                dataSource.setDriverClassName(driverClassName);
                dataSource.setValidationQuery(idleTimeout);
                dataSource.setMaxIdle(maxSize);
                return dataSource;
            }

            @Bean
            public LocalContainerEntityManagerFactoryBean entityManagerFactory(DataSource dataSource) {
                System.err.println("POOLSIZE----> " +dataSource.getPoolSize());
                System.err.println("POOLNAME----> " +dataSource.getName());
                    LocalContainerEntityManagerFactoryBean entityManagerFactoryBean = new LocalContainerEntityManagerFactoryBean();
                    entityManagerFactoryBean.setDataSource(dataSource);
                    entityManagerFactoryBean.setJpaVendorAdapter(new HibernateJpaVendorAdapter());
                    entityManagerFactoryBean.setPackagesToScan(applicationPropertiesConfig.getPackagestoScan());

                    Properties jpaProperties = new Properties();
                    jpaProperties.put("hibernate.dialect", applicationPropertiesConfig.getHibernateDialect());
                    jpaProperties.put("hibernate.show_sql", applicationPropertiesConfig.getHibernateShowSQL());
                    entityManagerFactoryBean.setJpaProperties(jpaProperties);
                    return entityManagerFactoryBean;
            }

            /**
             * Declaration of the transaction manager.
             *
             * @param entityManagerFactory the entity manager factory
             * @return an instance of JpaTransactionManager
             */
            @Bean
            JpaTransactionManager transactionManager(EntityManagerFactory entityManagerFactory) {
                    JpaTransactionManager transactionManager = new JpaTransactionManager();
                    transactionManager.setEntityManagerFactory(entityManagerFactory);
                    return transactionManager;
            }

Пожалуйста, помогите, так как это блокирует наше приложение и расстраивает. Заранее спасибо.

2 ответа

Вам следует new HikariDataSource(.....) вместо new DataSource() в твоих бобах.

Ваш gradle должен иметь следующий конфиг для hikari:

configurations {
     compile.exclude module: "tomcat-jdbc"
}

dependencies {
     compile("org.springframework.boot:spring-boot-starter-jdbc")
     compile group: 'com.zaxxer', name: 'HikariCP', version: '2.6.3'
}

Выше исключит tomcat-jdbc и создаст пул соединений, используя hikari. Надеюсь, это поможет.

Другие вопросы по тегам