Как настроить источник данных с помощью HikariCP в классе Spring @Configuration?

Я пытаюсь настроить источник данных HikariCP в классе Spring @Configuration [Database is oracle]. Но он не работает.

Я искал в Интернете и обнаружил, что источник данных 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;
} 

Ответ 1

Вы можете посмотреть наш пример в вики здесь:

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

Как описано в этой статье:

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

EDIT: Приведенный выше код неверен. Вы пытаетесь использовать MySQL DataSource свойства для Oracle DataSource. И теперь вы смешиваете конфигурацию на основе Driver с основанной на DataSource. Упростите это:

Driver:

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 является большим для Oracle, если вы не выполняете 20 тыс. транзакций в секунду, 10-20 является более разумным.

Ответ 2

Что-то вроде следующего должно соответствовать вашим потребностям:

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