新建项目,初始项目框架选择
Druid是阿里巴巴的一个开源项目,号称为监控而生的数据库连接池,在功能、性能、扩展性方面都超过其他例如DBCP、C3P0、BoneCP、Proxool、JBoss DataSource等连接池,而且Druid已经在阿里巴巴部署了超过600个应用,通过了极为严格的考验,这才收获了大家的青睐!
话不多说,下面开始在我们的项目中配置Druid。本篇博客在上一篇博客Spring boot 整合Mybatis的基础上配置Druid,关于Mybatis连接数据库的内容就不多说了。
在我们项目的pom.xml文件中添加如下的依赖:
<!-- druid --> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid-spring-boot-starter</artifactId> <version>1.1.10</version> </dependency>
这里需要注意的是(很多人出错的原因),Druid还有另外一种依赖如下:
<dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.1.3</version> </dependency>
两种依赖都可以,但是配置的方式有些不同,使用下面的这种依赖项,在配置的时候需要新建Druid的配置类文件,而第一种依赖项则不需要,这里我使用的就是第一种--更简单,第二种就不介绍了,想了解的朋友请自行Google。
我看网上的教程这一块写的都很模糊,直接上来就是一堆配置,也没有表明配置是什么意思,这对于喜欢复制粘贴的人来说很nice但是真的不利于我们掌握理解,所以我这里尽量分层给大家介绍的更清晰一些。
首先在项目的配置文件application.properties文件中添加如下内容,表明使用Druid连接池:#表明使用Druid连接池 spring.datasource.type=com.alibaba.druid.pool.DruidDataSource 配置数据源信息(整合Mybatis的时候已经说过了,为了连贯性这里再提一遍)
#配置实体类的位置 mybatis.type-aliases-package=com.web.springbootmybatis.entity #xml文件位置 mybatis.mapper-locations=classpath:mapper/*.xml #mysql数据库连接信息配置 #mysql驱动 spring.datasource.driverClassName=com.mysql.jdbc.Driver #数据库连接信息 spring.datasource.url=jdbc:mysql://localhost:3306/eran?useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8 #数据库用户名 spring.datasource.username=root #数据库密码 spring.datasource.password=root 接下来配置连接池的相关属性,这些参数根据自己的需要灵活配置即可:
#初始化时建立物理连接的个数。 spring.datasource.druid.initial-size=5 #最大连接池数量 spring.datasource.druid.max-active=20 #最小连接池数量 spring.datasource.druid.min-idle=5 #获取连接时最大等待时间,单位毫秒 spring.datasource.druid.max-wait=3000 #是否缓存preparedStatement,也就是PSCache,PSCache对支持游标的数据库性能提升巨大,比如说oracle,在mysql下建议关闭。 spring.datasource.druid.pool-prepared-statements=false #要启用PSCache,必须配置大于0,当大于0时,poolPreparedStatements自动触发修改为true。在Druid中,不会存在Oracle下PSCache占用内存过多的问题,可以把这个数值配置大一些,比如说100 spring.datasource.druid.max-open-prepared-statements= -1 #配置检测可以关闭的空闲连接间隔时间 spring.datasource.druid.time-between-eviction-runs-millis=60000 # 配置连接在池中的最小生存时间 spring.datasource.druid.min-evictable-idle-time-millis= 300000 spring.datasource.druid.max-evictable-idle-time-millis= 400000
通过别名的方式配置扩展插件,常用的插件有:
别名含义stat监控统计log4j日志wall防御sql注入这里我们就配置了stat和wall,配置多个英文逗号分隔,配置如下:
#监控统计的stat,以及防sql注入的wall spring.datasource.druid.filters= stat,wall #Spring监控AOP切入点,如x.y.z.service.*,配置多个英文逗号分隔 spring.datasource.druid.aop-patterns= com.web.springbootdruid.service.*这里配置很重要,比如不配置stat,我们在Druid的监控页面中就拿不到想要的信息。
上边我们开启stat监控统计插件,下边进行监控配置:#是否启用StatFilter默认值true spring.datasource.druid.web-stat-filter.enabled= true #添加过滤规则 spring.datasource.druid.web-stat-filter.url-pattern=/* #忽略过滤的格式 spring.datasource.druid.web-stat-filter.exclusions=*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/* StatViewServlet配置:Druid内置提供了一个StatViewServlet用于展示Druid的统计信息,StatViewServlet的用途包括: 提供监控信息展示的html页面提供监控信息的JSON API
配置如下,需要注意的是用户名和密码:
#是否启用StatViewServlet默认值true spring.datasource.druid.stat-view-servlet.enabled= true #访问路径为/druid时,跳转到StatViewServlet spring.datasource.druid.stat-view-servlet.url-pattern=/druid/* # 是否能够重置数据 spring.datasource.druid.stat-view-servlet.reset-enable=false # 需要账号密码才能访问控制台,默认为root spring.datasource.druid.stat-view-servlet.login-username=druid spring.datasource.druid.stat-view-servlet.login-password=druid #IP白名单 spring.datasource.druid.stat-view-servlet.allow=127.0.0.1 # IP黑名单(共同存在时,deny优先于allow) spring.datasource.druid.stat-view-servlet.deny=
到这里,关于Druid的配置就基本完成了,想要了解更多的朋友,可以去查阅官方文档【传送门】
我们直接启动项目,浏览器访问localhost:8080/druid或者127.0.0.1:8080/druid得到如下页面说明配置成功:
在这里插入图片描述
进入Druid的登陆页面,输入我们在配置文件中配置的用户名和密码登陆,进入下面的页面:
在这里插入图片描述
首页可以看到一些基本配置信息,点击菜单栏中的数据源可以查看到我们的数据源配置信息,以及连接池配置信息:
在这里插入图片描述
点击sql监控,查看执行sql信息:
在包下创建目录 controller, dao, entity, service 如下图
由于我使用的是xml版,所以需要添加xml文件,这里只是简单写一下,实际开发中,这些文件我们都是利用插件自动生成的
<?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"> <mapper namespace="cn.springboottest.sbdruidmybatis03.dao.SysUserMapper"> <resultMap id="sysUser" type="cn.springboottest.sbdruidmybatis03.entity.SysUser"> <result column="id" property="id" /> <result column="usercode" property="usercode" /> <result column="username" property="username" /> <result column="password" property="password" /> <result column="salt" property="salt" /> <result column="locked" property="locked" /> </resultMap> <select id="findById" parameterType="java.lang.Long" resultMap="sysUser"> SELECT id, usercode, username, password, salt, locked FROM sys_user WHERE id=#{id} </select> </mapper>service接口
package cn.springboottest.sbdruidmybatis03.service; import cn.springboottest.sbdruidmybatis03.entity.SysUser; public interface ISysUserService { SysUser findById(Long id); }service接口实现
package cn.springboottest.sbdruidmybatis03.service.impl; import cn.springboottest.sbdruidmybatis03.dao.SysUserMapper; import cn.springboottest.sbdruidmybatis03.entity.SysUser; import cn.springboottest.sbdruidmybatis03.service.ISysUserService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @Service("sysUserService") public class SysUserServiceImpl implements ISysUserService { private SysUserMapper sysUserMapper; @Override public SysUser findById(Long id) { // TODO Auto-generated method stub return sysUserMapper.findById(id); } }控制器
package cn.springboottest.sbdruidmybatis03.controller; import cn.springboottest.sbdruidmybatis03.entity.SysUser; import cn.springboottest.sbdruidmybatis03.service.ISysUserService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class TestController { @Autowired private ISysUserService sysUserService; @RequestMapping("/user") public SysUser getUser() { return sysUserService.findById(1L); } }在启动类中添加注解@MapperScan()注解配置扫描dao层位置,里边的值根据实际情况填写。
package cn.springboottest.sbdruidmybatis03; import org.mybatis.spring.annotation.MapperScan; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication @MapperScan("cn.springboottest.sbdruidmybatis03.dao") //该注解表示 程序启动时扫描 dao 使得 SysUserMapper.java 与 .xml文件匹配 public class Sbdruidmybatis03Application { public static void main(String[] args) { SpringApplication.run(Sbdruidmybatis03Application.class, args); } }此时项目的结构为:
修改 pom.xml 文件,增加如下内容(不然dao 接口会映射不上)
最后运行结果如下:
