Arganzheng's Blog

stay hungry, stay foolish

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>...

kibana学习笔记

配置链接ElasticSearch数据源 If Kibana and Elasticsearch are on the same host, and you’re using the default Elasticsearch port, then you’re all set. Kibana is configured to use that setup by default! If ...