2017-06-30 11 views
0

Springブート(v1.5.1)-jpaアプリケーションをHikariCPを指すように構成しましたが、依然としてアプリケーションがまだtomcat-jdbcプールを指しているという奇妙な理由により、 Hikari-CPの代わりにSpring-Bootで使用されます。 以下に使用されている構成について述べました。SpringブートJPAアプリケーションがHikariCP構成で動作していません

アップデートHikariCPたちはSQLNotSupportedFeature例外を取得しているロードしようとしたとき、今の変更を行った後
。 ヒカリと一緒にSpringboot-JPA-Hibernateの組み合わせを使用していることに注意してください。

何か助けていただければ幸いです。

の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

我々は、春JPAは、PCF(ピボタルクラウドファウンドリー)と共に構成するための組合せを休止使用しています。

 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; 
      } 

私たちのアプリケーションをブロックしていて困っていますのでお手伝いください。 ありがとうございます。

+0

あなたの依存関係にあるHikari-CPが正しいと仮定していますか? tomcat-jdbcをPOMから明示的に除外してください。 https://www.mkyong.com/spring-boot/spring-boot-jdbc-mysql-hikaricp-example/ –

+0

申し訳ありません申し訳ありませんが、以前は言及していませんでした。はい、除外を追加しましたが、それは役に立たないです。 – Guru

+0

私の知っている自分のプロジェクトとあなたのプロジェクトを比較した後、HikaryCPと協力しています。私が見る唯一の違いは、あなたはポンで運転手がいないということです。多分それは拾われていないでしょう。この依存関係を追加してみてください コンパイル・グループ 'oracle'、名前: 'ojdbc6'、バージョン:'11 .2.0.3 ' –

答えて

0

あなたのbeanにはnew DataSource()の代わりにnew HikariDataSource(.....)が必要です。

+0

あなたの応答に感謝します。しかし、もしそれが "ハードコーディング"ではないでしょうか。私は自分のコードを柔軟にしたい。ヒカリからTomcatやその他のプールに切り替える場合は明日、コードに触れることなく設定ファイルだけを変更することを期待しています。また、springによって提供される{spring.datasource.type}の利点も失われます。ドキュメントによると、型の言及とプロパティの設定だけで十分です。これはすべてが直面しているバグですか? – Guru

+0

あなたの質問にあなたの要件を追加する方が良いです。そしておそらくプールを交換するのは本当に本当の必要条件ではありません。 –

+0

オラクルのドライバ名「ojdbc6」、バージョン:'11 .2.0.3 '、ojdbc7などを試したが、同じエラーが発生し続けるというSQLFeatureNotSupportedExceptionが発生しました。 – Guru

0

あなたの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を除外し、ひかりを使用して接続プールを作成します。これが役立つことを願っています。

関連する問題