Как настроить HikariCP в приложении Spring Boot в моих файлах application.properties?
Я пытаюсь настроить HikariCP в своем приложении Spring Boot (1.2.0.M1), чтобы можно было протестировать его использование вместо DBCP Tomcat. Я хотел бы настроить пул соединений в своем файле application.properties, как я делал с Tomcat, но я не могу понять, как я должен это делать. Все примеры, которые я нашел, показывают либо стиль JavaConfig, либо использование отдельного файла свойств HikariCP. Может кто-нибудь помочь мне выяснить имена свойств, чтобы настроить его в application.properties? Я также хотел бы перейти от использования подхода driverClassName к подходу DataSourceClassName, поскольку он выглядит чище и рекомендуется. Это также возможно в моих файлах application.properties?
Вот что у меня было для Tomcat DBCP (просто базовый конфиг, не полностью очищенный)
spring.datasource.validation-query=SELECT 1
spring.datasource.max-active=10
spring.datasource.max-idle=8
spring.datasource.min-idle=8
spring.datasource.initial-size=5
spring.datasource.test-on-borrow=true
spring.datasource.test-on-return=true
И в настоящее время я использую driverClassName и jdbc url для установки соединения:
spring.datasource.url=jdbc:mysql://localhost:3306/myDb
spring.datasource.driverClassName=com.mysql.jdbc.Driver
18 ответов
@Configuration
@ConfigurationProperties(prefix = "params.datasource")
public class JpaConfig extends HikariConfig {
@Bean
public DataSource dataSource() throws SQLException {
return new HikariDataSource(this);
}
}
application.yml
params:
datasource:
driverClassName: com.mysql.jdbc.Driver
jdbcUrl: jdbc:mysql://localhost:3306/myDb
username: login
password: password
maximumPoolSize: 5
ОБНОВЛЕНО! Начиная с версии Spring Boot 1.3.0:
- Просто добавьте HikariCP в зависимости
- Настройте application.yml
application.yml
spring:
datasource:
type: com.zaxxer.hikari.HikariDataSource
url: jdbc:h2:mem:TEST
driver-class-name: org.h2.Driver
username: username
password: password
hikari:
idle-timeout: 10000
ОБНОВЛЕНО! Начиная с версии Spring Boot 2.0.0:
Пул соединений по умолчанию изменился с Tomcat на Hikari:)
Я наткнулся HikariCP
и я был поражен тестами, и я хотел попробовать его вместо моего выбора по умолчанию C3P0
и, к моему удивлению, я изо всех сил пытался получить configurations
Правильно, вероятно, потому что конфигурации различаются в зависимости от того, какую комбинацию технологий вы используете.
У меня есть настройки Spring Boot
проект с JPA, Web, Security
стартеры (Использование Spring Initializer) для использования PostgreSQL
в качестве базы данных с HikariCP
как пул соединений.
я использовал Gradle
как инструмент для сборки, и я хотел бы поделиться тем, что у меня сработало для следующих предположений:
- Spring Boot Starter JPA (Web & Security - опционально)
- Gradle build тоже
- Запуск и настройка PostgreSQL с базой данных (например, схема, пользователь, дБ)
Вам нужно следующее build.gradle
если вы используете Gradle
или эквивалент pom.xml
если вы используете Maven
buildscript {
ext {
springBootVersion = '1.5.8.RELEASE'
}
repositories {
mavenCentral()
}
dependencies {
classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
}
}
apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'org.springframework.boot'
apply plugin: 'war'
group = 'com'
version = '1.0'
sourceCompatibility = 1.8
repositories {
mavenCentral()
}
dependencies {
compile('org.springframework.boot:spring-boot-starter-aop')
// Exclude the tomcat-jdbc since it's used as default for connection pooling
// This can also be achieved by setting the spring.datasource.type to HikariCP
// datasource see application.properties below
compile('org.springframework.boot:spring-boot-starter-data-jpa') {
exclude group: 'org.apache.tomcat', module: 'tomcat-jdbc'
}
compile('org.springframework.boot:spring-boot-starter-security')
compile('org.springframework.boot:spring-boot-starter-web')
runtime('org.postgresql:postgresql')
testCompile('org.springframework.boot:spring-boot-starter-test')
testCompile('org.springframework.security:spring-security-test')
// Download HikariCP but, exclude hibernate-core to avoid version conflicts
compile('com.zaxxer:HikariCP:2.5.1') {
exclude group: 'org.hibernate', module: 'hibernate-core'
}
// Need this in order to get the HikariCPConnectionProvider
compile('org.hibernate:hibernate-hikaricp:5.2.11.Final') {
exclude group: 'com.zaxxer', module: 'HikariCP'
exclude group: 'org.hibernate', module: 'hibernate-core'
}
}
Есть несколько исключений в приведенном выше build.gradle
и это потому что
- Сначала исключить, инструктирует Gradle, что исключает
jdbc-tomcat
пул соединений при загрузкеspring-boot-starter-data-jpa
зависимостей. Это может быть достигнуто путем настройкиspring.datasource.type=com.zaxxer.hikari.HikariDataSource
также, но я не хочу лишней зависимости, если она мне не нужна - Второе исключение, поручает исключить Gradle
hibernate-core
при загрузкеcom.zaxxer
зависимость и это потому, чтоhibernate-core
уже загруженSpring Boot
и мы не хотим заканчивать с разными версиями. - Третий исключить, поручает исключить Gradle
hibernate-core
при загрузкеhibernate-hikaricp
модуль, необходимый для использования HikariCPorg.hibernate.hikaricp.internal.HikariCPConnectionProvider
в качестве поставщика связи вместо устаревшегоcom.zaxxer.hikari.hibernate.HikariConnectionProvider
Однажды я понял, build.gradle
и что сохранить, а что нет, я был готов скопировать / вставить datasource
Конфигурация в мой application.properties
и ожидал, что все будет работать с летающими цветами, но не совсем, и я наткнулся на следующие вопросы
- Spring boot не может найти детали базы данных (т.е. URL, драйвер), следовательно, не может настроить jpa и hibernate (потому что я не назвал значения ключа свойства правильно)
- HikariCP возвращается к
com.zaxxer.hikari.hibernate.HikariConnectionProvider
- После указания Spring использовать новый провайдер соединений для автоматической настройки hibernate/jpa, HikariCP потерпел неудачу, потому что он искал некоторые
key/value
вapplication.properties
и жаловался наdataSource, dataSourceClassName, jdbcUrl
, Я должен был отладить вHikariConfig, HikariConfigurationUtil, HikariCPConnectionProvider
и узнал, чтоHikariCP
не мог найти свойства отapplication.properties
потому что это было названо по-другому.
Во всяком случае, здесь я должен был полагаться на метод проб и ошибок и убедиться, что HikariCP
может выбрать свойства (т. е. источник данных с подробными данными о дБ, а также свойства пула), а также Sping Boot ведут себя, как и ожидалось, и я получил следующее application.properties
файл.
server.contextPath=/
debug=true
# Spring data source needed for Spring boot to behave
# Pre Spring Boot v2.0.0.M6 without below Spring Boot defaults to tomcat-jdbc connection pool included
# in spring-boot-starter-jdbc and as compiled dependency under spring-boot-starter-data-jpa
spring.datasource.type=com.zaxxer.hikari.HikariDataSource
spring.datasource.url=jdbc:postgresql://localhost:5432/somedb
spring.datasource.username=dbuser
spring.datasource.password=dbpassword
# Hikari will use the above plus the following to setup connection pooling
spring.datasource.hikari.minimumIdle=5
spring.datasource.hikari.maximumPoolSize=20
spring.datasource.hikari.idleTimeout=30000
spring.datasource.hikari.poolName=SpringBootJPAHikariCP
spring.datasource.hikari.maxLifetime=2000000
spring.datasource.hikari.connectionTimeout=30000
# Without below HikariCP uses deprecated com.zaxxer.hikari.hibernate.HikariConnectionProvider
# Surprisingly enough below ConnectionProvider is in hibernate-hikaricp dependency and not hibernate-core
# So you need to pull that dependency but, make sure to exclude it's transitive dependencies or you will end up
# with different versions of hibernate-core
spring.jpa.hibernate.connection.provider_class=org.hibernate.hikaricp.internal.HikariCPConnectionProvider
# JPA specific configs
spring.jpa.properties.hibernate.show_sql=true
spring.jpa.properties.hibernate.format_sql=true
spring.jpa.properties.hibernate.use_sql=true
spring.jpa.properties.hibernate.id.new_generator_mappings=false
spring.jpa.properties.hibernate.default_schema=dbschema
spring.jpa.properties.hibernate.search.autoregister_listeners=false
spring.jpa.properties.hibernate.bytecode.use_reflection_optimizer=false
# Enable logging to verify that HikariCP is used, the second entry is specific to HikariCP
logging.level.org.hibernate.SQL=DEBUG
logging.level.com.zaxxer.hikari.HikariConfig=DEBUG
logging.level.org.hibernate.type.descriptor.sql.BasicBinder=TRACE
Как показано выше, конфигурации делятся на категории на основе следующих шаблонов именования.
- spring.datasource.x (Spring auto-configure выберет их, как и HikariCP)
- spring.datasource.hikari.x (HikariCP выбирает их для настройки пула, запоминает имена полей camelCase)
- spring.jpa.hibernate.connection.provider_class (поручает Spring использовать новый HibernateConnectionProvider)
- spring.jpa.properties.hibernate.x (используется Spring для автоматической настройки JPA, запишите имена полей с подчеркиванием)
Трудно найти учебное пособие или публикацию или какой-либо ресурс, который показывает, как используется вышеуказанный файл свойств и как должны быть названы свойства. Ну, вот и все.
Бросая выше application.properties
с build.gradle
(или, по крайней мере, аналогично) в версии проекта Spring Boot JPA (1.5.8) должны работать как шарм и подключаться к вашей предварительно сконфигурированной базе данных (т.е. в моем случае это PostgreSQL, который HikariCP & Spring
выяснить из spring.datasource.url
какой драйвер базы данных использовать).
Я не видел необходимости создавать DataSource
боб, и это потому, что Spring Boot способен сделать все для меня, просто посмотрев в application.properties
и это аккуратно.
Статья в вики-сайте HikariCP github показывает, как настроить Spring Boot с JPA, но в ней отсутствуют объяснения и детали.
Вышеупомянутые два файла также доступны как общедоступный гист. https://gist.github.com/rhamedy/b3cb936061cc03acdfe21358b86a5bc6
Вы можете просто использовать только application.yml/application.properties. Нет необходимости явно создавать какие-либо DataSource
боб
Вы должны исключить tomcat-jdbc, как упомянуто ydemartino
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
<exclusions>
<exclusion>
<groupId>org.apache.tomcat</groupId>
<artifactId>tomcat-jdbc</artifactId>
</exclusion>
</exclusions>
</dependency>
Как вы не будете создавать DataSource
боб, вы должны явно указать с помощью Hikari через spring.datasource.type
со значением com.zaxxer.hikari.HikariDataSource
в application.yml/application.properties
spring:
datasource:
hikari:
connection-test-query: SELECT 1 FROM DUAL
minimum-idle: 1
maximum-pool-size: 5
pool-name: yourPoolName
auto-commit: false
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost:3306/myDb
username: login
password: password
type: com.zaxxer.hikari.HikariDataSource
В вашем application.yml/application.properties вы можете настроить параметры Hikari, такие как размер пула и т. Д. В spring.datasource.hikari.*
Я использую Spring Boot 2.0.4.RELEASE. Hikari - это пул соединений по умолчанию и .hikari
больше не нужно
application.properties
spring.datasource.driverClassName=com.mysql.jdbc.Driver
spring.datasource.jdbcUrl=jdbc:mysql://localhost:3306/myDB...
spring.datasource.username=xxx
spring.datasource.password=xxx
spring.datasource.autocommit=false
spring.datasource.poolname=myPool
application.yml
spring:
datasource:
driverClassName: com.mysql.jdbc.Driver
jdbcUrl: jdbc:mysql://localhost:3306/myDB...
username: xxx
password: xxx
autoCommit: false
poolName: myPool
А также configuration
не нужно расширять HikariConfig
, а также DataSourceBuilder
можно использовать как было раньше.
@Configuration
public class DataSourceConfiguration {
@Bean(name="myDataSource")
@ConfigurationProperties("spring.datasource")
public DataSource myDataSource() {
return DataSourceBuilder.create().build();
}
}
Вам не нужен избыточный код для помещения значений свойств в переменные. Вы можете установить свойства с помощью файла свойств напрямую.
Положил hikari.properties
файл в пути к классам.
driverClassName=com.mysql.jdbc.Driver
jdbcUrl=jdbc:mysql://localhost:3306/myDb
connectionTestQuery=SELECT 1
maximumPoolSize=20
username=...
password=...
И сделайте такой источник данных.
@Bean(destroyMethod = "close")
public DataSource dataSource() throws SQLException {
HikariConfig config = new HikariConfig("/hikari.properties");
HikariDataSource dataSource = new HikariDataSource(config);
return dataSource;
}
Согласно документации оно изменено,
https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-sql.html
Пример:
spring:
datasource:
url: 'jdbc:mysql://localhost/db?useSSL=false'
username: root
password: pass
driver: com.mysql.jdbc.Driver
hikari:
minIdle: 10
idle-timeout: 10000
maximumPoolSize: 30
Это следующие изменения конфигурации, которые мы можем сделать в hikari, пожалуйста, добавьте / обновите в соответствии с вашими потребностями.
autoCommit
connectionTimeout
idleTimeout
maxLifetime
connectionTestQuery
connectionInitSql
validationTimeout
maximumPoolSize
poolName
allowPoolSuspension
readOnly
transactionIsolation
leakDetectionThreshold
Это поможет всем, кто хочет настроить hikaricp для своего приложения с весенней автоматической настройкой. Для моего проекта я использую весеннюю загрузку 2 с hikaricp в качестве пула соединений JDBC и mysql в качестве базы данных. Одна вещь, которую я не видел в других ответах, была data-source-properties
которые могут быть использованы для установки различных свойств, которые недоступны на spring.datasource.hikari.*
дорожка. Это эквивалентно использованию HikariConfig
учебный класс. Чтобы настроить пул соединений источника данных и hikaricp для специфических свойств mysql, я использовал аннотацию spring auto configure и следующие свойства в файле application.yml.
Место @EnableAutoConfiguration
на одном из ваших файлов конфигурации.
Файлapplication.yml может выглядеть следующим образом.
spring:
datasource:
url: 'jdbc:mysql://127.0.0.1:3306/DATABASE?autoReconnect=true&useSSL=false'
username: user_name
password: password
hikari:
maximum-pool-size: 20
data-source-properties:
cachePrepStmts: true
prepStmtCacheSize: 250
prepStmtCacheSqlLimit: 2048
useServerPrepStmts: true
useLocalSessionState: true
rewriteBatchedStatements: true
cacheResultSetMetadata: true
cacheServerConfiguration: true
elideSetAutoCommits: true
maintainTimeStats: false
Это работает для моего загрузочного приложения на случай, если это поможет. Этот класс сообщает вам, какие свойства ищет объект конфигурации:
Я думаю, что несколько источников данных могли бы поддержать, добавив datasource_whatever
к ключам свойств в исходном конфигурационном файле. Ура!
@Configuration
class DataSourceConfig {
@Value('${spring.datasource.username}')
private String user;
@Value('${spring.datasource.password}')
private String password;
@Value('${spring.datasource.url}')
private String dataSourceUrl;
@Value('${spring.datasource.dataSourceClassName}')
private String dataSourceClassName;
@Value('${spring.datasource.connectionTimeout}')
private int connectionTimeout;
@Value('${spring.datasource.maxLifetime}')
private int maxLifetime;
@Bean
public DataSource primaryDataSource() {
Properties dsProps = [url: dataSourceUrl, user: user, password: password]
Properties configProps = [
connectionTestQuery: 'select 1 from dual',
connectionTimeout: connectionTimeout,
dataSourceClassName: dataSourceClassName,
dataSourceProperties: dsProps,
maxLifetime: maxLifetime
]
// A default max pool size of 10 seems reasonable for now, so no need to configure for now.
HikariConfig hc = new HikariConfig(configProps)
HikariDataSource ds = new HikariDataSource(hc)
ds
}
}
Вы можете использовать подход dataSourceClassName, вот пример с MySQL. (Проверено с пружинными чехлами 1.3 и 1.4)
Сначала вам нужно исключить tomcat-jdbc из пути к классам, так как он будет выбран в пользу hikaricp.
pom.xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
<exclusions>
<exclusion>
<groupId>org.apache.tomcat</groupId>
<artifactId>tomcat-jdbc</artifactId>
</exclusion>
</exclusions>
</dependency>
application.properties
spring.datasource.dataSourceClassName=com.mysql.jdbc.jdbc2.optional.MysqlDataSource
spring.datasource.dataSourceProperties.serverName=localhost
spring.datasource.dataSourceProperties.portNumber=3311
spring.datasource.dataSourceProperties.databaseName=mydb
spring.datasource.username=root
spring.datasource.password=root
Тогда просто добавь
@Bean
@ConfigurationProperties(prefix = "spring.datasource")
public DataSource dataSource() {
return DataSourceBuilder.create().build();
}
Я создал тестовый проект здесь: https://github.com/ydemartino/spring-boot-hikaricp
Вы не можете использовать подход dataSourceClassName в конфигурациях application.properties, как сказал @Andy Wilkinson. если вы хотите иметь dataSourceClassName, вы можете использовать Java Config как:
@Configuration
@ComponentScan
class DataSourceConfig {
@Value("${spring.datasource.username}")
private String user;
@Value("${spring.datasource.password}")
private String password;
@Value("${spring.datasource.url}")
private String dataSourceUrl;
@Value("${spring.datasource.dataSourceClassName}")
private String dataSourceClassName;
@Value("${spring.datasource.poolName}")
private String poolName;
@Value("${spring.datasource.connectionTimeout}")
private int connectionTimeout;
@Value("${spring.datasource.maxLifetime}")
private int maxLifetime;
@Value("${spring.datasource.maximumPoolSize}")
private int maximumPoolSize;
@Value("${spring.datasource.minimumIdle}")
private int minimumIdle;
@Value("${spring.datasource.idleTimeout}")
private int idleTimeout;
@Bean
public DataSource primaryDataSource() {
Properties dsProps = new Properties();
dsProps.put("url", dataSourceUrl);
dsProps.put("user", user);
dsProps.put("password", password);
dsProps.put("prepStmtCacheSize",250);
dsProps.put("prepStmtCacheSqlLimit",2048);
dsProps.put("cachePrepStmts",Boolean.TRUE);
dsProps.put("useServerPrepStmts",Boolean.TRUE);
Properties configProps = new Properties();
configProps.put("dataSourceClassName", dataSourceClassName);
configProps.put("poolName",poolName);
configProps.put("maximumPoolSize",maximumPoolSize);
configProps.put("minimumIdle",minimumIdle);
configProps.put("minimumIdle",minimumIdle);
configProps.put("connectionTimeout", connectionTimeout);
configProps.put("idleTimeout", idleTimeout);
configProps.put("dataSourceProperties", dsProps);
HikariConfig hc = new HikariConfig(configProps);
HikariDataSource ds = new HikariDataSource(hc);
return ds;
}
}
причина, по которой вы не можете использовать dataSourceClassName, потому что он будет выбрасывать и исключение
Caused by: java.lang.IllegalStateException: both driverClassName and dataSourceClassName are specified, one or the other should be used.
это означает, что весенняя загрузка выводит из свойства spring.datasource.url Драйвер, и в то же время установка dataSourceClassName создает это исключение. Чтобы сделать это правильно, ваш application.properties должен выглядеть примерно так для источника данных HikariCP:
# hikariCP
spring.jpa.databasePlatform=org.hibernate.dialect.MySQLDialect
spring.datasource.url=jdbc:mysql://localhost:3306/exampledb
spring.datasource.username=root
spring.datasource.password=
spring.datasource.poolName=SpringBootHikariCP
spring.datasource.maximumPoolSize=5
spring.datasource.minimumIdle=3
spring.datasource.maxLifetime=2000000
spring.datasource.connectionTimeout=30000
spring.datasource.idleTimeout=30000
spring.datasource.pool-prepared-statements=true
spring.datasource.max-open-prepared-statements=250
Примечание. Пожалуйста, проверьте, есть ли в вашем classpath какой-либо tomcat-jdbc.jar или commons-dbcp.jar, добавленный в большинстве случаев транзитивной зависимостью. Если они присутствуют в classpath, Spring Boot настроит источник данных, используя пул соединений по умолчанию, то есть tomcat. HikariCP будет использоваться только для создания источника данных, если в пути к классам нет другого поставщика. существует последовательность перехода от tomcat -> к HikariCP -> к Commons DBCP.
Вот хорошие новости. HikariCP - это пул соединений по умолчанию с Spring Boot 2.0.0.
Примечания к выпуску Spring Boot 2.0.0
Технология пула баз данных по умолчанию в Spring Boot 2.0 была переключена с Tomcat Pool на HikariCP. Мы обнаружили, что Hakari предлагает превосходную производительность, и многие наши пользователи предпочитают ее по сравнению с Tomcat Pool.
Вот и получается, что почти все настройки по умолчанию для HikariCP у меня работают, кроме количества подключений к БД. Я установил это свойство в моем application.properties:
spring.datasource.maximumPoolSize=20
И Энди Уилкинсон прав, насколько я могу судить, в том, что вы не можете использовать подход к конфигурации dataSourceClassName для HikariCP с Spring Boot.
Приведенный ниже код можно использовать для инициализации статического источника данных.
public class MyDataSource {
private static final String DB_USERNAME="spring.datasource.username";
private static final String DB_PASSWORD="spring.datasource.password";
private static final String DB_URL ="spring.datasource.url";
private static final String DB_DRIVER_CLASS="spring.datasource.driver-class-name";
private static Properties properties = null;
private static HikariDataSource dataSource;
static {
try {
properties = new Properties();
properties.load(new FileInputStream("src/main/resources/application.properties"));
dataSource = new HikariDataSource();
dataSource.setDriverClassName(properties.getProperty(DB_DRIVER_CLASS));
dataSource.setJdbcUrl(properties.getProperty(DB_URL));
dataSource.setUsername(properties.getProperty(DB_USERNAME));
dataSource.setPassword(properties.getProperty(DB_PASSWORD));
dataSource.setMinimumIdle(100);
dataSource.setMaximumPoolSize(2000);
dataSource.setAutoCommit(false);
dataSource.setLoginTimeout(3);
} catch (IOException | SQLException e) {
((Throwable) e).printStackTrace();
}
}
public static DataSource getDataSource(){
return dataSource;
}
public static Connection getConnection() throws SQLException{
return getDataSource().getConnection();
}
}
Моя настройка:
Spring Boot v1.5.10
Hikari v.3.2.x (для оценки)
Чтобы действительно понять конфигурацию источника данных Hikari, я рекомендую отключить автоматическую настройку Spring Boot для источника данных.
Добавить следующее в application.properties:-
spring.autoconfigure.exclude = org.springframework.boot.autoconfigure.jdbc.Data SourceAutoConfiguration
Это отключит возможность Spring Boot самостоятельно настраивать Data Source.
Теперь у вас есть возможность определить свою собственную пользовательскую конфигурацию для создания bean-компонента Hikari Data Source и заполнить его требуемыми свойствами.
НОТА:::
открытый класс Hikari Data Source расширяет HikariConfig
Вам нужно
- заполнить объект HikariConfig, используя нужные свойства Hikari
- инициализировать объект Hikari Data Source объектом HikariConfig, переданным в качестве аргумента в конструктор.
Я верю в определение своего собственного класса пользовательской конфигурации ( @Configuration), чтобы создать источник данных самостоятельно и заполнить его свойствами источника данных, определенными в отдельном файле (чем традиционный: application.properties).
Таким образом, я могу определить свой собственный сессионный компонент с использованием рекомендованного Hibernate класса "LocalSessionFactoryBean" и заполнить его своим источником данных Hikari> и другими свойствами, основанными на Hiberante-JPA.
Сводка свойств источника данных Hikari на основе Spring Boot: -
spring.datasource.hikari.allow бассейн-подвеска = истина
spring.datasource.hikari.auto фиксации = ложь
spring.datasource.hikari.catalog =
spring.datasource.hikari.connection-INIT-SQL =
spring.datasource.hikari.connection-тест-запрос =
spring.datasource.hikari.connection-тайм-аут = 100
spring.datasource.hikari.data-источник-имя-класса =
spring.datasource.hikari.data-источник-JNDI =
Класса имя-spring.datasource.hikari.driver =
spring.datasource.hikari.idle-тайм-аут = 50
spring.datasource.hikari.initialization обанкротиться-быстро = верно
spring.datasource.hikari.isolate-внутренние-запросы = верно
spring.datasource.hikari.jdbc-URL =
spring.datasource.hikari.leak обнаружения порога =
spring.datasource.hikari.login-тайм-аут = 60
spring.datasource.hikari.max-срок службы =
spring.datasource.hikari.maximum бассейн размером = 500
spring.datasource.hikari.minimum-простаивает = 30
spring.datasource.hikari.password =
spring.datasource.hikari.pool имя =
spring.datasource.hikari.read только = истина
spring.datasource.hikari.register-MBeans = верно
spring.datasource.hikari.transaction изоляция =
spring.datasource.hikari.username =
spring.datasource.hikari.validation тайм-аут =
Теперь с HikcariCp в качестве пула соединений по умолчанию с новой версией весенней загрузки. Это можно сделать напрямую, как показано ниже.
@Configuration
public class PurchaseOrderDbConfig {
@Bean
@ConfigurationProperties(prefix = "com.sysco.purchaseorder.datasoure")
public DataSource dataSource() {
return DataSourceBuilder.create().build();
}
}
приложение.yml
com:
sysco:
purchaseorder:
datasoure:
driverClassName: com.mysql.jdbc.Driver
jdbcUrl: jdbc:mysql://localhost:3306/purchaseorder
username: root
password: root123
idleTimeout: 600000
Если вы напечатаете значение тайм-аута простоя
ApplicationContext context=SpringApplication.run(ApiBluePrint.class, args);
HikariDataSource dataSource=(HikariDataSource) context.getBean(DataSource.class);
System.out.println(dataSource.getIdleTimeout());
вы получите значение 600000, где значение по умолчанию равно 300000, если вы не определяете какое-либо пользовательское значение
С более поздними выпусками весенней загрузки переключение на Hikari может быть сделано полностью в конфигурации. я использую 1.5.6.RELEASE
и этот подход работает.
build.gradle:
compile "com.zaxxer:HikariCP:2.7.3"
приложение YAML
spring:
datasource:
type: com.zaxxer.hikari.HikariDataSource
hikari:
idleTimeout: 60000
minimumIdle: 2
maximumPoolSize: 20
connectionTimeout: 30000
poolName: MyPoolName
connectionTestQuery: SELECT 1
+ Изменить connectionTestQuery
в соответствии с вашей базой данных. Вот и все, код не требуется.
У меня возникли проблемы, и проблема заключалась в пробеле в концеspring.datasource.type = com.zaxxer.hikari.HikariDataSource
я работаю с
HikariCP-4.0.3.jar
spring-boot-2.6.2.jar
spring-core-5.3.14.jar
spring-jdbc-5.3.14.jar
spring-web-5.3.14.jar
thymeleaf-3.0.14.RELEASE.jar
Похоже, что spring-boot2.x имеет стандартную поддержку HikariCP из коробки, и это отличная новость.
Мне пришлось указать следующие конфигурации для двух разных DS в моих ресурсах/application.properties.
spring.sid1.datasource.jdbcUrl=jdbc:oracle:thin:@XXX:1521:SID1
spring.sid1.datasource.username=<user>
spring.sid1.datasource.password=<password>
spring.sid1.datasource.driverClassName=oracle.jdbc.OracleDriver
spring.sid1.datasource.connectionTimeout=20000
spring.sid1.datasource.poolName=SID1Pool
spring.sid1.datasource.minimumIdle=5
spring.sid1.datasource.maximumPoolSize=10
spring.sid2.datasource.jdbcUrl=jdbc:oracle:thin:@XXX:1521:SID2
spring.sid2.datasource.username=<user2>
spring.sid2.datasource.password=<password2>
spring.sid2.datasource.driverClassName=oracle.jdbc.OracleDriver
spring.sid2.datasource.connectionTimeout=20000
spring.sid2.datasource.poolName=SID2Pool
spring.sid2.datasource.minimumIdle=5
spring.sid2.datasource.maximumPoolSize=10
Примечание. Конфигурация spring.sid2.datasource.hikari.* не требуется, поскольку она является новой по умолчанию.