Spring Boot(九):数据库连接池Druid 您所在的位置:网站首页 数据库连接cmd Spring Boot(九):数据库连接池Druid

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

2023-05-14 00:10| 来源: 网络整理| 查看: 265

数据库连接池简介

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的依赖

com.alibaba druid-spring-boot-starter 1.1.20

注:

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的配置详解

Java领域极具影响力和价值的经典著作,请查看:

若您觉得还可以,请帮忙点个“赞”,谢谢



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有