javascript
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的使用:
一、創建數據庫
創建表(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.javapackage 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.javapackage 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.javapackage 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.javapackage 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進行登錄
用戶名和密碼設置如下:
- 登錄成功后,進入首頁。
- 運行相應的 sql 查看 druid SQL監控。
總結
本篇文章通過SpringBoot與JDBCTemplate整合實現簡單的增刪改查的功能,以及怎樣與Druid整合實時監控數據庫的連接信息等;希望通過這個例子能給予大家幫助。
原文作者:淺殤憶流年
原文鏈接:https://segmentfault.com/a/1190000023961648
原文出處:CSDN
總結
以上是生活随笔為你收集整理的druid连接池_SpringBoot整合JDBCTemplate及Druid连接池的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 编个笑话拆穿谎言通关攻略
- 下一篇: 「纯电小板凳」来了!续航 20 公里,本