
Spring
文章平均质量分 80
汇聚博主在 Spring、SpringBoot 和 SpringCloud 领域上的经验博客
王廷云的博客
一个热爱科学技术的人,喜欢创新,喜欢技术分享!
展开
-
【SpringBoot】之自定义 Filter 过滤器
本文对 Java 中 Servlet Filter 进行了介绍,同时对 Servlet Filter 的执行顺序进行了讲解,最后介绍了如何通过实现 Filter 接口来自定义过滤器。原创 2022-09-12 18:53:19 · 1925 阅读 · 0 评论 -
【SpringBoot】之接口设计防篡改和防重放攻击
本文讲解JavaWeb开发过程中可能出现的接口被拦截和参数被篡改的问题;然后介绍了如何进行有效安全防范;最后介绍了如何通过参数加密和签名校验的方式进行有效防范。原创 2022-09-12 01:06:07 · 6157 阅读 · 1 评论 -
【SpringBoot】之创建自定义 SpringBoot-Starter
本文介绍了 SpringBoot Starter 的相关内容,同时详细讲解了如何创建一个自定义的 SpringBoot Starter。原创 2022-09-01 12:20:33 · 3119 阅读 · 0 评论 -
【SpringBoot】之自动配置原理分析(源码级别)
本文对 SpringBoot 进行了简单介绍,同时通过源码深入分析了 SpringBoot 自动配置的原理,并通过 Redis 的自动配置为例,讲解了组件是如何装配进容器中的。原创 2022-08-29 01:37:16 · 397 阅读 · 0 评论 -
【SpringBoot】之浅谈 SpringBoot 项目的创建
本文介绍了如何通过 Spring Initializr 来创建 SpringBoot 项目,同时分析其项目的依赖结构并以此为基础介绍如何手动创建 SpringBoot 项目;最后介绍了 SpringBoot 项目的兼容性问题。原创 2022-08-27 18:21:41 · 569 阅读 · 0 评论 -
【Spring】之 SpringAOP 切点指示符详解
本稳详细介绍了 SpringAOP 中的切点指示符。原创 2022-08-26 00:29:00 · 634 阅读 · 0 评论 -
【Spring】之 SpringAOP 理论与实践
本博客介绍了 SpringAOP 的相关理论,并以一个实际例子为例讲解如何使用 SpringAOP。原创 2022-08-24 01:27:42 · 347 阅读 · 0 评论 -
【Spring】之事务管理与事务失效
本地事务失效问题总结:同一个对象内事务方法之间互相调用时,事务默认会失效,原因是绕过了代理对象。在 SpringBoot 里面我们使用 @Transactional(propagation=Propagation.REQUIRED) 注解来开启事务,如果是不同服务之间的调用,比如:A 服务的 a() 方法调用了 B 服务的 b() 方法,a、b 方法都开启了事务,那么它们各自的事务是有效的。但如果在同一个 Service 中有 a()、b()、c() 三个方法,每个方法都开启了事务,比如,我 a 方原创 2020-10-25 11:19:01 · 1107 阅读 · 0 评论 -
【Spring】之 Spring 中常用的设计模式
介绍了 Spring 中常用的设计模式原创 2022-07-26 01:16:49 · 1134 阅读 · 0 评论 -
【ElasticSearch】之常用 JavaAPI
目录:1、引入依赖2、创建索引3、查询索引4、删除索引5、添加文档数据6、修改文档数据7、查询文档数据8、删除文档数据9、批量插入数据10、批量删除数据11、高级查询1、引入依赖<!-- ES核心组件 --><dependency> <groupId>org.elasticsearch</groupId> <artifactId>elasticsearch</artifactId&原创 2021-08-20 11:23:17 · 532 阅读 · 0 评论 -
【ElasticSearch】之常用 HTTP 请求命令
访问 ElasticSearch 的 http 协议 RESTful 端口为 9200:curl -X GET http://localhost:9200添加 demo 索引:curl -X PUT http://localhost:9200/demoPUT 请求操作结果是幂等性的,意思是多次相同的请求结果是一样的,所以,再次执行该请求时会报错提示索引已存在了。访问 demo 索引:curl -X GET http://localhost:9200/demo访问所有索引信息:原创 2021-08-16 00:35:31 · 6393 阅读 · 0 评论 -
【Spring Cloud】之 OpenFeign
一、OpenFeign 简介是么是 OpenFeignFeign 是一个声明式 WebService 客户端,使用 Feign 能让编写 WebService 客户端更加简单。只需创建一个接口并在接口上添加注解即可。Feign 也支持可拔插式的编码器和解码器,SpringCloud 对 Feign 进行了封装,使其支持了 Spring MVC 标准注解和 HTTPMessageConverters。Feign 可以与 Eureka 和 Ribbon 组合使用易支持负载均衡。官网解释:https:原创 2020-10-11 16:24:12 · 209 阅读 · 0 评论 -
【SpringCloud】之 Nacos 组件
Nacos 注册中心1、下载 Nacos 注册服务Nacos 服务可以在官网中进行下载:https://github.com/alibaba/nacos/releases,一般选择下载 nacos-server-xxx.zip,Nacos 既可以在 Windows 中运行也可以在 Linux 中运行,在 bin 目录中提供了两种运行方式:startup.cmd:运行在 Windows 上的 Nocos 启动脚本shutdown.cmd:运行在 Windows 的 Nocos 停止脚本start原创 2020-09-27 16:52:18 · 1478 阅读 · 0 评论 -
【Spring Cloud】之 Gateway
一、Gateway 简介1、Gateway 是什么Cloud 全家桶中有个很重要的组件就是网关,在 1.x 版本中都是采用的 Zuul 网关;但在 2.x 版本中,Zuul 的升级一直跳票,Spring Cloud 最后自己研发了一个网关替代 Zuul,一句话总结就是:Gateway 是原 Zuul 1.x 版的替代。更多介绍参考官网文档:https://cloud.spring.io/spring-cloud-static/spring-cloud-gateway/2.2.1.RELEASE/ref原创 2020-10-12 17:41:52 · 356 阅读 · 0 评论 -
【Spring Cloud】之 Ribbon
一、Ribbon 简介Ribbon 是什么Spring Cloud Ribbon 是基于 Netflix Ribbon 实现的一套客户端负载均衡的工具。简单的说,Ribbon 是Netflix 发布的开源项目,主要功能是提供客户端的软件负载均衡算法和服务调用。Ribbon 客户端组件提供一系列完善的配置项,如连接超时、重试等。简单的说就是在配置文件中列出 Load Balance(简称 LB)后面所有的机器,Ribbon 会自动地帮助你基于某种规则(如简单轮询、随机连接等)去连接这些机器。我们很容易原创 2020-10-10 16:13:02 · 169 阅读 · 1 评论 -
【Spring Cloud】之 Eureka
Eureka 简介服务治理Spring Cloud 封装了 Netflix 公司开发的 Eureka 模块来实现服务治理。在传统的 rpc 远程调用框架中,管理每个服务与服务之间依赖关系比较复杂,管理比较复杂,所以需要使用服务治理,管理服务与服务之间的依赖关系,可以实现服务调用、负载均衡、容错等,实现服务发现与注册。服务注册与发现Eureka 采用了 CS 的设计架构,Eureka Server 作为服务注册功能的服务器,它是服务注册中心。而系统中的其他微服务,使用 Eureka Client原创 2020-10-04 10:52:41 · 413 阅读 · 0 评论 -
【Spring Cloud】之 Sentinel
一、Sentinel 简介1、Sentinel 是什么一句话解释就是我们之前用过的 Hystrix。由于 Hystrix 存在以下弊端:需要我们程序员自己手工搭建监控平台没有一套 web 界面可以给我们进行更加细粒度化的配置流控、速率控制、服务熔断、服务降级等而 Sentinel 则解决以上问题:单独一个组件,可以独立出来直接界面化的细粒度统一配置2、Sentinel 解决的问题图片1主要解决服务中的一下问题:服务雪崩服务降级服务熔断服务限流更多介绍请参考官网文原创 2020-10-13 16:16:57 · 388 阅读 · 0 评论 -
【Spring Cloud】之 Seata
一、Seata 简介1、分布式事务问题单体应用被拆分成微服务应用,比如原来的三个模块被拆分成三个独立的应用,分别使用三个独立的数据源,业务操作需要调用三个服务来完成,此时,每个服务内部的数据由本地事务来保证,但全局的数据一致性问题没法保证。总结来说就是:一次业务操作需要垮多个数据源或需要垮多个系统进行远程调用,就会产生分布式事务问题。2、Seata 介绍Seata 是一款开源的分布式事务解决方案,致力于在微服务架构下提供高性能和简单易用的分布式事务服务,其官网地址为:http://seata.i原创 2020-10-13 17:35:41 · 682 阅读 · 1 评论 -
【Spring Cloud】之 Hystrix
一、Hystrix 简介分布式面临的问题复杂的分布式体系结构中的应用程序有数十个依赖关系,每个依赖关系在某些时候将不可避免地失败:服务雪崩多个微服务之间调用的时候,假设微服务A调用微服务B和微服务C,微服务B和微服务C又调用其它的微服务,这就是所谓的“扇出”,调用路径相当于一个扇形。如果扇出的链路上某个微服务的调用响应时间过长或者不可用,对微服务A的调用就会占用越来越多的系统资源,进而引起系统崩溃,这就是所谓的“雪崩效应”。对于高流量的应用来说,单一的后端依赖可能会导致所有服务器上的所有资源都原创 2020-10-12 12:21:14 · 200 阅读 · 0 评论 -
【Spring Cloud】之微服务架构组成
微服务组件微服务一般包括的组件如下图:各组件发展迭代如下图:Spring Cloud 和 Spring Boot 版本选型对照Release TrainBoot VersionHoxton2.2.x, 2.3.x (Starting with SR5)Greenwich2.1.xFinchley2.0.xEdgware1.5.xDalston1.5.x更多介绍可以参考:Spring Cloud 中文文档:https://www.bo原创 2020-10-02 23:35:46 · 262 阅读 · 0 评论 -
【Spring】之 Spring Cache
一、Spring Cache 简介之前我们操作 Redis 缓存的时候使用的是 Spring Boot 提供的 RedisTemplate 或者 StringRedisTemplate。这种操作需要的编码比较多一点,所以,Spring 从 3.1 开始就定义了 org.springframework.cache.Cache 和 org.springframework.cache.CacheManager 接口来统一不同的缓存技术,并支持使用 JCahce(JSR-107) 注解简化我们的开发。原创 2020-10-20 13:22:36 · 500 阅读 · 0 评论 -
【EasyExcel】之读写实战
一、EasyExcel 简介1、Excel导入导出的应用场景数据导入:减轻录入工作量数据导出:统计信息归档数据传输:异构系统之间数据传输2、EasyExcel 特点Java领域解析、生成Excel比较有名的框架有Apache poi、jxl等。但他们都存在一个严重的问题就是非常的耗内存。如果你的系统并发量不大的话可能还行,但是一旦并发上来后一定会OOM或者JVM频繁的full gc。EasyExcel是阿里巴巴开源的一个excel处理框架,以使用简单、节省内存著称。EasyExcel能原创 2020-08-09 15:30:18 · 1549 阅读 · 0 评论 -
【RPC框架】之 Dubbo
一、分布式基础理论1、什么是分布式系统《分布式系统原理与范型》定义:分布式系统是若干独立计算机的集合,这些计算机对于用户来说就像单个相关系统分布式系统(distributed system)是建立在网络之上的软件系统。随着互联网的发展,网站应用的规模不断扩大,常规的垂直应用架构已无法应对,分布式服务架构以及流动计算架构势在必行,亟需一个治理系统确保架构有条不紊的演进。2、分布式发展演变单一应用架构当网站流量很小时,只需一个应用,将所有功能都部署在一起,以减少部署节点和成本。此时,用于简化原创 2020-10-17 16:29:04 · 238 阅读 · 0 评论 -
【Mybatis Plus】之 mapper.xml
目录一、Mapper.java 和 Mapper.xml 映射关系二、Mapper.xml 语句标签介绍1、Select 标签 一、Mapper.java 和 Mapper.xml 映射关系Mybatis 为我们提供了基本的增删改查的接口,特别是 Mybatis-Plus 提供的 Wrappers 更是可以组合出更复杂的查询语句以满足我们需求。但有些复杂的操作,比如联表查询等,这些就需要使用自定义 SQL 语句进行操作的。而编写自定义 SQL 的操作为:在 Java 包下创建 x原创 2021-09-10 19:04:55 · 15636 阅读 · 6 评论 -
【Mybatis Plus】之分页查询
目录一、分页插件1、分页操作2、添加分页插件二、分页助手 PageHelper一、分页插件1、分页操作当我们进行分页查询数据时:/** * 分页查询数据 * @param pageNum 页码 * @param pageSize 每页数量 * @return 分页数据 */public Page<User> selectPage(Integer pageNum, Integer pageSize) { return userMapper原创 2021-09-10 14:37:08 · 1630 阅读 · 0 评论 -
【MyBatis-Plus】之批量插入
一、应用情景介绍在实际的项目开发过程中,常常遇到批量保存数据的场景,当数据量比较少,比如只有几条数据的情况下,我们可以使用 for 循环来 insert 数据,但如果数据量比较多的情况下就不行,特别是并发的情况下,因为这样会增加数据库的负担。我们通过查看 mybatis-plus 源码发现,mybatis-plus 的 IService API 接口提供了批量插入的接口:public interface IService<T> { ...... /** * 插入原创 2021-09-08 19:01:58 · 14391 阅读 · 5 评论 -
【Mybatis-Plus】之字段值自动填充
一、场景当我们使用 MybatisPlus 操作数据时,会遇到有些表的字段值是可以自动填充的场景,比如我们的 create_time 和 update_time 字段,这些字段值记录的是时间值,如果每次操作都要手动填写的话不仅麻烦而且代码也很臃肿,所以 MybatisPlus 为我们提供了 @TableField 注解来实现自定义自动填充的功能。下面介绍如何使用和配置我们的自动填充规则。二、实战1、引入依赖<dependency> <groupId>com.b原创 2021-01-15 14:46:51 · 2645 阅读 · 0 评论 -
【Mybatis-Plus】之代码自动生成
简介Mybatis-Plus 自带了一个代码生成器 AutoGenerator,非常方便地根据数据表结构来为我们生成对应的实体类 entity,已经操作数据对应的 controller、service 和 mapper 文件,下面是一个简单地实例,只需要把实例类放在对应的项目中即可。实例代码如下:import com.baomidou.mybatisplus.annotation.DbType;import com.baomidou.mybatisplus.annotation.IdType;im原创 2020-08-09 15:58:27 · 310 阅读 · 0 评论 -
【Mybatis Plus】之 CRUD 实战
MyBatista Plus 简介官网:http://mp.baomidou.com/参考教程:http://mp.baomidou.com/guide/MyBatis-Plus(简称 MP)是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。MyBatista Plus 特性无侵入:只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑损耗小:启动即会自动注入基本 CURD,性能基本无损耗,直接面向对象操作强大的 CRUD原创 2020-07-24 21:11:19 · 948 阅读 · 1 评论 -
【Mabatis-Plus】之 Wapper 详解
一、wapper介绍原创 2020-07-25 15:33:46 · 5175 阅读 · 0 评论 -
【MyBatis】之开发常见问题
参数匹配问题当我们使用 mybatis 注解版的时候,如果 mapper 里面的 sql 语句参数只有一个参数表,可以不使用 @Param 注解,比如:@Mapperpublic interface UserMapper { @Select("select * from t_user where username=#{username}") public User getUserByNameAndPassword(String username);}这种情况下参数会得到匹配,但参数超过一个的原创 2020-07-22 08:44:37 · 445 阅读 · 0 评论 -
【MyBatis】之理论知识总结
一、MyBatis 简介MyBatis 是什么MyBatis 是一款优秀的持久层框架,一个半自动 ORM(对象关系映射)框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生类型、接口和 Java 的 POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。ORM是什么ORM(Object Relational Ma原创 2020-09-17 17:33:41 · 1100 阅读 · 0 评论 -
【ActiveMQ】之ActiveMQ 的持久化机制
MQ 的高可用实现为:MQ 自带的 事务、持久、签收第三方可持久化机制为什么要持久化呢?目的是为了避免意外宕机以后丢失信息,需要做到重启后可以恢复消息队列,所以消息系统一般都会采用持久化机制。ActiveMQ 的消息持久化机制有 AMQ、KahaDB、JDBC 和 LevelDB,无论使用哪一种持久化方式,消息的存储逻辑都是一致的:发送者将消息发送出去后,消息中心首先将消息存储到本地数据文件、内存数据库或远程数据库后再试图将消息发送给接受者,成功则将消息从存储中删除,失败则继续尝试发送。原创 2020-07-19 14:55:27 · 709 阅读 · 1 评论 -
【ActiveMQ】之Java内嵌的ActiveMQ服务器broker
在 Java 中内嵌了一个 ActiveMQ 服务器 broke,我们可以使用这个小型的服务器来临时充当调试使用的 ActiveMQ 服务器,下面以一个实例来介绍如何使用。依赖包如下:<!-- activemq 所需的 jar 包配置 --><dependency> <groupId>org.apache.activemq</groupId> <artifactId>activemq-all</artifactId>原创 2020-07-16 20:48:35 · 848 阅读 · 0 评论 -
【ActiveMQ】之 Spring 和 ActiveMQ 整合
首先导入 spring 和 activemq 整合所需的额外依赖包(ActiveMQ 所需的基本依赖包就不在这里列出来了):<!-- spring 对 JMS 的支持,整合 spring 和 activemq --><dependency> <groupId>org.springframework</groupId> <artifactId>spring-jms</artifactId> <versio原创 2020-07-17 23:54:17 · 240 阅读 · 0 评论 -
【ActiveMQ】之消息中间件可靠性的保证方式
保证消息中间件的可靠性方式为:消息的持久性、消息的事务、消息的签收1、消息的持久性**非持久化:**当服务器宕机时,消息不存在**持久化:**当服务器宕机,消息依然存在队列 queue 模式下,只需要为消息 producer 设置持久化模式为持久化即可:// 设置消息为持久化MessageProducer messageProducer = session.createProducer(queue);messageProducer.setDeliveryMode(DeliveryMode.P原创 2020-07-16 17:08:28 · 300 阅读 · 0 评论 -
【ActiveMQ】之 SpringBoot 与 ActiveMQ 整合
首先,我们创建 SpringBoot 的 Maven 工程,然后配置 pom.xml 文件:<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apach原创 2020-07-18 16:34:29 · 233 阅读 · 0 评论 -
【ActiveMQ】之传输协议的修改和配置
ActiveMQ 传输协议和端口定义在 conf 目录下的 activemq.xml 文件中,打开该文件找到如下代码: <transportConnectors> <!-- DOS protection, limit concurrent connections to 1000 and frame size to 100MB --> <transportConnector name="openwire" uri="tcp://0.0.0.0:61616?m原创 2020-07-18 18:07:17 · 858 阅读 · 0 评论 -
【ActiveMQ】之 ActiveMQ 的高级特性
异步投递ActiveMQ 支持同步和异步两种发送的模式将消息发送到 broker,模式的选择对发送延时有巨大的影响。producer 能达到的产出率(产出率=发送数据总量/时间)主要受发送延时的影响,使用异步发送可以显著的提高发送性能。对于一个慢消费者(数据投送快但数据消费满)来说,使用同步发送消息可能出现 Producer 堵塞以及 broker 消息数量积压的情况,所以慢消费者适合使用异步发送。ActiveMQ 默认使用异步发送模式,除非明确指定使用同步发送的方式或者在未使用事务的前提下发送持久化原创 2020-07-21 15:55:14 · 300 阅读 · 0 评论 -
【ActiveMQ】之 JMS 开发基本步骤
JMS(Java Message Service) 开发基本步骤:1、创建一个 connection factory2、通过 connection factory 来创建 JMS connection3、启动 JMS connection4、通过 connection 创建 JMS session5、创建 JMS destination 指定是创建 queue 还是 topic6、创建 JMS producer 或者创建 JMS message 并设置 destination7、创建 JMS原创 2020-07-15 22:21:24 · 384 阅读 · 0 评论