DB數據源之SpringBoot+MyBatis踏坑過程(五)手動使用Hikari鏈接池html
liuyuhang原創,未經容許禁止轉載 java
系列目錄鏈接mysql
DB數據源之SpringBoot+Mybatis踏坑過程實錄(一)web
1.環境說明spring
springboot2.0以上版本,java8,myeclipse2017 C1,使用的是mySql數據庫sql
pom數據庫
1 <parent> 2 <groupId>org.springframework.boot</groupId> 3 <artifactId>spring-boot-starter-parent</artifactId> 4 <version>2.0.2.RELEASE</version> 5 <relativePath /> 6 </parent> 7 8 <dependencies> 9 10 <!-- spring boot web --> 11 <dependency> 12 <groupId>org.springframework.boot</groupId> 13 <artifactId>spring-boot-starter-web</artifactId> 14 </dependency> 15 16 <!-- 添加MySQL依賴 --> 17 <dependency> 18 <groupId>mysql</groupId> 19 <artifactId>mysql-connector-java</artifactId> 20 </dependency> 21 22 <!-- 添加JDBC依賴 重要--> 23 <dependency> 24 <groupId>org.springframework.boot</groupId> 25 <artifactId>spring-boot-starter-jdbc</artifactId> 26 <exclusions> 27 <!--去掉默認的tomcat-jdbc的依賴 重要--> 28 <exclusion> 29 <groupId>org.apache.tomcat</groupId> 30 <artifactId>tomcat-jdbc</artifactId> 31 </exclusion> 32 </exclusions> 33 </dependency> 34 <!-- 添加 HikariCP數據源 重要--> 35 <dependency> 36 <groupId>com.zaxxer</groupId> 37 <artifactId>HikariCP</artifactId> 38 </dependency> 39 40 <!-- mybaits基礎依賴 --> 41 <dependency> 42 <groupId>org.mybatis</groupId> 43 <artifactId>mybatis</artifactId> 44 <version>3.4.0</version> 45 </dependency> 46 <!-- mybatis插件依賴 --> 47 <dependency> 48 <groupId>org.mybatis.spring.boot</groupId> 49 <artifactId>mybatis-spring-boot-starter</artifactId> 50 <version>1.1.1</version> 51 </dependency> 52 <!-- mapper依賴 --> 53 <dependency> 54 <groupId>tk.mybatis</groupId> 55 <artifactId>mapper</artifactId> 56 <version>3.3.7</version> 57 </dependency> 58 59 60 <dependency> 61 <groupId>org.springframework.boot</groupId> 62 <artifactId>spring-boot-configuration-processor</artifactId> 63 <optional>true</optional> 64 </dependency> 65 66 <!-- 熱部署 --> 67 <dependency> 68 <groupId>org.springframework.boot</groupId> 69 <artifactId>spring-boot-devtools</artifactId> 70 <optional>true</optional> 71 <scope>true</scope> 72 </dependency> 73 <!-- end of 熱部署 --> 74 </dependencies>
使用Hikari鏈接池,須要禁用springboot內置的tomcat的鏈接池,同時要引入Hikari鏈接池的依賴apache
2.配置思路tomcat
3.所需類與結構springboot
3.1.pom,略
3.2.DataConfig.java配置數據源獲取SqlSessionFactory類
3.3.mapper.xml,略
3.4.HelloExample.java測試,略
3.5.AppRun.java,Springboot啓動類,略
4.代碼
DataConfig.java代碼以下:
1 package com.FM.config; 2 3 import org.apache.ibatis.session.SqlSessionFactory; 4 import org.mybatis.spring.SqlSessionFactoryBean; 5 import org.springframework.boot.jdbc.DataSourceBuilder; 6 import org.springframework.context.annotation.Configuration; 7 import org.springframework.core.io.DefaultResourceLoader; 8 import org.springframework.core.io.Resource; 9 import org.springframework.core.io.support.PathMatchingResourcePatternResolver; 10 11 import com.zaxxer.hikari.HikariDataSource; 12 13 /** 14 * DataConfig,獲取數據源,配置給SqlSessionFactory,並以此獲取session 15 * 16 * @author liuyuhang 17 */ 18 @Configuration // 做爲配置,交給spring管理 19 public class DataConfig { 20 21 /** 22 * 數據源基礎配置信息 23 */ 24 private String url = "jdbc:mysql://xxx.xxx.xxx.xxx:3306/DataBaseName?cuseUnicode=true&characterEncoding=utf-8&useSSL=false"; 25 private String driver = "com.mysql.jdbc.Driver"; 26 private String username = "root"; 27 private String password = "root"; 28 29 /** 30 * sqlSessionFactory 31 */ 32 private SqlSessionFactory sqlSessionFactory; 33 34 /** 35 * 雙驗證單例模式 36 */ 37 private static volatile DataConfig dataConfig; 38 39 /** 40 * 構造並對sqlSessionFactory進行一次實例化 41 * @throws Exception 42 */ 43 public DataConfig() throws Exception { 44 System.out.println("DataConfig init"); 45 setSessionFactory(url, driver, username, password); 46 } 47 48 /** 49 * 提供雙重鎖單例,保證sqlSessionFactory只建立一次 50 * @return 51 * @throws Exception 52 */ 53 public static DataConfig getInstenceSingle() throws Exception { 54 if (dataConfig == null) { 55 synchronized (DataConfig.class) { 56 if (dataConfig == null) { 57 dataConfig = new DataConfig(); 58 } 59 } 60 } 61 return dataConfig; 62 } 63 64 /** 65 * 獲取sqlSessionFactory的方法 66 */ 67 public SqlSessionFactory getSqlSessionFactory() throws Exception { 68 return sqlSessionFactory; 69 } 70 71 /** 72 * 配置sqlSessionFactory的方法 73 * @param url 74 * @param driver 75 * @param username 76 * @param password 77 * @throws Exception 78 */ 79 public void setSessionFactory(String url, String driver, String username, String password) throws Exception { 80 // 建立基礎hikari數據源 81 DataSourceBuilder<HikariDataSource> hikariDataSourceBuilder = DataSourceBuilder.create().type(HikariDataSource.class); 82 HikariDataSource hikariDataSource = hikariDataSourceBuilder.driverClassName(driver).url(url).username(username).password(password).build(); 83 84 //配置Hikari鏈接池 85 hikariDataSource.setAutoCommit(true);//update自動提交設置 86 hikariDataSource.setConnectionTestQuery("select 1");//鏈接查詢語句設置 87 hikariDataSource.setConnectionTimeout(3000);//鏈接超時時間設置 88 hikariDataSource.setIdleTimeout(3000);//鏈接空閒生命週期設置 89 hikariDataSource.setIsolateInternalQueries(false);//執行查詢啓動設置 90 hikariDataSource.setMaximumPoolSize(3000);//鏈接池容許的最大鏈接數量 91 hikariDataSource.setMaxLifetime(1800000);//檢查空餘鏈接優化鏈接池設置時間,單位毫秒 92 hikariDataSource.setMinimumIdle(10);//鏈接池保持最小空餘鏈接數量 93 hikariDataSource.setPoolName("hikariPool");//鏈接池名稱 94 95 // 建立sessionFactory 96 SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean(); 97 factoryBean.setDataSource(hikariDataSource);// 注入Hikari數據源 98 // 掃描mapper.xml 99 Resource[] resources = new PathMatchingResourcePatternResolver().getResources("classpath:com/FM/mapper/*.xml"); 100 factoryBean.setMapperLocations(resources); 101 // 讀取config 102 factoryBean.setConfigLocation(new DefaultResourceLoader().getResource("classpath:mybatis-config.xml")); 103 sqlSessionFactory = factoryBean.getObject(); 104 System.out.println("setSessionFactory init"); 105 } 106 107 }
5.說明
6.測試
測試時應觀察mysql鏈接數量增加狀況,總數量,對數據庫進行屢次請求。
後記:鏈接池的使用中應該也會有各類異常狀況出現,將會一一記錄下來,嘗試解析!
以上!