- 博客(42)
- 收藏
- 关注
原创 springboot中Instant时间传参及序列化
在部分场景中,后台的时间属性用的不是Date或Long,而是Instant,Java8引入的一个精度极高的时间类型,可以精确到纳秒,但实际使用的时候不需要这么高的精确度,通常到毫秒就可以了。而在前后端传参的时候需要对Instant类型进行序列化及反序列化等处理,默认情况下,ObjectMapper是不支持序列化Instant类型的,需要注册。在后台配置SpringBoot的时候,需要考虑两种情况,一种就是Instant作为。可以看到,结果是符合预期的,可以在毫秒时间戳和Instant之间相互转换。
2023-08-05 12:26:47
1161
原创 Spring Schedule如何动态添加修改定时任务
以cron表达式任务为例,在上面的基础上,如果有如下定时任务,在每天凌晨一点执行一次,但是后面发现时间不合适,需要修改触发时间为凌晨两点,按照现有的方式,通常只能修改代码重新部署了。日志如下,从日志中可以看到,上面的操作是成功的,而且也是非常方便的,可以很方便的动态添加定时任务,其余几个方法就不写出来了,感兴趣的可以自己试一下。当然,上面的例子中,因为都是在run方法内,所以没那么多讲究,一般在正式使用的时候,会在。通常情况下,我们使用的功能很简单,只需要在配置类上加一个。在上面的快速开始一节中,通过。
2023-04-28 16:58:04
5626
3
原创 Jackson多态反序列化
多态序列化与反序列化,主要是借助于Jackson的与注解实现,下面将通过几个例子来简述其运用。首先,创建几个基本的实体类。这些类都比较简单,有共同的属性也有不同的属性,这里为了简单,共同属性就只有一个type。
2022-11-15 22:43:10
1127
原创 WebSocket的使用
主流浏览器都支持websocket,可以新建个HTML文件,使用下述的JavaScript代码进行测试,也可以直接使用浏览器的控制台进行测试。1、新建Springboot项目,我这里使用的版本是2.5.7,添加websocket依赖。提供的客户端进行测试,相对来说,这种方式更加灵活一些,更便于扩展。WebSocket中Stomp的下次再写吧。3、服务端ServerEndpoint。(1)使用主流浏览器进行测试。3、测试方式与第一种一样。其他的可以不用配置,注解的Bean注册到。1、依赖与第一种一样。
2022-11-15 20:43:06
930
原创 springboot中LocalDate请求参数处理
版本说明:在项目中,有几个地方使用到了作为请求参数,有的是作为参数进行传递,也有的作为请求体中的一个属性进行传递,即下面两种情况在后台接收参数的时候,需要分别对二者进行处理,否则无法正常接收到参数。添加如下的配置类即可,一般情况下,都是通过实现接口来处理跨域、静态资源映射或者添加拦截器等。而要处理LocalDate请求参数,最简单的做法就是添加类型转换器。2、1、LocalDate作为请求体中的一个属性一般情况下是不会有问题的,如果真的出现了如下的错误,那多半是手动修改了中的实际上,项目中是有的,
2022-06-12 15:49:23
2880
原创 HDFS之SecondaryNameNode
1、回顾HDFS架构体系之前有简单提及过,HDFS的架构中,除了NameNode和DataNode外,还有个SecondaryNameNode也扮演着重要的角色。再来简单回顾下HDFS的架构体系(1)Client文件切分,文件上传 HDFS 的时候,Client 将文件切分成 一个一个的Block,然后进行存储与 NameNode 交互,获取文件的位置信息与 DataNode 交互,读取或者写入数据Client 提供一些命令来管理 HDFS,比如启动或者关闭HDFSClient 可以通过一些
2022-05-19 23:34:36
635
原创 浅析RestTemplate的Jackson消息转换器
一、前因后果之前有写过一个关于上游接口不按规范导致的 Jackson 序列化问题(见https://blog.csdn.net/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
6813
2
原创 HDFS 的Shell命令
hadoop fs 等同于 hdfs dfs1、列出所有受支持的命令hadoop fs[root@hadoop-node1 hadoop-3.3.2]# hadoop fsUsage: hadoop fs [generic options] [-appendToFile <localsrc> ... <dst>] [-cat [-ignoreCrc] <src> ...] [-checksum [-v] &l.
2022-05-08 17:05:21
570
原创 HDFS概述
HDFS(Hadoop Distributed File System),Hadoop分布式文件系统。适用于一次写入,多次读取的场景。1、优缺点(1)优点高容错性:通过增加副本的形式来提高容错性。在一个节点上,副本最多只有一个,某节点挂了之后,若可用节点依旧大于等于副本数量,则会自动增加一个副本到其他节点。适合处理大数据数据规模:能够处理数据规模达到GB、TB、甚至PB级别的数据;文件规模:能够处理百万规模以上的文件数量,数量相当之大。(2)缺点不适合低延时数据访问,比如毫秒级的
2022-05-08 16:25:38
908
原创 快速搭建一个hadoop集群
快速搭建一个hadoop集群一、准备虚拟机二、配置ssh免密登录三、编写文件同步脚本四、安装jdk和hadoop五、hadoop集群配置六、启动集群快速搭建一个hadoop集群本文不讲原理,只记录一下快速搭建hadoop集群的过程。参考:https://www.bilibili.com/video/BV1Qp4y1n7EN系统:CentOS7.7hadoop版本:3.3.2jdk版本:1.8.0_321一、准备虚拟机1、安装三台虚拟机,安装过程可参考 超详细的CentOS7.4下载与图文安
2022-05-08 14:01:36
1080
原创 浅析spring中的多数据源解决方案AbstractRoutingDataSource的使用
浅析spring中的多数据源解决方案AbstractRoutingDataSource的使用AbstractRoutingDataSource是spring提供的一种多数据源解决方案,其继承关系如下图所示。上图中没有将一些属性展示出来,这里挑几个重点的属性简单分析一下。private Map<Object, Object> targetDataSources;private Object defaultTargetDataSource;private boolean lenientF
2022-04-26 21:15:00
2281
原创 浅析可重入锁的加锁释放锁过程
一、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
801
原创 springboot+redis主从复制、哨兵、读写分离
redis安装、主从配置、哨兵配置、以及在springboot中的集成、读写分离等。
2022-03-02 23:10:57
6208
7
原创 失败重试方案spring-retry
在后台对接第三方接口时,由于网络波动等原因,经常会出现请求超时的情况,但是有些接口不能因为一次超时就判定为失败,通常都会有重试,比如连续请求三次都失败,才认为请求失败。方案一:在代码中进行逻辑判断以前在处理这类问题的时候,我们大多采用的是这种方案。即设置一个重试次数,然后每次调用后判断是否调用成功,如果调用失败且没有超过重试次数,则重试调用。如下@Testvoid invoke() { int failCount = 0; while (failCount < 3) {
2022-02-16 11:24:57
1347
原创 AOP+注解+SpringEL表达式记录操作日志
在后台管理系统中,日志是不可或缺的,通常,在开发的时候我们会设置日志级别为debug或info,上线后再设置为error,这些系统日志在帮助我们排查系统问题时作用非常大。但还有一类日志也是非常重要的,那就是操作日志,也就是记录用户在某个时间点干了什么事的日志。这篇文章就简单聊聊如何更好的记录操作日志。在参与过不少项目的开发后,大概总结出了下面这么几种记录日志的方式。第一种就是直接调用日志方法,类似下面这种,这类代码在以前的老系统中非常常见,好处是代码清晰,但太冗余了,总不可能每次要记录日志都复制一遍,如
2022-01-18 09:22:06
1649
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
543
原创 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
482
原创 springboot2集成shiro认证鉴权(上篇)
使用shiro有段时间了,相比springsecurity,shiro要更轻量化,虽说功能不及springsecurity那么强大,但也足够用了。本次将记录一下springboot2与shiro的集成过程,将分为三篇来进行讲述,第一篇是项目的基础增删改查,第二篇则是使用session进行认证,第三篇则是去除session,采用无状态的jwt进行认证。由于水平有限,所以对于原理不会太深入讲解,有兴趣的大佬可自行上网搜索。springboot2集成shiro上篇:项目基础环境搭建上篇-项目基础增删改查1、新
2021-12-27 23:11:56
561
原创 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
391
原创 java中执行groovy脚本
1、依赖<dependency> <groupId>org.codehaus.groovy</groupId> <artifactId>groovy-all</artifactId> <version>3.0.9</version> <type>pom</type></dependency>2、工具类package com.example.data
2021-12-05 10:04:53
956
原创 centos7虚拟机搭建k8s集群
一、环境准备准备3台虚拟机,版本为centos7,我这里ip分别为 192.168.133.10、192.168.133.11、192.168.133.12,三台虚拟机的hostname分别设置为k8s-master、k8s-node1、k8s-node2,这样看起来直观一点。可通过hostnamectl set-hostname xxxx来设置hostname,设置完成后,重新连接虚拟机即可。# 将 SELinux 设置为 permissive 模式(相当于将其禁用)sudo setenforce
2021-12-04 20:39:01
630
原创 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
1173
原创 docker环境下mysql主从复制的简单实现
docker环境下mysql主从复制的简单实现主节点配置从节点配置优化主节点配置1、获取mysql5.7镜像docker pull mysql:5.72、创建主节点docker run -d --name mysql-5.7-master \-p 3306:3306 \-e MYSQL_ROOT_PASSWORD="root" \-v /opt/software/docker/mysql-master/conf/:/etc/mysql/conf.d \-v /opt/software/d
2021-10-19 17:43:24
143
原创 常用的JavaScript方法记录
文章目录1、时间格式化2、判断是否是数字类型3、异步4、对象数组排序5、判断字符串与子串6、数组遍历7、对象深浅复制(1)浅复制(2)深复制8、字符串常用操作9、异步10、Object.is(value1:any, value2:any)方法11、对象遍历12、数组操作13、驼峰下划线互转1、时间格式化/** * 时间格式化 * @param fmt 格式:例如 yyyy-MM-dd HH:mm:ss * @param date 时间 * @return {*} 返回格式后的时间字符串 如 20
2021-10-10 16:31:12
100
原创 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
816
1
原创 记一次接口规范导致的反序列化错误问题
最近在对接其他系统的时候,经常出现让人特别无语的情况。研发给的文档中明确指明了返回的数据中某个字段类型是数组,但返回的数据有可能是对象,也可能是空串,造成反序列化失败。研发给的文档中,返回json示例如下:{ "cluster": [ "id": "1", ... ]}于是我建立了下面所示的dto对象来进行接收:@Datapublic class ClusterListDTO implements Serializable { priv
2021-08-16 17:26:03
610
原创 工具类-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
1179
原创 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
17290
13
原创 MySQL事务与锁
本文主要参考于B站视频,记录了事务和锁机制,解释了并发事务带来的问题(脏读、幻读、不可重复读),以及面对这些问题,MySQL InnoDB又是如何处理的。主要讲述的是事务与锁,漏掉的MVCC以后再补上。文章目录一、事务的定义二、事务四大特性(ACID)三、并发事务问题1、脏读(Dirty Read)2、幻读(Phontom)3、不可重复读(Non-repeatable Read)四、事务的四种隔离标准(SQL92 ANSI/ISO标准)1、未提交读(Read Uncommitted)2、已提交读(Rea
2021-05-24 23:25:33
327
原创 MySQL索引
文章目录一、mysql常用引擎二、为何不使用二叉树或红黑树三、B树四、B+树五、树的度(阶)degree六、InnoDB与MyISAM的B+树节点区别七、为啥建议自增主键八、回表九、索引覆盖十、最左匹配十一、索引下推十二、索引长度计算十三、索引匹配方式十四、索引案例1、使用`or`会不会走索引?2、使用`in`会不会走索引3、模糊搜索%会不会走索引?4、存在范围(大于小于)查找时哪些字段走索引?十五、聚簇索引与非聚簇索引十六、索引优化细节参考最近在补mysql索引相关的知识,看了一些视频以及博客,看的同时
2021-05-24 23:17:10
356
原创 rabbitmq3.8.16在centos7中的详细图文安装记录
文章目录一、下载`Erlang`二、下载`rabbitmq 3.8.16`三、安装四、开启图形化管理界面插件五、配置1、安装的新版本,找不到配置文件?2、官网的配置指导说明3、允许`guest`用户从任意网络登录4、添加新用户当今市面上有很多主流的消息中间件,如ActiveMQ、RabbitMQ,Kafka,以及阿里巴巴自主开发RocketMQ等。这些消息中间件各有长短,但如今市面上使用最多的应该还是rabbitmq,社区也十分活跃。这篇文章中就来简单记录下rabbitmq在centos7环境下的安装及配
2021-05-13 22:04:10
1209
3
原创 dubbo常用配置项记录
在这一篇中,对一些个人开发时常用的配置参数进行记录。不保证准确,详情请见官方文档1、启动时检查简单的讲,就是如果A服务依赖了B服务,那么A在启动时会检查B服务能否提供服务,即A服务在启动时能否从注册中心拿到B服务的引用,如果拿不到,则会阻止A服务的启动,默认是开启的。在服务上线的时候,最好开启,能提早发现问题,比如A服务启动时需要通过B服务加载一些数据等,如果B服务没有启动,则A服务没办法加载到数据,即便启动后也是有问题的。springboot中关闭其配置一般使用配置文件的方式:applicati
2021-05-09 10:09:47
140
原创 zookeeper单机安装
一、下载项目地址:https://github.com/apache/zookeeper从文档中可以找到下载地址为:https://zookeeper.apache.org/releases.html如不需要最新版本,则可在该页面上找到各版本下载地址(字体颜色太浅,我一时没找到…):https://archive.apache.org/dist/zookeeper/这里我选择3.4.14版本作为测试使用。wget https://archive.apache.org/dist/zookeeper/
2021-05-08 22:45:16
140
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人