[原创]通用验证工具2.0

两年前,我在这里发布了”JAVA通用验证工具”,并开源共享到 github 上。在之后的项目中,也是有使用的,算得上是经历了线上的考验。与其他如:Spring Validator,Apache Validator相比,主要有几个优点:

1.无第三方依懒引入,更轻量更容易扩展。
2.对于JAVA对象支持分组,根据不同业务场景验证必要字段。
3.对Android提供独立支持,验证返回资源引用ID。
继续阅读“[原创]通用验证工具2.0”

Nginx启用php支持

在apache中启用php很简单,apache有phpmodule模块,集成进去就OK。在nginx中启用php支持稍有些不同。

1、nginx的worker进程直接管理每一个请求到nginx的网络请求。

2、对于php而言,由于在整个网络请求的过程中php是一个cgi程序的角色,所以采用名为php-fpm的进程管理程序来对这些被请求的php程序进行管理。php-fpm程序也如同nginx一样,需要监听端口,并且有master和worker进程。worker进程直接管理每一个php进程。
继续阅读“Nginx启用php支持”

微服务 – Spring Cloud 2.0

Spring Cloud是一系列框架的有序集合。它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以用Spring Boot的开发风格做到一键启动和部署。Spring Cloud 2.0 正式版发布已有一段时间,这次写了一个Demo方便入门学习和测试。
继续阅读“微服务 – Spring Cloud 2.0”

Amazon的pem文件转换为公钥

最近使用亚马逊云的服务器翻墙,效果挺好,看youtube没一点问题,上网也稳定。前天为了让手机平板也能翻墙花了少工夫。原因是从ios9以后,ios平台不允许使用pptp连接。于是用strongaws+xl2tp搭建vpn。详细过程就不说了,反正折腾了个通宵。要么是ios能连,android不能。要么是windows能连,手机不能。不过现在问题都解决了,有时间再写成日志。vpn建好之后在linux下连接vpn,我用的是debian 9系统。因为亚马逊使用的是密钥边接方式,所以需要导入密钥。从服务器下载回来的是pem格式,可以用下面的方式转:
继续阅读“Amazon的pem文件转换为公钥”

2018,微变

弃我去者,昨日之日不可留;
乱我心者,今日之日多烦忧。

上完最后一天班,明天就要回家了。对于中国来说,农历年春节才是最盛大的节日。回忆起一年的所有,像是一个成绩中等的学生交的答卷,可能这是大多数人的成绩吧。最近想了各种事情,不断地整理思绪。我觉得人每到一个阶段都会面临某些相同问题,因为阅历不同或早或晚,也因为决定不同,导致下一个阶段遇到的问题会有差异。最后就像一颗树,生出许多分支,所以我们不一样。
继续阅读“2018,微变”

制作码牌

目前最流行的支付之一是一码付。公司因业务扩展,需要给商户制作大量收款码。以往的制作流程是,由后台生成支付二维码,再由美工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服务多网卡问题”