自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 spring异步@Async方法request丢失的问题处理

此时有两种解决方式,一是在主线程中调用request.startAsync,然后再子线程中调用asyncContext.complete方法,但是这会导致request被占用,有性能的问题。spring的request实际上是重复利用的,在调用异步进程的时候,主线程先结束就会回收request,而异步线程中将会失去request或者获取其他请求的request。二是创建一个自定义的request传入异步线程中,这样就不会跟其他请求相互影响。然后在异步线程池方法中使用传入自定义的request。

2024-04-19 15:53:20 558 1

原创 导出Mysql数据库表名和字段并合并成一个word

导出Mysql数据库表名和字段并合并成一个word

2024-01-29 15:55:55 1041

原创 springboot-jpa的批量导入方法

所以我想实现insert ignore into和replace into,insert ignore into可以忽略重复的数据插入,这样避免重复插入报错。这两个方法需要自己原生实现。于是我通过反射的方法解析@Table和@Column注解,并且通过反射进行赋值。之前参考了博客实现了批量插入,但是因为用的是hibernate原生EntityManager的persist方法,只能执行批量的insert,我需要确保数据在数据库中不存在,依然增加了判断的逻辑,而且update的速度依然很慢。

2023-03-31 18:02:46 2328 2

原创 多线程工具类

组里的人多线程用的乱七八糟的,甚至每使用一个多线程就多一个Callable类。还有线程池也用的不是同一个,风险比较大。所以我就写了一个多线程的工具类。

2023-03-30 17:44:23 342

原创 大数据量物联网平台开发笔记(持续更新)

今年我们公司在母公司的支持下要开发一套物联网平台,以后卖出去的设备自动连接到这个平台上,再推送到第三方。预计目标是中期十万设备,长期百万设备的级别1.大流量的情况下每多一个节点都要增加很多的服务器支持,特别是我们系统使用rocketmq转发分流,效率没有想象中高...

2021-12-03 16:13:31 2356

原创 eclipse打包本地依赖项目到tomcat报NoClassDefFoundError的问题解决

最近开发了新的系统模块,因为老的工作空间已经有十几个项目了,所以使用了新的工作空间,使用了以前的套路,结果刚开始直接使用springboot启动时没有问题,到了部署到tomcat上的时候却开始报...

2021-06-12 14:57:56 655

原创 使用visualvm分析后解决公共pojo类@Entity占用大量内存的问题

我们的服务器内存占用量异常的高,仅仅只是启动项目就占用了大量内存,后来发现是因为我们的每个项目都引用了一个公共的pojo类项目,这个项目包含了所有项目跟数据库对应的pojo类,原来是因为改动pojo类时每个项目要同步修改太麻烦也太容易出问题才提取出来的。使用jdk自带的jvisualvm来进行内存分析,可以实时监控启动项目后可以看见这个对象占用了89MB的内存注释掉大部分的@Entity注解后,再启动项目这个对象只占了1MB的大小。我想了几个解决方案,第一个是将公共

2021-05-06 17:11:05 372

原创 redisson锁和自己实现的zookeeper锁的性能测试和比较

在配置文件中设置使用哪个锁,使用junit测试 static int total = 20;//开启循环数 @Test @Rollback(false) public void contextLoads() throws Exception { Date startTime = new Date(); Long waitTime = 1000L;//线程执行时间 CountDownLatch totalLatch = new CountDo

2021-04-15 14:47:53 599

原创 用python爬取码市的数据简单分析

今年很缺钱,或者说一直缺,但是今年开始意识到了,决定用业余时间赚外快,最好能达到目前一半的收入。首先戒了手机,每天就多了4个小时的富余时间,开始查看各大主流的外包项目网站。以前很佛系,没自己做过外包的项目,以我的性格不能蒙头就做,得先收集信息,确定哪些比较符合我的技术,哪些技能需求的人多,哪些项目简单来钱快等等。浏览并手动复制了几个项目就想到俺们程序员怎么能用这么low的方式收集信息,不如学一下python爬虫,既能收集信息,爬虫本身也有一定的市场需求,一举两得!!于是先简单地做了一个爬虫爬取码市的数据

2021-04-13 22:43:08 638

原创 切面注解编程使用map形式保存列表缓存避免redis模糊删除

缓存常常会有这种需求,就是根据不同的参数查询不同的列表缓存,但是只要更新了某个对象,那么这个对象相关的所有列表缓存都需要更新。之前我是用注解的方式模糊搜索并删除缓存,https://blog.csdn.net/qq_36804701/article/details/80604962但是随着项目的使用量,数据,并发量日益庞大,连redis都开始成为瓶颈,这时候使用模糊查询会非常耗费资源,所以我研究了一下如何避免模糊查询来删除列表数据。有两种思路第一种是专门维护缓存的键名,比如建立一个列表缓

2020-12-29 17:19:09 342

原创 maven引用本地项目编译报错

之前我们把很多共通的类提取出来然后引用maven,然后修改实体类时就不用把每个项目都修改一遍,只不过每次都要打个新的包然后开发的时候我发现可以引用本地的项目,不用每次都更新到云上。但是这样的话切换分支的时候常常报编译错误,我之前一直以为是Deployment Assembly配置的问题,因为搞着搞着编译就通过了。但是今天不知道为什么配置了半天,甚至复制了同事的配置还是一直报编译错误,通不过mvn test。搞了三四个小时,通过查询资料和查看项目终于发现了,原来引用本地项目实际上还是在引用本地的mav

2020-11-09 19:17:05 989

原创 使用memory analyzer分析堆栈内存优化poi excel导入方法

最近服务器崩了一次,主管发现是内存被大量占用,分析heap dump以后发现是excel导入相关的对象,占用了整整一个g,所以让我去优化一下。这个问题之前从来没出现过,虽然后来发现导入的excel不止为何有100多万行,属于意外情况,不符合日常业务,业务最多只允许上万条数据(询问客户后他们已经修改了原文件,什么样的文件或者什么样的操作会产生100多万条数据的excel已经不可考了),不过现在生成的对象也比较占内存,所以还是优化一下好了,顺便学习一下如何查看堆栈内存。我决定使用独立的memory anal

2020-11-06 15:52:42 456

原创 springboot i18n国际化后台多种语言设置的方式

之前有做过手机端后台的国际化,因为手机统一传递了language参数,所以只要设置LocaleChangeInterceptor就行了/** * 配置国际化语言 */@Configurationpublic class LocaleConfig extends WebMvcConfigurerAdapter{ /** * 默认解析器 其中locale表示默认语言 */ @Bean public LocaleResolver localeResolver()

2020-08-28 17:23:00 4596

原创 tidb的排序和分页的两个bug

之前tidb就遇到过一个问题,在没有指定排序的情况下,每次查询语句顺序都是不同的,更不用说分页了。加上排序后每次查询的数据倒是相同的,于是就不管了,但是最近又发现了问题。运维反馈同一个产品在不同的分页中重复出现,多次尝试执行语句后发现是因为排序的字段有重复。在tidb中,如果排序的字段有重复,那么在固定分页的情况下,比如limit 0,30,返回的数据是固定排序的,但是你改变分页,比如改成limit 30,30,你会发现之前limit 0,30中的数据可能会出现在limit 30,30页面中。不仅如

2020-07-07 16:03:00 3257 4

原创 redis缓存忽略字段不匹配,并记录日志

发布项目时发生了很多次因为字段更新导致redis缓存字段不匹配报错,因为开发了很多的项目,为了保持所有的项目pojo类同步,我们专门搞了一个pojo项目,里面存放所有的pojo类,包括实体类和dto,放到maven上面,然后其他所有项目引用maven。但是最近又发生了redis缓存报错的问题,原因是我们建立了项目分支系统,包括pojo类也是,然后维护人员在发布的时候可能因为没有及时切换pojo项目或者是因为编译问题,导致把分支上的pojo类发布了上去,又导致缓存报错了,虽然属于操作失误,一般来说不应该发

2020-06-10 10:39:40 1271

原创 java周查询和mysql的yearWeek同步

需求要实现按周统计某个数量,本来以为调用mysql的week和java里calendar.get(Calendar.WEEK_OF_YEAR)就行了,结果发现对应不上,而且还有蛋疼的跨年问题,上一年的年末几日和这一年的开头几日可能属于同一周,而且根据天数分布这周可能归属于上一年也可能归属于下一年。mysql还好,有yearWeek方法,而java根本没有类似的方法calendar.get(Calendar.WEEK_OF_YEAR)根本没有包含年份信息,这一点也是比较奇怪,因为单独使用calendar.ge

2020-05-12 14:55:28 1271

原创 用REGEXP语句实现判断两个字符串组合之间是否有交集

之前做了一个呼叫功能,呼叫项目和人员之间通过标签关联。比如呼叫项目关联a标签,b标签,人员关联b标签,c标签。方式是通过一个字段保存了用逗号分割的标签id。只要他们关联了同一个标签,到时候呼叫就通知到那个人员。不过后来需求改了要直接把呼叫关联到人员。这个时候我就需要修改的过去数据,把呼叫的id直接关联到人员。如果用java写代码的话这是很简单的,不过我想用语句实现,查找资料后判断两个字符串组合...

2020-03-13 11:26:22 897

原创 uuid改造成数值型的算法

主管提出一个想法,把uuid改造成数值型的,并且让同一个公司的数据id更相近,一是节省了空间,二是tidb需要数值型id来分库分表,而且同一家公司的数据id更接近或许能提高查询效率吧,大概。公司使用两个字节的数值型 256*256,就是说最多有65536家公司,一般来说是够用了。然后其他数据的id则使用八个字节。从二进制的结构来说,前两个字节保存公司id,中间四个字节保存时间的秒数,后两个...

2020-02-26 11:45:33 3025

原创 mysql统计有条件的数据数量

有一个需求就是统计某个任务单状态的数量,当然我们可以使用group语句,比如select status,count(1) from task group by status查询一个列表出来。一般来说是可以的,但是这时候加一个条件,再让任务单以机器的id统计,那就麻烦了。select status,machineId,count(1) from task group by machi...

2019-10-26 17:59:52 3661

原创 正则匹配实现消息国际化

之前做了i18n的国际化,根据请求参数language返回对应的国际化文字。然后需求要生成的消息也要国际化。考虑的解决方案是保存消息时保存所有语言版本的消息。然后查询时再根据语言查询。消息的模板是这样的,例如:{"zh":"机器{machineName}停机时长{time}","en":"machine {machineName} stop last {time}"}然后再把相应的参数替换...

2019-10-15 17:14:35 429

原创 用css控制显示多余文本隐藏并显示省略号

之前做过一个需求,隐藏多余的文本内容,显示省略号,然后我用截取文本长度的方式实现了。中途还考虑过中文字符长度较长还弄了个算法判断中文字符的长度加1。但是后来又出现一个问题,就是在不同的浏览器下元素块的宽高样式不一致的问题。拿到这个需求的时候我的思路是根据元素块高宽和字符大小和行高计算文本的长度。但是在想偷懒查询网上有没有现成方法时发现竟然可以用css实现这个需求。text-overflow:...

2019-09-26 14:18:38 875

原创 tidb修改字段类型的办法

tidb有很多的限制,比如新增修改和删除字段一次只能执行一条,比如sql语句比如update一次只能执行几万条。比如不能修改字段的类型。之前我要修改字段类型只能先把tidb的数据先迁移到mysql上,然后在mysql里面的字段类型修改后,再直接覆盖tidb里的表。在开发阶段是可以的,但是在产品上线以后,时刻产生新的数据,如果要保证正确性,只能停止服务器,但是数据量大的时候,迁移数据的速度会非常...

2019-09-21 14:46:43 5569

原创 layui多iframe页面控制定时器运行

我们web页面中有几个页面是有定时器在刷新的,并且查询的内容还不少,给服务器造成了不少压力。这些接口已经尽量优化,能放到缓存的都放到缓存。然后主管又提了一个需求,就是我们使用的是layui多标签iframe框架,当不在某个页面的iframe时不要执行定时器。我觉得这是一个挺不错的提议,而且实现起来也不难。粗略地考虑有两个思路,一个是点击标签时开启或关闭定时器,一个是定时器执行时判断所在的ifr...

2019-08-28 16:08:20 750

转载 jQuery实现contains方法不区分大小写的方法

https://www.jb51.net/article/61120.htm有个需求是页面搜索改成忽略大小写,原代码是通过jquery的filter加上选择器实现的,在网上搜索到了这个内容,发现了这种有趣的用法,自定义伪类选择器。感觉会很有用。特此记录一下...

2019-08-01 08:36:33 744

原创 jqgrid表格按等级合并

之前做过jqgrid的表格合并,但是只是很简单的相邻内容相同就合并的逻辑,然后现在我要做一个分级的合并功能,就是说将列认为的设置等级,只有上级相同的列名字相同才能合并。举个例子,我先按日期,机器,班次排序,然后合并日期,机器,班次,如果只是简单的相同内容就合并,可能会出现不同日期有着同一台机器合并的可能。废话不多说直接上代码。//gridName表名//CellName需要合并的列名(多个...

2019-07-29 16:34:06 319

原创 jqgrid框架下数字用千分位显示

有一个需求,需要jqgrid中所有的数字用千分位显示千分位替换的代码到是简单 var num = 234223423432; var reg=/\d{1,3}(?=(\d{3})+$)/g; num = (num + '').replace(reg, '$&,');问题是如何识别数字之前改过源码,解决了空格的问题https://blog.csdn.net/qq_36...

2019-07-05 17:46:02 899

原创 js框架防止重复点击代码

系统中出现了一些问题,仔细查询日志后发现在短时间内用户切同一个单好几次,仔细想想就知道应该是用户连续点击的缘故。当然跟我后台判断的疏漏有关系,但是我认为前台也应该做一些限制措施比较好。基本的思路是声明一个flag变量,然后点击后变成true,按钮动作完了再变回false。不过我的方法很多,而且很多按钮都是用模板生成的,需要动态生成flag。 function noRepeat(key){...

2019-07-01 17:13:04 218

原创 多个空格在页面上显示的问题,修改jqgrid源码解决

今天客户反馈了一个小问题,就是把表格中的产品名复制到搜索条件里面查询却查不到相应的产品。经过调查以后发现这个产品名包含了三个空格,而在页面上却只显示了一个空格所以复制后多的空格都缺失了,查询资料后发现这是html页面的特性。解决方法是用 代替空格经过debug后找到jqgrid.js中拼接文本的代码 ...

2019-05-31 09:24:15 732

原创 poi导入excel数字出现精度问题

今天测试反馈用excel导入数据时出现精度问题,比如excel里面的4.6变成了4.59999999999999996,4.4变成了4.4000000000000001等。我原先的代码是这样的public static Object getCellFormatValue(Cell cell) throws ParseException{ Object cellValue ...

2019-05-21 10:13:28 10537 1

转载 layui多选标签插件

之前用过的一个select多选插件,比较好看,功能也比较全面,mark一下方便以后使用Layui-Select多选formSelects-v4.js文档

2019-05-20 11:20:08 2401

原创 监听事务提交发送消息的一个bug

之前我做过一个功能,在事务提交之后发送mq消息,目的是为了避免消息在事务提交之前消费,造成脏数据或者报错使用监听器实现在事务提交后发送消息然后我为了方便以后查看消息发送记录,排查问题,在消息发送之后写了一个方法保存消息。这个时候就出现问题了,有的消息能够被保存,有的消息保存不了,于是我苦苦找了两个小时的原因,发现这发送消息的代码有一个区别,一个有事务,一个没有事务。我尝试了@trans...

2019-04-26 18:20:57 325

原创 使用ScriptEngine实现js算法

有一个需求让我们规定算法,然后传入参数自动得出结果,我开始找能把字符串转化为算式的工具,然后让我发现了一个神奇的东西import javax.script.Bindings;import javax.script.Compilable;import javax.script.CompiledScript;import javax.script.ScriptEngine;import ...

2019-04-23 14:20:51 1587

原创 tidb的乐观锁功能bug

之前曾经用过springboot自带的乐观锁功能,就是在实体类中增加一个版本号字段,加上@Version注解。当时测试的时候是可以的,当实体类版本不对的时候,调用save方法就会抛出ObjectOptimisticLockingFailureException异常。但是后面我想加一个切面实现重试机制的时候发现突然行不通了,在tidb的环境下,会执行update set......where id ...

2019-04-16 14:58:10 1211 1

原创 echart实现custom自定义色块功能

之前完成了一个比较复杂的功能。但是一直没有时间(懒)把这个代码分享出来,趁着一个人加班的机会顺便写个博客。下面是实现的具体展示。这个图是用来展示机器在一定时间内参数修改的次数。就是说一定时间范围内,两次修改的间隔在五分钟之内,则把他们归为同一个色块。横坐标是统计时间的跨度,纵坐标是这段时间内修改的次数。同样颜色的色块代表的是同一台机器,所以就可以非常直观明了的表现机器修改的次数,如果在...

2019-04-14 15:44:10 6090 5

原创 layer.open打不开弹窗的问题

我的项目页面是复合结构的,使用layui-iframe版的框架,最外面的页面保持不变,然后里面可以打开多个tap。然后在子iframe里面,调用top.layer.open可以打开一个弹窗,但是当我直接用新的页面打开iframe,调用top.layer.open却不生效。实际上对实际的项目来说影响不大,因为用户都是打开主页,然后用tab的形式打开iframe,不会有这个问题,但是却让我这个强迫...

2019-04-02 17:13:07 12208 5

原创 java用匿名内部类实现类似jquery.map和join方法

jquery的map方法可以把List<map>对象中的某项属性提取成list对象,然后join拼接成字符串,java中却没有类似的方法。我之前写过List<String>和String[]对象的join方法 public static String join(List<String> arr,String split) { if(arr == nul...

2019-03-11 17:30:59 381

转载 阿里云推送

阿里云推送官方文档阿里云推送demo

2019-01-23 14:01:45 438

原创 tomcat部署多个springboot项目日志冲突问题

在同一个服务器下部署多个项目,那么只有最后一个项目的logback.xml会起效在tomcat下部署两个或多个项目时解决办法是在web.xml配置全局变量webAppRootKeyspring Boot 填坑手册: 无web.xml文件时的上下文监听的配置在springboot项目中用java代码配置则要实现ServletContextInitializer@Configur...

2019-01-21 11:25:59 1581

原创 自定义springcache实现事务提交后处理缓存

之前说到缓存的管理问题,具体看redis缓存管理问题,我想要实现缓存的逻辑在事务提交之后,考虑使用事务监听器,这个我之前也用过,使用监听器实现在事务提交后发送消息,那么问题是我如何拦截到注解,然后发出事件。有两种方案,一是使用自定义注解,然后用aop自己实现一整套缓存体系,但是有一个我之前就遇到过的问题,就是aop在接口上不起效,而spring-data-jpa的dao层都是直接用接口的...

2019-01-08 11:12:15 2540 5

转载 支付宝支付和微信支付

支付宝支付api文档微信支付开发平台api文档支付宝服务端demo手把手教你完成App支付JAVA后台-微信支付JAVA

2018-12-26 14:16:36 168

空空如也

空空如也

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

TA关注的人

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