web-dev-qa-db-ja.com

Spring @ConfigurationクラスでHikariCPを使用してデータソースを構成する方法

Spring @Configurationクラス[データベースはOracle]でHikariCPデータソースを構成しようとしています。しかし、それは機能していません。

インターネットで検索したところ、HikariCPデータソースをコンストラクタで構成する必要があることがわかりました。私はこれを[彼らのgithubウェブページで言及されている方法で]試しましたが、それでも機能しません。この問題の解決を手伝ってください。

private HikariDataSource dataSource() {
    final HikariDataSource ds = new HikariDataSource();
    ds.setMaximumPoolSize(100); 
    ds.setDataSourceClassName("Oracle.jdbc.driver.OracleDriver"); 
    ds.addDataSourceProperty("url", "jdbc:Oracle:thin:@localhost:1521:XE"); 
    ds.addDataSourceProperty("user", "username");
    ds.addDataSourceProperty("password", "password");
    ds.addDataSourceProperty("cachePrepStmts", true); 
    ds.addDataSourceProperty("prepStmtCacheSize", 250); 
    ds.addDataSourceProperty("prepStmtCacheSqlLimit", 2048); 
    ds.addDataSourceProperty("useServerPrepStmts", true);
    return ds;
} 
14
Abhinab Kanrar

あなたはここのwikiで私たちの例をチェックすることができます:

https://github.com/brettwooldridge/HikariCP/wiki/Spring-Hibernate-with-Annotations

この記事で取り上げているように:

http://www.3riverdev.com/blog/tutorial-spring-hibernate-hikaricp/

編集:上記のコードは正しくありません。 MySQLDataSourceプロパティをOracleDataSourceに使用しようとしています。そして今、Driverベースの構成とDataSourceベースの構成を混同しています。それを簡素化する:

ドライバー:

private HikariDataSource dataSource() {
   final HikariDataSource ds = new HikariDataSource();
   ds.setMaximumPoolSize(100);
   ds.setDriverClassName("Oracle.jdbc.driver.OracleDriver"); 
   ds.setJdbcUrl("jdbc:Oracle:thin:@localhost:1521:XE"); ;
   ds.setUsername("username");
   ds.setPassword("password");
   return ds;
}

[〜#〜]または[〜#〜]DataSource:

private HikariDataSource dataSource() {
   final HikariDataSource ds = new HikariDataSource();
   ds.setMaximumPoolSize(100);
   ds.setDataSourceClassName("Oracle.jdbc.pool.OracleDataSource");
   ds.addDataSourceProperty("serverName", "yourServer");
   ds.addDataSourceProperty("port", "1521");
   ds.addDataSourceProperty("databaseName", "XE");
   ds.addDataSourceProperty("user", "username");
   ds.addDataSourceProperty("password", "password");
   return ds;
}

また、100接続は、毎秒2万トランザクションを実行している場合を除いて、Oracleにとって大きな意味があります。10-20の方が合理的です。

25
brettw

次のようなものがあなたのニーズに合うはずです:

@Bean
public DataSource dataSource() {
     HikariConfig config = new HikariConfig();
     config.setMaximumPoolSize(100);
     config.setDataSourceClassName("Oracle.jdbc.pool.OracleDataSource");
     config.addDataSourceProperty("serverName", "localhost");
     config.addDataSourceProperty("port", "1521");
     config.addDataSourceProperty("databaseName", "XE");
     config.addDataSourceProperty("user", "yourUser");
     config.addDataSourceProperty("password", "yourPassword");

     return new HikariDataSource(config);
}
5
geoand