Как настроить источник данных с помощью 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);
}