自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(127)
  • 收藏
  • 关注

原创 rabbitMQ消息队列中发布确认中的确认以及回退回调的实现

在发布确认回调实现类中package com.it.springbootrabbitmq.callback;import lombok.extern.slf4j.Slf4j;import org.springframework.amqp.rabbit.connection.CorrelationData;import org.springframework.amqp.rabbit.core.RabbitTemplate;import org.springframework.beans.facto

2021-09-03 10:49:21 1016

原创 死信队列与延迟队列区别与问题优化

延时队列延时队列.队列内部是有序的,最重要的特性就体现在它的延时属性上,延时队列中的元素是希望在指定时间到了以后或之前取出和处理,简单来说, 延时队列就是用来存放需要在指定时间被处理的元素的队列, 延时队列其实就是特殊的死信队列基于死信队列存在的问题:如果在消息属性上设置TTL的方式,消息可能并不会按时"死亡",因为RabbitMQ只会检查第一个消息是否过期,如果过期则丢到死信队列,如果第一个消息的延时时长很长, 而第二个消息的延时时长很短,第二个消息并不会优先得到执行,而是在第一个消息过期后才

2021-09-02 23:17:13 3947

原创 延迟队列的demo

配置类:package com.it.springbootrabbitmq.config;import org.springframework.amqp.core.*;import org.springframework.beans.factory.annotation.Qualifier;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configu

2021-09-02 16:59:27 299

原创 linux系统中安装jdk/maven/docker流程

安装JAVA 运行环境第一步:上传或下载安装包cd/usr/localjdk-8u121-linux-x64.tar.gz第二步:解压安装包tar -zxvf jdk-8u121-linux-x64.tar.gz第三步:建立软连接ln -s /usr/local/jdk1.8.0_121/ /usr/local/jdk第四步:修改环境变量vim /etc/profileexport JAVA_HOME=/usr/local/jdkexport JRE_HOME=$JAVA_HOME.

2021-08-30 20:42:23 195

原创 (已解决)Unexpected token o in JSON at position 1

问题描述:前台登录模块中,在cookie中放了一个用户数据的对象, 然而在从cookie中取这个对象的时候,一直报Unexpected token o in JSON at position 1 这个错误通过查资料了解到: cookie中不能放对象, cookie里面只能存放文本信息解决方案 :将对象转换为json字符串放入cookie中: JSON.Stringify(this.loginInfo)再次尝试 , 页面可以正常回显登录用户的数据相关知识JSON.Stri.

2021-08-25 10:44:11 303

原创 在base64位编码过程中遇到java.lang.NoClassDefFoundError: javax/xml/bind/DatatypeConverter 解决方案

问题描述:org.springframework.web.util.NestedServletException: Handler dispatch failed; nested exception is java.lang.NoClassDefFoundError: javax/xml/bind/DatatypeConverterat org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java

2021-08-24 17:47:17 414

原创 缓存穿透与缓存击穿与缓存雪崩的理解

缓存穿透与缓存击穿与缓存雪崩的理解缓存穿透现象原因解决方案缓存击穿现象原因解决方案缓存雪崩现象原因解决方案缓存穿透与缓存击穿与缓存雪崩的区别缓存穿透现象1)应用服务器压力变大2)redis命中率降低3)一直查询数据库原因大量请求进行访问,且是非法访问,redis内存中没有数据命中率降低,便会不断向数据库进行请求查询,从而造成数据库崩溃1)redis查询不到数据库2)出现很多非正常url访问解决方案(1).对空值缓存 :如果一个查询返回的数据为空(不管数据是否不存在),我

2021-08-14 17:42:06 94

原创 redis之高可用集群配置

redis之高可用集群配置集群简介解决的问题配置集群1 创建集群每个服务器的配置文件2. 填写配置文件3 . 到redis的src目录下(redis6以上版本已经集成了rubby环境) 执行命令将六个节点进行合体4.以集群方式进行连接, 连接任意一个节点都可以redis cluster 分配节点slots 插槽添加值1.1添加单个值1.2 添加多个值常用命令故障恢复好处不足集群简介Redis集群实现了对Redis的水平扩容,即启动N个redis节点,将整个数据库分步存储在这N个节点中,每个节点存储总

2021-08-14 17:24:35 156

原创 详解redis常用结构:主从复制及哨兵模式

详解redis常用结构:主从复制及哨兵模式一.主从复制简介作用搭建一主多从1.1创建myredis文件夹1.1.1 修改配置文件(redis.conf)1.2 复制redis.conf到myredis文件夹中1.3配置一主两从, 创建三个配置文件1.4.启动三个redis服务,查看当前主机运行情况,在从机上执行slaveof 主机ip 端口号 会把从机加到主服务器中复制原理主从复制的特点二: 薪火相传特点缺点三:反客为主特点用法四:哨兵模式简介实现故障恢复(假如有一台主机突然掉线)1.1 新主登基

2021-08-14 17:13:00 120

原创 Redis持久化之RDB与AOF的比较

Redis持久化之RDB与AOF的比较RDB持久化1.1流程1.2缺点1.3恢复1.4优势AOF持久化1.1流程1.2 特点1.3恢复1.3.1 异常恢复1.4 持久化用哪个好RDB持久化1.1流程Redis会单独创建(fork)一个子进程来进行持久化,会先将数据写入到一个临时文件中,待持久化进程都结束了,再用这个临时文件替换上次持久化好的文件,整个过程中,主进程是不进行任何IO操作的,这就确保了极高的性能,如果需要进行大规模数据的恢复,且对于数据恢复的完整性不是非常敏感,那RDB方式要比AOF方式

2021-08-14 16:52:21 72

原创 Redis秒杀事务高并发所产生的问题及解决方案

秒杀事务高并发所产生的问题及解决方案秒杀业务高并发产生的问题问题一:超卖问题解决方式一:采用乐观锁解决方式二: 采用LUA脚本1.1 LUA脚本介绍1.2 特点问题二:由于有些连接等待时间过长会出现连接超时的问题解决方案秒杀业务高并发产生的问题问题一:超卖问题解决方式一:采用乐观锁采用乐观锁, watch 监视库存, 同时将秒杀操作采用事务管理,解决超卖问题,不过会存在库存遗留问题缺点: 采用乐观锁方式会存在库存遗留问题解决方式二: 采用LUA脚本1.1 LUA脚本介绍LUA脚本是类

2021-08-14 16:39:57 416

原创 Redis事务之乐观锁与悲观锁的理解

redis事务之乐观锁与悲观锁的理解事务的简介事务的三个阶段1.1 Multi1.2 Exec1.3 discard事务的错误处理事务冲突解决方案:1. 悲观锁2. 乐观锁3. 乐观锁在redis中的应用Redis事务的三个特性1.1 单独的隔离操作1.2 没有隔离级别的概念1.3 不保证原子性事务的简介Redis事务是一个单独的隔离操作:事务中的所有命令都会序列化,按顺序的执行,事务在执行过程中,不会被其他客户端发送来的命令请求所打断,redis事务的主要作用是串联多个命令防止别的命令插队事

2021-08-14 16:27:54 410

原创 redis五大数据类型&&redis6.0三大新数据类型详细总结

redis五大数据类型&&redis6.0三大新数据类型字符串String1.1介绍:1.12底层数据结构(指的是value的值)列表(List)1.1特点_底层数据结构1.2常用命令Set集合1.1 特点_底层数据结构1.2 常用命令Hash1.1特点_底层数据结构1.2 常用命令Redis有序集合zset1.1 特点1.2 数据结构1.3 常用命令新数据类型Bitmaps(针对位操作)1.1 特点1.2 常用命令Redis新类型:hyperLoglog(针对基数运算)1.1 常用命令1.

2021-08-14 15:47:53 378

原创 集群测试之ab工具进行高并发测试命令

get请求:ab -n 1000 -c 100 http://192.168.0.109:8080/redisTest/testLockpost带参请求ab -n 2000 -c 200 -k -p ~/postfile -T application/x-www-form-urlencoded http://192.168.2.115:8081/Seckill/doseckill

2021-08-14 10:49:12 223

原创 io.lettuce.core.RedisCommandExecutionException: MOVED 8718 192.168.93.130:6380 异常问题的解决

#Redis服务器地址spring.redis.host=192.168.93.130#Redis服务器连接端口spring.redis.port=6379#Redis数据库索引(默认为0)spring.redis.database= 0#连接超时时间(毫秒)spring.redis.timeout=1800000#连接池最大连接数(使用负值表示没有限制)spring.redis.lettuce.pool.max-active=20#最大阻塞等待时间(负数表示没限制)spring.re

2021-08-14 10:40:47 3011

原创 redis模拟手机验证码的发送验证过程

package com.it.jedis;import redis.clients.jedis.Jedis;import java.util.Random;//模拟手机验证码的发送public class PhoneCode { public static void main(String[] args) { // verifyCode("14430202020"); getRedisCode("14430202020","908593"); }

2021-08-12 15:02:32 84

原创 自定义类方法的重写 与 单例模式&& main方法的理解

自定义类方法的重写 与 单例模式&& main方法的理解

2021-08-11 11:13:21 76

原创 == 和 equal比较大小的用法总结

== 和 equal比较大小的用法总结

2021-08-11 11:10:22 135

原创 面向对象三大特性之继承性 与多态性

面向对象三大特性 之继承性 与多态性

2021-08-11 11:08:44 71

原创 数组与四种权限修饰符总结

数组与四种权限修饰符总结

2021-08-11 11:06:20 114

原创 继承 /类 排序查找算法总结

继承 /类 排序查找算法总结

2021-08-11 11:04:38 67

原创 Linux目录结构及分区/通信原理介绍

分区原理通信原理:

2021-08-11 10:50:07 57

原创 超详细linux命令用法快速入门

2021-08-11 10:42:06 111

原创 定时备份数据库的Shell脚本实现

1. 编写执行数据库备份的shell脚本#!/bin/bash#完成数据库的定时备份#备份的路径BACKUP=/opt/backup/db#当前的时间作为文件名DATETIME=$(date +%Y_%m_%d_%H%M%S)echo "=============开始备份=================="echo "===========备份的路径是$BACKUP/$DATETIME.tar.gz"#主机HOST=localhost#用户名DB_USER=root#密码DB_

2021-08-11 10:21:09 305

原创 linux终端登录页显示-bash-4.1# 原因及解决方法

很可能是自己无意间将用户目录下的-rw-r--r--. 1 root root 176 8月 8 20:22 .bash_profile-rw-r--r--. 1 root root 124 8月 8 20:22 .bashrc这两个文件给删除了, 只需登录到其他用户执行以下两个命令复制到自己的用户家目录下即可,拿root用户显示异常举例:cp .bash_profile /rootcp .bashrc /root即可恢复root用户的显示问题...

2021-08-08 20:40:23 606

原创 SpringBoot与SpringMVC拦截器功能的实现

1.编写一个拦截器实现HandlerInterceptor接口2.拦截器注册到容器中(实现WebMvcConfigurer的addInterceptors)3.指定拦截规则[如果是拦截所有,静态资源也会被拦截]实例代码:登录拦截器/** 登录拦截器* */@Slf4jpublic class LoginInterceptor implements HandlerInterceptor { @Override public boolean preHandle(HttpSer

2021-07-30 15:59:40 105 2

原创 SpringBoot与SpringMVC数据响应与内容协商原理

1.数据响应与内容协商给前端自动返回json数据返回值解析器返回值处理器处理返回值this.returnValueHandlers.handleReturnValue( returnValue, getReturnValueType(returnValue), mavContainer, webRequest);寻找哪个处理器能处理返回值HandlerMethodReturnValueHandler handler = selectHandler(returnValue, retu

2021-07-29 13:20:48 187

原创 不知道请求参数是如何传递的?看看这篇Springboot以及SpringMVC中参数传递原理深入浅出剖析就明白了

HandlerMapping中找到能处理请求的Handler(Controller,method())为当前Handler找一个适配器HandlerAdapter:RequestMappingHandlerAdapter1.HandlerAdapter0-支持方法上标注@RequestMapping1-支持函数式编程的xxxx2.执行目标方法3.参数解析器:确定要执行的目标方法每一个参数的值是什么boolean supportsParameter(MethodParameter

2021-07-27 17:07:19 543 9

原创 自定义开启矩阵变量

//自定义WebMvcConfigurer开启矩阵变量 @Bean public WebMvcConfigurer WebMvcConfigurer() { return new WebMvcConfigurer() { @Override public void configurePathMatch(PathMatchConfigurer configurer) { UrlPathH...

2021-07-27 12:50:40 104

原创 SpringBoot自动配置原理总结

SpringBoot先加载所有的自动配置类,xxxAutoConfiguration每个自动配置类按照条件进行生效,默认都会绑定配置文件指定的值,xxxproperties里面拿,xxxproperties和配置文件进行了绑定生效的配置类就会给容器中装配很多组件只要容器中有着写组件,相当于这些功能就有了定制化配置:(1)用户直接自己@Bean替换底层的组件(2)用户去看这个组件是获取的配置文件什么值就去修改(application.properties)里面对应的值即可xxxAutoConfi

2021-07-26 00:54:08 55

原创 springboot快速启动

1.引入springboot父工程,从而可以使用boot的各种配置 org.springframework.boot spring-boot-starter-parent 2.3.4.RELEASE2.如果是web工程org.springframework.bootspring-boot-starter-web3.主程序类*** @SpringBootApplication注解:告诉这是一个springboot应用** */@SpringBootAp

2021-07-25 17:05:00 228

原创 jsp的有关总结

<%–这里通过path回显表示实体中的某个字段,items表示集合,itemLabel:展示在option中的数据,itemvalue:作为value属性–%><form:select path=“dept.did” items="${depts}" itemLabel=“dname” itemValue=“did”></form:select><%--单选框通过value回显--%>

2021-07-25 01:24:34 56

原创 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version

遇到该问题:很可能是你原来的mapper中的sql语句最后加了 ; 分号, 所以导致limit 分页条件无法拼接,报语法错误.只需将分号去掉即可解决

2021-07-24 23:06:09 181 2

原创 Cannot convert value of type ‘java.lang.String‘ to required type ‘javax.sql.DataSource‘ for property

出现这个问题的原因可能是datasource在sqlsession中将ref 写成了value, 应该是引入这个值, ref

2021-07-24 19:34:05 304 1

原创 mybatis逆向工程总结

逆向工程定义:MyBatis Generator: • 简称MBG,是一个专门为MyBatis框架使用者定制的代码生成器,可以快速的根据表生成对应的映射文件,接口,以及bean类。支持基本的增删改查,以及QBC风格的条件查询。但是表连接、存储过程等这些复杂sql的定义需要我们手工编写使用步骤:一:编写generatorConfig.xml的配置文件(重要几处配置)1)jdbcConnection配置数据库连接信息2)javaModelGenerator配置javaBean的生成策略3)sqlMa

2021-07-24 11:30:28 194

原创 PersistenceException Error updating database关于mybatis批量修改数据库时无法批量操作的问题解决

由于数据库默认配置是不支持批量执行多条修改sql语句的,因此我们需要修改下数据库的配置, 在数据库连接地址url后面加上参数:?allowMultiQueries=true 即可解决这个问题

2021-07-23 21:32:21 600

原创 lazyLoadingEnabled延迟加载的配置

方式一:针对全局所有进行配置 <!--开启延迟加载--> <setting name="lazyLoadingEnabled" value="true"/> <!--是否查询所有数据--> <setting name="aggressiveLazyLoading" value="false"/>方式二:只针对特有的语句进行配置<collection property="emps" select="

2021-07-23 17:07:41 624

原创 mysql多表联查之多对一的处理

<!-- //查询所有员工信息 List<Emp> getAllEmp();--> <!--自定义emp类型的映射关系--> <resultMap id="empMap" type="Emp"> <!--id用于定义主键的映射--> <id column="eid" property="eid"></id> <!--result定义属性的映射-..

2021-07-23 15:11:39 823

原创 mybatis中获取主键以及参数传递的有关问题

<insert id="addEmp" useGeneratedKeys="true" keyProperty="eid"> insert into emp values(null,#{ename},#{age},#{sex}) /*insert into emp values(null,'${ename}',${age},'${sex}')*/</insert>

2021-07-22 23:27:53 128

原创 mybatis获取参数值的两种方式

${}:insert into emp values(null,admin,23,男)statement:必须使用字符串拼接的方式操作sql,一定要注意单引号问题#{}:insert into emp values(null,?,?,?)preparedstatement:可以使用通配符操作sql,因为在为String赋值时,可以自动加单引号,因此不需要注意单引号问题,使用建议:建议使用#{},在特殊情况下,需要使用${},例如模糊查询和批量删除,...

2021-07-22 23:08:16 420

空空如也

空空如也

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

TA关注的人

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