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>
* @author cao_wencao
* @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