![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
java
文章平均质量分 51
卿者飞翔
九年编码老鸟
展开
-
Spring boot集成easy excel实现导入导出操作
使用easyexcel实现导入和导出确实是非常方便的,同时,easyexcel还支持批量导入和批量导出,确实非常nice。原创 2024-05-28 21:15:40 · 533 阅读 · 0 评论 -
redis实现延时队列的两种方式
背景项目中的流程监控,有几种节点,需要监控每一个节点是否超时。按传统的做法,肯定是通过定时任务,去扫描然后判断,但是定时任务有缺点:1,数据量大会慢;2,时间不好控制,太短,怕一次处理不完,太长状态就会有延迟。所以就想到用延迟队列的方式去实现。一,redis的过期key监控1,开启过期key监听在redis的配置里把这个注释去掉notify-keyspace-events Ex然后重启redis2,使用redis过期监听实现延迟队列继承KeyExpirationEventMessageLi原创 2021-01-29 16:09:09 · 10752 阅读 · 9 评论 -
记录一次kafka消息挤压,磁盘爆满事故
背景事情是这样的,生产的单机kafka有两个队列,消息挤压4个亿,磁盘已经超过98%,眼看服务器就要嗝屁了。这可把我们吓得浑身冷汗,激动不已。二话不说,先关机器,删数据,再起机器。然后就要思考到底是什么问题导致的。改造一kafka的partion数量太少了,竟然配置的是1,我特么真是服了,谁他么配置的参数。就一个partion。虽然消费者,起了三个服务,但是就一个partion,也只能有一个消费者消费呀。所以,二话不说,改造首先给partion数量改为了12,其次,给消费者加了并发4,这样三个服务原创 2021-01-27 10:49:33 · 1971 阅读 · 1 评论 -
闲来无聊手撸(冒泡排序,选择排序,插入排序,快速排序,归并排序)JAVA语言
背景最近临近过年,公司各种工作已经是不太忙碌,就闲来无事,手就有点痒痒。于是就没事儿撸撸各种排序算法,也算排解一下寂寞。一,冒泡排序冒泡排序可以说是最简单的排序方式了,其过程就如同它的名字一样,挨个比较,慢慢移动,把大的或者小的给移动到一端。其动态图如下:冒泡排序的java代码实现也很简单,如下:/*** 冒泡排序 */public static void maoPao(int[] args){ int temp; for(int i =0;i<args.length原创 2021-01-25 15:44:04 · 972 阅读 · 4 评论 -
mybatis分布式主键冲突--解决方式:修改默认雪花算法
背景上一篇 mybatis的分布式主键冲突 中,我提到,解决方式有两种,第二种就是修改默认的雪花算法实现方式,让机器标志不重复。1,分析idworker类如下图所示,idworker类有一个initSequence方法,而雪花算法的机器标志就是由里面的两个参数workerId, datacenterId来组成的。所以,我们只需要自定义workerId, datacenterId这两个值,保证他们不完全一样,那么机器标志就不会重复了。2,自定义workerId, datacenterId我们是在m原创 2021-01-15 09:47:19 · 2672 阅读 · 1 评论 -
mybatis的分布式主键冲突
背景我所在团队的一个项目是微服务架构,同一个服务,会部署多个实例。然后在项目中用的是mybatis的自带的分布式主键想必ID_WORKER这个东东,大家也都不默认,就是雪花算法实现的。雪花算法是由64位二进制数组成的。其中包含时间戳+机器标志+自增序号。理论上,不同机器的机器标志是不同的,也就是说,理论上,雪花算法生成的id是唯一的。但是,机器标志是通过hash算法得到的,这表明,机器标志是有可能重复的。当机器标志重复,那么雪花算法就会出现主键冲突的问题。1,mybatis获取主键可以看到,当标记原创 2021-01-14 10:18:29 · 2245 阅读 · 1 评论 -
mysql和redis实现自定义序号生成
通过redis和mysql实现自定义序号服务背景项目需要序号服务,该序号由标志字母+日期+自增数字。所以,考虑使用redis和mysql的方式去实现它。获取序号通过redis,可以保证线程安全。然后号段通过mysql去操作,对mysql的操作通过redisson分布式锁保证分布式一致性。1,所需环境redis和redisson分布式锁mysqlmybatisPlus2,数据库表CREATE TABLE `t_redis_sequence` ( `biz_tag` varchar(64原创 2021-01-12 13:38:47 · 1187 阅读 · 2 评论 -
一次频繁gc的故障分析
生产上一次频繁gc的故障分析事情是这样的,公司的微服务监控系统显示我所在项目的一个服务频繁掉线。接到这个消息后。首先,我觉得可能是服务器oom内存溢出了。就去查看服务状态,发现服务heap正常,表现出来的效果是正常的,就像没有掉线过一样。然后,直接去找运维,去生产上的容器中,查看服务器状态。1,通过 jps 查到服务进程jps2,通过如下命令查看服务内存状态jstat -gc pid效果如下S0C S1C S0U S1U EC EU原创 2020-11-24 12:24:41 · 2260 阅读 · 1 评论 -
easy excel 实现分页批量导出
easy excel 实现分页批量导出这是工具类核心主要对easyExcel做了易用性的封装,需要导出的话,就继承这个类。@Log4j2public class EasyExcelBaseController<T> { /** * 导出时候 获取某一页的数据. */ protected List<T> getExportPageData(Object condtion, int current ,int size){ r原创 2020-10-15 15:02:01 · 5259 阅读 · 5 评论 -
java下载文件的一个坑点(下载的文件比原文件大,多了几行)
事情的起因是这样的 我这边写了个批量导出csv文件,经过各种测试没问题。然后,功能上线了,用同事写的下载接口。下载下来傻眼了?文件是空白的。真惊出了一身冷汗,各种排查,各种本地复现,我靠,没问题呀。文件都是正常的。(不对,一定有猫腻) 自己又想了想,我自己测,都是在磁盘看的,没有经过同事的下载。而线上是经过同事的下载搞下来的。我靠,我感觉问题已经在那里了,这坑货。绝对下载功能有问题呀。然后去排查下载功能。说理说,下载功能很简单,不应该呀。看了看,一个简单的下载功能,他竟然网关原创 2020-07-16 09:57:06 · 3337 阅读 · 2 评论 -
apollo配置使用,坑点分析
一,配置一定要点发布二,默认的application配置也要点发布三,使用公共配置,一定要关联,这样避免出问题,也比较规范四,yml的格式,最好,提前排错。格式错误,会导致,配置拉不下来五,项目引入多个namespace的配置,如下图。顺序在前的先加载,如果,后面的配置依赖某一个配置,那么依赖的那个配置要在前面。六,配置会在本地缓存,怀疑最新配置没有拉下来,可以找到本地缓存的配置对比一下。ps(位置百度,windows跟linux目录不同)七,apollo支持动态配置,不过,要使用apoll.原创 2020-07-07 14:49:21 · 1609 阅读 · 0 评论 -
文本对比工具哪些好用?竟然有在线的。真香。
1, beyond compare这个确实比较好用,但是,只有试用期,需要破解。不喜欢2,https://www.json.cn/我刚发现,这个json网站,竟然可以比对文本。小惊喜呀。来看一看。json网站地址如下图,右上角的代码对比还别说,挺好用呀。支持两个文件以及三个文件的对比。不错,真香。...原创 2020-07-07 14:34:41 · 1091 阅读 · 0 评论 -
zookeeper集群搭建
一,服务器准备1,准备在下面三个服务搭建zookeeper的三节点集群192.168.1.195192.168.1.196192.168.1.197二,安装过程1,链接: https://pan.baidu.com/s/1KAtNcBNaLtTX_aWIIM2heg 提取码: ggig。下载后,通过xftp上传服务器在/u02目录下解压。三台服务器同样的操作。unzip zookeeper.zip2,进入zookeeper/conf下,修改zoo.cfg配置文件。把下面配置复制到里面。三原创 2020-06-22 14:07:01 · 138 阅读 · 1 评论 -
redis5集群搭建
redis集群搭建一,下载安装redis官方下载地址:https://redis.io/download下载后,通过xftp连接linux服务把安装包放到/usr/local/redis #目录下通过命令,把压缩包解压tar zxvf redis-5.0.7.tar.gz解压后,进入redis-5.0.7目录,执行make。(需要有gcc,没有的话安装gcc)make...原创 2020-02-16 11:54:53 · 105 阅读 · 1 评论 -
redis3集群搭建
redis集群搭建一,集群搭建准备1,准备在这三个服务器,搭个三主的集群10.19.161.19510.19.161.19610.19.161.1972,在家目录下新建redis文件夹,把redis-3.2.9.tar.gz复制到redis文件夹下。cd ~mkdir rediscp ./software/redis-3.2.9.tar.gz ./redis/3,进入red...原创 2020-02-16 11:49:27 · 254 阅读 · 1 评论 -
nacos集群搭建
nacos 集群搭建1,我在这三个服务器搭建nacos集群。后续搭建根据自己服务器的真实ip10.19.161.196 10.19.161.19710.19.161.2392,在root的家目录下,建立 application 目录,然后把nacos解压到这里。如果没有这个安装包,文件夹有,可以通过xftp传过去。cd ~mkdir applicationcp ./softwa...原创 2020-02-16 11:43:58 · 514 阅读 · 0 评论 -
使用nacos配置教程
1,访问nacos网页默认nacos网页为 uat环境地址进入网页,默认账号 nacos 密码 nacos2,配置管理1,页面概述进来页面如下,我已经建立了三个命名空间,dev,test,prod。也在dev命名空间建立了各模块的配置文件。nacos通过命名空间隔离配置和服务。大家如果需要自测,需要自己的配置,可以自己建立自己的命名空间。把配置克隆到自己的命名空间。然后修改自己明明...原创 2020-02-16 11:45:14 · 7326 阅读 · 1 评论 -
IDEA启动web项目页面中文乱码
IDEA启动web项目页面中文乱码1,处理idea控制台乱码在vm options添加 -Dfile.encoding=UTF-8-Dfile.encoding=UTF-82,处理文件编码3,处理 idea的vm options添加-Dfile.encoding=UTF-84,处理tomcat的server.xml添加 URIEncoding=“UTF-8”&...原创 2020-01-31 11:04:22 · 1539 阅读 · 0 评论 -
java生成token和验证token
java生成token和验证token1,登录生成tokenpublic class TokenService { public String getToken(User user) { Date start = new Date(); //一小时有效时间 long currentTime = System.currentTimeMillis() +...原创 2020-01-22 13:58:42 · 2076 阅读 · 0 评论 -
开了hystrix 通过feign调不通服务的一次故障分析
开了hystrix 通过feign调不通服务的一次故障分析一,微服务之间通过feign调用,本来都是正常走通的。在配置了hystrix 之后 就走不通了,只是有了个空指针异常二,通过各种方式的查找,终于发现了问题的地方,代码如下:/** * Feign配置 * 使用FeignClient进行服务间调用,传递headers信息 */@Configurationpublic class...原创 2020-01-22 13:53:05 · 974 阅读 · 0 评论 -
spring实现url路径匹配
spring实现url路径匹配1,要想实现路径匹配,我们需要借助AntPathMatcher,这个是org.springframework.util工具包下的类。2,AntPathMatcher不仅可以匹配Spring的@RequestMapping路径,也可以用来匹配各种字符串,包括文件路径等。基本规则:(1)? 匹配一个字符(除过操作系统默认的文件分隔符)(2)* 匹配0个或多个字符...原创 2020-01-19 20:39:03 · 4712 阅读 · 0 评论 -
java8新特性
目录lambda表达式语法Stream语法一,lambda表达式语法1,lambda初体验维基百科上对于”Lambda expression”的解释:来个例子,对一个list进行排序,可以看到现在变的非常简单List<String> lists = new ArrayList();lists.add("a");lists.add("b");lists.a...原创 2019-12-19 11:55:41 · 116 阅读 · 0 评论 -
SpringBoot与数据访问
SpringBoot与数据访问1、JDBC<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> </dependency> <depend...原创 2019-12-17 16:10:06 · 80 阅读 · 0 评论 -
java把文件流转base64,然后前端展示base64图片
一,java端1,项目是基于springboot的。读取本地图片,转成base64编码字节数组字符串,传到前端。2,这种传输图片的方式可以用于Java后台代码生成条形码二维码,直接转成base64传给前台展示。@RequestMapping("/login") public String login(Map<String ,Object> map){ by...原创 2019-12-14 20:32:42 · 5886 阅读 · 0 评论 -
jenkins之代码推送github触发jenkins自动构建
目录一,jenkins构建触发器二,内网穿透配置三,github配置,实现推送触发构建一,jenkins构建触发器1,我们以“jenkins部署jar包到远程服务器”这个项目为基础,然后进入项目配置。2,在构建触发器部分,我们主要用两种触发器,1,定时构建,2,触发远程构建。这次使用第二种方式。如下图,我们访问http://JENKINS_URL/job/mySpringBoo...原创 2019-12-14 16:08:18 · 1354 阅读 · 0 评论 -
springboot日志相关
springboot日志相关1 日志框架2 SLF4j使用3 SpringBoot日志关系4 SpringBoot日志使用5 SpringBoot切换日志框架一、日志框架小张;开发一个大型系统; 1、System.out.println("");将关键数据打印在控制台;去掉?写在一个文件? 2、框架来记录系统的一些运行时信息;日志框架 ; zhang...原创 2019-12-13 21:33:48 · 101 阅读 · 0 评论 -
jenkins部署jar包到远程服务器
jenkins部署jar包到远程服务器1 安装Publish Over SSH插件2 配置ssh以及jenkins的ssh配置3 jenkins任务的配置4 总结一,安装Publish Over SSH插件,进入插件管理,搜索Publish Over SSH,点击直接安装,不成功就多试几次。二,配置ssh以及jenkins的ssh配置1,在jenkins所在服务器,生成...原创 2019-12-13 20:29:22 · 5838 阅读 · 0 评论 -
jenkins部署war包到远程tomcat
jenkins的tomcat部署一,安装 Deploy to container Plugin1,我们把war包远程部署到tomcat上,需要deploy to container plugin插件。步骤如下:2,搜索自己需要的插件,然后点击安装。不成功就多试几次。二,配置maven,jdk, git1,进入全局工具配置:2,maven配置,maven请自行下载 maven官方...原创 2019-12-13 19:17:07 · 1323 阅读 · 2 评论 -
Jenkins安装教程
Jenkins快速使用教程,远程部署tomcat,远程发布jar包原创 2019-12-12 21:29:48 · 240 阅读 · 0 评论 -
Docker新手入门教程
Docker新手入门教程1、简介Docker是一个开源的应用容器引擎;是一个轻量级容器技术;Docker支持将软件编译成一个镜像;然后在镜像中各种软件做好配置,将镜像发布出去,其他使用者可以直接使用这个镜像;运行中的这个镜像称为容器,容器启动是非常快速的。2、核心概念docker主机(Host):安装了Docker程序的机器(Docker直接安装在操作系统之上);docker客户...原创 2019-12-12 20:57:35 · 309 阅读 · 0 评论 -
springboot配置文件详解
springboot配置文件详解1、配置文件SpringBoot使用一个全局的配置文件,配置文件名是固定的;•application.properties•application.yml配置文件的作用:修改SpringBoot自动配置的默认值;SpringBoot在底层都给我们自动配置好;YAML(YAML Ain’t Markup Language) YAML A Markup...原创 2019-12-12 20:44:26 · 108 阅读 · 0 评论 -
idea 远程调试
本文介绍了远程Debug Java进程的方法。 远程debug的意思是启动一个Java进程,启动一个debugger进程,将两者连接起来,利用debugger来debug Java进程。事实上目前所有的IDE的debug功能都是通过远程debug方式来实现的,它们都利用了一个叫做JDPA(Java Platform Debugger Architecture)的技术。利用JDPA我...原创 2019-01-18 11:41:54 · 1505 阅读 · 0 评论