SpringBoot-定时任务
在编写 Spring Boot 应用中经常会遇到这样的场景,比如:需要定时地发送一些短信、邮件之类的操作,也可能会定时地检查和监控一些标志、参数等。
创建定时任务在 Spring Boot 中编写定时任务是非常简单的事,下面通过实例介绍如何在 Spring Boot 中创建定时任务,实现每过 5 秒输出一下当前时间。
在 Spring Boot 的主类中加入@EnableScheduling注解,启用定时任务的配置
123456789@SpringBootApplication@EnableSchedulingpublic class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); }}
创建定时任务实现类
1234567891011@Componentpublic class ScheduledTasks { private static final SimpleDateFormat ...
SpringBoot-Elasticsearch搜索
一、ElasticSearch 简介1、简介ElasticSearch 是一个基于 Lucene 的搜索服务器。它提供了一个分布式多员工能力的全文搜索引擎,基于 RESTful web 接口。Elasticsearch 是用 Java 语言开发的,并作为 Apache 许可条款下的开放源码发布,是一种流行的企业级搜索引擎。ElasticSearch 用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。
2、特性
分布式的文档存储引擎
分布式的搜索引擎和分析引擎
分布式,支持 PB 级数据
3、使用场景
搜索领域:如百度、谷歌,全文检索等。
门户网站:访问统计、文章点赞、留言评论等。
广告推广:记录员工行为数据、消费趋势、员工群体进行定制推广等。
信息采集:记录应用的埋点数据、访问日志数据等,方便大数据进行分析。
二、ElasticSearch 基础概念1、ElaticSearch 和 DB 的关系在 Elasticsearch 中,文档归属于一种类型 type,而这些类型存在于索引 index 中,可以列一些简单的不同点,来类比传统关系型数据库:
Relation ...
SpringBoot-整合Redis
Redis 概述什么是 RedisRedis(Remote Dictionary Server) 是一个使用 C 语言编写的,开源的(BSD 许可)高性能非关系型(NoSQL)的键值对数据库。
Redis 可以存储键和五种不同类型的值之间的映射。键的类型只能为字符串,值支持五种数据类型:字符串、列表、散列表、集合、有序集合。与传统数据库不同的是 Redis 的数据是存在内存中的,所以读写速度非常快,因此 redis 被广泛应用于缓存方向,每秒可以处理超过 10 万次读写操作,是已知性能最快的 Key-Value DB。另外,Redis 也经常用来做分布式锁。除此之外,Redis 支持事务 、持久化、LUA 脚本、LRU 驱动事件、多种集群方案。
Redis 有哪些优缺点优点
读写性能优异, Redis 能读的速度是 110000 次 / s,写的速度是 81000 次 / s。
支持数据持久化,支持 AOF 和 RDB 两种持久化方式。
数据结构丰富,除了支持 string 类型的 value 外还支持 hash、set、zset、list 等数据结构。
支持主从复制,主机会自动 ...
分布式消息中间件-概述
1. 单体架构
2. 分布式系统架构
3. 基于消息中间件的分布式系统架构
4. 消息中间件概述
1. 什么是消息中间件
利用高效可靠的消息传递机制进行平台无关的数据交流。
并基于数据通信来进行分布式系统的集成。
通过提供消息传递和消息排队模型,它可以在分布式环境下扩展进程间的通信。
2. 消息中间件的应用场景
跨系统数据传递。
高并发流量削峰。
数据异步处理。
…
3. 常用的消息中间件
ActiveMQ
RabbitMQ
Kafka
RocketMQ
5. 消息中间件核心设计
1. 本质
一种具有接收数据、保存数据、发送数据等功能的网络应用。
和一般网络应用程序的区别是它主要负责数据的接收和传递,所以性能一般都高于普通程序。
2. 5 大核心组成
协议
持久化机制
消息分发机制
高可用设计
高可靠设计
6. 协议
1. 协议是什么
协议是计算机之间通信时共同遵守的一组约定,都遵守相同的约定,计算机之间才能相互交流。
是对数据格式和计算机之间交互数据时必须遵守的规则的正式描述。
协议三要素:
语法:即数据与控制信息的结构或格式;
语义:即需要发出何种控制信息,完成 ...
Mybatis-缓存工作原理
前言在计算机的世界中,缓存无处不在,操作系统有操作系统的缓存,数据库也会有数据库的缓存,各种中间件如 Redis 也是用来充当缓存的作用,编程语言中又可以利用内存来作为缓存。自然的,作为一款优秀的 ORM 框架,MyBatis 中又岂能少得了缓存!
MyBatis 缓存MyBatis 中的缓存相关类都在 cache 包下面,而且定义了一个顶级接口 Cache,默认只有一个实现类 PerpetualCache,PerpetualCache 中是内部维护了一个 HashMap 来实现缓存。需要注意的是 decorators 包下面的所有类也实现了 Cache 接口,那么为什么我还是要说 Cache 只有一个实现类呢?其实看名字就知道了,这个包里面全部是装饰器,也就是说这其实是装饰器模式的一种实现。我们随意打开一个查看可以看到,最终都是调用了 delegate 来实现,只是将部分功能做了增强,其本身都需要依赖 Cache 的唯一实现类 PerpetualCache(因为装饰器内需要传入 Cache 对象,故而只能传入 PerpetualCache 对象,因为接口是无法直接 new 出来传进去 ...
Mybatis-动态SQL
在 Structs 流行的时代 OGNL 可是必会的数据渲染技术。它全称 Object Graph Navigation Language,作用是降低对数据层访问的难度,它拥有类型转换、访问对象方法、操作集合对象等功能。目前已经很少通过 OGNL 来访问数据层了,目前国内大部分的 ORM 框架是 Mybatis,而 Mybatis 中的动态 SQL 技术运用了 OGNL。
Mybatis 中的 OGNL不少人在 Mybatis 的 Mapper 文件中写过这样的判断:
123<if test="field!='' and field!= null"> and some_col = #{field}</if>
当 field 不为空字符并且不为 null 的情况下增加一个查询条件。其中 test 就是一个 OGNL 表达式。Mybatis 中的 OGNL 表达式主要有两种用途。
条件断言这种是最常用的。执行动态 SQL 的条件断言,常用的有这些表达式:
b1 or b2 条件 或
b1 and b2 条件 与
!b1 取反,也可以写作 not b1
b1 = ...
Mybatis-使用PageHelper分页
1、引入依赖只引入 PageHelper 不会自动适配 SpringBoot 失效,还需要整合依赖 pagehelper-spring-boot-autoconfigure
123456789101112<!--pagehelper分页插件 --><dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper-spring-boot-starter</artifactId> <version>1.3.0</version></dependency><!-- Mybatis-plus --><dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <ver ...
Mybatis-拦截器插件例子(敏感信息加密)
1. 前言在学习 PageHelper 分页插件的时候,对于其如何和 Mybatis 结合进行拦截,还是有些朦胧,这里通过一个例子实现自定义的 Mtbatis 拦截器插件。
2、什么是 Mybatis Plugin在 Mybatis 官方文档中,对于 Mybatis plugin 的的介绍是这样的:MyBatis 允许在已映射语句执行过程中的某一点进行拦截调用。默认情况下,MyBatis 允许使用插件来拦截的方法调用包括:
12345678//语句执行拦截Executor (update, query, flushStatements, commit, rollback, getTransaction, close, isClosed)// 参数获取、设置时进行拦截ParameterHandler (getParameterObject, setParameters)// 对返回结果进行拦截ResultSetHandler (handleResultSets, handleOutputParameters)//sql语句拦截StatementHandler (prepare, para ...
MybatisPlus-简化开发
MybatisPlus 官方文档:https://baomidou.com/guide/page.html
Mybatis Plus 使用流程导入依赖:12345<dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus</artifactId> <version>3.4.3.2</version></dependency>
实现映射:1.对象名称与表的名称一一对应。 2.对象的属性与表中的字段一一对应。
注解:@TableName表名注解
属性
类型
必须指定
默认值
描述
value
String
否
“”
表名
schema
String
否
“”
schema
keepGlobalPrefix
boolean
否
false
是否保持使用全局的 tablePrefix 的值(如果设置了全局 tablePrefix 且自行设置了 value 的值)
resul ...
SpringSecurity-权限控制
简介官网:https://spring.io/projects/spring-security实际应用系统中,为了安全起见,一般都必备用户认证(登录)和权限控制的功能,以识别用户是否合法,以及根据权限来控制用户是否能够执行某项操作。Spring Security 是一个安全相关的框架,能够与 Spring 项目无缝整合,本文主要是介绍 Spring Security 默认的用户认证和权限控制的使用方法和原理,但不涉及到自定义实现。Spring Security 用户认证和权限控制(自定义实现)这篇文章专门讲解用户认证和权限控制相关的自定义实现。(1)用户认证指的是:验证某个用户是否为系统中的合法主体,也就是说用户能否访问该系统。用户认证一般要求用户提供用户名和密码。系统通过校验用户名和密码来完成认证过程。通俗点说就是系统认为用户是否能登录(2)用户授权指的是验证某个用户是否有权限执行某个操作。在一个系统中,不同用户所具有的权限是不同的。比如对一个文件来说,有的用户只能进行读取,而有的用户可以进行修改。一般来说,系统会为不同的用户分配不同的角色,而每个角色则对应一系列的权限。通俗点讲就 ...
SpringBoot-全局异常处理
为什么需要全局异常处理?在日常开发中,为了不抛出异常堆栈信息给前端页面,每次编写 Controller 层代码都要尽可能的 catch 住所有 service 层、dao 层等异常,代码耦合性较高,且不美观,不利于后期维护。这时就需要进行统一的异常处理。为解决该问题,计划将 Controller 层异常信息统一封装处理,且能区分对待 Controller 层方法返回给前端的 String、Map、JSONObject、ModelAndView 等结果类型。
Springboot 默认是如何做的?Spring Boot 提供了一套默认的异常处理机制,一旦程序中出现了异常,Spring Boot 会自动识别客户端的类型(浏览器客户端或机器客户端),并根据客户端的不同,以不同的形式展示异常信息。
对于浏览器客户端而言,Spring Boot 会响应一个“ whitelabel”错误视图,以 HTML 格式呈现错误信息,如图:
对于机器客户端而言,Spring Boot 将生成 JSON 响应,来展示异常消息:
1234567{ "timestamp": "2021-07-12T ...
SpringBoot-参数校验Validator
数据校验是在平时的编码过程中常做的工作,在系统的各个层可能都要去实现一些校验逻辑,再去做业务处理。这些繁琐的校验与我们的业务代码在一块就会显得臃肿。而且这些校验通常是业务无关的。Bean Validation 2.0(JSR 380)定义了用于实体和方法验证的元数据模型和 API,Hibernate Validator 是目前最好的实现,下面整理具体使用。
依赖如果是 Spring Boot2.3 之前的项目,那么 spring-boot-starter-web 中就已经依赖 hibernate-validator 了
1234<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId></dependency>
否则可以添加 hibernate-validator 依赖
12345<dependency> <groupId> ...