UQI
文章平均质量分 80
好好生活_
这个作者很懒,什么都没留下…
展开
-
【Spring】Quartz和Task实现定时任务
公司项目中有定时取消超时订单的需求,采用的是Spring的Quartz实现的,后来觉得Quartz比较重量级,就换成了更轻量级的Task去做。 之前没有接触过spring的定时任务,实现之前查了查一些资料,看完后还是觉得比较简单的,相对于之前接触的一些定时任务框架,如Elastic-Job等,轻量级的优势还是显而易见的。 项目中的需求是在用户下单后,会扣减商品库存,等待用原创 2017-09-28 20:38:08 · 602 阅读 · 1 评论 -
【redis】常用命令总结
开发一个新需求,需要将redis缓存从原有的以公司为key替换为以个人为key,在这过程中,通过命令行对redis进行操作,之前没有实战,正好是个积累学习的过程。一 . Connection (连接)AUTH (Auth password):通过设置配置文件中 requirepass 项的值(使用命令 CONFIG SET requirepass password ),可以使用 密码来...原创 2018-08-21 17:19:06 · 13049 阅读 · 1 评论 -
【xxl-job】轻松实现分布式定时任务demo实例
【项目描述】前段时间专门独立了一个spring boot服务,用于做和第三方erp系统的对接工作。此服务的第一个需求工作就是可以通过不同的规则,设置不同的定时任务,从而获取erp系统的商品数据。所以,系统架构采用了xxl-job实现分布式定时任务。【学习背景】此项目不是我负责的,在上个月同事让我帮忙处理一个问题,便带给了我学习的机会,这个框架已经在线上环境使用,但框架也不是我参与搭建的,所以...原创 2018-10-11 21:17:01 · 12590 阅读 · 6 评论 -
java分布式定时任务对比学习
【引言】上篇博客,使用xxl-job分布式定时任务框架简单实现了一个demo实例,而java实现分布式定时任务远不止这一个框架,所以,本篇博客的主要内容是将java的几个分布式定时任务框架做个对比总结。【框架列举】单机timer:是一个定时器类,通过该类可以为指定的定时任务进行配置。TimerTask类是一个定时任务类,该类实现了Runnable接口,缺点异常未检查会中止线程Sched...原创 2018-10-13 10:01:24 · 2992 阅读 · 0 评论 -
【xxl-job】源码分析 - 启动流程
【引言】上篇博客对xxl-job分布式定时任务框架的架构做了整体介绍,本篇博客开始主要从源码入手,简单学习下xxl-job的实现原理。【项目结构】此项目主要分为三个模块:xxl-job-admin(管理中心),xxl-job-core(核心),xxl-job-executor-samples(示例).<modules> <module>xxl-job-core&...原创 2018-10-17 21:18:50 · 1169 阅读 · 0 评论 -
【xxl-job】架构设计
【引言】上篇博客将主要的两个分布式定时任务框架xxl-job和elastic-job进行了简单的对比总结。公司项目中用到的xxl-job,所以本篇博客将对xxl-job的架构方面进行简单总结。【总体介绍】架构思想将调度行为抽象形成“调度中心”公共平台,而平台自身并不承担业务逻辑,“调度中心”负责发起调度请求。将任务抽象成分散的JobHandler,交由“执行器”统一管理,“执行器”负...原创 2018-10-16 21:24:03 · 2597 阅读 · 0 评论 -
【xxl-job】源码分析 - 任务触发
【引言】原创 2018-10-19 20:04:26 · 1541 阅读 · 0 评论 -
【xxl-job】源码分析 - 执行处理
【引言】上篇博客分析的xxl-job的调度中心任务触发源码,本篇博客分析的内容是执行器在接收到任务后,如何处理的。【实现】在xxl-job系列博客的第一篇demo实例中,结合spring boot框架集成的,其中在xxl-job配置类中,有如下一段代码: @Bean(initMethod = "start", destroyMethod = "destroy") public Xx...原创 2018-10-19 21:04:49 · 3400 阅读 · 0 评论 -
【MySQL】Packet for query is too large
【线上问题】昨天订单对接方反应,从我们平台系统下的单,没有传到他们的erp系统中。运营找我处理,因为手头上刚开始开发下周要上线的需求,就用之前写好的补偿机制接口同步过去,以为只是一个订单出问题了,也没查问题。后来,给我发了一堆订单号,说是都没有同步,只能去服务器上查问题了。错误如下:2018-10-23 13:03:36 [ qtp1867717141-13:4121860953 ] - [...原创 2018-10-24 20:29:48 · 374 阅读 · 2 评论 -
记录一次项目优化历程
【引言】最近接手了一个新项目,要处理的首个问题是商品同步问题。从ERP获取十万条商品数据,这个流程需要经过四个环节,erp -&amp;gt; lightHouse -&amp;gt; uplus -&amp;gt; mall ,第二个环节就是此项目,属于核心环节,既需要对外又需要对内。【原数据统计】交接项目的时候,得到的同步统计数据是,线上环境十万条数据需要同步二十四小时,而项目中我们使用了定时任务,每天会做一次...原创 2018-11-14 18:16:22 · 1200 阅读 · 1 评论 -
【Spring Boot】整合Mybatis实现不同Mapper映射不同数据源
【问题背景】在前两周写过一篇博客,关于项目中商品同步的优化方案记录,最后一个环节,需要将商品同步给商城,让php商城提供了一个批量同步商品的接口,但遇到的问题是每次调用接口,处理的商品到2万条就会出错,很奇怪,两种语言,但用的测试环境mysql是一个,我们可以处理十万条商品数据,他们却处理不了。【处理方案】php处理不了十万商品数据,也不能影响整个系统运行,所以只能是我这边做处理,在商品服务...原创 2018-11-28 03:52:14 · 11117 阅读 · 3 评论 -
SQL Union实现子母单列表展示
【需求分析】系统接入ERP,订单会根据商品的发货仓进行拆单,所以订单之间不再是单独的关系,而有了子单母单的概念。在做最小的改动的情况下,数据库的改造是在订单表上增加了parent_order_sn字段,所谓的母订单号,如果订单A被拆单,则A应该是母订单,订单状态是‘已拆单’。通过parent_order_sn=‘A订单号’去查询,可以查到两条子订单记录。、【问题再现】之前我一直在负责和ERP...原创 2019-01-12 17:06:23 · 1763 阅读 · 2 评论 -
@Transient 注解使用
【引言】在开发过程中,不论是前后端的交互,还是后端与后端间的接口对接,都避免不了各种参数和返回值的问题。有时候需要在返回值的某个实体上增加个其他表的字段,有时候需要在参数传递过程中加上其他表的相关信息。举个例子,很简单的一个场景,我们在给前端返回订单信息中,前端展示的不仅仅是订单中的信息,也可能需要客户或者商户的一些信息,而这些信息在订单中我们一般只会存一个客户和商户的id,在查询过程中,再去...原创 2019-01-12 19:36:34 · 5285 阅读 · 3 评论 -
mysql find_in_set字符串查找函数
【项目需求】系统中,不论是订单还是退货单,有的平台使用需要卖家审核,有的则不需要,所以在系统中可以设置订单或退货单的流程节点。而对于每个流程节点,客户需求是每个节点都要根据系统下的员工的角色去做分发,从而订单指定到个人,而不是整个公司的员工都可以处理。【实现方案】对于上述场景,我实现的方案是在订单表和退货单表都增加了对应节点待处理人字段,多个人可处理的话,则用,分隔,保存对应员工的id集合...原创 2019-01-12 20:41:00 · 2039 阅读 · 1 评论 -
【JS】点击文本复制到剪贴板实现
【引言】在前两周完善了一些关于与ERP对接项目日志方面的功能,对于与第三方系统对接的系统来说,记录每一次接口调用的参数返回结果是极其重要的,日志记录越完善,越有利于以后查问题。日志记录没有用什么框架,就是单纯的有个接口日志表,每个接口调用都会记录这一次调用的参数,请求地址,返回结果等信息。而为了方便以后运营或相关人员可以自己登录系统查到调用的日志记录,完善了系统页面功能。下面是系统接口日志查...原创 2019-01-12 21:20:50 · 3367 阅读 · 1 评论 -
【Spring Boot】线上问题总结
【引言】2019年刚开始,依旧很长很累,经历了两周每天都在上线的节奏,一周在北京,一周在杭州。现在回家了,终于有时间把前一周新项目上线遇到的问题总结一下。【问题】在项目刚上线的第二天,客户那边一部分人继续在线下开单,订单通过此项目同步到我们平台上,一部分人开始在我们平台试用开单,所以用的人多了,项目的问题也就暴露出来的。1. Hikari Unable to acquire JDBC Co...原创 2019-01-28 14:47:32 · 2163 阅读 · 1 评论 -
【Java】Bean复制几种实现方法性能比较
【引言】在项目开发过程中,会遇到将某个已有若干属性值的Bean复制给另一个具有相同属性名的Bean,除了一个一个属性去set方法之外,其实可以通过调用一些工具类下的方法直接copy,这样就避免了一个一个去set属性值,在简化了代码的基础上,也能快速地实现功能。而实现这种功能的工具类并不只有一种,也听同事提到过如果数据量大的话,性能上会有影响。所以在工作空闲之时,自己写了个接口,测试了一下每种方...原创 2019-03-01 17:11:46 · 11385 阅读 · 0 评论 -
【Git】工作区 暂存区 版本库
上篇博客总结了一下git的常用命令,而在命令的操作背后,其实影响的是不同的工作区域。git的工作区域分为三个部分,分别为:工作区,暂存区和版本库。一. 基本概念工作区(working directory):将一个文件夹通过git init设置成一个git可以管理的文件夹时,这个文件夹里的内容就是工作区;版本库(repository):当工作区生成后,可发现.git,这个就是版本库;暂...原创 2018-08-20 23:31:25 · 469 阅读 · 0 评论 -
【Git】使用总结
公司旧系统都是使用svn版本控制,只有新系统才直接用的git,最近我们把旧系统从svn版本控制转换到用git。转到git,主要考虑到以下几点:git强调个体,为了满足开发需求的快速迭代,两三个需求上线,不会因为一个需求没完成而耽误上线;而svn适合开发人数不多的项目开发。git速度快,灵活,任意两个开发者之间的冲突也很容易解决;git支持离线工作;而svn如果不能连接到服务器上,基本上不...原创 2018-08-20 22:53:02 · 2106 阅读 · 1 评论 -
Lombok
【问题描述】 长假回来上班后的第一天,开发环境竟然出问题了。代码中所有的getter和setter方法都报错,显示各个实体类中没有提供对应的get/set方法。【解决方法】 原因是myeclipse安装目录下少了lombok的jar包,另外myeclipse的ini文件还需要添加两句配置如下: -Xbootclasspath/a:lombok.jar -javaagent:l原创 2017-10-09 19:59:44 · 560 阅读 · 1 评论 -
【微信开发】支付-统一下单
【项目简述】 最近公司在做微信小程序,我负责给前端提供接口。小程序主要是关于汽车配件商户,我们可以找到附近的汽配店,购买下单支付自己需要的一些汽车配件。 目前系统支持两种支付方式,一种是挂账支付,类似打白条,给客户一定的挂账额度,直接入库;另一种就是微信支付。【统一下单】 1. 应用场景 要使用微信支付,需要系统先调用统一下单接口在微信支付服务后台生成预支付交易单,返原创 2017-10-20 20:38:18 · 9251 阅读 · 10 评论 -
签名算法
【需求】 最近在公司做的微信支付和给其他系统提供接口中,都用到了签名算法,顾名思义,在接口的调用中,我们可以通过对接收的参数生成签名,从而判断传的签名与接口中通过算法得到的签名是否一致来保证数据的安全性。【简述】 这两次接触都是通过MD5算法实现的,通用步骤一般都是: 第一步:设所有发送或者接收到的数据为集合M,将集合M内非空参数值的参数按照参数名ASCII码从小到大排序(字典序)原创 2017-10-21 11:27:04 · 5006 阅读 · 2 评论 -
微信小程序中使用emoji表情
【问题描述】 微信小程序开发,商户授权给用户后,用户便可关注小程序。有的用户的微信账户号中带有emoji表情,这样的话,直接存储到mysql5.5以下版本的数据库中会报异常。【问题缘由】 emoji是4个字节的,因为编码方式不同,所以如果将emoji表情直接存入utf8编码的数据库,会报错,存不进去。【解决方案】 一. 修改数据库编码方式(mysql的版本必须为v5.5.3或更高)原创 2017-10-25 11:24:31 · 20620 阅读 · 5 评论 -
java调用C# WebService接口
这两天在负责公司系统与其他公司的平台订单的对接工作,在没看对接文档前,心里还想着到时候照着接口文档的参数规范去传,应该很容易可以完成。但当拿到对方的接口文档,看到WebService的时候,心情就变了,没有写过java调webService接口,怎么办…… 没有接触过,就先查了查,看看示例,该用什么方式去调。看到的方式大概有三种:1. HttpClient 2. HttpURLConnecti原创 2017-12-08 20:26:13 · 6382 阅读 · 7 评论 -
double转string出现科学技术法问题
在项目中,遇到一个问题,关于金额的设置,把金额设置的很大时,如:9999999999999…n个9,将其转为字符串,此金额就会改变,以科学技术法的形式表现。此问题并不会影响金额之间的计算,只是在页面上再次显示金额的时候不对。解决方案:用DecimalFormat来格式化double和float的结果,这样转换成字符串就不会采用科学计数法。举例:double money=999原创 2017-11-21 15:26:20 · 3987 阅读 · 2 评论 -
Jmeter压测接口
【Apache Jmeter】 该应用程序是开源软件,旨在为负载测试功能行为和测量性能的100%纯Java应用程序。它最初设计用于测试Web应用程序,但后来扩展到其他测试功能。【Jmeter可以做什么】 Apache JMeter可用于测试静态和动态资源,Web动态应用程序的性能。 它可用于模拟服务器,服务器组,网络或对象上的重负载,以测试其强度,或分析不同负载类型下的整体性能。原创 2017-11-30 18:16:24 · 725 阅读 · 2 评论 -
【mybatis】批量更新失败
这两天公司从旧系统中独立出了一个单独的商品服务项目,用的SpringBoot+Mybatis框架,主要是因为旧系统商品导入速度太慢,一个excel表中仅又几条数据也会耗时很长的时间。 Mybatis用的是generator自动生成工具生成的一套代码,其中也包含了批量插入,批量更新的方法。在使用批量更新时,遇到了一个错误,如下: 刚开始看到错误,以为是因为其中某个字段的类型不一致导致的,就原创 2017-12-13 14:06:52 · 2204 阅读 · 0 评论 -
【mybatis】分页插件PageHelper
最近有个小项目,不和旧系统有关系,所以简单搭建了一个SSM框架。在项目进行中,遇到需要分页显示数据的需求,记得之前接触mybatis框架用的就是插件,很方便,所以这次也采用插件的方式,插件叫做PageHelper。 下面就来一步步看如何将插件加入到项目中。 1. 添加一个分页插件的配置文件,代码如下:<?xml version="1.0" encoding="UTF-8" ?>原创 2017-11-25 11:01:36 · 442 阅读 · 1 评论 -
GSON入门
GSON是Google开发的Java API,用于转换Java对象和Json对象。最近在项目中看到了GSON的使用,简单的一行代码,就可以将JSON数据转换为我们需要的Java对象,根本不需要繁琐地自己去解析JSON数据了。 使用GSON,首先需要加入maven以来,如下: <dependency> <groupId>com.google.code.gso原创 2017-11-25 11:36:07 · 516 阅读 · 1 评论 -
学习使用阿里云消息服务(一)
一. 消息服务概述 阿里云消息服务(Message Service,原MQS)是阿里云商用的消息中间件服务。与传统的消息中间件不同,消息服务一开始就是基于阿里云自主研发的飞天分布式系统来设计和实现,具有大规模,高可靠、高并发访问和超强消息堆积能力的特点。消息服务API采用HTTP RESTful标准,接入方便,跨网络能力强;已全面接入资源访问控...原创 2018-02-09 16:12:26 · 892 阅读 · 3 评论 -
Java多线程CountDownLatch与线程池ThreadPool的使用
一. CountDownLatch是什么 CountDownLatch是一个同步工具类,它允许一个或多个线程等待,直到在其他线程中执行的一组操作完成。 CountDownLatch是通过一个计数器实现的,计数器的初始值为线程的数量,这是一个一次性现象,计数不能重置。如果需要重置计数,可以考虑使用cy...原创 2018-03-22 20:50:58 · 8214 阅读 · 2 评论 -
java(多)线程中注入Spring的Bean
问题描述 项目中很多地方都用到了异步方式或多线程,也就是开启新线程处理一些业务。在新线程中,用spring注解@Autowire注入Bean会抛出nullPointerException,也就是Spring Bean没有被注入,bean对象的值为null。原因分析 web容器在启动应用时,并没有...原创 2018-03-25 12:49:52 · 3604 阅读 · 0 评论 -
阿里Druid监控
一. Druid是什么Druid是java语言中最好的数据库连接池,能够提供强大的监控和扩展功能。二. Druid监控配置工程引入druid.jar监控统计核心配置filters:‘stat,wall’,’stat’用于统计,’wall’用于防火墙。展示监控统计,在web.xml中配置:<filter> <filter-name>Druid...原创 2018-03-21 19:02:04 · 3681 阅读 · 3 评论 -
一次上线感悟
昨天又经历了一次忙碌的上线,从这次上线中,感觉到了自己所扮演的角色的转变。上线的内容是新项目,测试环境上,项目的框架和部署环境,都是开发人员自己搭建的。作为项目负责人,开发阶段主要是给开发人员讲解业务,梳理数据库表关系,开发完一起做代码review,测试环境部署的事情都没时间过问。测试工作完成之后,晚上七八点开始上线工作。新来的运维,说自己没有用过Jenkins部署项目,就拉着我一起做线上...原创 2018-05-19 13:50:24 · 998 阅读 · 2 评论 -
【redis】分布式锁的基本实现
【问题背景】在分布式场景下,出现了拿到的主键id相同的情况,从而导致物流单单号重复,新建失败。物流单号生成的规则是:固定字符(“**) + 发货站点id + yyyyMMdd形式日期 + 自增id。所以,利用redis,分布式锁机制,保证生成的物流单号不重复。【相关命令】incr:将 key 中储存的数字值增1。如果 key 不存在,那么 key 的值会先被初始化为 0 ,然后再...原创 2018-08-22 23:01:20 · 310 阅读 · 1 评论 -
【Linux】查看日志相关命令总结
【引言】排查线上环境问题,少不了去线上查日志。而使用什么命令,能快速准确地查到我们需要查找地日志信息,也是我们需要掌握的一项技能。【学习】Linux查看命令有多种:tail,head,cat,tac,more(一) tail 命令参数:1)-f 循环读取2)-q 不显示处理信息3)-v 显示详细的处理信息4)-c&lt;数目&gt; 显示的字节数5)-n&lt;行数&gt...原创 2019-03-07 22:50:45 · 34954 阅读 · 6 评论