绑定DataSource:Spring Boot默认的数据源是:org.apache.tomcat.jdbc.pool.DataSource,Druid是Java语言中最好的数据库连接池,并且能够提供强大的监控和扩展功能,而且datasource是一般项目都需要使用的功能。因此,这里将学习如何使用springboot与druid集成datasource。

springboot2.0.1+alibaba druid组件导入maven:

1)导入alibaba druid组件:

        <!--druid 依赖-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.9</version>
</dependency>

备注:具体请查看官网提供的使用介绍:https://github.com/alibaba/druid/tree/master/druid-spring-boot-starter。

2)导入mysql驱动包:

        <!--MySQL Driver驱动包-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>

3)导入springboot jpa集成组件:

        <!-- Spring Boot的JPA依赖包-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>

此时,pom.xml配置内容为:

 <?xml version="1.0" encoding="UTF-8"?>
<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.dx</groupId>
<artifactId>springboot-helloword</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging> <name>springboot-helloword</name>
<description>Demo project for Spring Boot</description> <parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.1.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>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--完成get set toString注册 -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<!--springboot 热部署工具-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<!--druid 依赖-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.9</version>
</dependency>
<!--MySQL Driver驱动包-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<!-- Spring Boot的JPA依赖包-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
</dependencies> <build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build> </project>

自定义datasource配置项加载:

1)在src/resources/application.properties中添加以下配置信息:

# 自定义 数据库配置信息
db.username=root
db.password=root
db.url=jdbc:mysql://localhost:3306/springboot_helloword
db.driver-class-name=com.mysql.jdbc.Driver

2)修改项目的启动入口,添加DataSource的bean注入,及标注自定义参数配置注入:

package com.dx.controller;

import com.alibaba.druid.pool.DruidDataSource;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean; import javax.sql.DataSource; @SpringBootApplication
public class SpringbootHellowordApplication { @Bean
@ConfigurationProperties(prefix = "db")
public DataSource dateSource() {
DruidDataSource dataSource = new DruidDataSource();
return dataSource;
} public static void main(String[] args) {
SpringApplication.run(SpringbootHellowordApplication.class, args);
}
}

这里的dateSource() 启到的作用就是注入datasourcebean,同时加载自定义配置项的作用。

3)添加测试controller服务HelloWordController.java类:

package com.dx.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody; import javax.sql.DataSource;
import java.sql.SQLException; @Controller
public class HelloWordController {
@Autowired
private DataSource dataSource; @RequestMapping("/index")
@ResponseBody
public String index() throws SQLException {
System.out.println(dataSource.getConnection());
System.out.println(dataSource);
return "hello spring boot";
}
}

4)测试,在浏览器中访问http://localhost:8888/index,查看控制台打印信息:

com.mysql.jdbc.JDBC4Connection@7120165d
{
CreateTime:"2018-04-09 20:41:41",
ActiveCount:1,
PoolingCount:0,
CreateCount:1,
DestroyCount:0,
CloseCount:4,
ConnectCount:5,
Connections:[
]
}

使用springboot集成的datasource配置项:

1)修改datasource参数配置,使用系统集成参数配置项:

## 自定义 数据库配置信息
#db.username=root
#db.password=root
#db.url=jdbc:mysql://localhost:3306/springboot_helloword
#db.driver-class-name=com.mysql.jdbc.Driver
#druid datasouce database settings begin
spring.datasource.druid.db-type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.druid.driverClassName=com.mysql.jdbc.Driver
spring.datasource.druid.url=jdbc:mysql://localhost:3306/springboot_helloword?allowMultiQueries=true&autoReconnect=true&characterEncoding=utf-8
spring.datasource.druid.username=root
spring.datasource.druid.password=root
# 下面为连接池的补充设置,应用到上面所有数据源中
# 初始化大小,最小,最大
spring.datasource.druid.initial-size=
spring.datasource.druid.min-idle=
spring.datasource.druid.max-active=
# 配置获取连接等待超时的时间
spring.datasource.druid.max-wait=
# 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
spring.datasource.druid.time-between-eviction-runs-millis=
# 配置一个连接在池中最小生存的时间,单位是毫秒
spring.datasource.druid.min-evictable-idle-time-millis=
spring.datasource.druid.validation-query=SELECT FROM DUAL
spring.datasource.druid.test-while-idle=true
spring.datasource.druid.test-on-borrow=false
spring.datasource.druid.test-on-return=false
# 打开PSCache,并且指定每个连接上PSCache的大小
spring.datasource.druid.pool-prepared-statements=true
spring.datasource.druid.max-pool-prepared-statement-per-connection-size=
# 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙
spring.datasource.druid.filter.commons-log.connection-logger-name=stat,wall,log4j
spring.datasource.druid.filter.stat.log-slow-sql=true
spring.datasource.druid.filter.stat.slow-sql-millis=
# 通过connectProperties属性来打开mergeSql功能;慢SQL记录
spring.datasource.druid.connect-properties.=druid.stat.mergeSql=true;druid.stat.slowSqlMillis=
# 合并多个DruidDataSource的监控数据
spring.datasource.druid.use-global-data-source-stat=true

2)在springboot服务启动类不用注入其他bean和加载参数配置:

package com.dx.controller;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication
public class SpringbootHellowordApplication {
public static void main(String[] args) {
SpringApplication.run(SpringbootHellowordApplication.class, args);
}
}

3)测试服务类HelloWordController.java与上边一样即可。

4)测试,在浏览器中访问http://localhost:8888/index,查看控制台打印信息:

com.alibaba.druid.proxy.jdbc.ConnectionProxyImpl@3e6c29a1
{
CreateTime:"2018-04-09 21:15:51",
ActiveCount:1,
PoolingCount:4,
CreateCount:5,
DestroyCount:0,
CloseCount:4,
ConnectCount:5,
Connections:[
{ID:1407373927, ConnectTime:"2018-04-09 21:15:51", UseCount:0, LastActiveTime:"2018-04-09 21:15:51"},
{ID:485935020, ConnectTime:"2018-04-09 21:15:51", UseCount:0, LastActiveTime:"2018-04-09 21:15:51"},
{ID:1400896839, ConnectTime:"2018-04-09 21:15:51", UseCount:0, LastActiveTime:"2018-04-09 21:15:51"},
{ID:209844136, ConnectTime:"2018-04-09 21:15:51", UseCount:0, LastActiveTime:"2018-04-09 21:15:51"}
]
} [
{ID:1407373927,poolStatements:[]},
{ID:485935020,poolStatements:[]},
{ID:1400896839,poolStatements:[]},
{ID:209844136,poolStatements:[]}
]

配置监控统计功能:

1)配置Servlet(监控视图配置):

如下是在SpringBoot项目中基于注解的配置,如果是web.xml配置,按规则配置即可。

package com.base.servlet;

import com.alibaba.druid.support.http.StatViewServlet;

import javax.servlet.annotation.WebInitParam;
import javax.servlet.annotation.WebServlet; /**
* druid数据源状态监控.
* */
@WebServlet(urlPatterns="/druid/*",
initParams={
@WebInitParam(name="allow",value="192.168.1.72,127.0.0.1"),// IP白名单(没有配置或者为空,则允许所有访问)
@WebInitParam(name="deny",value="192.168.1.73"),// IP黑名单 (存在共同时,deny优先于allow)
@WebInitParam(name="loginUsername",value="admin"),// 用户名
@WebInitParam(name="loginPassword",value="123456"),// 密码
@WebInitParam(name="resetEnable",value="false")// 禁用HTML页面上的“Reset All”功能
}
)
public class DruidStatViewServlet extends StatViewServlet {
private static final long serialVersionUID = 1L; }

2)过滤不需要监控的后缀:

package com.base.servlet;

import javax.servlet.annotation.WebFilter;
import javax.servlet.annotation.WebInitParam; import com.alibaba.druid.support.http.WebStatFilter; /**
* druid过滤器.
*/
@WebFilter(filterName = "druidWebStatFilter", urlPatterns = "/*",
initParams = {
@WebInitParam(name = "exclusions", value = "*.js,*.gif,*.jpg,*.bmp,*.png,*.css,*.ico,/druid/*")//忽略资源
}
)
public class DruidStatFilter extends WebStatFilter { }

3)测试配置是否成功。

访问网址:http://localhost:8888/druid/index.html

SpringBoot(七):集成DataSource 与 Druid监控配置的更多相关文章

  1. springboot~集成DataSource 与 Druid监控配置

    介绍 Druid首先是一个数据库连接池.Druid是目前最好的数据库连接池,在功能.性能.扩展性方面,都超过其他数据库连接池,Druid已经在阿里巴巴部署了超过600个应用,经过一年多生产环境大规模部 ...

  2. 为Druid监控配置访问权限(配置访问监控信息的用户与密码)

    转: l 为Druid监控配置访问权限(配置访问监控信息的用户与密码) 2014-09-26 09:21:48         来源:renfufei的专栏   收藏   我要投稿   Druid是一 ...

  3. springboot整合druid监控配置

    方式一:直接引入druid 1.maven坐标 <dependency> <groupId>com.alibaba</groupId> <artifactId ...

  4. 十三、springboot 优雅集成spring-boot-admin 实现程序监控

    前言 我们知道项目的监控是尤为重要的,但是我们如果用jdk 自带的jconsole 和jvisualvm 的话会非常繁琐,且界面不是很友好.之前我们使用了spring boot 项目,但是都没有对项目 ...

  5. SpringBoot快速集成SpringBootAdmin管控台监控服务

    SpringBootAdmin是一个针对 Spring Boot 的 Actuator 接口进行 UI 美化封装的监控工具,它可以在列表中浏览所有被监控 spring-boot 项目的基本信息.详细的 ...

  6. mysql使用druid监控配置

    近一年公司对druid使用频率越来越高了,感觉有必要了解下druid的监控配置,参考文档:https://blog.csdn.net/netdevgirl/article/details/526098 ...

  7. Springboot druid监控配置

    @Configuration public class DataSourceConfig { @Bean public ServletRegistrationBean statViewServlet( ...

  8. druid监控配置

    druid相对于传统的c3p0和dbcp及其dbcp2等多个很多新特性 可以在线监控数据库及其表和sql以及Controller的requestMapping和对应的业务方面请求和session等 是 ...

  9. springboot中使用druid和监控配置

    如果想要监控自己的项目的访问情况及查看配置信息,druid是一个很好的选择,可能你会问druid是什么?有什么用?优点是什么? Druid简介 Druid是阿里巴巴开源的数据库连接池,号称是Java语 ...

随机推荐

  1. Ubuntu下sudo命令出现无法解析主机名

    替换hosts文件后sudo命令提示 无法解析主机名 把hosts文件中127.0.0.1后的名字改为主机名,即 /etc/hostname 中的名字

  2. Xss问题解决方案

    xss跨站脚本攻击问题最主要是呈现在html页面的脚本被执行导致的结果,可分为两个方便作屏蔽 后台屏蔽 在前端上传的各个参数后,对其进行转义后再保存至数据库,属于暴力式转义,一般不建议.下面是写的例子 ...

  3. android中activity.this跟getApplicationContext的区别

    转载: http://www.myexception.cn/android/1968332.html android中activity.this和getApplicationContext的区别 在a ...

  4. 为什么说android UI操作不是线程安全的

    转载于:http://blog.csdn.net/lvxiangan/article/details/17218409#t2 UI线程及Android的单线程模型原则 使用Worker线程 Commu ...

  5. linux No space left on device 由索引节点(inode)爆满引发500问题

    inode是什么? 理解inode,要从文件储存说起. 文件储存在硬盘上,硬盘的最小存储单位叫做"扇区"(Sector).每个扇区储存512字节(相当于0.5KB). 操作系统读取 ...

  6. Struts2 之 Action 类访问 WEB 资源

    接着上次博客的内容我继续分享我所学到的知识,和自己在学习过程中所遇到问题以及解决方案.当然,如果读者发现任何问题均可以在下方评论告知我,先谢! 在 Action 中访问 WEB 资源 web 资源 所 ...

  7. 使用Python中的mock模块进行单元测试

    在进行单元测试的时候,有时候会遇到这种情况: 出于某些原因,我们不想测试某一部分内容,但是我们想要测试的部分却依赖这部分内容. 这时候,可以使用mock模块来模拟调用这部分内容,并给出返回结果,举例如 ...

  8. 1013团队Beta冲刺day1

    项目进展 李明皇 今天解决的进度 点击首页list相应条目将信息传到详情页 明天安排 优化信息详情页布局 林翔 今天解决的进度 前后端连接成功 明天安排 开始微信前端+数据库写入 孙敏铭 今天解决的进 ...

  9. win7开启wifi

    在启用本地共享连接时,出现的错误! 我已经建了一个无线临时网络,来启用共享用来上网的!Internet连接共享访问被启用时,出现了一个错误(null)?而且这错误也会在系统日志里留下记录,都是些莫名其 ...

  10. SELinux与进程管理