1. 程式人生 > >SpringBoot | 第十章:搭建SpringBoot整合Mybatis+druid連線池監控

SpringBoot | 第十章:搭建SpringBoot整合Mybatis+druid連線池監控

前言

    今年註定是不平凡的一年,Spring家族的一套SpringBoot+SpringCloud掀起來一陣熱潮,網際網路微服務技術火熱膨脹,身邊的程式設計師都在學習,我經不住誘惑,準備從零開始學,並且以記錄部落格的形式;

一. 建立springboot工程

 1.開啟Eclipse,點選File-> New Maven project->填寫Group id和Artifact id->點選Finish,一個簡單的專案架子建立完了;

  

2. pom.xml檔案新增依賴

<project xmlns="http://maven.apache.org/POM/4.0.0"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<groupId>com.thinkingcao</groupId>
	<artifactId>springboot-mybatis-druid</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>2.1.0.RELEASE</version>
		<relativePath /> <!-- lookup parent from repository -->
	</parent>

	<properties>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
		<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
		<java.version>1.8</java.version>
	</properties>

	<dependencies>
		<!-- SpringBoot-web元件 -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
		<!-- lombok外掛 -->
		<dependency>
			<groupId>org.projectlombok</groupId>
			<artifactId>lombok</artifactId>
			<optional>true</optional>
		</dependency>
		<!-- https://mvnrepository.com/artifact/org.mybatis.spring.boot/mybatis-spring-boot-starter -->
		<!-- SpringBoot-Mybatis元件 -->
		<dependency>
			<groupId>org.mybatis.spring.boot</groupId>
			<artifactId>mybatis-spring-boot-starter</artifactId>
			<version>1.1.1</version>
		</dependency>
		<!-- SpringBoot-test元件 -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>
		<!-- mysql 連線驅動元件 -->
		<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
			<version>5.1.36</version>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter</artifactId>
		</dependency>
		<!-- https://mvnrepository.com/artifact/com.alibaba/druid -->
		<!-- druid資料庫連線池 -->
		<dependency>
			<groupId>com.alibaba</groupId>
			<artifactId>druid</artifactId>
			<version>1.1.10</version>
		</dependency>

	</dependencies>

	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>
		</plugins>
	</build>
</project>

3.  新建MybatisAndDruidApplication啟動測試類,執行專案,測試能否正常啟動 

package com.thinkingcao;
 
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
 
/**
 * <pre>
 * @author cao_wencao
 * @date 2018年12月4日 下午1:59:57
 * </pre>
 */
@SpringBootApplication
public class MybatisAndDruidApplication {
 
	/**
	 * <pre>  
	 * @author cao_wencao
	 * @param args
	 * </pre>  
	 */
	public static void main(String[] args) {
		SpringApplication.run(MybatisAndDruidApplication.class, args);
 
	}
 
}

這個時候由於沒有配置資料來源,而我們依賴裡面加了maven依賴,啟動會報錯,具體解決檢視部落格:Spring boot 資料來源未配置,啟動異常

4.  配置資料來源

  在src->main->resource下面新建配置檔案application.yml

 spring:
   #profiles: dev
   messages:
     basename: i18n/Messages,i18n/Pages
   datasource:
     type: com.alibaba.druid.pool.DruidDataSource    # 配置當前要使用的資料來源的操作型別
     driver-class-name: com.mysql.jdbc.Driver        # 配置MySQL的驅動程式類
     url: jdbc:mysql://localhost:3306/springboot-mybatis-druid           # 資料庫連線地址
     username: root                                  # 資料庫使用者名稱
     password: root                            # 資料庫連線密碼
   dbcp2:                                          # 進行資料庫連線池的配置
      min-idle: 5                                   # 資料庫連線池的最小維持連線數
      initial-size: 5                               # 初始化提供的連線數
      max-total: 5                                  # 最大的連線數
      max-wait-millis: 200                          # 等待連接獲取的最大超時時間                   

5.  設定mybatis

繼續在application.yml中設定mybatis,mybatis的配置也簡單,
主要是為了設定mybatis的配置檔案已經mapper檔案所在。

 (1).  首先在resource目錄下建立一個mybatis-config.xml檔案,檔案內容為:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <mappers>
    </mappers>
</configuration>

 (2). 在main包中的根目錄下建立一個存放mapper實體的資原始檔,在resource檔案下建立一個資料夾mapper用來存放mapper的xml檔案。

 (3).  配置好資原始檔路徑之後,就可以在application.yml中加入mybatis的配置了,如下是一個mybatis的配置內容:

 #mybatis的mapper配置檔案
 mybatis:
  config-location: classpath:mybatis-config.xml  # mybatis配置檔案所在路徑
  mapper-locations: classpath:mapper/*.xml   # 所有的mapper對映檔案
  type-aliases-package: com.thinkingcao.modules.mapper # 定義所有操作類的別名所在包
 debug: true
 logging:
  level:
    com.thinkingcao.modules.mapper: debug   #列印mybatis的SQL

最終application.yml的內容如下圖:

 

 

(4). 此時需要有一個數據庫表來做測試,我們在資料庫建立一個表,並且插入一條資料:

CREATE TABLE Memeber (
`id`  int(11) NOT NULL AUTO_INCREMENT ,
`name`  varchar(255) NULL ,
PRIMARY KEY (`id`)
);

INSERT INTO memeber VALUES(1,"jay")

(5). 在mapper包中建立Memeber的mapper介面:

import java.util.Map;

import org.apache.ibatis.annotations.Param;

public interface MemeberMapper {
	//根據id獲取記錄
	public Map findObjectById(@Param("id")Integer id);
	
}

(6). 在resource中的mapper資料夾建立memberMapper.xml,並且在mapper中增加一個findObjectById的SQL查詢語句。

<?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE mapper
         PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--對映檔案配置,namespace指向介面 -->
<mapper namespace="com.thinkingcao.modules.mapper.MemeberMapper">
	<!-- #根據ID查詢記錄 -->
	<select id="findObjectById" parameterType="Integer"
		resultType="Map">
		select * from memeber where id = #{id}
	</select>
</mapper>

(7). 新建TestController測試

import java.util.Map;

import javax.annotation.Resource;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import com.thinkingcao.modules.mapper.MemeberMapper;

@Controller
@RequestMapping("/test")
public class TestController {
	@Resource
	private MemeberMapper memeberMapper = null;

	@RequestMapping("/one")
	@ResponseBody
	public Map testdb() {
		return memeberMapper.findObjectById(1);
	}
}

建立完之後,我們執行專案,找到啟動類MybatisAndDruidApplication右鍵run,發現報錯,提示沒有掃描到mapper包,為什麼呢?那是mapper需要手動在啟動類中加入:

@MapperScan("com.thinkingcao.modules.mapper")
package com.thinkingcao;

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

/**
 * <pre>
 * @author cao_wencao
 * @date 2018年12月4日 下午1:59:57
 * </pre>
 */
@SpringBootApplication
@MapperScan("com.thinkingcao.modules.mapper")
public class MybatisAndDruidApplication {

	/**
	 * <pre>  
	 * @author cao_wencao
	 * @param args
	 * </pre>  
	 */
	public static void main(String[] args) {
		SpringApplication.run(MybatisAndDruidApplication.class, args);

	}

}

 再次執行,沒有報錯,在瀏覽器輸入:http://localhost:8080/test/one
 輸出了ID為1的記錄:

{
    "name": "jay",
    "id": 1
}

  由此可見,springboot-mybatis已經搭建成功;

6. 搭建Druid監控平臺

    druid的使用需要做一些配置,現在我們來在根目錄下建立一個包config,在config包中間建立一個叫做DruidConfig.java,並且在裡寫入下面的內容:

package com.thinkingcao.config;

import javax.sql.DataSource;

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.druid.support.http.StatViewServlet;
import com.alibaba.druid.support.http.WebStatFilter;

/**
 * <pre>
 * &#64;author cao_wencao
 * &#64;date 2018年12月4日 下午3:31:31
 * </pre>
 */
@Configuration
public class DruidConfig {
	@Bean
	public ServletRegistrationBean druidServlet() { // 主要實現WEB監控的配置處理
		ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean(new StatViewServlet(),
				"/druid/*"); // 進行druid監控的配置處理操作
		servletRegistrationBean.addInitParameter("allow", "127.0.0.1,192.168.1.159"); // 白名單
		servletRegistrationBean.addInitParameter("deny", "192.168.1.200"); // 黑名單
		servletRegistrationBean.addInitParameter("loginUsername", "admin"); // 使用者名稱
		servletRegistrationBean.addInitParameter("loginPassword", "111111"); // 密碼
		servletRegistrationBean.addInitParameter("resetEnable", "false"); // 是否可以重置資料來源
		return servletRegistrationBean;
	}

	@Bean
	public FilterRegistrationBean filterRegistrationBean() {
		FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean();
		filterRegistrationBean.setFilter(new WebStatFilter());

		filterRegistrationBean.addUrlPatterns("/*"); // 所有請求進行監控處理
		filterRegistrationBean.addInitParameter("exclusions", "*.js,*.gif,*.jpg,*.css,/druid/*");
		return filterRegistrationBean;
	}

	@Bean
	@ConfigurationProperties(prefix = "spring.datasource")
	public DataSource druidDataSource() {
		return new DruidDataSource();
	}
}

 最後貼一張專案完整目錄

 

現在重新執行一下專案,執行成功之後,在瀏覽器中輸入:http://localhost:8888/druid
這時候,druid監控平臺就出現了


此時我們輸入在DruidConfig中設定的loginUsername和loginPassword點選登入,一個完整的druid監控管理平臺就出現了

Druid非常強大,在這裡你可以檢視SQL的執行情況、慢SQL、API請求情況等,根據這些可以做一些效能的調優,至於詳細的用法,百度都可以瞭解到;

專案原始碼 :https://github.com/Thinkingcao/SpringBootBucket/tree/master/springboot-mybatis-druid