druid连接池_SpringBoot整合JDBCTemplate及Druid连接池
SpringBoot整合JDBCTemplate
本篇文章将会介绍用SpringBoot整合JDBCTemplate来实现简单的增删改查的功能、及通过SpringBoot整合Druid数据库连接池实时监控数据库的连接信息 ,为优化数据库性能提供更好的指导。
前言
在使用JDBCTemplate之前,我们先来了解一下JDBC。它是java用于连接数据库的规范,也就是用于执行数据库SQL语句的java API。是由一组用java语言编写的类和接口组成,为大部分关系型数据库提供了访问接口。
而JDBC每次使用前进行数据库的连接,然后处理SQL语句、传值、关闭数据库等,如果都由开发人员编写代码,很容易出错,可能会出现在使用完成以后,数据库连接忘记关闭的情况,从而导致连接被占用降低性能,为了减少这种可能的错误,减少开发人员的工作量,JDBCTemplate就被设计出来了。
JdbcTemplate
是Spring提供的一套JDBC模板框架,利用AOP技术来解决直接使用JDBC时大量重复代码的问题。JdbcTemplate
虽然没有MyBatis那么的灵活,但是比直接使用JDBC要方便很多。
下面就通过一个实例来具体介绍JDBCTemplate的使用:
开发工具及环境: IDEA、Maven、jdk1.8、Mysql、postman、
一、创建数据库
创建表(book)
二、项目结构
三、导入依赖
在pom.xml文件中引入下面依赖:
<!-- 引入jdbc--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-jdbc</artifactId></dependency><!-- 引入druid--><dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.1.9</version></dependency><!-- 引入mysql--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.37</version><scope>runtime</scope></dependency>
<!-- 引入log4j--><dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>1.2.17</version></dependency>
四、配置数据库连接信息
在这里使用的是application.yml
的配置文件:
spring:datasource:username: rootpassword: 123url: jdbc:mysql://localhost:3306/jdbctemplate?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghaidriver-class-name: com.mysql.jdbc.Driver
# 使用Druid数据源type: com.alibaba.druid.pool.DruidDataSourceinitialSize: 5minIdle: 5maxActive: 20maxWait: 60000timeBetweenEvictionRunsMillis: 60000minEvictableIdleTimeMillis: 300000validationQuery: SELECT 1 FROM DUALtestWhileIdle: truetestOnBorrow: falsetestOnReturn: falsepoolPreparedStatements: true# 配置监控统计拦截的filters,stat:监控统计、Log4j:日志记录、wall:防御sql注入filters: stat,wall,log4jmaxPoolPreparedStatementPerConnectionSize: 20useGlobalDataSourceStat: trueconnectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=500
五、创建实体类
Book.java
package com.example.entity;/*** @author 2017810402084*/
public class Book {private Integer id;private String name;private String author;public Book() {}public Book(Integer id, String name, String author) {this.id = id;this.name = name;this.author = author;}public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getAuthor() {return author;}public void setAuthor(String author) {this.author = author;}@Overridepublic String toString() {return "Book{" +"id=" + id +", name='" + name + ''' +", author='" + author + ''' +'}';}
}
六、创建数据库访问层(DAO)
BookDao.java
package com.example.dao;import com.example.entity.Book;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Repository;import java.util.List;/*** @author 2017810402084*/@Repository
public class BookDao {@AutowiredJdbcTemplate jdbcTemplate;public int addBook(Book book) {return jdbcTemplate.update("insert into book(name,author) values (?,?)",book.getName(),book.getAuthor());}public int updateBook(Book book) {return jdbcTemplate.update("update book set name = ?,author = ? where id = ?" ,book.getName(),book.getAuthor(),book.getId());}public int deleteBook(Integer id) {return jdbcTemplate.update("delete from book where id = ?",id);}public Book getBookById(Integer id) {return jdbcTemplate.queryForObject("select * from book where id = ?",new BeanPropertyRowMapper<>(Book.class),id);}public List<Book> getAllBooks() {return jdbcTemplate.query("select * from book",new BeanPropertyRowMapper<>(Book.class));}
}
- 在
jdbcTemplate
中,增删改
操作主要使用update
和batchUpdate
方法来完成的。 query
和queryForObject
方法主要来完成查询
的功能。
七、创建Controller
BookController.java
package com.example.controller;import com.example.entity.Book;
import com.example.service.BookService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import java.util.List;/*** @author 2017810402084*/@RestController
@RequestMapping("/book")
public class BookController {@Autowiredprivate BookService bookService;@RequestMapping(value = "/addBook")public String addBook() {Book book = new Book("数据库","李四");int result = bookService.addBook(book);if(result >0) {return "数据插入成功";}else {return "数据插入失败";}}@RequestMapping(value = "/getBookById")public Book getBookById(Integer id){try {Book bookresult = bookService.getBookById(id);if(bookresult != null) {return bookresult;}else {return null;}}catch (Exception e) {return null;}}@RequestMapping(value = "/getBooksList")public List<Book> getBooksList() {return bookService.getAllBooks();}
}
八、创建Service
BookService.java
package com.example.service;import com.example.dao.BookDao;
import com.example.entity.Book;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;import java.util.List;/*** @author 2017810402084*/
@Service
public class BookService {@Autowiredprivate BookDao bookDao;public int addBook(Book book) {return bookDao.addBook(book);}public int updateBook(Book book) {return bookDao.updateBook(book);}public int deleteBook(Integer id) {return bookDao.deleteBook(id);}public Book getBookById(Integer id) {return bookDao.getBookById(id);}public List<Book> getAllBooks() {return bookDao.getAllBooks();}}
九、整合Druid数据库连接池
9.1、配置Druid的监控功能
package com.example.config;import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.druid.support.http.StatViewServlet;
import com.alibaba.druid.support.http.WebStatFilter;
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 javax.sql.DataSource;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;/*** @author 2017810402084*/@Configuration
public class DruidConfig {@ConfigurationProperties(prefix = "spring.datasource")@Beanpublic DataSource druidDataSource() {return new DruidDataSource();}//配置后台Druid监控功能@Beanpublic ServletRegistrationBean statViewServlet(){ServletRegistrationBean bean = new ServletRegistrationBean(new StatViewServlet(), "/druid/*");//后台需要登录HashMap<String,String> initParameters = new HashMap<>();//增加配置initParameters.put("loginUsername", "admin");initParameters.put("loginPassword","123456");//允许谁可以访问initParameters.put("allow", ""); //允许所有访问//禁止谁能访问initParameters.put("druid", "192.168.11.123");//设置初始化参数bean.setInitParameters(initParameters);return bean;}//配置一个web监控的filter@Beanpublic FilterRegistrationBean webStatFilter(){FilterRegistrationBean bean = new FilterRegistrationBean();bean.setFilter(new WebStatFilter());Map<String,String> initParams = new HashMap<>();//不进行统计initParams.put("exclusions","*.js,*.css,/druid/*"); //排除静态资源和请求bean.setInitParameters(initParams);bean.setUrlPatterns(Arrays.asList("/*")); //拦截所有请求return bean;}}
9.2、配置Druid
具体的配置内容已在前面的数据库连接信息中进行配置了,这里不再进行展示。
十、启动项目
项目启动后发现控制台出现下面的情况:
具体的解决方法参见:springboot整合Druid数据(出现log4j:WARN No appenders could be found for logger (druid.sql.Connection))的解决方案
接下来用postman进行测试:
十一、整合结果展示
- 访问:http://127.0.0.1:8080/druid/login.html输入admin/123456进行登录
用户名和密码设置如下:
//增加配置initParameters.put("loginUsername", "admin");initParameters.put("loginPassword","123456");
- 登录成功后,进入首页。
- 运行相应的 sql 查看 druid SQL监控。
总结
本篇文章通过SpringBoot与JDBCTemplate整合实现简单的增删改查的功能,以及怎样与Druid整合实时监控数据库的连接信息等;希望通过这个例子能给予大家帮助。
原文作者:浅殇忆流年
原文链接:https://segmentfault.com/a/1190000023961648
原文出处:CSDN
druid连接池_SpringBoot整合JDBCTemplate及Druid连接池相关推荐
- java使用druid maven_SpringMVC+Spring+Mybatis整合,使用druid连接池,声明式事务,maven配置...
一直对springmvc和mybatis挺怀念的,最近想自己再搭建下框架,然后写点什么. 暂时没有整合缓存,druid也没有做ip地址的过滤.Spring的AOP简单配置了下,也还没具体弄,不知道能不 ...
- redis 连接池_SpringBoot整合redis
闲来没事,把之前自己搭建的SpringBoot集成Redis整理了一下,相信网上有很多,我只是写一下搭建的文章,能帮到就好,不能帮助,也是自己整理的文档罢了.文章开始: 开发工具用的IDEA 2018 ...
- spring boot socket长连接_springboot 整合阿里 druid 数据库连接池实战
情景 web 开发中连接数据库基本是必须的,阿里的 druid 是一款非常优秀的开源数据库连接池工具. 本文将介绍一下如何使用 springboot 整合 druid 数据源. 快速开始 maven ...
- SpringMVC+Spring+Mybatis整合,使用druid连接池,声明式事务,maven配置
一直对springmvc和mybatis挺怀念的,最近想自己再搭建下框架,然后写点什么. 暂时没有整合缓存,druid也没有做ip地址的过滤.Spring的AOP简单配置了下,也还没具体弄,不知道能不 ...
- druid连接池mysql5.7_Spring Boot 使用Druid连接池整合Mybatis-Plus连接Mysql数据库
一.连接池 在普通的数据库访问程序中,客户程序得到的连接对象是物理连接,调用连接对象的close()方法将关闭连接,而采用连接池技术,客户程序得到的连接对象是连接池中物理连接的一个句柄,调用连接对象的 ...
- springboot pom文件添加mysql组件_SpringBoot整合mybatis-plus+druid组件,实现增删改查
前言 本篇文章主要介绍的是SpringBoot整合mybatis-plus,实现增删改查. GitHub源码链接位于文章底部. 建库建表 创建springboot数据库,创建t_user表,字段id主 ...
- springboot update数据_SpringBoot整合Mybatis+Druid+数据库(注解版)
运行展示 正题 Spring boot :2.1.5RELEASE :数据库(Mysql.Oracle):Mybatis:阿里云的连接池 : Druid : 步骤 1.POM依赖 <!-- My ...
- druid java直接调用_Spring Boot使用Druid连接池的示例代码
Druid是Java语言中最好的数据库连接池.Druid相比于其他的数据库连接池,有两大特性: 监控数据库,有利于分析线上数据库问题 更容易扩展,同时也很高效. 今天演示一下Spring Boot集成 ...
- druid连接池mysql自动关闭_探究Druid连接池“违反协议”异常
作者:董添 使用Druid连接池和PreparedStatement Cache后,应用访问数据库的效率提高了,针对连接池的监控手段也变多了,但是随之而来也出现了一些新的问题,最近发现在给表增加字段后 ...
最新文章
- 斜率小于0的连线数量 51Nod - 1107 (树状数组+离散化)
- 2007白领职场成功需要哪“十商”
- [js] 写一个格式化时间的方法
- EM算法最完整易懂讲解
- 能搜python题的软件_中国大学MOOC的APP用Python玩转数据期末考试搜题公众号答案...
- MathType几个常用字体的名称
- kafka+线程池+Runnable
- 高等数学辅导讲义_《高等数学》考研自用框架体系
- 陕西2020行政区划调整_陕西省最新行政区划,厉害了大陕西
- 计算机第一代及第四代发展概况,1计算机发展概况解析.ppt
- python色彩变换CMYK,RGB,HSI
- 前端导航栏的几种写法
- Puppet nginx+passenger模式配置
- 抓住每一次学习的机会
- c++ 去除字符串首尾的空白字符
- 计算机毕业设计Java诚越园区垃圾分类信息科普系统(源码+系统+mysql数据库+lw文档)
- 让curl支持IE代理
- html期末成绩查询页面,小学分数查询
- 输出一个区间内的质数(素数)
- macbert4csc纠错
热门文章
- android 虚拟按键 增减和删除的方法
- NoSQL(3) 之Redis主从复制、哨兵和集群介绍及详细搭建步骤
- rap技术原理_「水深坑多」做分子海绵,你还需要了解这些技术
- 大话移动通信pdf_移动通信是怎么实现的?
- 在本地机房享受专属公共云服务,详解阿里云本地化部署服务云盒
- 揭秘 | 大流量场景下发布如『丝般顺滑』背后的原因
- 专访《王者荣耀》美术总监:用6年研究东方美学
- 《Detroit:Become Human》玩家情感故事背后的叙事魔法和体验设计
- 游戏中常用的寻路算法的分享(3):A*算法的实现
- 游戏编程新手教程:怪物AI设计简述