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 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> 玩转 Spring Boot 集成篇(MySQL、Druid、HikariCP) -> 正文阅读

[Java知识库]玩转 Spring Boot 集成篇(MySQL、Druid、HikariCP)

Spring Boot 横扫 Java 程序员在使用 Spring 研发路上的诸多障碍,让研发人员更加专注于业务逻辑的开发,使得企业级项目开发更加快速和高效。

为什么这么说呢?

这要归功于 Spring Boot 提供了满足研发场景的各种 starter,所谓 starter 就是把项目研发中所需的组件或服务进行封装成包,开箱即用,屏蔽了繁琐的配置,使得依赖的组件或服务变的可插拔。

starter 主要分为两种:一种是官方的,一种是三方的。官方与三方的命名方式上不太一样,官方的命名以 spring-boot 开头,而三方的命名以自定义的 xxx 名称开头。

例如,官方的命名:spring-boot-xxx-xxx.jar,而三方的命名:xxx-spring-boot-starter.jar。

5c68c86ae24be23e332ca91dec1daf3f.png

本文主要讲解 Spring Boot 与常见开发组件进行整合,感受一下 starter 开箱即用的魔力,深入体验 Spring Boot 的大道至简。

1.?Spring Boot 集成 MySQL

借助?Spring Boot 框架,可以不用编写原始的访问数据库的代码,也不用调用 JDBC 或者连接池等诸如此类的被称为底层的代码,就可以在更高级的层次上访问数据库。

Spring Boot 集成 MySQL 非常之简单,只需如下简单的几步。

1.1.?引入依赖

在 pom.xml 中引入访问?MySQL 所需的依赖。

<!-- MySQL 驱动 -->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
</dependency>
<!-- 通过 JDBC 连接数据库依赖 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>

1.2. 添加数据库配置

在 application.properties 文件中,添加 MySQL 数据库的连接信息:

# MySQL 链接信息
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/test?serverTimezone=UTC
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

1.3.创建表、插入数据

-- ----------------------------
-- Table structure for sc_product
-- 商品表
-- ----------------------------
DROP TABLE IF EXISTS `sc_product`;
CREATE TABLE `sc_product` (
  `id` bigint(20) NOT NULL COMMENT '商品id',
  `name` varchar(255) NOT NULL DEFAULT '' COMMENT '商品名称',
  `number` int(11) NOT NULL DEFAULT '0' COMMENT '商品数量',
  `start_time` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE CURRENT_TIMESTAMP COMMENT '秒杀开始时间',
  `end_time` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE CURRENT_TIMESTAMP COMMENT '秒杀结束时间',
  `create_time` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE CURRENT_TIMESTAMP COMMENT '创建时间',
  `product_img` varchar(255) DEFAULT NULL COMMENT '商品图片',
  PRIMARY KEY (`id`),
  KEY `idx_name` (`name`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;


-- ----------------------------
-- Records of sc_product
-- 插入3条商品记录
-- ----------------------------
INSERT INTO `sc_product` VALUES ('1', '小米11 Pro', '100', '2022-01-21 08:08:08', '2022-02-21 08:08:08', '2022-01-21 00:00:00', '/xiaomi10.jpg');
INSERT INTO `sc_product` VALUES ('2', '小米12 pro', '100', '2022-01-21 08:08:08', '2022-02-21 08:08:08', '2022-01-21 00:00:00', '/xiaomi12.jpg');
INSERT INTO `sc_product` VALUES ('3', '红米10 pro', '100', '2022-01-21 08:08:08', '2022-02-21 08:08:08', '2022-01-21 00:00:00', '/hongmi.jpg');

1.4.创建实体类

import java.io.Serializable;
import java.util.Date;
/**
 * 产品类
?*?@author?daishu
 */
public class ScProduct implements Serializable {


    private Integer id;
    private String name;
    private String productImg;
    private Integer number;
    private Date startTime;
    private Date endTime;
    private Date createTime;
    
    // 省略 setter/getter 方法
    // 省略 toString 方法
}

1.5.测试验证

9dbc3518c116d7f522b1960967b30f56.png

  • 上图标注 1:JdbcTemplate?是在引入依赖 spring-boot-starter-jdbc 包中,是通过 JDBC 连接数据库的工具类,可以通过这个工具类对数据库进行 CRUD 等操作。

  • 上图标注 2:编写了 MySQL 集成的测试方法,主要是查询表中的数据,然后输出结果进行验证。

单元测试类跑起来,效果如下。

63797aebe876a708ab79cdfb476c2455.png

至此,Spring Boot 项目集成 MySQL 数据库已大功告成。

回头捋捋:

  • 引入?spring-boot-starter-jdbc?依赖以及 mysql 驱动包;

  • 配置了数据库的相关连接信息;

  • 编写了一个实体类(ScProduct)代码;

  • 编写了一个 MySQL 集成的测试方法

三两行代码就完成了 Spring Boot 项目集成数据库,从使用上感觉一切皆是浑然天成,可谓是快哉!

Spring Boot 项目集成数据库就分享到这里,但是如何提高数据库的操作性能呢?

回顾日常实际项目研发,大概率会发现项目很难脱离数据库而单独存在,而提高数据库性能,往往会借助数据库连接池来支持,接下来说说 Spring Boot 如何集成常见的 DataSource 数据源。

2.?Spring Boot 集成连接池组件

常见的连接池有 DBCP、C3P0、Tomcat jdbc-pool、Druid、HikariCP。

坊间做过性能验证,得出结论如下:

1:性能方面 HikariCP > Druid > tomcat-jdbc > DBCP > C3P0 ;

2:Driud 功能最为全面,具有良好的扩展性;

3:综合性能,扩展性等方面,可考虑使用 Druid 或 HikariCP 连接池。

接下来重点说说 Spring Boot 集成 Druid 和 ?HikariCP 连接池。

2.1.?Spring Boot 集成 Druid 数据库连接池

Druid 是阿里推出的一款数据库连接池组件,是一个用于大数据实时查询和分析的高容错、高性能开源分布式系统,可高效处理大规模的数据并实现快速查询和分析。

2.1.1.?引入依赖

<!-- 引入 Druid 依赖-->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid</artifactId>
    <version>1.2.8</version>
</dependency>

2.1.2. 添加 Druid 配置

# MySQL 链接信息
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/test?serverTimezone=UTC
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
# 数据源类别
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
# 初始化连接数、最小空闲、最大活跃连接数
spring.datasource.initialSize=5
spring.datasource.minIdle=5
spring.datasource.maxActive=20
# 配置获取连接等待超时的时间,单位是毫秒
spring.datasource.maxWait=60000
# 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
spring.datasource.timeBetweenEvictionRunsMillis=60000
# 配置一个连接在连接池中最小生存的时间,单位是毫秒
spring.datasource.minEvictableIdleTimeMillis=300000
spring.datasource.validationQuery=SELECT 'x'
spring.datasource.testWhileIdle=true
spring.datasource.testOnBorrow=false
spring.datasource.testOnReturn=false
# 打开 PSCache,并且制定每个连接上 PSCache 的大小
spring.datasource.poolPreparedStatements=true
spring.datasource.maxPoolPreparedStatementPerConnectionSize=20
# 配置监控统计拦截的 filters
spring.datasource.filters=stat,wall,log4j
# 打开 mergeSql 功能;记录慢 SQL 
spring.datasource.connectionProperties=druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
# 合并多个 DruidDataSource 的监控数据
spring.datasource.useGlobalDataSourceStat=true

2.1.3.?开启 Druid 监控功能

package com.example.demo.config;


import com.alibaba.druid.support.http.StatViewServlet;
import com.alibaba.druid.support.http.WebStatFilter;
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;


@Configuration
public class DruidConfiguration {


   @Bean
   public ServletRegistrationBean druidServlet() {
      ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean(new StatViewServlet(), "/druid/*");
      // IP白名单(没有配置或者为空,则允许所有访问)
      servletRegistrationBean.addInitParameter("allow", "127.0.0.1");
      // IP黑名单(共同存在时,deny优先于allow)
      servletRegistrationBean.addInitParameter("deny", "192.168.1.100");
      //控制台管理用户
      servletRegistrationBean.addInitParameter("loginUsername", "admin");
      servletRegistrationBean.addInitParameter("loginPassword", "admin");
      //是否能够重置数据 禁用HTML页面上的“Reset All”功能
      servletRegistrationBean.addInitParameter("resetEnable", "false");
      return servletRegistrationBean;
   }


   @Bean
   public FilterRegistrationBean filterRegistrationBean() {
      FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean(new WebStatFilter());
      filterRegistrationBean.addUrlPatterns("/*");
      filterRegistrationBean.addInitParameter("exclusions", "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*");
      return filterRegistrationBean;
   }
}
  • 在 druidServlet 方法中,设定了访问数据库的白名单、黑名单、登录用户名和密码等信息;

  • 在 filterRegistrationBean 方法中,设定了过滤的规则和需要忽略的格式。

2.1.4. 测试集成

运行 DemoApplication 进行服务启动,访问 http://127.0.0.1:8888/druid/login.html(本机服务端口为 8080)

6e0a9755a84dedd5cd3b1687db54ec5d.png

输入 admin/admin 后登陆,效果如下。

e065ab705a9a0bc2ce752f089b973706.png

此时,可以在 Druid 提供的监控页面上对数据源、SQL、Web应用等等进行监控。当然项目中也就可以采用 Druid 数据库连接池来进行数据库操作了。

至此,Spring Boot 项目集成 Druid 连接池就已完成。

2.2.?Spring Boot 集成 HikariCP?连接池

HikariCP 号称史上最快的,在 Spring Boot2.0 版本中,由于 HikariCP 提供了卓越的性能,默认数据库池技术已从 Tomcat jdbc-pool切换到 HikariCP。

2.2.1.?引入依赖

a9cfd5ec069b389e74dfbd8e85d3d335.png

由于 Spring Boot2.0 版本中,已经默认采用 HikariCP 数据库连接池技术,所以不需要单独引入 HikariCP 的依赖,默认情况下 spring-boot-starter-jdbc 或者 spring-boot-starter-data-jpa 会依赖进来。

2.2.2.?添加?HikariCP?配置

# 数据源类别
spring.datasource.type=com.zaxxer.hikari.HikariDataSource
# 连接池名字
spring.datasource.hikari.pool-name=GrowUpHikariCP
# 最小空闲连接数量
spring.datasource.hikari.minimum-idle=10
# 空闲连接存活最大时间,默认600000(10分钟)
spring.datasource.hikari.idle-timeout=600000
# 连接池最大连接数,默认是10
spring.datasource.hikari.maximum-pool-size=10
# 此属性控制从池返回的连接的默认自动提交行为,默认值:true
spring.datasource.hikari.auto-commit=true
# 此属性控制池中连接的最长生命周期,值0表示无限生命周期,默认1800000即30分钟
spring.datasource.hikari.max-lifetime=1800000
# 数据库连接超时时间,默认30秒,即30000
spring.datasource.hikari.connection-timeout=30000

由于 HikariCP 是默认依赖,所以以上配置依据实际需要而定,皆非必须配置。

2.2.3.?集成验证

package com.example.demo;


import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import javax.sql.DataSource;
import java.sql.SQLException;


@SpringBootTest
class DataSourceTests {
    @Autowired
    private DataSource dataSource;
    @Test
    public void hikariDataSourceTest() throws SQLException {
        System.out.println(dataSource.getConnection());
    }
}

程序跑起来,输出如下。

0a6676a9f3b7539f949451ebf5d8ae4e.png

至此,Spring Boot 集成 HikariCP 连接池已完毕,由于 Spring Boot 2.0 版本及以后版本默认都采用 ?HikariCP 连接池,几乎没有添加什么代码与配置,就轻松使用上了 HikariCP,可谓快哉。

3.?例行回顾

本文是 Spring Boot 项目集成篇的讲解,主要分享了如下部分:

  • Spring Boot 开箱即用的 starter 作用及分类?

  • Spring Boot 项目如何访问数据库?

  • Spring Boot 项目如何集成 Druid 连接池?

  • Spring Boot 项目如何集成 HikariCP 连接池?

玩转 Spring Boot 集成 MySQL、集成常用连接池组件就写到这里,希望大家能够喜欢。一起聊技术、谈业务、喷架构,少走弯路,不踩大坑,会持续输出更多精彩分享,欢迎关注,敬请期待!

参考资料:

https://spring.io/

https://start.spring.io/

https://spring.io/projects/spring-boot

https://github.com/spring-projects/spring-boot

https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/

https://stackoverflow.com/questions/tagged/spring-boot

《Spring Boot实战》《深入浅出Spring Boot 2.x》

《一步一步学Spring Boot:微服务项目实战(第二版)》

《Spring Boot揭秘:快速构建微服务体系》

35a7031d80382c9d186d9c3fbe805b3a.png

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-01-30 18:48:06  更:2022-01-30 18:48:11 
 
开发: 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 11:08:50-

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