自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 解压嵌套zip文件

将压缩文件解压到本地磁盘,然后再遍历本地磁盘文件进行上传到云服务,上传完再进行删除本地磁盘文件

2024-03-18 09:53:49 791

原创 mongo数据源配置与运用

mongo数据源配置

2024-03-08 17:58:41 297

原创 assembly打包,多yml文件合并为一个yml文件

maven-assembly-plugin 多文件合并

2024-02-23 17:11:53 780

原创 多微服务合并为一个服务

多微服务合并为单体工程

2024-02-22 16:32:23 2367 1

原创 远程调用,参数压缩问题

Errorwhileextractingresponsefortype

2023-11-07 16:30:00 177

原创 发布用户同步事件,事务问题处理

TransactionPhase.AFTER_COMMIT

2023-10-25 14:54:45 95

原创 库表字段加密存储,查询解密

首先需要创建个加密注解,在需要加密的字段上加上该注解,然后在拦截器那里判断是否存在该注解,有的话即进行加密处理即可,查询时,判断值是否存在加密标识的,有就进行解密即可啦。

2023-10-25 14:36:38 170

原创 初始化大量存量数据,分批多事务提交处理

项目上有国密需求,对接第三方密码机对数据进行加解密,如数据机密性、完整性等,然后服务启动时得初始化好存量数据。刚开始没考虑那么多,就直接把还没初始化的数据查出来进行初始化,后来部署到现场测试环境之后,数据有几万条,密码、业务数据、用户重要数据、日志等都需要进行加密等处理,初始化太慢了,最重要的是,最后一条数据加密失败了,那么之后加密的那些全部失效了,因为还没提交事务。最后改为分批处理,多事务提交,互不影响,就算最后一批加密失败,不影响其他批次。//处理密码加密初始化。//多线程、新事物处理加密、保存。

2023-10-25 14:27:57 89

原创 maven导入第三方jar包,出现找不到类

maven导入第三方jar包,出现找不到类

2023-01-09 17:40:27 4338 1

原创 redis分布式锁

分布式锁的概念:为了控制分布式系统或不同系统之间共同访问共享资源的一种锁实现。如果不同的系统或同一个系统的不同主机之间共享了某个资源时,往往需要互斥来防止彼此干扰来保证一致性。为了保证一个代码块在同一时间只能由一个线程访问,它是控制分布式系统之间互斥访问共享资源的一种方式。保证多个服务之间互斥的访问共享资源,如果一个服务抢占了分布式锁,其他服务没获取到锁,就不进行后续操作。分布式锁的特点:1、互斥性:同一时刻只能有一个线程持有锁2、可重入特征:同一节点上的同一个线程如果获取了锁之后能够.

2021-04-07 09:55:25 133

原创 接口等幂性实施策略

什么是等幂性?数学概念:即 f(n) = 1^n ,无论n为多少,f(n)的值永远为1。表示N次变换和1次变换的结果是相同的。编程领域:是指用户对于同一操作发起的一次请求或者多次请求,接口最终得到的结果是一致的。其任意多次执行对资源本身所产生的影响均与一次执行的影响相同。就是接口可重复调用,在调用方多次调用的情况下,接口最终得到的结果是一致的。有些接口可以天然的实现幂等性,比如查询接口,对于查询来说,你查询一次和两次,对于系统来说,没有任何影响,查出的结果也是一样。除了查询功能具有天然的幂等性之

2021-04-06 16:30:40 166

原创 Proxy代理模式

在下图中,可以看到有一个RealSubject,这个对象是目标对象,而在代理模式的设计中,会直接设计一个接口和目标对象一致的代理对象Proxy,他门都实现了Subject的request方法。在这种情况下,对目标对象的request调用,往往就被代理对象给拦截了,通过这种拦截,为目标对象的方法做了铺垫,所以称之为代理模式。在Proxy的调用过程中,如果客户调用Proxy的request方法,会在调用目标对象的request方法的前后调用一系列的处理,而这一系列的处理对于目标对象来说是透明的,目标对象

2021-04-02 12:42:36 197

原创 接口参数签名验证

与第三方对接时,会存在请求参数是否被篡改的问题,这时,我们就得进行接口签名验证,防止请求参数被篡改进而影响请求结果。参数签名算法:1、请求参数名的字母按照升序进行非空排列,使用URL键值对的格式(key1=value1&key=value2...),拼接成字符串stringA;如:请求参数{alterFld=null,reqTm=29, characterSet=00, onStationId=262019},排列之后stringA={characterSet=00&onStat

2021-03-29 09:53:18 1018

转载 Jsp解析

JSP起源在很多动态网页中,绝大部分内容都是固定不变的,只有局部内容需要动态产生和改变。如果使用Servlet程序来输出只有局部内容需要动态改变的网页,其中所有的静态内容也需要程序员用Java程序代码产生,整个Servlet程序的代码将非常臃肿,编写和维护都将非常困难。对大量静态内容的美工设计和相关HTML语句的编写,并不是程序员所要做的工作,程序员对此也不一定在行。网页美工设计和制作人员不懂Java编程,更是无法来完成这样的工作。为了弥补Servlet的缺陷,SUN公司在Servl...

2020-11-13 15:53:15 639

转载 socket解析

对TCP/IP、UDP、Socket编程这些词你不会很陌生吧?随着网络技术的发展,这些词充斥着我们的耳朵。那么我想问:1.什么是TCP/IP、UDP?2.Socket在哪里呢?3.Socket是什么呢?4.你会使用它们吗?什么是TCP/IP、UDP?TCP/IP(Transmission Control Protocol/Internet Protocol)即传输控制协议/网间协议,是一个工业标准的协议集,...

2020-11-05 15:36:22 177

原创 本地安装kafka和使用

下载安装包,我用的是kafka_2.12-2.3.0,提取码:05jw

2020-09-11 15:01:36 1050 1

原创 闲谈

觉得掌握了一门知识,最主要的是会灵活运用它,如果你知道了这门技术、知识,但是不会运用,也是没用的。所以觉得一个优秀的开发人员,最看重的应是会不会灵活运用知识、技术,第二才是看他掌握的知识点吧,因为知识点谁都可以学,但不是每个人都能灵活运用得到。 一、比如redis里的setnx(String , String)这个知识点,我们都知道它是设置一个值在内存里,设置成功,返回 1 ...

2019-12-26 10:34:47 258 1

原创 springboot使用aop切面做用户操作日志记录

用户操作日志不过就是记录访问用户的ip,访问了啥,访问时间而已。然后想想每访问一个接口就要记录一次,难道是在每个接口都要new一个日志类,然后设置值,之后就save?要是有几十个接口,就在这几十个接口里都写上日志入库逻辑?而且是日志入库逻辑都是一样的。那想想,我可不可以就写个通用的日志入库逻辑方法,然后在每个接口执行之前都先执行这个日志入库逻辑方法,那就不需要每个接口都写上日志入库逻辑类了,只需要...

2019-08-02 11:17:58 6573 3

原创 OA系统请假,出差等流程审批解析

最近带领两个实习生一起开发公司OA系统,其中对流程审批这一块的开发感触还挺大的。下面来说说流程审批。流程审批无非就是你提交申请之后,就会有第一个负责人去审批,第一个负责人审批通过之后,就再由第二个负责人审批,再之后就由第三个负责人去审批.....。现在是怎么去找第一个负责人,第一个负责人审批通过之后怎么去找到第二个负责人。然后我们这时候可以想到链,节点就是审批负责人,然后每个节点由指针连在一起...

2019-07-31 10:15:11 9076 5

原创 分布式下hashMap陷入死循环问题

HashMap数据结构我需要简单地说一下HashMap这个经典的数据结构。HashMap通常会用一个指针数组(假设为table[])来做分散所有的key,当一个key被加入时,会通过Hash算法通过key算出这个数组的下标i,然后就把这个 插到table[i]中,如果有两个不同的key被算在了同一个i(因为一些值的hash算法的结果值是一样的,所以以下标也就一样了),那么就叫冲突,又叫碰撞...

2019-07-03 17:36:19 398

转载 springmvc运行流程分析,并手写出spring框架

该文章主要是分析Springmvc启动的流程(配置阶段、初始化阶段和运行阶段),可以让自己对spring框架有更深一层的理解。对框架比较感兴趣的朋友都可以了解阅读下,对于我所描述的内容有错误的还望能不吝指出。对于springmvc中的整个流程我个人把他分为这几个阶段,包括个人手写的spring也是参照此按阶段实现:1.配置阶段根据web.xml ,先定义Dispatcher...

2019-06-26 10:33:52 187

转载 servlet到底是什么

servlet到底是什么?对于这个问题一直云里雾里的,今天打算刨根问底。一、Servlet简介  Servlet是sun公司提供的一门用于开发动态web资源的技术。  Sun公司在其API中提供了一个servlet接口,用户若想用发一个动态web资源(即开发一个Java程序向浏览器输出数据),需要完成以下2个步骤:  1、编写一个Java类,实现servlet接口。  2、把开发好...

2019-06-19 14:10:13 201

原创 socket简述

就是我们发送一条数据给另一个主机的应用程序,其实有ip和端口就可以了,这里我们可以调用socket接口进行发送,不过这里发送的数据只能是字节形式,但是使用http的话,发送的是各种数据形式,到时候http协议会定义数据格式,并按照对应的格式解读数据。socket可以使一个应用从网络中读取和写入数据,不同计算机上的两个应用可以通过连接发送和接受字节流,当发送消息时,你需要知道对方的ip和端口。...

2019-06-03 15:16:19 399

转载 tcp/ip简述

协议是啥呀,就是定了一些规范,然后每个人都根据这些规范去处理问题啊,如果没有规范的话,每个人各做各的,到时候怎么去统一,岂不是都乱套了,比如加密解密,现在某份报文规定了使用md5加密,然后解密人使用md5解密就可以啦。如果不规定这份协议的话,加密人用其他加密方式,然后解密人又用其他解密方式,岂不是都解不了。所以就定了一份协议,大家都知道然后都遵守,事情就简单多了。首先是tcp/ip协议,tcp...

2019-06-03 11:50:07 339

原创 使用BlockingQueue、@Async、Future、CountDownLatch解决高并发解析。

BlockingQueue:是一个阻塞队列,队列空间满了就阻塞起来,不能再往里面放数据,等有空间了再放,比如初始化大小为1的队列,就是只能往里面put一个数据进去,当此时再往里面put时,该put线程就会被挂起,添加的元素会被放在notFull的队列中等待,当队列poll()获取并移除数据之后,就有空余了,put线程会被唤醒,然后从notFull中依次put进去。这个我们可以在抢购中去使用,比如当...

2019-05-17 16:38:31 1467

原创 日志服务 elk

我们使用微服务开发,一般都会进入集群部署场景,日志文件就会散落到多个服务器上,这时我们要查看日志时,都要到对应的服务器上看,这样子很麻烦,所以得把日志全部归到一个地方去,统一管理,这样就方便查找等了。不需要到处跑。这里主要用到的是ELK系统,对应elasticsearch、logstash、kibana这三个系统的首字母。首先这就是一个日志系统:elasticsearch:简单来说...

2019-04-25 17:14:40 342

原创 POI导出excel

业主有个需求说是能把数据导出到excel来看,这里我用到了poi。其中poi是一套用于访问微软格式文档的Java API。poi有很多组件组成,其中有用于操作excel格式文件的HSSF和用于操作Word的HWPF。下面我们介绍poi中的HSSF的各组件和相关实例。HSSF(用于操作excel的组件):HSSFWorkbook excel的文件对像。就是我们桌面右键新建exc...

2019-03-22 11:10:12 199

原创 ArrayBlockingQueue简述

阻塞啥意思啊?顾名思义就是队列空间满了就阻塞起来,不能再往里面放东西呀,等有空间了再放呀。ArrayBlockingQueue是一个数组阻塞队列。啥意思?就是这是一个队列,然后是以数组的方式存储数据。看,这就是一个整型大小为5的数组阻塞队列,里面已经存了3个元素了,再往里面添加2个就满了。之后再添加的话,该put线程就会被挂起,添加的元素会被放在notFull的队列中等待,当队列有空余...

2019-03-19 16:34:41 378

原创 Kafka简述

Kafka和RabbitMQ一样,是个消息服务,差不多就是个消息代理,接收和转发消息(接收-存储-转发),差不多是一个具有存储功能的对列。就是生产者(发布者)往里面发送消息,相当于往里面放数据,然后消费者(订阅者)往里面拿对应消息出来处理。生产消费者模式(数据接入):就比如每刷卡进入一个乘客,闸机就会上传交易数据上来,数据上报接口拿到数据后就会放到对列中就立即返回,然后数据处理接口则从对列中取...

2019-03-18 14:02:04 223

原创 cookie简述

当一个系统有多用户时,或是淘宝这些多用户的,登录之后,发一个请求时,我们怎么知道是哪个用户发的,加入购物车时,怎么知道是哪个用户加的?所以就会引入cookie。把用户登录后的一些信息放进cookie里面,这个信息能唯一识别是哪个用户的。然后每次客户端发请求时都会带上这个cookie的,然后我们判断cookie里的信息就会知道是哪个用户了。cookie是请求头里面的一个属性吧,能存数据的。下面就...

2019-03-07 17:59:26 313

原创 ObjectMapper 类简单解析

ObjectMapper  一般用于json和对象的转换。直接上代码: public class ObjectMapperTest {     public static void main(String[] args) throws IOException {         ObjectMapper mapper = new ObjectMapper(); ...

2019-02-19 10:50:53 713

转载 8583报文的使用和解析

ISO8583报文(简称8583包)又称8583报文是一个国际标准的包格式,最多由128个字段域组成,每个域都有统一的规定,并有定长与变长之分。8583包前面一段为位图,用来确定包的字段域组成情况。其中位图是8583包的灵魂,它是打包解包确定字段域的关键,而了解每个字段域的属性则是填写数据的基础。在POS机的开发上时经常要用到,例如回头客会员管理系统在POS机上的应用就是采用8583报文。...

2019-02-19 09:12:04 10707

转载 轻松掌握ISO8583报文协议

我刚进入金融行业时,就知道了IS08583报文协议,我想可能我还没进入这个行业都已经听过了,可知ISO8583的影响力有多大了。最初刚接触它时,确实对其中的一些细节概念不是很清晰,对有些地方比较迷惑。鉴于此,我想很多同行也必然会经历同样得阶段,所以我写下本文,以便大家能够少走一些弯路。同时,我在网上(http://blog.csdn.net/lysheng/archive/2005/03/03/3...

2019-02-19 09:10:06 154

原创 JPA的select new map()用法

使用select new map()可以优化查询语句,还能更好的查询一些语句。传统查询语句: public interface LineRepository extends JpaRepository<Line, String> {     Line findOne(String startNumber);          @Query("selec...

2019-02-17 14:27:13 6079

原创 线程安全的方式操作 AtomicInteger

在Java语言中,++i和i++操作并不是线程安全的,在使用的时候,不可避免的会用到synchronized关键字。而AtomicInteger则通过一种线程安全的加减操作接口。来看看Integer和AtomicInteger的自增操作: 使用Integer的时候,必须加上synchronized保证不会出现并发线程同时访问的情况,而在AtomicInteger中却不用加上synchr...

2019-01-16 10:52:12 199

原创 Callable和Future创建多线程

我们知道创建线程的2种方式,一种是直接继承Thread,另外一种就是实现Runnable接口。 但是这2种方式都有一个缺陷就是:在执行完任务之后无法获取执行结果。 如果需要获取执行结果,就必须通过共享变量或者使用线程通信的方式来达到效果,这样使用起来就比较麻烦。但是从Java 1.5开始,就提供了Callable和Future,通过它们可以在任务执行完毕之后得到任务执行结果。runna...

2019-01-15 18:14:36 505

原创 Comparator一些简单的实例

 今天组长分配这样一个任务给我:编写一个设备列表接口,列表里有在线设备和离线设备,其中当endTime为空时,就是离线设备。当endTime不为空就是在线设备,返回的列表是:最新离线设备在前面然后才是最新在线设备。其实意思就是当endTime==null,以startTime降序。当endTime!=null,以endTime降序。这里我使用Comparator进行列表分组排序。java.ut...

2018-12-06 15:50:45 384

原创 Springboot整合Spring-data-jpa用法

在pom.xml文件加依赖: 写数据库配置: 在application.properties中加入数据库配置文件: 实体类: import java.io.Serializable; import java.util.Date; import javax.persistence.Column; import javax.persistence....

2018-11-20 16:36:42 175

原创 redis中的incr和incrBy

今天遇到这样几个例子,(1)闸机上传一条交易数据时,接收流水号(不是主键)就在原来基础上自增,并且每天更换。(2)每次上传出站交易数据,闸机都要累计交易金额。这两个例子都可以用incrBy,或是例(1)用incr。下面来看看incr和incrby的源代码和解释说明:incrby:其中key就是redis中的键,将key所存储的值加上增量interger。如果key不存在,那么key...

2018-11-15 09:53:47 6123

原创 OkhttpClient工具类

public class OkHttpUtils {    private String baseUrl = "https://monitor.api.qcloud.com/";    private static OkHttpClient mOkHttpClient;    private Request.Builder requestBuilder;    private String...

2018-11-08 13:59:08 1405

空空如也

空空如也

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

TA关注的人

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