Arganzheng's Blog

stay hungry, stay foolish

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

ElasticSearch如何实现按天翻滚索引

最近在做集中式日志,将应用的日志保存到Elasticsearch中,结合kibana实现集中化日志监控和报警。在设计ES存储的时候。考虑到日志的特殊性,打算采用Daily Indices方式。名称为:log-${application}-YYYY.MM.DD。每天会自动创建一个新的索引,类似于log4j的DailyRollingFileAppender,一来减少活跃索引的大小,二来方便存档和...

Spring MVC的异常处理机制

Spring MVC在找到你的handler之后,会通过反射调用handler的方法: public class InvocableHandlerMethod extends HandlerMethod { /** * Invoke the handler method with the given argument values. */ private Object inv...

如何防止表单重复提交

因为安全扫描的问题,它会把线上真实的访问流量进行重放,而且重发时间间隔比较短,导致一个请求变成多次请求,也就是重复提交了。那么怎样解决这个问题呢? 一般来说是通过request token来防止重复提交的。具体实现机制是: 当客户端请求页面时,服务器会通过token标签生成一个随机token,并且将该token放置到全局session当中,然后将该随机数发向客户端;如果客户第一次提交,那...