IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> Spring Boot(九):数据库连接池Druid -> 正文阅读

[大数据]Spring Boot(九):数据库连接池Druid

数据库连接池简介

1、为什么要使用数据库连接池?

创建数据库连接(TCP连接建立时需要三次握手)是一个很耗时的过程,在使用完之后,还需要不断的释放建立的连接(销毁时需要四次握手),对资源的损耗比较大。

数据库连接池会将已经创建好的连接保存在池中,当有请求来时,直接使用已经创建好的连接访问数据库,这样可以省略创建连接和销毁连接的过程,从而提高性能。这样做的缺点是,可能某些时候完全没有数据库请求,但是也保持了数据库的最小连接数,浪费了资源,不过这种资源浪费相对于完全不采用数据库连接池还是很有优势的。

2、常用的数据库连接池

目前市场上常用的数据库连接池有:C3P0、Proxool、DBCP、Tomcat JDBC Pool、HiKariCP 和 Druid

性能方面:HiKariCP > Druid > Tomcat JDBC Pool > DBCP > C3P0 > Proxool

活跃度方面:C3P0、Proxool、DBCP的版本都已经很久没更新了,Tomcat JDBC Pool、HiKariCP 和 Druid仍处于活跃的更新中。Spring Boot 2.0 将默认的数据库连接池从Tomcat JDBC Pool 改为了HiKariCP。

虽然HikariCP已经很优秀,但是对于国内用户来说,可能对于Druid更为熟悉,Druid是阿里开源的数据库连接池,除了良好的性能和稳定性外,它还加入了监控统计、防御SQL注入等功能。

Druid的使用

1、引入依赖

在pom.xml中引入Druid的依赖

<!-- druid数据库连接池 --> 
<dependency> 
    <groupId>com.alibaba</groupId> 
    <artifactId>druid-spring-boot-starter</artifactId> 
    <version>1.1.20</version> 
</dependency>

注:

1)如果打包时报如下警告,说明Druid引入的版本太高了,降低版本即可

The POM for com.alibaba:druid:jar:1.1.21 is invalid, transitive dependencies (if any) will not be available, enable debug logging for more details 

2、配置application-dev.yml配置文件

spring: 
  datasource: 
    url: jdbc:mysql://localhost:3306/blog 
    username: root 
    password: test 
    type: com.alibaba.druid.pool.DruidDataSource 
    druid: 
      initialSize: 5 
      minIdle: 5 
      maxActive: 20 
      maxWait: 2000 
      validationQuery: select 'x' 
      testOnBorrow: false 
      testOnReturn: false 
      testWhileIdle: true 

注:

1)配置含义的详细说明见文章的第三模块“Druid的配置详解”

3、实体类和dao层配置

在blog数据库中,创建一个article表,然后创建它的实体类和dao层:

article表的实体类:

public class ArticlePo { 

    private Integer id; 
    private String articleId; 
    private String title; 

    // get、set... 
} 

dao层:

@Repository 
public interface ArticleDao { 

    @Select("select * from article where article_id = #{articleId}") 
    @Results({@Result(column = "article_id", property = "articleId")}) 
    ArticlePo get(@Param("articleId") String articleId); 

    // 给article赋值自增主键id 
    @Options(useGeneratedKeys = true, keyProperty = "id", keyColumn = "id") 
    @Insert("insert into article(article_id, title) values(#{article.articleId}, #{article.title})") 
    int insert(@Param("article") ArticlePo articlePo); 

} 

4、修改启动类

在启动类DemoApplication上增加@MapperScan注解

@SpringBootApplication 
@MapperScan(basePackages = "com.tn666.demo.dao") 
public class DemoApplication { 


    public static void main(String[] args) { 
        SpringApplication.run(DemoApplication.class, args); 
    } 


} 

注:

1)@MapperScan注解的属性basePackages配置的为dao层的包路径

5、测试验证

编写ArticleController:

@RestController 
@RequestMapping("/article") 
public class ArticleController { 

    @Resource 
    private ArticleDao articleDao; 

    @GetMapping(value = "/get") 
    public ArticlePo get(@RequestParam("articleId") String articleId) { 
        ArticlePo articlePo = articleDao.get(articleId); 
        return articlePo; 
    } 

    @PostMapping(value = "/insert") 
    public Boolean insert(@RequestBody ArticlePo articlePo) { 
        articleDao.insert(articlePo); 
        Boolean res = false; 
        if (articlePo.getId() > 0) { 
            res = true; 
        } 
        return res; 
    } 

} 

注:

1)业务逻辑复杂时,Controller和Mapper中间会有Service层来处理业务逻辑,现在我们就简单的测试一下Druid数据库连接池,所以直接使用Controller调用Mapper了

Druid的配置详解

更多内容,请关注公众号“图南随笔”:

?

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-12-08 13:53:00  更:2021-12-08 13:55:28 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 9:30:40-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码