自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

彭楷淳在 CSDN

更多干货请移步:https://antoniopeng.com

  • 博客(53)
  • 收藏
  • 关注

原创 分布式数据库中间件 MyCat

MyCat 简介MyCat 是一个功能强大的分布式数据库中间件,是一个实现了 MySQL 协议的 Server,前端人员可以把它看做是一个数据库代理中间件,用 MySQL 客户端工具和命令行访问;而后端人员可以用 MySQL 原生协议与多个 MySQL 服务器通信,也可以用 JDBC 协议与大多数主流数据库服务器通信。可以用作 读写分离、分库分表(分片)、容灾备份、多租户应用开发、大数据基础设施,使底层数据架构具备很强的适应性和灵活性。MyCat 的智能优化模块可以使系统的数据访问瓶颈和热点一目了然,并

2021-01-31 02:40:51 608

原创 MySQL 读写分离

准备工作我这里有一张简单的图向大伙展示 MySQL 读写分离的工作方式:这里,我们准备两台机器:主机:192.168.248.128从机:192.168.248.139主机配置主机的配置就三个步骤,比较容易:授权给从机服务器$ GRANT REPLICATION SLAVE ON *.* to 'rep1'@'192.168.248.139' identified by '123';FLUSH PRIVILEGES;这里表示配置从机登录用户名为 rep1,密码为 123,并且必须

2021-01-31 02:40:43 336

原创 MySQL 主从复制

主从规划首先规划两个 MySQL 实例:主机:192.168.66.131:33061从机:192.168.66.131:33062当然大家可以准备多个从机,从机的配置步骤是一样的。接下来,我们就开始主从的配置。配置主机主机上的配置,主要是两个地方:第一个是配置一个从机登录用户第二个配置开启 binlog。如果是 Docker 中创建的 MySQL 实例,默认只有一个用户,就是 root,这里我们需要进入到 MySQL 命令行,再给它分配一个用户。在宿主机中通过如下命令连接上主机:

2021-01-31 02:40:36 146

原创 开发者必备的 MySQL 命令

数据定义语句(DDL)数据库操作登录数据库:$ mysql -uroot -prootCopy to clipboardErrorCopied创建数据库:create database testCopy to clipboardErrorCopied查看所有数据库:show databasesCopy to clipboardErrorCopied选择数据库并使用:use testCopy to clipboardErrorCopied查看所有数据表:sho

2021-01-31 02:40:28 161

原创 CentOS 上安装 MySQL

平时我一般首选 Ubuntu,不过公司里边使用一般还是 CentOS 为主,因此这里就以 CentOS 为例来向大家演示整个过程,今天这篇文章主要来看看 MySQL 的安装。安装环境:CentOS7MySQL5.7安装步骤检查是否安装了 mariadb,如果已经安装了则卸载:$ yum list installed | grep mariadb如果执行结果如下,表示已经安装了 mariadb,将之卸载:mariadb-libs.x86_64 1:5.

2021-01-31 02:40:20 143

原创 Redis 集群搭建

由于主从复制所有的写操作都是先在 Master 上操作,然后同步更新到 Slave 上,所以从 Master 同步到 Slave 机器有一定的延迟,当系统很繁忙的时候,延迟问题会更加严重,Slave 机器数量的增加也会使这个问题更加严重。因此我们还需要集群来进一步提升 redis 性能。集群原理Redis 集群架构如下图:Redis 集群运行原理如下:所有的 Redis 节点彼此互联( PING-PONG 机制),内部使用二进制协议优化传输速度和带宽节点的 fail 是通过集群中超过半数的节点

2021-01-30 01:24:37 395 1

原创 Redis 主从复制

主从复制可以在一定程度上扩展 redis 性能,redis 的主从复制和关系型数据库的主从复制类似,从机能够精确的复制主机上的内容。实现了主从复制之后,一方面能够实现数据的读写分离,降低 master 的压力,另一方面也能实现数据的备份。配置方式假设我有三个 redis 实例,地址分别如下:192.168.248.128:6379192.168.248.128:6380192.168.248.128:6381即同一台服务器上三个实例,配置方式如下:将 redis.conf 文件更名为 re

2021-01-30 01:23:53 101

原创 Redis 数据持久化

Redis 持久化整体上来说,Redis 持久化有两种方式,快照持久化和 AOF ,在项目中我们可以根据实际情况选择合适的持久化方式,也可以不用持久化,这关键看我们的 Redis 在项目中扮演了什么样的角色。快照持久化快照持久化,顾名思义,就是通过拍摄快照的方式实现数据的持久化,redis 可以在某个时间点上对内存中的数据创建一个副本文件,副本文件中的数据在 redis 重启时会被自动加载,我们也可以将副本文件拷贝到其他地方一样可以使用。如何配置快照持久化redis中的快照持久化默认是开启的,re

2021-01-30 01:22:29 134

原创 Redis 中的发布订阅和事务

发布订阅Redis 的发布订阅系统有点类似于我们生活中的电台,电台可以在某一个频率上发送广播,而我们可以接收任何一个频率的广播。订阅消息的方式如下:127.0.0.1:6379> subscribe c1 c2 c3Reading messages... (press Ctrl-C to quit)1) "subscribe"2) "c1"3) (integer) 11) "subscribe"2) "c2"3) (integer) 21) "subscribe"2) "c3"

2021-01-30 01:21:35 110

原创 Reids 散列与有序集合命令使用

散列很多时候,散列就像一个微缩版的 redis ,在本文中,对看到的许多散列命令都会有似曾相识的感觉。hsethset 命令可以用来设置 key 指定的哈希集中指定字段的值,如下:127.0.0.1:6379> hset k1 h1 v1(integer) 1hgethget 命令可以用来返回 key 指定的哈希集中该字段所关联的值,如下:127.0.0.1:6379> hget k1 h1"v1"hmsethmset 命令可以批量设置 key 指定的哈希集中指定字段的

2021-01-30 01:20:45 176

原创 Reids 列表与集合命令使用

列表列表是 Redis 中另外一种数据类型。下面我们来看看列表中一些基本的操作命令。lpush将一个或多个值 value 插入到列表 key 的表头,如果有多个 value 值,那么各个 value 值按从左到右的顺序依次插入到表头,如下:127.0.0.1:6379> lpush k1 v1 v2 v3(integer) 3lrange返回列表 key 中指定区间内的元素,区间以偏移量 start 和 stop 指定,下标 (index) 参数 start 和 stop 都以 0 为

2021-01-30 01:19:57 214

原创 Reids 字符串命令使用

append使用 append 命令时,如果 key 已经存在,则会直接在 value 后追加值,如果 key 不存在,则会先创建一个 value 为空字符串的 key ,然后再追加:127.0.0.1:6379> append k1 hello(integer) 5127.0.0.1:6379> get k1"hello"127.0.0.1:6379> append k1 world(integer) 10127.0.0.1:6379> get k1"hellow

2021-01-30 01:18:47 94

原创 高性能缓存数据库 Redis 入门篇

什么是 RedisRedis 是一个使用 ANSI C 编写的开源、支持网络、基于内存、可选持久性的键值对存储数据库。从 2015 年 6 月开始,Redis 的开发由 Redis Labs 赞助,而 2013 年 5 月至 2015 年 6 月期间,其开发由 Pivotal 赞助。在 2013 年 5 月之前,其开发由 VMware 赞助。根据月度排行网站 DB-Engines.com 的数据显示,Redis是 最流行的键值对存储数据库。特点Redis 支持数据的持久化,可以将内存中的数据保持在磁

2021-01-30 01:17:07 195

原创 Spring Boot 中邮件发送的五种姿势

邮件发送其实是一个非常常见的需求,用户注册,找回密码等地方,都会用到,使用 JavaSE 代码发送邮件,步骤还是挺繁琐的,Spring Boot 中对于邮件发送,提供了相关的自动化配置类,使得邮件发送变得非常容易,本文我们看看使用 Spring Boot 发送邮件的 5 中姿势。邮件基础我们经常会听到各种各样的邮件协议,比如 SMTP、POP3、IMAP ,那么这些协议有什么作用,有什么区别?我们先来讨论一下这个问题。SMTP 是一个基于 TCP/IP 的应用层协议,江湖地位有点类似于 HTTP,SM

2021-01-30 01:10:00 454

原创 Spring Boot 中使用 CORS 解决跨域问题

同源策略很多人对跨域有一种误解,以为这是前端的事,和后端没关系,其实不是这样的,说到跨域,就不得不说说浏览器的同源策略。同源策略是由 Netscape 提出的一个著名的安全策略,它是浏览器最核心也最基本的安全功能,现在所有支持 JavaScript 的浏览器都会使用这个策略。所谓同源是指协议、域名以及端口要相同。同源策略是基于安全方面的考虑提出来的,这个策略本身没问题,但是我们在实际开发中,由于各种原因又经常有跨域的需求,传统的跨域方案是 JSONP,JSONP 虽然能解决跨域但是有一个很大的局限性,

2021-01-30 01:08:56 163

原创 一文快速上手使用 MySQL 索引

什么是索引MySQL 官方对索引的定义:索引(Index)是帮助 MySQL高效获取数据的数据结构。因此 索引的本质就是数据结构。索引的目的在于提高查询效率,可类比字典、书籍的目录等这种形式。可简单理解为 排好序的快速查找数据结构。在数据之外,数据库系统还维护着 满足特定算法查询的数据结构,这些数据结构以某种方式指向数据。这样就可以在这些数据结构上实现高级查找算法,这种数据结构就是索引。一般来说,索引比较大,不可能全部存储在内存中,因此索引往往以 索引文件 的形式存储在磁盘上。平常所说的索引,如果没

2021-01-27 01:33:14 125

原创 Spring Boot 项目配置 HTTPS 安全证书

https 现在已经越来越普及了,特别是做一些小程序或者公众号开发的时候,https 基本上都是刚需了。不过一个 https 证书还是挺费钱的,个人开发者可以在各个云服务提供商那里申请免费的证书。本文聊的是在 Spring Boot 项目中,如何开启 https 配置,为我们的接口保驾护航。HTTPS 简介我们先来看看什么是 https,根据 wikipedia 上的介绍:超文本传输安全协议(HyperText Transfer Protocol Secure),缩写:HTTPS;常称为 HTTP

2021-01-27 01:29:06 495

原创 Spring Boot 整合 Swagger 生成 RESTful API 文档

前后端分离后,维护接口文档基本上是必不可少的工作。一个理想的状态是设计好后,接口文档发给前端和后端,大伙按照既定的规则各自开发,开发好了对接上了就可以上线了。当然这是一种非常理想的状态,实际开发中却很少遇到这样的情况,接口总是在不断的变化之中,有变化就要去维护,做过的小伙伴都知道这件事有多么头大!还好,有一些工具可以减轻我们的工作量,Swagger2 就是其中之一,至于其他类似功能但是却收费的软件,这里就不做过多介绍了。本文主要和大伙来聊下 在Spring Boot 中如何整合 Swagger2。引入依赖

2021-01-27 01:28:36 117

原创 Spring Boot 整合 Shiro 实现登录认证和权限控制

在 Spring Boot 中做权限管理,一般来说,主流的方案是 Spring Security ,但是,仅仅从技术角度来说,也可以使用 Shiro。一般来说,Spring Security 和 Shiro 的比较如下:Spring Security 是一个重量级的安全管理框架;Shiro 则是一个轻量级的安全管理框架Spring Security 概念复杂,配置繁琐;Shiro 概念简单、配置简单Spring Security 功能强大;Shiro 功能简单…虽然 Shiro 功能简单,但

2021-01-27 01:28:00 305

原创 Spring Boot 整合 Redis 实现缓存功能

使用 Java 操作 Redis 的方案很多,Jedis 是目前较为流行的一种方案,除了 Jedis,还有很多其他解决方案,如下:除了这些方案之外,还有一个使用也相当多的方案,就是 Spring Data Redis。在传统的 SSM 中,需要开发者自己来配置 Spring Data Redis,这个配置比较繁琐,主要配置 3 个东西:连接池、连接器信息以及 key 和 value 的序列化方案。在 Spring Boot 中,默认集成的 Redis 就是 Spring Data Redis,默认底层

2021-01-27 01:27:30 148

原创 Spring Boot 整合 Mybatis Plus 二次简化持久层代码

经常用 MyBatis 的的都知道,使用这个框架存在一个非常不友善的问题就是,就是每操作一个单表就需要自己手写一个 xml 文件,虽然说可以用工具生成 xml 和实体类可以解决这个问题,但是二次开发的时候对某个表字段进行修改的时候,生成 xml 文件就不现实啦。最近发现 tk.mybatis 就非常好的解决了这个问题。tk.mybatis 整合了 MyBatis 框架,在其基础上提供了很多工具,封装了常用的增删改查 SQL 语句,可以让我们的开发效率更高。在这里和大家分享一下。引入依赖在 pom.xml

2021-01-27 01:27:00 275

原创 Spring Boot 整合 Mybatis 持久层框架

最简单的数据持久化方案是 JdbcTemplate,JdbcTemplate 虽然简单,但是用的并不多,因为它没有 MyBatis 方便,在 Spring + SpringMVC 中整合 MyBatis 步骤还是有点复杂的,要配置多个 Bean,Spring Boot 中对此做了进一步的简化,使 MyBatis 基本上可以做到开箱即用,本文就来看看在 Spring Boot 中 MyBatis 要如何使用。引入依赖在 pom.xml 中添加持久层相关依赖,如下:<dependency>

2021-01-27 01:26:28 230

原创 Spring Boot 整合 Quartz 实现定时任务

在 Spring + SpringMVC 环境中,一般来说,要实现定时任务,我们有两中方案,一种是使用 Spring 自带的定时任务处理器 @Scheduled 注解,另一种就是使用第三方框架 Quartz,一般在项目中,除非定时任务涉及到的业务实在是太简单就使用 @Scheduled 注解来解决定时任务,否则大部分情况可能都是使用 Quartz 来做定时任务。Spring Boot 源自 Spring+SpringMVC ,因此天然具备这两个 Spring 中的定时任务实现策略,当然也支持 Quartz。

2021-01-27 01:25:56 181

原创 Spring Boot 全局异常处理

在 Spring Boot 项目中 ,异常统一处理,可以使用 Spring 中 @ControllerAdvice 来统一处理,也可以自己来定义异常处理方案。Spring Boot 中,对异常的处理有一些默认的策略,我们分别来看。默认情况下,Spring Boot 中的异常页面 是这样的:我们从这个异常提示中,也能看出来,之所以用户看到这个页面,是因为开发者没有明确提供一个 /error 路径,如果开发者提供了 /error 路径 ,这个页面就不会展示出来,不过在 Spring Boot 中,提供 /e

2021-01-27 01:23:24 173

原创 Spring Boot 自动化配置原理

Spring Boot 中的自动化配置确实够吸引人,甚至有人说 Spring Boot 让 Java 又一次焕发了生机,这话虽然听着有点夸张,但是不可否认的是,曾经臃肿繁琐的 Spring 配置确实让人感到头大,而 Spring Boot 带来的全新自动化配置,又确实缓解了这个问题。如果要问这个自动化配置是怎么实现的,很多人会说不就是 starter 嘛!那么 starter 的原理又是什么呢?参阅文章:手撸一个 spring-boot-stater这里边有一个非常关键的点,那就是 条件注解,甚至可以说

2021-01-27 01:22:45 120

原创 Spring Boot 整合 Freemarker 模板引擎

Freemarker 简介这是一个相当老牌的开源的免费的模版引擎。通过 Freemarker 模版,我们可以将数据渲染成 HTML 网页、电子邮件、配置文件以及源代码等。Freemarker 不是面向最终用户的,而是一个 Java 类库,我们可以将之作为一个普通的组件嵌入到我们的产品中。可以看到,Freemarker 可以将模版和数据渲染成 HTML 。Freemarker 模版后缀为 .ftl(FreeMarker Template Language)。FTL 是一种简单的、专用的语言,它不是像 J

2021-01-21 20:52:58 255

原创 Spring Boot 整合 Thymeleaf 模板引擎

虽然现在慢慢在流行前后端分离开发,而在前后端不分的开发中,我们就会需要后端页面模板(实际上,即使前后端分离,也会在一些场景下需要使用页面模板,例如邮件发送模板)。早期的 Spring Boot 中还支持使用 Velocity 作为页面模板,现在的 Spring Boot 中已经不支持 Velocity 了,页面模板主要支持 Thymeleaf 和 Freemarker ,当然,作为 Java 最最基本的页面模板 JSP,Spring Boot 也是支持的,只是使用比较麻烦。我们先来看看 Thymelea

2021-01-21 20:52:20 179

原创 手撸一个 spring-boot-starter

我们使用 Spring Boot,基本上都是沉醉在它 Stater 的方便之中。Starter 为我们带来了众多的自动化配置,有了这些自动化配置,我们可以不费吹灰之力就能搭建一个生产级开发环境,有的小伙伴会觉得这个 Starter 好神奇呀!其实 Starter 也都是 Spring + SpringMVC 中的基础知识点实现的,接下来带大家自己来撸一个 Starter ,慢慢揭开 Starter 的神秘面纱!核心知识其实 Starter 的核心就是条件注解 @Conditional ,当 classp

2021-01-21 20:51:50 222

原创 Spring Boot 配置文件的使用

在 Spring Boot 中,配置文件有两种不同的格式,一个是 .properties ,另一个是 .yaml 。虽然 properties 文件比较常见,但是相对于 properties 而言,yaml 更加简洁明了,而且使用的场景也更多,很多开源项目都是使用 yaml 进行配置(例如 Hexo)。除了简洁,yaml 还有另外一个特点,就是 yaml 中的数据是有序的,properties 中的数据是无序的,在一些需要路径匹配的配置中,顺序就显得尤为重要(例如我们在 Spring Cloud Zuul

2021-01-21 20:51:17 137

原创 新一代 Java 企业级快速开发框架 Spring Boot 拆箱体验

Spring Boot 介绍我们刚开始学习 Java Web 的时候,使用 Servlet/JSP 做开发,一个接口搞一个 Servlet ,很头大,后来我们通过隐藏域或者反射等方式,可以减少 Servlet 的创建,但是依然不方便,再后来,我们引入 Struts2/SpringMVC 这一类的框架,来简化我们的开发 ,和 Servlet/JSP 相比,引入框架之后,生产力确实提高了不少,但是用久了,又发现了新的问题,即配置繁琐易出错,要做一个新项目,先搭建环境,环境搭建来搭建去,就是那几行配置,不同的项

2021-01-21 20:50:22 178

原创 最优雅地整合 Spring & Spring MVC & MyBatis 搭建 Java 企业级应用(附源码)

这里使用 Maven 项目管理工具构建项目初始化项目打开 Intellij IDEA,点击 Create New Project选择 Maven 构建项目选择 JDK 版本选择 maven-archetype-webapp 模板(Java Web 项目)填写项目在 Maven 仓库中的坐标(在 Maven 仓库中根据这个坐标才能找到该项目)选择 Maven 路径选择 Maven 配置文件路径选择 Maven 本地仓库路径填写项目名选择.

2021-01-21 20:49:51 263

原创 MyBatis 逆向工程生成代码

下载项目已上传至百度网盘网盘链接:https://pan.baidu.com/s/1m2YcxD6hGp6rQrGNhAEjYw提取码:iu9y生成代码由于使用数据表时,我们需要给每一个表都创建对应的实体类,每个实体类都有对应的 Mapper 接口和 Mapper.xml 文件,这些其实都是一些重复的工作,我们可以通过第三方工具来完成。MyBatis 逆向工程非常多,我们 IDEA 里边,也有对应的插件可以使用。这里以 mybatis-generator-core-1.3.1 工具为例,拿

2021-01-18 21:29:49 169

原创 再谈 MyBatis 复杂查询

一对一查询在实际开发中,经常会遇到一对一查询,一对多查询等。这里我们先来看一对一查询。例如:每本书都有一个作者,作者都有自己的属性,根据这个,我来定义两个实体类:public class Book { private Integer id; private String name; private Author author; // 省略 getter/setter}public class Author { private Inte

2021-01-18 21:24:08 249

原创 MyBatis 中使用 Mapper 简化代码

前面文章所写的增删改查是存在问题的。每执行一次 SQL,都要开启一次会话,并且需要提交并关闭,主要问题就是冗余代码过多,模板化代码过多。例如,我想开发一个 UserDao,可能是下面这样:简化前的 UserDaopublic class UserDao { private SqlSessionFactory sqlSessionFactory = SqlSessionFactoryUtils.getInstance(); public User getUserById(In

2021-01-18 21:23:17 214

原创 MyBatis 的映射文件详解

mapper 映射文件,是 MyBatis 中最重要的部分,涉及到的细节也是非常非常多。parameterType这个表示输入的参数类型。$ 和 #这是一个非常非常高频的面试题,虽然很简单。在面试中,如果涉及到 MyBatis,一般情况下,都是这个问题。在 MyBatis 中,我们在 mapper 引用变量时,默认使用的是 #,像下面这样:<select id="getUserById" resultType="com.antonio.hello.mybatis.entity.User"&g

2021-01-18 21:22:05 223

原创 MyBatis 全局配置

全局配置中的属性非常多,主要有如下几方面:properties(属性)settings(全局配置参数)typeAliases(类型别名)typeHandlers(类型处理器)objectFactory(对象工厂)plugins(插件)environments(环境集合属性对象)environment(环境子属性对象)transactionManager(事务管理)dataSource(数据源)mappers(映射器)propertiesproperties 可以用来引入一个外部

2021-01-18 21:21:23 505

原创 Java 持久层框架 MyBatis

JDBC 存在的问题数据库连接创建、释放频繁造成系统资源浪费从而影响系统性能,如果使用数据库连接池可解决此问题。Sql 语句在代码中硬编码,造成代码不易维护,实际应用 sql 变化的可能较大,sql 变动需要改变 java 代码。使用 preparedStatement 向占位符号传参数存在硬编码,因为 sql 语句的 where 条件不一定,可能多也可能少,修改 sql 还要修改代码,系统不易维护。对结果集解析存在硬编码(查询列名),sql 变化导致解析代码变化,系统不易维护,如果能将数据库记录

2021-01-18 21:20:55 295

原创 Spring MVC 的 Controller 使用详解

@RequestMapping这个注解用来标记一个接口,这算是我们在接口开发中,使用最多的注解之一。请求 URL标记请求 URL 很简单,只需要在相应的方法上添加该注解即可:@Controllerpublic class HelloController { @RequestMapping("/hello") public ModelAndView hello() { return new ModelAndView("hello"); }}这里

2021-01-16 23:58:10 381

原创 Spring MVC 中上传文件及全局异常处理

SpringMVC 中对文件上传做了封装,我们可以更加方便的实现文件上传。从 Spring3.1 开始,对于文件上传,提供了两个处理器:CommonsMultipartResolverStandardServletMultipartResolver·第一个处理器兼容性较好,可以兼容 Servlet3.0 之前的版本,但是它依赖了 commons-fileupload 这个第三方工具,所以如果使用这个,一定要添加 commons-fileupload 依赖。第二个处理器兼容性较差,它适用于 Ser

2021-01-16 23:57:21 251

原创 Spring MVC 核心组件详解

DispatcherServlet 作用DispatcherServlet 是前端控制器设计模式的实现,提供 Spring Web MVC 的集中访问点,而且负责职责的分派,而且与 Spring IoC 容器无缝集成,从而可以获得 Spring 的所有好处。DispatcherServlet 主要用作职责调度工作,本身主要用于控制流程,主要职责如下:文件上传解析,如果请求类型是 multipart 将通过 MultipartResolver 进行文件上传解析;通过 HandlerMapping 将请

2021-01-16 04:14:09 283

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除