Arganzheng's Blog

stay hungry, stay foolish

任务调度框架设计和实现

Quartz的问题 1. 任务创建者同时也是执行者之一 现象 有时候我们的任务是动态创建的,并且为了友好,会提供界面创建定时任务。这个创建任务的动作往往是放在一个管理后台系统进行,但是我们不希望这个系统因为创建了Quartz任务就作为运行实例参与到任务的调度执行了。Quartz是一个去中心化的实现,没有区分任务创建者和任务执行者,任何Quartz实例都同时兼顾两种身份。 解决方案 ...

java standalone模板

经常有一些需求需要跑一个standalone程序。不像war有标准的目录结构,standalone需要自己打包,组织好依赖和classpath等。于是搞了一个standalone模板。大概如下: standalone工程目录如下: mystandalone src bin main ...

java动态代理和动态类加载

Java Reflection - Dynamic Proxies Java Reflection - Dynamic Class Loading and Reloading Dynamic Proxy with Proxy and InvocationHandler in Java The Power of Proxies in Java

nginx日志格式

最近我们要调用IDL的一个人脸识别接口,但是人家那个接口是部署在南京机房,并且只能内部调用。从最小化成本的考虑,对于海外用户,我们在香港搭建了一个nginx走专线中转进行提速。在国内则是在北京机房。 中转的配置很简单,就是一个简单的proxypass: http { upstream idl { server 10.205.xxx.xx:8788; } ...

Java中如何正确的加载配置文件

取决于配置文件的位置,有不同的获取方式: 文件系统 绝对路径 相对路径 classpath:java特有的 对于文件系统路径,那么简单通过File得到相应的文件,进行加载就可以了。 对于classpath中的文件,那么就需要使用ClassLoader进行加载的了。 在Java中主要有如下方法: URL java.l...

Java DNS查询内部实现

源码分析 在Java中,DNS相关的操作都是通过通过InetAddress提供的API实现的。比如 比如查询域名对应的IP地址: String dottedQuadIpAddress = InetAddress.getByName( "blog.arganzheng.me" ).getHostAddress(); 或者反过来IP对应域名: InetAddress[] addres...

如何让java程序优先使用自定义的DNS nameserver

背景 以上省略1w字。基于这些原因,我们想指定我们信任的DNS name server。比如Google著名的8.8.8.8。通过BGP方式,可以让一个IP对应N台服务器,那么在权威DNS服务器够多够分散的情况下,绕过ISP提供的LocalDNS可以最大化的控制域名解析。 解决方案 JDK默认的DNS查询方式是具体参见 Understanding host name resolutio...

Redis的事务

Redis提供了一个乐观锁的事务机制,WATCH-MULTI-EXEC。其作用非常类似于DB的check-and-set(CAS)乐观锁实现: boolean success = false; do{ y = exec_sql("elect a from xxx"); x = y + n; success = exec_sql("udpate a = x where a = y");...

nginx URL rewrite自动增加请求参数问题

我们需要将一个URL在服务端进行重定向。比如请求: http://study.arganzheng.me/goto?targetUrl=http%3A%2F%2Freading.arganzheng.me%2Fbook%2Fshare&xxx=yyy,将重定向到targetUrl去:http://reading.arganzheng.me/book/share 去。 那么使用ngi...

应用如何记录集中日志

对于分布式系统,提供一个集中式的日志监控平台是非常有必要的,具体参见笔者前面的一片文章:日志监控系统。这里介绍一下客户端要怎么使用。 首先需要配置pom.xml,引入logging-client包: <dependency> <groupId>com.baidu.global.mobile.server.logging.client</groupId>...