原创

SpringBoot 系列教程(十):搭建SpringBoot集成Mybatis+druid连接池监控

版权声明: 本文为博主原创文章,转载请注明原文出处!
本文链接:https://thinkingcao.blog.csdn.net/article/details/84787124

项目源码 : https://github.com/Thinkingcao/SpringBootBucket/tree/master/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的内容如下图: 

mybatis.type-aliases-package 来指明和数据库映射的实体的所在包。

mybatis.mapper-locations 来指明mapper的xml文件存放位置

(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:8080/druid
这时候,druid监控平台就出现了

此时我们输入在DruidConfig中设置的loginUsername和loginPassword点击登录,一个完整的druid监控管理平台就出现了

Druid非常强大,在这里你可以查看SQL的执行情况、慢SQL、API请求情况等,根据这些可以做一些性能的调优,至于详细的用法,百度都可以了解到;

二、源码

项目源码 : https://github.com/Thinkingcao/SpringBootBucket/tree/master/springboot-mybatis-druid

文章最后发布于: 2018-12-04 15:20:44
展开阅读全文
0 个人打赏
私信求帮助

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 编程工作室 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览