Java
文章平均质量分 64
点点@
程序员的生涯就是不断积累,不断与bug做斗争的过程。
展开
-
springcloud+rabbitmq实现分布式事务【死信队列实现】
说明:本文章是基于springcloud+springboot+rabbitmq实现的分布式事务,注册中心为eureka,服务调用为openfeign。使用简单消息队列完成分布式事务【即补偿机制】,下篇文章使用死信队列完成分布式。业务需求:用户支付功能,如果用户支付成功,需要改变订单表中订单状态为支付状态【跨服务调用修改订单状态接口】,同时库存表中减库存数量【跨服务调用修改库存数量接口】。下面提到的回款操作是商家不愿意看到,很多商家不愿意这样,这里回款操作只是文章需要。技术说明【那些消息会放到死原创 2021-06-22 11:23:07 · 718 阅读 · 1 评论 -
springcloud+rabbitmq实现分布式事务【非死信队列实现】
说明:本文章是基于springcloud+springboot+rabbitmq实现的分布式事务,注册中心为eureka,服务调用为openfeign。业务需求:用户支付功能,如果原创 2021-06-20 20:23:25 · 609 阅读 · 0 评论 -
高并发redis缓存问题- 穿透,雪崩,击穿
缓存穿透: 概念:指查询一个一定不存在的数据,由于缓存是不命中的,将去查询数据库,但是数据库也无此记录,我们没有将这次查询的null写入缓存,这将导致这个不存在的数据每次请求都要去数据库查询,失去缓存的意义! 风险:利用不存在的数据进行攻击,数据库瞬间压力增大,最终导致崩溃。 解决:null结果缓存,并加如短暂过期时间。缓存雪崩:(开发中一般不会出现) 概念:是指在我们设置缓存时,key值采用相同的过期时间,导致缓存在某一时刻同时失效,请求...原创 2021-01-12 15:48:13 · 396 阅读 · 0 评论 -
Springboot+Security+Jwt
工程目录文章目录工程目录 前言 一、Security是什么? 二、使用步骤 1.引入pom.xml文件 2.application.yml文件 。。。。。。 总结:代码足够详细,有耐心的可以看,没耐心的浪费时间!前言随着业务的发展,传统的不分离前后端的Java项目逐渐减少,更多的时候是做到前后端分离,会话管理也就从传统的Session会话管理变为Jwt管理会话,本篇文章就是SpringBoot使用Jwt管理会话同时整合Security,完成权限操作。原创 2021-12-13 20:49:39 · 12712 阅读 · 14 评论 -
Springboot+Security普通
说明:今天有个哥们问我有没有什么好的权限框架推荐,我了解了一下他们对业务的要求,我反手就给他推荐了Security权限框架,他说他看过我之前的Shiro权限管理博客,感觉Shiro不错。我说区别不大,Security除了不能脱离Spring,Shiro能做的Security都能做,而且Security对oauth、OpenID等也有支持,Shiro就需要自己手动去实现了。那哥们就说:关键你没有写过Security相关的博客啊!当时我脑瓜子就嗡嗡的,这是那儿跟那儿啊。。。。。。后来感觉Security也用过几原创 2021-12-08 21:42:29 · 4250 阅读 · 0 评论 -
SpringBoot整合rabbitmq-主题交换机队列(四)
说明:Topic主题交换机它的大致流程是交换机和一个或者多个队列绑定,这个绑定的Routingkey是包含通配符的,满足通配符的队列会接收到消息。topic.#:能匹配 topic.xxx 或者 topic.xxx.xxx。topic.*:只能匹配 topic.xxx。A.总体maven依赖。#:匹配一个或多个词。原创 2024-02-29 17:04:51 · 508 阅读 · 0 评论 -
SpringBoot整合rabbitmq-重复消费问题
说明:重复消费的原因大致是生产者将信息A发送到队列中,消费者监听到消息A后开始处理业务,业务处理完成后,监听在告知rabbitmq消息A已经被消费完成途中中断,也就时说我已经处理完业务,而队列中还存在当前消息A,导致消费者服务恢复后又消费到消息A,出现重复操作的业务。解决思路:我只要有一个地方记录了消息A已经被消费过了【这个消息必须得设置一个唯一标记】,即使消息A再次被消费时,比对一下,如果有记录则说明消息A已经被消费,如果没有说明没有被消费。我使用redis及设置redis过期时间来解决重复消费问题。原创 2024-03-03 16:12:28 · 448 阅读 · 0 评论 -
SpringBoot整合rabbitmq-直连交换机队列(二)
说明:本文章主要是Direct定向/直连类型交换机的使用,它的大致流程是将一个队列绑定到一个直连交换机上,并赋予一个路由键 routingkey,当一个消息携带着路由值为routingkey,这个消息通过生产者发送给交换机时,交换机就会根据这个路由值routingkey去寻找绑定的队列。C.消费者:MqCustomer。B.生产者MqProducer。A.总体maven引入。原创 2024-02-28 17:23:26 · 467 阅读 · 0 评论 -
Linux安装Rabbitmq
说明:本文章主要是rabbitmq在Linux系统上的安装,文章中包含了rabbitmq的下载及依赖下载。安装rabbitmq-server-3.9.11-1.el7.noarch.rpm。访问地址:http://IP:15672 【如果访问不到,就关掉防火墙】安装erlang-23.3.4.8-1.el7.x86_64.rpm。安装socat-1.7.3.2-2.el7.x86_64.rpm。1.版本选取,这里的选取主要是版本的兼容问题。默认 账号和密码都是guest。启动rabbtimq。原创 2024-03-02 17:29:44 · 629 阅读 · 0 评论 -
SpringBoot整合rabbitmq-扇形交换机队列(三)
说明:本文章主要是Fanout 扇形交换机的使用,它路由键的概念,绑定了页无用,这个交换机在接收到消息后,会直接转发到绑定到它上面的所有队列。B.生产者:MqProducer。C.消费者:MqCustomer。A.总体maven依赖。原创 2024-02-28 19:48:58 · 423 阅读 · 0 评论 -
Rabbitmq消息丢失-消费者消息丢失(二)
所谓的ACK就是:首先关闭自动确认【自动ACK】,消费者收到一个消息后,就可以发一个确认【ACK】给MQ,当然什么时候发送确认【ACK】是程序员决定的,也就是说每次在确保处理完这个消息相关的业务后,程序员可以手动发送确认【ACK】,之后把消息从MQ中干掉!这样即使出现了异常也可以有效的消费消息。说明:消费端在处理消息的过程中出现异常,例如:业务逻辑异常,或者消费者被停机,或者网络断开连接等,以上等情况使消息没有得到正确恰当的处理,也会使消息丢失。分析:分析就是说明中的例如!解决:ACK确认机制。原创 2024-03-04 19:59:57 · 290 阅读 · 0 评论 -
Rabbitmq消息丢失-生产者消息丢失(一)
1.事务:Rabbitmq提供了事务功能,就是生产者发送数据之前开启 RabbitMQ 事务channel.txSelect,然后发送消息,如果消息没有成功被RabbitMQ 接收到,那么生产者会收到异常报错,此时就可以回滚事务channel.txRollback,然后重试发送消息;2.又有没有一种可能,我又发送了一条消息,交换机拿到消息后正要发送给某个队列,就是你,你把那个队列给删掉了,这个时候消息找不到队列,消息就也丢失了。说明:消息生产者在将数据发送到Mq的时候,可能由于网络等原因造成数据投递失败。原创 2024-03-04 19:20:27 · 459 阅读 · 0 评论 -
SpringBoot整合rabbitmq-直连队列,没有交换机(一)
说明:本文章只是springboot和rabbitmq的直连整合,只使用队列生产和消费消息,最简单整合!总结:这个是mq消息的最简单的使用,只使用队列!B.生产者:MyProducer。C.消费者:MqCustomer。A.总体pom.xml。原创 2024-02-28 14:44:47 · 415 阅读 · 0 评论 -
springboot动态数据源【非伪数据源】
springboot mybatis-plus 动态数据源原创 2023-10-30 19:12:03 · 219 阅读 · 0 评论 -
Java工具类-Jdbc工具类
1.pom.xml文件配置。原创 2023-10-25 16:10:43 · 162 阅读 · 0 评论 -
PostgreSQL数据库查询表是否存在数据库中,表字段信息及主外键
PostgreSQL数据库查询表是否存在数据库中,表字段信息及主外键原创 2023-04-25 17:48:00 · 910 阅读 · 0 评论 -
mybatis-plus公共工具类
sql公共类原创 2023-03-20 15:03:54 · 560 阅读 · 0 评论 -
一般sql操作
1.两张表查询a表中不在b表中的数据。方法一:select a.id from t_user_a a where a.id not in (select c.id from t_user_a c,t_user_b b where c.id=b.id)方法二:select * from t_user_a a left join t_user_b b on a.id = b.id where b.id...原创 2018-03-16 13:54:29 · 225 阅读 · 0 评论 -
Linux安装mysql数据
说明:本文章主要说明Linux上安装mysql,命令不做过多解释。1.检测是否安装过mysql rpm -qa | grep mysql 如果安装过,rpm -e mysql(简单删除)rpm -e --nodeps mysql(简单删除+删除相关依赖)2.安装mysql a.下载安装包 这里使用yum命令下载:wget http://rep...原创 2019-10-24 14:51:57 · 143 阅读 · 0 评论 -
Springboot拦截器
说明:本文讲述两种拦截器的实现方法,推荐使用方法二一:传统实现1.实现WebMvcConfigurer接口@Configurationpublic class WebAppConfig implements WebMvcConfigurer { public void addInterceptors(InterceptorRegistry registry) {...原创 2019-11-12 10:10:48 · 175 阅读 · 0 评论 -
Linux安装nginx操作
说明:本文章只做具体安装操作,必要的时候会做简单的说明。操作前准备: 1.确认是否安装nginx依赖的数据库。下面是存在的。如果不存在(个人建议使用a方法安装依赖库),Nginx的安装包:下载地址为:http://nginx.org/en/download.html a.可以 执行安装命令 yum -y install gcc pcre-deve...原创 2019-02-20 17:27:59 · 152 阅读 · 0 评论 -
Springboot Aop 自定义注解 日志入库
说明:本文只是对日志操作的简单Demo1.自定义注解@Target(ElementType.METHOD) //注解放置的目标位置,METHOD是可注解在方法级别上@Retention(RetentionPolicy.RUNTIME) //注解在哪个阶段执行//@Documented //生成文档public @interface AnnotationForLog { Lo......原创 2019-12-26 15:27:29 · 1030 阅读 · 0 评论 -
Java对象与json转换
说明:本文章只写一些简单案例,并没有做过多说明。案例为maven案例,pom.xml引入依赖<dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.3</version>原创 2019-01-21 18:00:39 · 15119 阅读 · 0 评论 -
枚举的简单使用
本文只是对Java中的枚举的简单使用public class EnumModel { public enum Color { RED, GREEN, BLANK, YELLOW; } public enum Week{ MONDAY("星期一",1),TUESDAY("星期二",2),WDENESDAY("星期三",3),THURS...原创 2019-01-17 15:11:46 · 158 阅读 · 0 评论 -
Java一个接口多个实现调用,通过线程区分调用那个实现
说明:本文实现线程区分调用不同的实现,本文只是案例不做过多说明!注:代码红色字体为说明字体或者是方法中调用!接口(会有多个实现):public interface ConvertService { public void convert(UpFile upFile) throws Exception; public boolean support(UpFile upFile);}实现类一@Servicepublic class PictureServiceIm原创 2020-07-03 11:18:10 · 1008 阅读 · 0 评论 -
SpringBoot+Mybatis整合(二)
说明:上篇文章搭建框架是基于注解开发的,很多公司为便于维护一般不采用这种方式,一般采用mapper.xml文件配置,这样可以更好的维护代码。接口我们搭建的框架都是基于mapper.xml文件配置的,首先我们搭建一下框架。正题:只需要3步就完成框架搭建首先说明一下工程目录结构:1.配置pom.xml文件<?xml version="1.0" encoding="UTF-8...原创 2018-07-25 17:51:34 · 225 阅读 · 0 评论 -
Springboot logback.xml自定义业务日志入库
说明:本文是基于spring boot lombok@Slf4j1.进入包<dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId></dependency>2.logback.xml配置 ...原创 2019-12-26 16:03:24 · 893 阅读 · 0 评论 -
SpringMvc+maven+shiro使用,说明及不走授权注解问题
说明:关于SpringMvc+maven参考之前的播客,这里直接配置1.首先在pom.xml文件中配置依赖包<!--shiro start--><dependency> <groupId>org.apache.shiro</groupId> <artifactId>shiro-core</artifactId> ...原创 2018-05-07 10:54:35 · 1194 阅读 · 1 评论 -
SpringBoot+Mybatis整合(一)
Spring boot的优点轻松创建独立的Spring应用程序。 内嵌Tomcat、jetty等web容器,不需要部署WAR文件。 提供一系列的“starter” 来简化的Maven配置。 开箱即用,尽可能自动配置Spring。说明:本文章主要是SpringBoot+Mybatis注解整合,其中主要是框架的搭建,简单的增删改查案例和简单动态sql查询。正题:只需要3步就完成框架搭建...原创 2018-07-25 12:07:30 · 665 阅读 · 0 评论 -
redis的安装及简单实用
环境说明:本文档讲述在Linux上面安装redis及简单使用视图工具RedisDesktopManager准备开始: 1.Linux系统。 2.redis软件(redis-2.8.3.tar.gz)可以去官网下载(http://redis.io/download) 也可以在linux联网下通过 wget http://download.redis.io/releases/...原创 2018-05-22 09:52:11 · 171 阅读 · 0 评论 -
Java断点续传
说明:本文章是在Springmvc的基础上完成的(有问题可以参考之前文章Springmvc框架搭建),主要功能是断点续传,同时下载时如果是图片直接展示。使用场景: ①在浏览器下载的时候可以暂停下载后继续下载。 ②在下载某一软件时,电脑突然断网,如果是一般下载继续下载会抛出异常,如果是断点续传会继续下载。这两点是断点续传的主要表现。下载流程:代码实现描述:a.文件第一次下...原创 2018-04-04 11:02:31 · 477 阅读 · 0 评论 -
SpringBoot全局异常处理
说明:本文是基于SpringBoot的全局异常处理,主要提现在返回的结果集技术:java自定义异常,SpringBoot日志打印,全局异常需求:模拟 请求参数为1时,后台抛异常:等于1啦 同时请求响应返回Postman对应的请求结果集,控制台打印异常类说明如图:接下来就开始代码了:控制层 TestControllerpackage com.example.dev...原创 2019-02-28 17:10:03 · 6959 阅读 · 0 评论 -
Tomcat介绍
说明:本文章围绕着几个问题,讲述Tomcat的一些配置。1.Tomcat是什么?2.Tomcat都有什么目录?重要的配置文件有那些?主要做什么用?3.Tomcat为什么使用8080端口访问,为什么一般不用80端口?问题1答案: Tomcat是由Apache开发的一个Servlet容器,它对servlet和jsp进行了支持,并提供了web容器的特有支持。 Tomcat本身...原创 2018-04-02 11:37:47 · 243 阅读 · 0 评论 -
Java语言SpringMvc整合FreeMarker静态页面生成
说明:FreeMarker是静态页面生成框架,本文章主要写了两个案例且都是基于SpringMvc框架。一个是生成伪静态,一个是生成静态页面。只写具体功能,不做太多解释,代码是干货,想多深入自己慢慢研究。准备工作:现在pom.xml文件中引入FreeMarker包<!--freemarker--><dependency> <groupId>org.freem...原创 2018-03-22 12:06:10 · 405 阅读 · 0 评论 -
Java后台返回递归数据给前端树展示
说明:本文中只是一个记录,后台返回递归数据tree实体:import com.baomidou.mybatisplus.annotation.TableField;import lombok.Getter;import lombok.Setter;import java.util.List;@Setter@Getterpublic class SfEntityList {...原创 2019-12-19 14:30:45 · 985 阅读 · 0 评论 -
SpringBoot整合redis及简单工具类使用
本篇文章只是简单的SpringBoot整合redis及redis的简单工具类1.导入pom文件<!--redis--><dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis...原创 2018-10-22 08:41:39 · 23066 阅读 · 0 评论 -
Map通过反射转对象
说明:本文章需求是Map通过反射转对象,Map为变量,对象也为变量定义对象public class TestA { private String name; private String adrees; //get set toString}工具类public static <T> T toClass(Class<T> cl...原创 2019-08-20 16:16:40 · 281 阅读 · 0 评论 -
SpringMvc整合缓存
说明:Springmvc参考之前的播客。1.配置eacache.xml文件<?xml version="1.0" encoding="UTF-8"?><ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://ehcac...原创 2018-05-07 11:03:36 · 516 阅读 · 0 评论 -
Web常见错误及后台错误总结
说明:本篇文章只是说明常见错误状态不具体到问题。1.web错误返回错误码: 200:表示客户端请求成功。 404:表示请求页面不存在。 500:表示服务器错误。2.Java中常见异常: java.lang.NullPointerException: 异常的解释是 “程序遇上了空指针 “,简单地说就是调用了未经初始化的对象或者是不存在的对象。java.lang.ClassN...原创 2018-03-12 17:43:40 · 1817 阅读 · 1 评论 -
基础笔记,问题总结
1.post请求和get请求的区别: a.post请求内容在请求中文中。 post请求可以传输大数据。 b.get请求内容在地址栏上。 get请求传输数据的内容最大1024。2.了解集合,他们的特性和区别: a.数组:可以存储基本数据类型,是用来存储对象的一种容器,但是数组的长度固定,不适合在对象未知的条件下使用。 集合:只能存储对象,对象类型可以不一样,...原创 2018-03-12 15:15:39 · 120 阅读 · 1 评论