
后端技术
文章平均质量分 71
记录工作中遇到的问题与个人学习记录
杨某人信了你的邪
这个作者很懒,什么都没留下…
展开
-
springboot中Instant时间传参及序列化
在部分场景中,后台的时间属性用的不是Date或Long,而是Instant,Java8引入的一个精度极高的时间类型,可以精确到纳秒,但实际使用的时候不需要这么高的精确度,通常到毫秒就可以了。而在前后端传参的时候需要对Instant类型进行序列化及反序列化等处理,默认情况下,ObjectMapper是不支持序列化Instant类型的,需要注册。在后台配置SpringBoot的时候,需要考虑两种情况,一种就是Instant作为。可以看到,结果是符合预期的,可以在毫秒时间戳和Instant之间相互转换。原创 2023-08-05 12:26:47 · 1674 阅读 · 0 评论 -
maven离线环境配置(纯内网)
最近,手上有个项目需要进行联调测试,而联调环境又是处在内网中,无法访问外网,相应的maven依赖自然也是下不了,只能使用本地仓库,但在配置环境过程中,遇到了一些小问题,特此记录一下过程。一、下载maven并配置环境变量这一步不多说了,百度一搜一大堆。简单讲就是两步,首先添加环境变量,变量名:MAVEN_HOME,变量值:maven安装地址(D:\App\DevApp\apache-maven-3.6.0),第二步,修改path环境变量,在后面追加:;%MAVEN_HOME%\bin,最后打开cmd,使原创 2021-08-08 23:33:05 · 20913 阅读 · 13 评论 -
工具类-JacksonUtils
import com.fasterxml.jackson.annotation.JsonInclude.Include;import com.fasterxml.jackson.core.JsonProcessingException;import com.fasterxml.jackson.core.JsonParser.Feature;import com.fasterxml.jackson.core.type.TypeReference;import com.fasterxml.jackson原创 2021-08-16 16:47:49 · 1259 阅读 · 0 评论 -
springboot整合dubbo简单实例
回顾了下以前学过的dubbo,使用最新的springboot与dubbo简单搭建了实例,借此巩固下所学知识。官方文档示例环境:springboot2.5.5、dubbo3.0.3、zookeeper3.7.0、maven3.6.3、jdk8、idea2020.3.41、首先新建空的maven父项目用于管理版本,各版本依赖如下<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.or原创 2021-10-10 16:24:11 · 895 阅读 · 1 评论 -
springboot+redis主从复制、哨兵、读写分离
redis安装、主从配置、哨兵配置、以及在springboot中的集成、读写分离等。原创 2022-03-02 23:10:57 · 6708 阅读 · 7 评论 -
浅析可重入锁的加锁释放锁过程
一、AQSAQS:AbstractQueuedSynchronizer,抽象队列同步器,是juc的基础,如常用的ReentrantLock、Semaphore、CountDownLatch、ReentrantReadWriteLock等都是基于AQS来进行设计的。AQS通过维护一个同步状态state和一个双向队列CLH来实现加锁释放锁。CLH队列中存放的Node结点主要关注如下几个属性:waitStatus:等待状态,取值分别为CANCELLED = 1,SIGNAL = -1,CONDITION原创 2022-04-23 15:16:19 · 898 阅读 · 0 评论 -
maven打包时跳过测试,并打包源码和文档
springboot项目,打包时跳过测试,并打包源码和文档的maven插件配置,仅此记录备忘。原创 2022-05-07 17:11:52 · 340 阅读 · 0 评论 -
常用的加密算法
加密算法我们整体可以分为:可逆加密和不可逆加密,可逆加密又可以分为:对称加密和非对称加密。转载 2022-06-11 11:33:33 · 3391 阅读 · 0 评论 -
Jackson多态反序列化
多态序列化与反序列化,主要是借助于Jackson的与注解实现,下面将通过几个例子来简述其运用。首先,创建几个基本的实体类。这些类都比较简单,有共同的属性也有不同的属性,这里为了简单,共同属性就只有一个type。原创 2022-11-15 22:43:10 · 1368 阅读 · 0 评论 -
Jackson自定义序列化
Jackson自定义序列化原创 2022-11-20 12:23:33 · 4326 阅读 · 0 评论 -
Spring Schedule如何动态添加修改定时任务
以cron表达式任务为例,在上面的基础上,如果有如下定时任务,在每天凌晨一点执行一次,但是后面发现时间不合适,需要修改触发时间为凌晨两点,按照现有的方式,通常只能修改代码重新部署了。日志如下,从日志中可以看到,上面的操作是成功的,而且也是非常方便的,可以很方便的动态添加定时任务,其余几个方法就不写出来了,感兴趣的可以自己试一下。当然,上面的例子中,因为都是在run方法内,所以没那么多讲究,一般在正式使用的时候,会在。通常情况下,我们使用的功能很简单,只需要在配置类上加一个。在上面的快速开始一节中,通过。原创 2023-04-28 16:58:04 · 6455 阅读 · 3 评论 -
WebSocket的使用
主流浏览器都支持websocket,可以新建个HTML文件,使用下述的JavaScript代码进行测试,也可以直接使用浏览器的控制台进行测试。1、新建Springboot项目,我这里使用的版本是2.5.7,添加websocket依赖。提供的客户端进行测试,相对来说,这种方式更加灵活一些,更便于扩展。WebSocket中Stomp的下次再写吧。3、服务端ServerEndpoint。(1)使用主流浏览器进行测试。3、测试方式与第一种一样。其他的可以不用配置,注解的Bean注册到。1、依赖与第一种一样。原创 2022-11-15 20:43:06 · 1001 阅读 · 0 评论 -
springboot中LocalDate请求参数处理
版本说明:在项目中,有几个地方使用到了作为请求参数,有的是作为参数进行传递,也有的作为请求体中的一个属性进行传递,即下面两种情况在后台接收参数的时候,需要分别对二者进行处理,否则无法正常接收到参数。添加如下的配置类即可,一般情况下,都是通过实现接口来处理跨域、静态资源映射或者添加拦截器等。而要处理LocalDate请求参数,最简单的做法就是添加类型转换器。2、1、LocalDate作为请求体中的一个属性一般情况下是不会有问题的,如果真的出现了如下的错误,那多半是手动修改了中的实际上,项目中是有的,原创 2022-06-12 15:49:23 · 3275 阅读 · 0 评论 -
浅析RestTemplate的Jackson消息转换器
一、前因后果之前有写过一个关于上游接口不按规范导致的 Jackson 序列化问题(见https://blog.youkuaiyun.com/Remember_Z/article/details/119737998 或 https://www.yangguirong.com/archives/ji-yi-ci-fan-xu-lie-hua-yi-chang),大概就是接口文档中标明了某个字段是数组格式,但是当数组中只有一个对象时,这个属性会直接以对象的形式的返回,如下两种返回形式// 当数组长度大于1时,返回值与文档原创 2022-05-10 11:17:11 · 7084 阅读 · 2 评论 -
浅析spring中的多数据源解决方案AbstractRoutingDataSource的使用
浅析spring中的多数据源解决方案AbstractRoutingDataSource的使用AbstractRoutingDataSource是spring提供的一种多数据源解决方案,其继承关系如下图所示。上图中没有将一些属性展示出来,这里挑几个重点的属性简单分析一下。private Map<Object, Object> targetDataSources;private Object defaultTargetDataSource;private boolean lenientF原创 2022-04-26 21:15:00 · 2464 阅读 · 0 评论 -
失败重试方案spring-retry
在后台对接第三方接口时,由于网络波动等原因,经常会出现请求超时的情况,但是有些接口不能因为一次超时就判定为失败,通常都会有重试,比如连续请求三次都失败,才认为请求失败。方案一:在代码中进行逻辑判断以前在处理这类问题的时候,我们大多采用的是这种方案。即设置一个重试次数,然后每次调用后判断是否调用成功,如果调用失败且没有超过重试次数,则重试调用。如下@Testvoid invoke() { int failCount = 0; while (failCount < 3) {原创 2022-02-16 11:24:57 · 1449 阅读 · 0 评论 -
AOP+注解+SpringEL表达式记录操作日志
在后台管理系统中,日志是不可或缺的,通常,在开发的时候我们会设置日志级别为debug或info,上线后再设置为error,这些系统日志在帮助我们排查系统问题时作用非常大。但还有一类日志也是非常重要的,那就是操作日志,也就是记录用户在某个时间点干了什么事的日志。这篇文章就简单聊聊如何更好的记录操作日志。在参与过不少项目的开发后,大概总结出了下面这么几种记录日志的方式。第一种就是直接调用日志方法,类似下面这种,这类代码在以前的老系统中非常常见,好处是代码清晰,但太冗余了,总不可能每次要记录日志都复制一遍,如原创 2022-01-18 09:22:06 · 1989 阅读 · 1 评论 -
springboot2集成shiro认证鉴权(下篇)
在上一篇中,实现了session版本的shiro认证鉴权,这一篇将在上一篇的基础上进行改造,实现无状态的jwt进行认证鉴权。下篇-jwt模式1、禁用会话2、Jwt依赖及工具类3、重写登录退出接口4、Realm5、自定义过滤器1、禁用会话jwt什么的稍后再讲,我们先实现禁用session。修改配置类ShiroConfig,添加会话管理器并禁用其调度器,同时禁用session存储,修改内容如下 /** * 会话管理器,禁用调度器 * * @return Default原创 2021-12-28 23:41:38 · 595 阅读 · 0 评论 -
springboot2集成shiro认证鉴权(中篇)
在上一篇中,搭建了项目的基础结构,这一篇中,将简述一下shiro的集成过程。中篇-session模式1、添加依赖2、缓存配置(1)ehcache配置文件(2)缓存配置类3、Realm配置4、shiro核心配置5、登录退出6、异常处理1、添加依赖在pom.xml中添加如下shiro依赖<properties> <shiro.version>1.7.1</shiro.version></properties><dependencies&g原创 2021-12-27 23:15:54 · 535 阅读 · 0 评论 -
springboot2集成shiro认证鉴权(上篇)
使用shiro有段时间了,相比springsecurity,shiro要更轻量化,虽说功能不及springsecurity那么强大,但也足够用了。本次将记录一下springboot2与shiro的集成过程,将分为三篇来进行讲述,第一篇是项目的基础增删改查,第二篇则是使用session进行认证,第三篇则是去除session,采用无状态的jwt进行认证。由于水平有限,所以对于原理不会太深入讲解,有兴趣的大佬可自行上网搜索。springboot2集成shiro上篇:项目基础环境搭建上篇-项目基础增删改查1、新原创 2021-12-27 23:11:56 · 614 阅读 · 0 评论 -
SpringContextHolder
import org.springframework.beans.BeansException;import org.springframework.context.ApplicationContext;import org.springframework.context.ApplicationContextAware;import org.springframework.context.ApplicationEvent;import org.springframework.context.Envi原创 2021-12-05 10:11:10 · 436 阅读 · 0 评论 -
springboot单元测试中手动代理AOP
如果@MyAnno加到Bean的方法上,如service,然后测试类中注入这个Bean,再调用这个它的方法,是可以进入切面的。但如果需要进行测试的方法刚好是单元测试类中的方法,如下面单元测试中的方法aopTest,则没法进入切面,需要手动进行代理,当然,一般也很少会有这种场景。解决方法来自Stack Overflow切点@Pointcut("@annotation(com.example.aoptest.annotation.MyAnno)")public void pointcut(){}测试原创 2021-10-27 11:01:31 · 1314 阅读 · 0 评论