1. 程式人生 > >SpringBoot整合HikariCP資料庫連線池

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. 為什麼要使用資料庫連線池        使用資料庫連線池主要考慮到程式與資料庫建立連線的效能。建立一個新的資料庫是一個很耗時的過程,在使用完之後,可能還需要不斷的釋放建立的連線,對資源的損耗大。        而採用資料庫連線池之後,首先就建立了固定數量的資料庫連線,需