自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

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

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

2020-07-07 16:03:00 37

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

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

2020-06-10 10:39:40 71

原创 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 89

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

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

2020-03-13 11:26:22 154

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

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

2020-02-26 11:45:33 354

原创 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 107

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

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

2019-10-15 17:14:35 79

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

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

2019-09-26 14:18:38 91

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

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

2019-09-21 14:46:43 1147

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

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

2019-08-28 16:08:20 236

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

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

2019-08-01 08:36:33 182

原创 jqgrid分级表格合并

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

2019-07-29 16:34:06 104

原创 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 388

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

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

2019-07-01 17:13:04 58

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

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

2019-05-31 09:24:15 374

原创 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 3736 1

转载 layui多选标签插件

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

2019-05-20 11:20:08 943

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

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

2019-04-26 18:20:57 131

原创 使用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 757

原创 tidb的乐观锁功能bug

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

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

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

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

2019-04-14 15:44:10 1247 2

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

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

2019-04-02 17:13:07 3564 3

原创 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 114

转载 阿里云推送

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

2019-01-23 14:01:45 255

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

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

2019-01-21 11:25:59 904

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

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

2019-01-08 11:12:15 930 3

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

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

2018-12-26 14:16:36 85

原创 redis缓存管理问题

springboot redis缓存功能的初步了解和使用之前做了用注解的方式管理缓存的功能,但是现在发现可能会发生问题。那就是注解的@CacheEvict和@CachePut行为是立即发生的,而不是事务提交后再调用,而事务回退了缓存也不会回退。我先测试了@CachePut@Servicepublic class MachineRuntimeServiceImpl implement...

2018-12-14 11:26:06 189 1

转载 微信和qq的第三方登录

微信开放平台qq开放平台android app微信登录(android端+Java后台)QQ登录网站接入功能实现--非官方文档搬运

2018-12-10 14:35:08 85

转载 SVN分支的合并和同步

https://www.cnblogs.com/mq0036/p/3498908.html

2018-11-29 11:34:14 98

原创 使用监听器实现在事务提交后发送消息

用rocketmq构造事件中心之前说了用消息队列实现了事件中心(不知道算不算),现在虽然换成rabbitmq了但是原理是一样的,这时候就出现了一个问题,就是消息消费的时候,之前的事务还没提交就会有错误。比如编辑机器名称,发送机器编辑事件,在消费消息时把用到机器名称的地方修改机器名称(我们称为冗余字段,这样就减少了关联查询)。但是机器编辑的事务还没有提交。@ResourceMachine...

2018-11-15 10:04:46 2013

原创 springboot报406

我将消息队列消费者和主项目分开,并且使用RestOperations来调用action,结果却返回406, public Map<String, Object> postForOperation(String path, Map<String, Object> params) throws IOException { String url = serverAddr...

2018-10-30 11:35:30 1137

原创 使用@ConditionalOnExpression决定是否生效注释

因为用了好几套消息队列,我想在配置文件中配置如何开关切换消息队列。生产者还好,我只要决定读取配置文件决定用哪个生产者发送消息就行,但是rabbitmq的消费者是用注解启动的,所以这个时候就用到了@ConditionalOnExpression#消费者总开关,0关1开mq.cumsumer.enabled=1#rocketmq消费者开关,true开启,false关闭rocketmq.co...

2018-10-26 14:53:30 15984 4

原创 springboot使用rabbitmq实践

公司要把项目放到阿里云上,然后使用阿里云的数据库和消息队列。结果阿里云上面只有rabbitmq服务器而没有rocketmq服务器。所以我只好再写一套rabbitmq的代码。顺便一提阿里云上没有tidb只有mysql,幸好tidb是兼容mysql的。参考文章:springboot+rabbitmq整合示例程Windows下安装及配置RabbitMQrabbitmq的安装就不说了,因为...

2018-10-26 11:16:14 94

原创 docker compose容器域名配置

docker容器的配置本来是交给测试来做的,我对此是一无所知的,但是有一次rocketmq的域名配置出了问题,而测试又只是依样画葫芦,碰到变化的情况就抓瞎了,搞了一天都没搞出来,所以我只好花费时间,解决这个问题。不过因此对docker compose有了初步的了解,也算不错。在之前测试是直接配置的外网的ip,因为连不上rocketmq,所以只好配置成内网的域名,但是他不管是用内部的link还是...

2018-10-22 10:45:23 1685

原创 rocketmq消费者不能连接到nameserver的问题

国庆放假之前,主管将数据库更新并且重启所有的服务器。然后国庆之后发现国庆期间消费者并没有处理消息。消息的生产是正常的,国庆期间产生了好几万条消息,但是查看消费订阅组却发现并没有消费者存在。我多次重启了消费者服务器,但是发现并没有报错也没有打印消费日志,找了各种代码的原因都没有发现问题。因为一直不报错,这是最让程序员头疼的情况,所以我故意写了错误的nameserver地址,原来的配置...

2018-10-12 15:49:26 3150

原创 使用exists查询记录是否存在

在使用rocketmq消息中心时,为了保证幂等我专门建了个消息消费记录表,每个消息消费后都往消息消费记录中插一条数据,在消息到达时通过判断是否在消息消费记录中存在这个消息来保证幂等。但是因为我把很多事件都放到队列中,所以消息的数量是十分之多的,一天能产生几十万条消息,而查询消息消费记录的代码执行频率十分之高,这时候我发现使用select count(*) 的效率急剧下降。我赶紧建了个定时器定时...

2018-10-09 11:01:51 1642

原创 用rocketmq构造事件中心

我们主管的想法总是很多,总是提出我之前没听过的东西,而且据他说他之前也都没有做过。难道说主管是把这个项目当做试验场了吗?因此虽然我并没体验到他在代码上有多么精妙(因为他从来不写代码),但是我还是很佩服他的,至少我受益匪浅。而且他总能在业务中提出很多问题,提出各种复杂的架构,过去我觉得太烦了,增加了很多无谓的工作量,老板需要什么我们就做什么不就行了吗,但是现在我渐渐体会到这也是程序员一种能力的体现。...

2018-09-28 14:20:04 674 4

原创 redis保证编号的唯一性

在新增任务单,自动生成任务单号时,会根据一定的规则在原有的公司任务单号基础上,数值加一。在公司业务流程中一般来说是没有问题的,因为在公司中任务单的并发量很小。但是在压力测试中就会报任务单号重复的错误,一般流程中报错也没什么,但是压力测试就做不下去了。解决方案可以加锁,但是redis有另一个方案可以实现。 @Resource ProduceTaskDao produceTaskD...

2018-09-10 10:10:57 1748

原创 项目开发中的业务与架构收获与心得

1.数据库表增加关联冗余字段,避免关联查询,在关联数据更新时更新冗余字段。以此解决分布式数据库的关联查问题。2.增加日志跟踪系统,可以在日志中查看业务执行轨迹,特别是分布式服务器3.service分成维护接口和对外接口两种,service层不直接调用其他业务的dao层而是调用对外接口,这么做的好处是便于微服务的代码拆分。另外也便于日志跟踪(使用aop)4.建立事件中心,比如更新冗余字段...

2018-09-10 09:56:19 897

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