Приложение 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. Надеюсь, это поможет.