自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(49)
  • 资源 (1)
  • 收藏
  • 关注

原创 基于AOP思想的查询结果字典翻译-支持多级嵌套翻译

参考easy_trans与JEEG的查询结果翻译思想,结合自身需求编写的适合自身的轻量级easy_trans

2023-07-20 18:01:52 320 1

原创 ThreadLocal使用与原理

在处理多线程并发安全的方法中,最常用的方法,就是使用锁,通过锁来控制多个不同线程对临界区的访问。但是,无论是什么样的锁,乐观锁或者悲观锁,都会在并发冲突的时候对性能产生一定的影响。那有没有一种方法,可以彻底避免竞争呢?答案是肯定的,这就是ThreadLocal。ThreadLocal类允许我们创建只能被同一个线程读写的变量。因此,如果一段代码含有一个ThreadLocal变量的引用,。

2023-06-21 09:56:40 389

原创 解决mybatis-plus updateById方法不能set null

因为 MyBatis-Plus 自带的更新方法,都有对对象空值进行判空。只有不为空的字段才会进行数据更新所以像updateById等方法,在更新时会自动忽略为null的字段,只更新非null字段值但在某些情况下,我们的需求就是将数据库中的值设为null此时mybatis-plus的原生方法将不生效,需要我们手动写set的wrapper或则在xml中写set null的sql但如果表字段非常多则需要写一段又臭又长的东西,还非常耗时。

2023-03-15 12:00:27 2727 1

原创 java程序中使用Runtime.getRuntime().exec(command)执行linux命令不生效

可是我点进去发现Runtime的底层使用的就是ProcessBuilder,并且以我还debug进去看了一下,以我这种写法到底层这里new ProcessBuilder时候的参数和我如果自己直接用ProcessBuilder是一样的。我当时怀疑是自己拼接的命令出错了,于是我将命令复制出来。当时问了一些人,有的说我拼的这么长一个字符串,Runtime.去执行的时候不是像Xshell一样是以eval模式去执行的,将整个字符串当成了命令,建议我用ProcessBuilder。

2023-01-07 17:45:32 2847 1

原创 nginx配置websocket支持wss

正常情况下肯定是能联通的,而ng的作用就是将前端的 wss://172.31.134.17:8440/websocket/${state.taskId} 这个链接转发成 ws://10.128.8.5:18090/websocket/TASK1670828742801 这个链接。下面后红框中的是ssl证书相关的一些东西,这些在配置https的时候再ng里已经配置了,所以我不去动他(左边是我的配置)这里简单描述一下wss和ws的区别,就和https和http一样,一个是安全的一个是非安全的。

2022-12-13 16:29:20 11215 1

原创 基于Redisson实现的延时队列RedissonDelayedQueue实现websocket服务端心跳监听

基于Redis的Redisson分布式延迟队列(Delayed Queue)结构的 RDelayedQueue。Java对象在实现了RQueue接口的基础上提供了向队列按要求延迟添加项目的功能。该功能可以用来实现消息传送延迟按几何增长或几何衰减的发送策略。常用的使用场景:订单的支付超时关闭、订单签收超x天自动好评、商家超时未接单自动取消等。

2022-11-04 14:37:40 2165

原创 SpringBoot WebSocket做客户端

常见的都是springboot应用做服务,前端页面做客户端,进行websocket通信进行数据传输交互。但其实springboot服务也能做客户端去连接别的webSocket服务提供者。刚好最近在项目中就使用到了,需求背景大概就是我们作为一个java段应用需要和一个C语言应用进行通信。在项目需求及环境等多方面的考量之下,最后放了使用http协议和C程序进行通信转而使用webSocket,然后在C侧开发人员的要求下,由他们做服务端,我们做客户端。

2022-10-26 14:49:07 7432 7

原创 SpringBoot WebSocket做服务端

/也可以使用线程安全的map,在key中存放客户端连接的id等表唯一的东西,在发消息时可以精确取到和那个客户端的连接,不用群发消息。//concurrent包的线程安全Set,用来存放每个客户端对应的MyWebSocket对象。//静态变量,用来记录当前在线连接数。应该把它设计成线程安全的。//与某个客户端的连接会话,需要通过它来给客户端发送数据。

2022-10-26 14:44:22 758

原创 记一次生产内存溢出分析解决

打开日志一看GC回收不到内存,内存溢出了虽然说这种情况重启服务就能暂时解决,但是如果不找出根源问题,修改代码。那么即使重启了,也还会再次出现。

2022-08-04 09:36:42 216

原创 java导出word表格 行列合并

新建模板如下(使用offic,不要用wps)另存为xm格式将文件放入resource/template目录下,复制一份,将后缀名改为ftl,也可以不复制直接改后缀名(这里忽视我其他的一些测试模板)打开ftl文件,我们的占位符可能会错位,将他们放到一起(一定不要改动标签)准备数据生成word对模板做如下更改找到 w:tr 这个标签,这个标签代表表格里的行,用 标签将其包住。 标签代表一个集合,并会循环遍历这个集合。 as l 表示给这个集合取了个别名,stu......

2022-07-05 17:29:39 2500

原创 java导出word并向导出的word中添加附件

word可以转换为xml格式(另存为的时候可以选择文件类型)当转换为xml格式后我们可以发现在附件位置存储的其实是附件的base64字符串。因此,我们可以在模板中添加一个附件作为占位,而后我们将模板中占位的附件base64字符串替换为我们真正需要的字符串,就能达到添加附件的效果准备word模板准备word模板(使用office的word,使用wps保存出来的xml格式与office不同,暂未测试wps的是否可行)将上面的模板另存为xml格式打开转换为xml格式的word模板,在需要动态写入的

2022-06-27 14:46:25 3793 15

原创 设计模式-策略模式详解

换一种说法就是:一个类的行为或其算法可以在运行时更改。我们把它降维到代码层面,用人话翻译一下就是,运行时我给你这个类的方法传不同的“key”,你这个方法会执行不同的业务逻辑。细品一下,这不就是 if else 干的事吗?举个实际的例子:审核流程,请假和调休都是提交审核>审批,这个审批的时候要干的事就不同了。如果你传的Type是请假,诶!那就要扣你工资了,起码全勤是没了。...

2022-06-10 17:56:21 720

原创 自定义异常的统一异常处理

一个前端请求过来,后端执行相关业务逻辑时通常需要做许多校验判断,当数据正常且符合要求时才能执行相关操作。在校验的过程中,如果发现不校验不通过,需要返回前端相关的校验失败信息展示给用户。如果是自己写到返回值里的话太麻烦,直接抛出异常使接口500又不太符合逻辑,毕竟只是业务校验失败。通常我们的做法是自定义一个业务异常,然后抛出这个自定义异常,在接口返回前对异常进行捕获处理。这样一来,接口返回状态是200,错误信息也带给了前端,也不需要我们自己一个个慢慢设置返回的值。先看demo,再细说创建一个自定义异常类

2022-05-11 18:02:08 350

原创 Spring自带的线程池ThreadPoolTaskExecutor

ThreadPoolTaskExecutor类,其本质是对java.util.concurrent.ThreadPoolExecutor的包装。这个类则是spring包下的,是Spring为我们开发者提供的线程池类Spring提供了xml给我们配置ThreadPoolTaskExecutor线程池,但是现在普遍都在用SpringBoot开发项目,所以直接上yaml或者properties配置即可,或者也可以使用@Configuration配置也行,下面演示配置和使用。配置application.pro

2022-04-26 13:58:52 3619

原创 CompletableFuture学习记录

CompletableFuture字面翻译过来,就是“可完成的Future”。同传统的Future相比较,CompletableFuture能够主动设置计算的结果值(主动终结计算过程,即completable),从而在某些场景下主动结束阻塞等待。而Future由于不能主动设置计算结果值,一旦调用get()进行阻塞等待,要么当计算结果产生,要么超时,才会返回。下面的示例,比较简单的说明了,CompletableFuture是如何被主动完成的。在下面这段代码中,由于调用了complete方法,所以最终的打印结

2022-04-24 14:26:56 634

原创 Future异步任务

CompletableFuture实现了CompletableStage接口和Future接口,前者是对后者的一个扩展,增加了异步回调、流式处理、多个Future组合处理的能力,使Java在处理多任务的协同工作时更加顺畅便利。先看一下传统线程池执行异步线程,获取线程处理结果的方式。public static void main(String[] args) throws Exception { // 创建异步执行任务: ExecutorService executorService= E

2022-04-24 14:09:52 895

原创 踩坑记录:es中存在数据,查询却无数据

问题情况大概是这样的新需求,新建了一个索引,往索引里入了点数据后开始写查询接口。CRUD接口嘛,我的拿手绝活,刷刷两下就写好了。然后开始测试,发现死活查不出数据来,接口也没报错。然后我打印出了生成的查询语句用elastic-head查询这不没毛病吗?我当时整一个人就是懵逼的解决反复各种检查,都没发现任何问题,连的也都是同一个库。后来询问大佬终于找到了解决方案,吧索引删除一次重新建就OK了。至今也不知道为啥,但是这么做就好了。...

2022-04-13 15:11:36 6983 4

原创 定时任务监控(二)-xxl-job

概述XXL-JOB是一个分布式任务调度平台,其核心设计目标是开发迅速、学习简单、轻量级、易扩展。现已开放源代码并接入多家公司线上产品线,开箱即用。

2022-01-17 11:19:54 3004 2

原创 定时任务监控(一)-Quartz

前言为了方便对对公司的定时任务进行监控与管理,决定对定时任务服务进行改造升级,开发一个可视化的定时任务监控管理平台。由于公司定时任务是使用的是Quartz,所以我们首先对Quartz的监控管理平台进行了预研。这里先说一下最后的结果,选用的是xxl-job替代Quartz。期间还预研了elastic-job,在多方对比之下选择了使用xxl-job替换Quartz。这样做的理由是替换成本低,定时任务逻辑方法不用做任何代码更改xxl-job提供自带的定时任务监控管理界面对于elastic-job的分片

2022-01-13 14:18:38 4353 1

原创 利用Gitee保存、同步IDEA配置 2019.3

我的IDEA版本:2019.3IDEA提供了一个功能,可以将配置上传到远程git仓库上。后期如果换电脑或是重装系统了什么的,可以直接从远程仓库再拉过来,就不用自己再去一个个配置了。步骤如下:看到下面这个框应该就很清晰明了,把git仓库的地址填写进去。一个是同步本地配置到远程仓库,一个是从远程仓库拉去配置。下面测试一下是否真的有效先将配置推到远程仓库然后我们随便找一个快捷键配置删除掉然后从远程把配置拉回本地在去看下我们刚刚删除的快捷键配置是否回来了...

2021-09-09 10:40:01 413 1

原创 validation校验 @NotNull @NotBlank及分组校验

我们经常需要对接口的请求参数进行校验,在没有使用validation之前都是用if去做校验的,但这样通常需要写一长串的if语句,使代码看起来非常臃肿,即使将这些校验封装到一个方法或是类中,然后调用,但本质上并没有改变什么。validation校验可以方便的解决上述问题,只需在请求参数的DTO类的属性上加上对应的注解。它就能帮助我们在执行接口方法之前提前进行参数校验。我们常用的校验如判空@NotNull @NotBlank,或是对参数的大小、长度等都能进行校验,甚至可以使用正则表达式。使用时只需在DTO上

2021-09-07 15:14:54 4329 2

转载 四种线程池的使用

四种线程池Java通过Executors提供四种线程池,分别为newSingleThreadExecutor 创建一个单线程化的线程池,它只会用唯一的工作线程来执行任务,保证所有任务按照指定顺序(FIFO, LIFO, 优先级)执行。newFixedThreadPool 创建一个定长线程池,可控制线程最大并发数,超出的线程会在队列中等待。newScheduledThreadPool 创建一个可定期或者延时执行任务的定长线程池,支持定时及周期性任务执行。newCachedThreadPool 创

2021-07-26 16:23:44 122

原创 redisson 分布式锁

1

2021-07-22 17:38:34 467

原创 springboot ApplicationEvent事件监听与异步

package com.eseasky.k8s.support.manage.service.event;import com.eseasky.protocol.support.entity.dto.complaint.ComplaintDTO;import org.springframework.context.ApplicationEvent;public class ComplaintEvent extends ApplicationEvent { private Complain

2021-07-21 14:40:27 3760

原创 java.util.properties 读取配置文件

package com.eseasky.data.center.hwpub.service.util;import lombok.extern.log4j.Log4j2;import java.io.*;import java.nio.charset.StandardCharsets;import java.util.Properties;@Log4j2public class HwErrorPropertiesUtil { private static Properties p.

2021-07-21 14:40:17 371

原创 记一次学习Activiti7&SpringBoot

pom依赖主要引入activiti依赖于jdbc和mysql依赖<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https:

2021-04-28 19:38:41 222

原创 缓存注解@Cacheable、@CacheEvict、@CachePut && SpringBoot && Redis

@Cacheable、@CacheEvict、@CachePut为Spring自带缓存,可作用在方法和类上。作用在方法上时,只对方法生效,作用在类上时,对类中所有方法生效。没有集成Redis时,默认缓存为内存。集成Redis后,缓存内容将存入Redis。SpringBoot项目在pom中引入Redis包并在application配置文件中配置后。在启动类上加上@EnableCaching注解 自动生效,缓存存入Redis<dependency> <groupId>or

2021-04-22 17:46:11 317

原创 java 图像识别OCR(二) 百度API

百度文档关于依赖/** * 重要提示代码中所需工具类 * FileUtil,Base64Util,HttpUtil,GsonUtils请从 * https://ai.baidu.com/file/658A35ABAB2D404FBF903F64D47C1F72 * https://ai.baidu.com/file/C8D81F3301E24D2892968F09AE1AD6E2 * https://ai.baidu.com/file/544D677F5D4E4F17B4122FBD60...

2021-04-18 14:18:07 597

原创 java 图像识别OCR(一) tess4j

前段时间公司上面突然下来个需求,根据用户提供的身份证和营业执照图片,获取图片中的信息(就是姓名、身份证号、公司名称啥的),然后存入数据库。然后给的时间是两周,当时我就懵逼了,还好后面补了句尽量用免费的API。虽然我内心是想直接用付费的,付费的肯定用着简单又舒服。但免费的也还是得先研究一下,在网上搜索了一圈,基本上只有tess4j这一个了。直接上代码看效果了,老实说看了这么多资料对于tess4j我了解的还是不多。。。pom依赖<dependency> <groupId&gt

2021-04-18 14:17:57 5883 10

原创 Spring-Cloud-Stream & RocketMQ 简介及简单demo

Spring Cloud Stream 在 Spring Cloud 体系内用于构建高度可扩展的基于事件驱动的微服务,其目的是为了简化消息在 Spring Cloud 应用程序中的开发。Spring Cloud Stream的核心构件是:Destination Binders: 负责提供与外部消息系统集成的组件。Destination Bindings: 作为消息中间件与应用程序的提供者和消费者之间的桥梁。Message: 生产者和消费者用于与目的地装订器沟通的典型数据结构(从而通过外部消息系统与

2021-04-07 18:14:50 920

原创 ElasticSearch整合springboot常用CRUD

参考环境准备参考springboot整合参考环境ElasticSearch 6.2.2springboot 2.1.1.RELEASE数据准备下载之后执行如下命令导入成功如下图所示项目搭建pom<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-i

2021-03-27 17:11:08 184

原创 List取交集、并集、差集

突然被面试官问到这样一个问题,List怎么取交集。我想了一会后说道双重循环?自己都觉得面试官想要的答案应该不是这个,效率太低了。后面问面试官答案,面试官告诉我可以将其中一个llist转成一个map,再遍历第二个list的时候判断,map中是否存在该元素,这样就可以求出交集。可以省去很多比较,速度是绝对快很多。public static void main(String[] args) { List<String> listA = new ArrayList<Strin

2021-03-11 11:26:21 17848

原创 oracle行转列 pivot函数

前段时间项目做一个报表,需要将行转成列,在网上搜索学习一波后完成了项目任务。现在回顾做个笔记,留待后续回顾见了一张测试表如下(随便记载一下,就没设主键啥的了)随便插一些数据SELECT * FROM T_M_Z_TEST112 PIVOT( MAX(NAME) 零件名称,MAX(PRICE) 零件价格 FOR TYPE IN ( 'A' AS A, 'B' AS B )

2021-03-08 16:03:46 246 1

原创 Nginx学习笔记 基于docker

根据B站视频做的笔记,链接如下2020最新 Nginx教程全面讲解(Nginx快速上手)Nginx介绍1.1引言为什么要学习Nginx问题1:客户端到底要将请求发送给哪台服务器问题2:如果所有客户端的请求都发送给了服务器1问题3:客户端发送的请求可能是申请动态资源的,也有申请静态资源的服务器搭建集群后在搭建集群后,使用Nginx做反向代理1.2Nginx介绍Nginx是由俄罗斯人研发的,应对Rambler的网站并发,并且2004年发布的第一个版本Nginx的特点1.稳定

2021-01-13 14:06:11 7355 20

原创 SpringBoot JavaMailSender 发送邮件

这里使用的qq邮箱作为收件人,结果被坑惨了。刚开始收到的邮件都是破图,查看源码发现src也没有没有图片地址,回去看了一波代码,好久之后终于发现破图的原因了:qq邮箱默认把我的图片屏蔽掉了,然后在收件人下方、正文上方有一行黄色的警告,点击信任此邮箱,我的天,终于看见图片了。参考:使用Spring Boot发送邮件...

2020-10-16 15:12:07 275 5

原创 easy poi 实现Excel文件的导入导出(SpringBoot整合)

easypoi功能如同名字easy,主打的功能就是容易,让一个没见接触过poi的人员 就可以方便的写出Excel导出,Excel模板导出,Excel导入,Word模板导出,通过简单的注解和模板 语言(熟悉的表达式语法),完成以前复杂的写法......

2020-09-15 09:33:36 2383 1

原创 DTO、VO、POJO、PO、entity到底用哪个?相互之间如何转换?BeanUtils.copyProperties的使用

entity:与数据库字段对应,和数据库交互的对象PO:和entity一样VO:和视图交互的对象DTO:传输时的中间对象POJO:简单无规则纯的传统意义的java对象、只有属性字段及setter和getter方法分出这么多种实体类型的好处是各个不同的层与别的层之间进行交互时拥有固定的类型,当某一个层的需求发生变化时,修改对应的实体对象即可,不会影响到其他层。举个例子,DAO层通过entity与数据库进行交互,从数据库获取到的对象传到controller后悔转换成VO对象与视图层进行交互,这时如果

2020-09-04 15:18:37 2491

原创 mybatis-plus学习笔记-实现CRUD及条件分页查询

先来看看官网对mybatis-puls的介绍MyBatis-Plus(简称 MP)是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。特性无侵入:只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑损耗小:启动即会自动注入基本 CURD,性能基本无损耗,直接面向对象操作强大的 CRUD 操作:内置通用 Mapper、通用 Service,仅仅通过少量配置即可实现单表大部分 CRUD 操作,更有强大的条件构造器,满足各类使用需求支持

2020-09-02 14:20:48 827

原创 2020 阿里巴巴 java开发手册1.6.0 泰山版 下载

阿里巴巴的java开发手册官网下载地址进入之后点击图片就能下载了封面帅的不行会当凌绝顶,一览众山小 。这气势也只有阿里才能有了吧干货满满,都是关于代码规范等问题,现在许多公司都在参考使用阿里的java开发手册,我们公司也在用。建议学习,代码规范了看着总是舒服的,没毛病。...

2020-08-21 15:17:00 212

原创 Postman下载、使用教程

Postman介绍Postman是google开发的一款功能强大的网页调试与发送网页HTTP请求,并能运行测试用例的的Chrome插件。(现在的最新版已是一个独立的app)其主要功能包括:模拟各种HTTP requests从常用的 GET、POST 到 RESTful 的 PUT 、 DELETE …等等。 甚至还可以发送文件、送出额外的 header。Collection 功能(测试集合)Collection 是 requests的集合,在做完一個测试的時候, 你可以把這次的 request 存

2020-08-10 17:21:57 4277

curl.rar ElasticSearch 批量导入一批数据

ElasticSearch 批量导入一批数据 解压后再当前位置命令行执行命令

2021-03-27

空空如也

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

TA关注的人

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