制作码牌

目前最流行的支付之一是一码付。公司因业务扩展,需要给商户制作大量收款码。以往的制作流程是,由后台生成支付二维码,再由美工PS到模版里,最后出来码。但是这样的效率太低,一天也只能做百来个,还可能容易出错。于是诞生新的需求,希望靠程序解决。
继续阅读“制作码牌”

近期的工作

打开电脑,现在北京时间是2017-11-17 3:56。在深圳这座充满激情的城市,每天深夜和清晨都会迸发出很多灵感。有时候一些突如其来的思绪会让我兴奋地睡不着,就像现在,实在忍不住起床大干一场。
继续阅读“近期的工作”

Android 之 FileProvider

实现一个拍照上传的功能,在miui机型上会抛出FileUriExposedException异常。检查后发现是Android API有变化。从Android 7.0开始,不再允许在app中把file://Uri暴露给其他app,否则应用会抛出FileUriExposedException。原因在于,Google认为使用file://Uri存在一定的风险。比如,文件是私有的,其他app无法访问该文件,或者其他app没有申请READ_EXTERNAL_STORAGE运行时权限。解决方案是,使用FileProvider生成content://Uri来替代file://Uri。
继续阅读“Android 之 FileProvider”

修改Linux系统最大连接数限制

生产环境redis总是会报 Redis too many open files error 连接问题。用命令连接Redis,抛出 ERR max number of clients reached 。开始以为是redis客户端连接数设置问题,于是把配置文件 maxclients 设为 20000。重启程序运行一段时间后,问题依旧。看来这个问题不只是redis服务端配置连接这么简单。
继续阅读“修改Linux系统最大连接数限制”

原创 Mybatis Generator 插件分享

相信很多java项目都会用到MyBatis。MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的持久层框架。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。

以前使用Mybatis时,都会用基于XML的配置。XML配置方式虽然灵活但烦锁,所以后面又有了基于注解的配置。但是基于注解配置的方式又不够灵活。比如Mybatis强大的动态SQL语句功能,如果使用注解,只能用代码实现相应的Provider达到相同功能。为了解决这个问题,以前自己定过一些使用规范(增、删、改操作用注解,查询用XML配置),也按这个规范写过一个ORM框架。自己写的框架苦于精力有限,没有维护,有些功能不够完善,所以没有在大项目中使用。直到有一天发现Mybatis Generator,我觉得一切都解放了。
继续阅读“原创 Mybatis Generator 插件分享”

log4j2之ThreadContext

系统中使用log4j2作为日志系统,然而在高并发的情况下,多次请求的日志参杂在一起,要跟踪某个用户一次的请求操作所有日志是很麻烦的。幸运的是log4j中有相应的解决方案。

NDC(Nested Diagnostic Context)和MDC(Mapped Diagnostic Context)是log4j种非常有用的两个类,它们用于存储应用程序的上下文信息(context infomation),从而便于在log中使用这些上下文信息。NDC采用了一个类似栈的机制来push和pop上下文信息,每一个线程都独立地储存上下文信息。比如说一个servlet就可以针对每一个request创建对应的NDC,储存客户端地址等等信息。MDC和NDC非常相似,所不同的是MDC内部使用了类似map的机制来存储信息,上下文信息也是每个线程独立地储存,所不同的是信息都是以它们的key值存储在”map”中。
继续阅读“log4j2之ThreadContext”

RMI服务多网卡问题

项目中使用了一些RMI服务,部署发现在linux环境下监听了端口,但无法被其他机器调用。于是打印出log分析情况。

注:如果使用spring框架,打印日志需要引入slfj4-api。

在开发环境下(Windows)输出日志如下:

同样的程序部署到生产(linux),输出日志如下:


可以看到,在window下监听的是内网地址,但在linux下是本地127.0.0.1。
继续阅读“RMI服务多网卡问题”

使用proxy_balancer模块做负载均衡

使用apache+tomcat集群多个方案,以前我是用的mod_jk。这种集群虽然性能好,但是较复杂。apache自带的负载均衡模块proxy_balancer简单又正好满足需求。所以选用这种方案。

我查资料有个习惯,就是首先从官网获取信息。因为官网的文档不仅是最新,相信也是最准确的。可是这一次我错了,如果按官网的文档操作没有问题就不会写这篇日志了。
继续阅读“使用proxy_balancer模块做负载均衡”

一次集成aar的经历

公司和某知名支付公司合作,互相交换渠道。对方使用我们的扫码和公众号、服务窗支付。我们使用对方的支付宝APP支付。一切准备工作弄完后开始接入。

对方扔过来的sdk是aar的,当时就傻眼了。以前只用过jar,没用过aar。于是上网恶补了这部分的知识。不禁感叹到,如果aar早些出来,当时就不用那么辛苦手写布局了。
继续阅读“一次集成aar的经历”

生活是一种态度

最近有点忙,忙得有点累。好久没有总结和省视自己,一时间有很多想记录下来的。不记录怕忘掉,毕竟这种混身充满正能量的感觉不是每天都有。

随着年龄的增长,看得淡的东西多了,很多也就记不住。记不住也许是因为不在乎。可是很奇怪的是,有一些小事却被潜意识深深地记在了心里。可能当时自己也不知道,但是过了很久,突然有一天能想起来,然后发现,当时的那些被拿来调侃的话也蛮有道理的。
继续阅读“生活是一种态度”

芈月传全集

20151228120305

今天一同学突然找我,问我看不看芈月传。我想了很久,为什么要问我看不看这个呢?原来是想问我有没有办法搜到芈月传全集。

之前我发过盗墓笔记第一季的全集资源,那些资源是怎么来的呢?都是P2P来的。这个P2P不是网贷,而是peer-to-peer的缩写。我相信看这篇文章的人对P2P技术和原理不感兴趣,所以不再描述。这里主要讲用P2P工具搜索出未发布的电影。
继续阅读“芈月传全集”

2015年8月29日凌晨

凌晨3点多梦醒,本来想继续睡的,却怎么也睡不着,各种思绪在脑海中飘浮,突然觉得有一点东西要写。

从高三起就有写网志的习惯,用于总结各种事或者做技术分享。到后来朋友圈泛滥,整个互联网是越来越浮燥,我和朋友们的网志更新也越来越少。最近因为忙,没有时间分享JAVA NIO推送,不过我遇到了比这个更值得分享的事……
继续阅读“2015年8月29日凌晨”

盗墓笔记(第一季完)

38dbb6fd5266d0164f3a39c1922bd40735fa3533

据说盗墓笔记是一部旷世之作。我没看过小说,但是光是这个主题就足够吸引了我。虽然拍成的影视作品特效差,还有那句“交给国家”的狗血台词。但依然阻止不了无聊的人们看无聊的剧情。客观来说,还是比其他翻拍的毁经典的电视剧好得多。

在爱奇异下每周只播出一集,付费VIP可以观看后面的剧情。为了照顾大家,以下是我用p2p搜索提取出来的结果。直接复制下载链接,或点右键,用QQ旋风、迅雷等下载工具下载即可。全部是720P高清。

我会持续更新,直到大结局。因为版权关系,所以请大家低调。
继续阅读“盗墓笔记(第一季完)”

mod_jk奇怪的连接问题

最近进行了一次生产环境的迁移。原来的环境是做了虚拟化,所以迁移时把原来的虚拟机保持状态停用,再复制一份。但就是这么简单的理论上不会有问题的迁移,出现了奇怪问题。具体表现在,系统运行一段时间后tomcat无响应。

生产上的应用系统是使用apache+tomcat集群,所有的请求由apache的mod_jk转发至tomcat的apj13监听端口。系统运行一段时间后,tomcat无响应。tomcat1的apj13端口是8010,tomcat2的监听端口是8011。使用

netstat -nt|grep 8010|wc -l

netstat -nt|grep 8011|wc -l

查看到各有二百多个连接。
继续阅读“mod_jk奇怪的连接问题”

对账FTP的建设

环境:redhat 5.6 企业版、proftpd

需求:我们采用FTP形式提供给商户对账文件,商户自行使用FTP账号密码登录获取对账文件。我们系统对FTP需要有读写权限,而商户只能有读取权限。

分析:首先需要建立规则模版化。目前我们提供给商户FTP的账号统一使用商户号,默认密码为商户号后6位。而我们平台针对每个商户的FTP存放对账文件,FTP登录名以h为前缀加上商户号后5位,密码为统一密码。

即然规则统一确定,那么应该写成shell脚本以便日后重复利用。proftpd使用的是linux系统账号,所以每增加一个FTP账户需要增加一个系统账号。但是为安全起见,该账号是不能使用ssh登录的,所以在建立用户时需要指定bash为nologin。所有建立的用户都应该属于FTP组,提供给商户的用户home目录与我们平台使用的FTP账户目录共享,并设置权限为750(目录所属者可读写,目录所属组可读,其他用户不可访问)。以下是我的shell脚本:
继续阅读“对账FTP的建设”