SpringBoot整合HikariCP資料庫連線池
本篇文章主要實現SpringBoot中使用hikariCP;
一 、使用工具
1. JDK1.8
2. springToolSuit(STS)
3. maven
二、建立專案
1.首先建立一個SpringBoot專案,勾選web,mysql等具體怎樣建立可以參考我的上兩個部落格;傳送門
2.maven 依賴如下:
1)Java 8 maven artifact:
<dependency>
<groupId>com.zaxxer</groupId>
<artifactId>HikariCP</artifactId >
<version>2.6.1</version>
<scope>compile</scope>
</dependency>
2)Java 7 maven artifact:
<dependency>
<groupId>com.zaxxer</groupId>
<artifactId>HikariCP-java7</artifactId>
<version>2.4.11</version>
<scope>compile</scope>
</dependency>
我的maven依賴為:
<dependencies>
<!-- spring aop -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
<!-- spring data jpa -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<!-- hibernate 依賴 -->
<dependency>
<groupId>org.hibernate.javax.persistence</groupId>
<artifactId>hibernate-jpa-2.1-api</artifactId>
<version>1.0.0.Final</version>
</dependency>
<!-- JDBC連線資料庫,因為要用HikariCP,所以需要將SpringBoot中的tomcat-jdbc排除 -->
<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>
<!-- HikariCP 連線池依賴,從父依賴獲取額版本 -->
<dependency>
<groupId>com.zaxxer</groupId>
<artifactId>HikariCP</artifactId>
<!-- <scope>runtime</scope> -->
</dependency>
<!-- 因為配置了thymeleaf 模板,可以將此註釋
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency> -->
<!-- thymeleaf 模板 預設包含spring-boot-starter-web-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<!-- 連線mysql資料庫驅動 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<!-- spring boot 內建tomcat -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
<[email protected]註解-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
<!-- net json 這個必須配置jdk的版本號 -->
<dependency>
<groupId>net.sf.json-lib</groupId>
<artifactId>json-lib</artifactId>
<version>2.4</version>
<classifier>jdk15</classifier>
</dependency>
<!-- https://mvnrepository.com/artifact/com.thoughtworks.xstream/xstream -->
<!-- LEGACYHTML5需要搭配一個額外的庫NekoHTML才可用,解決嚴格的html驗證問題 -->
<dependency>
<groupId>net.sourceforge.nekohtml</groupId>
<artifactId>nekohtml</artifactId>
</dependency>
<!-- 單元測試相關依賴 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
SpringBoot父依賴如下:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.6.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
這裡需要注意的是,因為用了最新的SpringBoot版本,HikarICP從SpringBoot繼承版本,所以JDK需要配置為1.8,如果不是將會出現錯誤,錯誤原因將會在下面展示。
3.資料庫連線配置檔案如下(我將資料庫連線配置單獨寫在了一個配置檔案,這樣找起來比較清晰,檔名為 datasource.properties ,後面的配置類中要用到此名字):
#第一個資料來源(多資料來源將會在後面介紹,primary表示為第一個資料來源)
spring.datasource.primary.dataSourceClassName=com.mysql.jdbc.jdbc2.optional.MysqlDataSource
spring.datasource.primary.dataSourceProperties.serverName=localhost
spring.datasource.primary.dataSourceProperties.portNumber=3306
spring.datasource.primary.dataSourceProperties.databaseName=newrecruit
spring.datasource.primary.username=root
spring.datasource.primary.password=yourpassword
# 下面為連線池的補充設定,應用到上面所有資料來源中
#自動提交
spring.datasource.default-auto-commit=true
#指定updates是否自動提交
spring.datasource.auto-commit=true
spring.jpa.show-sql = true
spring.datasource.maximum-pool-size=100
spring.datasource.max-idle=10
spring.datasource.max-wait=10000
spring.datasource.min-idle=5
spring.datasource.initial-size=5
spring.datasource.validation-query=SELECT 1
spring.datasource.test-on-borrow=false
spring.datasource.test-while-idle=true
# 配置間隔多久才進行一次檢測,檢測需要關閉的空閒連線,單位是毫秒
spring.datasource.time-between-eviction-runs-millis=18800
# 配置一個連線在池中最小生存的時間,單位是毫秒
spring.datasource.minEvictableIdleTimeMillis=300000
# Hibernate ddl auto (create, create-drop, update)
spring.jpa.hibernate.ddl-auto=update
#spring.jpa.database-platform=org.hibernate.dialect.MySQL5Dialect
spring.jpa.hibernate.naming_strategy=org.hibernate.cfg.ImprovedNamingStrategy
#spring.jpa.database=org.hibernate.dialect.MySQL5InnoDBDialect
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5Dialect
資料庫配置檔案寫好以後,開始寫配置類 :
package com.zlc.config;
import javax.sql.DataSource;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.autoconfigure.jdbc.DataSourceBuilder;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.context.annotation.PropertySource;
/**
* <p>Company: </p>
* @Description:
* @Create Date: 2017年8月13日下午11:59:49
* @Version: V1.00
* @Author: 追到烏雲的盡頭找太陽
*/
@Configuration
@PropertySource("classpath:datasource.properties")
public class DataSourceConfig {
private Logger logger = LoggerFactory.getLogger(DataSourceConfig.class);
@Bean(name = "primaryDataSource")
@Primary
@Qualifier("primaryDataSource")
@ConfigurationProperties(prefix="spring.datasource.primary" )
public DataSource primaryDataSource() {
logger.info("資料庫連線池建立中.......");
return DataSourceBuilder.create().build();
}
}
一個@PropertySource(“classpath:datasource.properties”)註解,就可以免去我們自己寫讀取配置檔案的麻煩
第一個資料來源的配置類如下:
package com.zlc.config;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.autoconfigure.orm.jpa.JpaProperties;
import org.springframework.boot.orm.jpa.EntityManagerFactoryBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
import org.springframework.orm.jpa.JpaTransactionManager;
import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.annotation.EnableTransactionManagement;
import javax.persistence.EntityManager;
import javax.sql.DataSource;
import java.util.Map;
/**
* <p>Company: 資訊科技研究所 </p>
* @Description: 第一個資料來源的配置類
* @Create Date: 2017年5月11日下午9:22:12
* @Version: V1.00
* @Author: 追到烏雲的盡頭找太陽
*/
@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(
entityManagerFactoryRef="entityManagerFactoryPrimary",
transactionManagerRef="transactionManagerPrimary",
basePackages= { "com.zlc.dao" }) //設定Repository所在位置
public class PrimaryDataSouceConfig {
@Autowired @Qualifier("primaryDataSource")
private DataSource primaryDataSource;
@Primary
@Bean(name = "entityManagerPrimary")
public EntityManager entityManager(EntityManagerFactoryBuilder builder) {
return entityManagerFactoryPrimary(builder).getObject().createEntityManager();
}
@Primary
@Bean(name = "entityManagerFactoryPrimary")
public LocalContainerEntityManagerFactoryBean entityManagerFactoryPrimary (EntityManagerFactoryBuilder builder) {
return builder
.dataSource(primaryDataSource)
.properties(getVendorProperties(primaryDataSource))
.packages("com.zlc.entity") //設定實體類所在位置
.persistenceUnit("primaryPersistenceUnit")
.build();
}
@Autowired
private JpaProperties jpaProperties;
private Map<String, String> getVendorProperties(DataSource dataSource) {
return jpaProperties.getHibernateProperties(dataSource);
}
@Primary
@Bean(name = "transactionManagerPrimary")
public PlatformTransactionManager transactionManagerPrimary(EntityManagerFactoryBuilder builder) {
return new JpaTransactionManager(entityManagerFactoryPrimary(builder).getObject());
}
}
上面有連個需要注意的地方,一個是JPA所在的包名: basePackages= { “com.b505.dao” }) //設定Repository所在位置,一定不能寫錯,一個JPA實體類所在的位置: .packages(“com.b505.entity”) //設定實體類所在位置。
我們在main方法中我們可以檢查一下(一定要注意SpringBoot專案的結構,因為SpringBoot是自動掃描並註冊類註冊到Spring的上下文中所以main所在的類的包名一定是最大的,這樣用其他註解的類才能正常註冊,我的專案結構如下):
如果你的controller寫在了com.zlca.web;那麼專案編譯不會產生錯誤,但是此web層的對映全都不能用,因為沒有註冊到Spring中。SpringBoot是掃描@SpringBootApplication下的類以及此註解的子資料夾下的類;
main方法如下:
package com.zlc;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import javax.sql.DataSource;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ApplicationContext;
import com.zaxxer.hikari.HikariDataSource;
/**
* <p>Company: 資訊科技研究所 </p>
* @Description: 程式的入口
* @Create Date: 2017年9月14日下午1:11:05
* @Version: V1.00
* @Author: 追到烏雲的盡頭找太陽
*/
@SpringBootApplication
public class RecruitmentApp {
public static void main(String[] args) {
ApplicationContext applicationContext = SpringApplication.run(
RecruitmentApp.class, args);
DataSource dataSource = applicationContext.getBean(DataSource.class);
System.out.println("datasource is :" + dataSource);
//檢查資料庫是否是hikar資料庫連線池
if (!(dataSource instanceof HikariDataSource)) {
System.err.println(" Wrong datasource type :"
+ dataSource.getClass().getCanonicalName());
System.exit(-1);
}
try {
Connection connection = dataSource.getConnection();
ResultSet rs = connection.createStatement()
.executeQuery("SELECT 1");
if (rs.first()) {
System.out.println("Connection OK!");
} else {
System.out.println("Something is wrong");
}
// connection.close();
// System.exit(0);
} catch (SQLException e) {
System.out.println("FAILED");
e.printStackTrace();
System.exit(-2);
// TODO: handle exception
}
}
}
以上參看了別人的部落格,在此謝過,如有侵權,請聯絡作者([email protected])刪除
好了,HIkariCP已經配置好了,啟動main;
完工;這裡需要注意的一點,如果是用jdk1.7,則會出現如下錯誤:
這個就是本部落格一開始中說的jdk版本和Hikari的版本要對應上。此錯誤只需要將JDK換成1.8即可。
相關推薦
SpringBoot整合HikariCP資料庫連線池
本篇文章主要實現SpringBoot中使用hikariCP; 一 、使用工具 1. JDK1.8 2. springToolSuit(STS) 3. maven 二、建立專案 1.首先建立一個SpringBoot專案,勾選web,mysql等具體怎
SpringBoot專案開發(五):HikariCP資料庫連線池
1.前兩篇是介紹控制器與頁面的,本篇將介紹 資料庫連線池 ,它很重要,SpringBoot 2.0 預設連線池就是Hikari 2.可以看一下這位朋友對幾大主流資料庫連線池的測試報告,結論是:hikariCP在併發較高的情況下,效能基本上沒有下降。我自己也
springboot配置預設資料庫連線池並解決初始連線未生效問題
目前Spring Boot中預設支援的連線池有dbcp,dbcp2, tomcat, hikari三種連線池。 在springboot1.5之前預設tomcat連線池, 版本org.springframework.boot.autoconfigure.jdbc.Data
SpringBoot | 第十章:搭建SpringBoot整合Mybatis+druid連線池監控
前言 今年註定是不平凡的一年,Spring家族的一套SpringBoot+SpringCloud掀起來一陣熱潮,網際網路微服務技術火熱膨脹,身邊的程式設計師都在學習,我經不住誘惑,準備從零開始學,並且以記錄部落格的形式; 一. 建立springboot工程
SpringBoot整合Mybatis+Druid連線池
Demo使用的是IDEA工具進行開發的,環境是JDK1.7+SpringBoot 1.5.5 換作其他版本也是一樣的,差別不大。 首先使用IDEA新建一個SpringBoot專案,編譯環境為JDK1.7,匯入必須的jar包,pom.xml如下所示: <?xml versio
JDBC整合c3p0資料庫連線池 解決Too many connections錯誤
前段時間,接手一個專案使用的是原始的jdbc作為資料庫的訪問,釋出到伺服器上在運行了一段時間之後總是會出現無法訪問的情況,登入到伺服器,檢視tomcat日誌發現總是報如下的錯誤。 Caused by: com.mysql.jdbc.exceptions.jdbc4.
使用HikariCP資料庫連線池搭建Spring-Boot+Mybatis的專案
前言 Springboot讓Java開發更加美好,更加簡潔,更加簡單。本節主要講的是使用Hikari資料庫連線池搭建Spring-Boot+Mybatis專案。 這裡各位肯定會有一個問題:為什麼我們要選擇Hikari的資料庫連線池了,而不選擇C3P0/DBCP這些成熟的資
JavaEE基礎(06):Servlet整合C3P0資料庫連線池
本文原始碼:GitHub·點這裡 || GitEE·點這裡 一、C3P0連線池 1、C3P0簡介 C3P0是一個開源的JDBC連線池,應用程式根據C3P0配置來初始化資料庫連線,可以自動回收空閒連線的功能。 2、核心依賴 <dependency> <groupId>mysq
springboot 整合阿里 Druid 資料庫連線池
一,Druid是什麼? Druid是Java語言中最好的資料庫連線池。Druid能夠提供強大的監控和擴充套件功能。 二, 在哪裡下載druid 三, 怎麼獲取Druid的原始碼 Druid是一個開源專案,原始碼託管在github上,原始碼倉庫
Springboot 2.0選擇HikariCP作為預設資料庫連線池的五大理由
轉載自公眾號:工匠小豬豬的技術世界 摘要: 本文 非原創 ,是筆者蒐集了一些HikariCP相關的資料整理給大家的介紹,主要講解了為什麼sb2選擇了HikariCP以及HikariCP為什麼這麼快。 Springboot2預設資料庫連線池選擇了HikariC
Springboot 2.0選擇HikariCP作為預設資料庫連線池的原因及與Druid的比較
摘要: 本文非原創,是筆者蒐集了一些HikariCP相關的資料整理給大家的介紹,主要講解了為什麼sb2選擇了HikariCP以及HikariCP為什麼這麼快。 Springboot2預設資料庫連線池選擇了HikariCP為何選擇HikariCP理由一、程式碼量理由二、口碑理
springBoot(八)整合之整合阿里druid資料庫連線池
當時是基於C3P0處理資料庫,然後偶發性出現連線超時,然後加上需要檢視連線次數以及訪問次數,我就想到採用druid資料庫連線池,話不多說,先上程式碼 其實下面的部分出於演示,用硬編碼,其實完全可以通過配置屬性,來進行動態改變,至於SpringCloud
HikariCP 的Java資料庫連線池介紹及配置
HiKariCP是資料庫連線池的一個後起之秀,號稱效能最好,可以完美地PK掉其他連線池。 原文地址:http://blog.csdn.net/clementad/article/details/46928621 官網:https://github.com/brettwooldridge/Hi
SpringBoot初始教程之資料庫連線池(druid)
SpringBoot初始教程之資料庫連線池(druid) 1.介紹 Druid是一個JDBC元件庫,包括資料庫連線池、SQL Parser等元件。DruidDataSource是最好的資料庫連線池。SpringBoot支援任何一種資料庫連結池的配置,在這裡用druid作為例子進行講解 2
資料庫連線池使用(springboot)
轉自:https://blog.csdn.net/u014209205/article/details/80625963 1. 為什麼要使用資料庫連線池 使用資料庫連線池主要考慮到程式與資料庫建立連線
Spring Boot 整合 Mybatis(druid 資料庫連線池 以及 分頁配置)
MyBatis 是一款優秀的持久層框架,它支援定製化 SQL、儲存過程以及高階對映,目前很大一部分網際網路、軟體公司都在使用這套框架 下來來之後,我們主要關注幾個檔案 配置檔案:generator.properties 主要是資料庫的相關配置,以及檔案生成的根路徑 generator.jdbc.drive
Druid - SpringBoot配置資料庫連線池druid
關於Druid DRUID是阿里巴巴開源平臺上一個資料庫連線池實現,它結合了C3P0、DBCP、PROXOOL等DB池的優點,同時加入了日誌監控,可以很好的監控DB池連線和SQL的執行情況,可以說是針對監控而生的DB連線池,是目前最好的連線池。
kylin調優,專案中錯誤總結,知識點總結,kylin jdbc driver + 資料庫連線池druid + Mybatis專案中的整合,shell指令碼執行kylin restapi 案例
關於本篇文章的說明: 本篇文章為筆者辛苦勞作用了一整天總結出來的文件,大家閱讀轉發的時候請不要吝嗇寫上筆者:塗作權 和 原文地址。 由於筆者所在環境沒有人用過kylin,筆者也是自學官網,閱讀書籍 將kylin用於實際專案,期間遇到了很多很多關於kylin使用的問題。為了讓後面的人在
Spring學習總結(21)——Spring整合阿里巴巴資料庫連線池DruidDataSource配置及其常見問題彙總
一、參考配置如下 <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-
Springboot+druid資料庫連線池使用
1. 為什麼要使用資料庫連線池 使用資料庫連線池主要考慮到程式與資料庫建立連線的效能。建立一個新的資料庫是一個很耗時的過程,在使用完之後,可能還需要不斷的釋放建立的連線,對資源的損耗大。 而採用資料庫連線池之後,首先就建立了固定數量的資料庫連線,需