`
文章列表

Spring拦截器配置

Spring的拦截器配置貌似很多种。用到的时候再一一总结吧。 这里只记录一种最常用的类拦截器,以备以后查询使用。 代码配置如下: <!-- 拦截器 --> <bean id="facadeInterceptor" class="com.qunar.fax.facade.interceptor.FacadeInterceptor"/> <bean id="proxFacadeInterceptor" class="org.springframewo ...
一、背景 人在IT江湖,免不了要排查BUG,查线上服务器日志,可浩如烟海的日志里面,如果没有一个唯一Key将同一个线程打印的日志串联起来,那可大大不妙。如何做到这一点呢。我们的主角,log4j的MDC,NDC出来了   二、实现思路以及关键代码 1、用拦截器或者filter将所有代码的入口拦截住,且在拦截器的里面,业务方法执行之前,写如下代码:   // 日志增加唯一标识 long startTime = SystemTimer.currentTimeMillis(); NDC.push(startTime + "_" + Thread.currentThr ...
一、背景 为了提升性能,时常需要批量执行SQL语句。但是MyBATIS官方并没有给出很好的解决方案。俗话说,自己动手,丰衣足食。自己写一个呗   二、实现思路 Spring中的jdbcTemplate.batchUpdate()能够批量执行SQL语句。所以,只要想办法拿到Mybatis中的SQL语句(以?作为占位符),然后结合jdbcTemplate.batchUpdate()就能够批量执行了 但是,要注意的是此处没有事务控制,事务控制在业务外层需要自己控制   三、代码实现 /** * 批处理的最大执行次数 */ protected stat ...
一、背景 有的时候需要返回插入值后DB自动增长生成的记录ID,在Mybatis的 环境下如何做呢?   二、代码示例 <insert id="insert" parameterType="com.qunar.fax.model.qunar.entry.FaxSendNotify" useGeneratedKeys="true" keyProperty="id"> <selectKey resultType="java.lang.Integer" ...
提纲:一、背景 二、思路 三、实现     一、背景 有的时候需要根据各种类型占用的权重来分配某种资源。如何将权重来用代码来体现呢?我觉得是个概率问题,权重越高的,在某一次资源分配的时候,能占用到资源的可能性就越高。如何用代码来表达呢?   二、思路 设想如下场景,我们将权重用百分比来表示,设想资源是一百份,权重为5%,则占用5份。   三、实现   /** * 模拟基于权重的随机分布算法 * * @param args */ public static void main(String[] args) ...
提纲: 一、背景 二、示例 三、延伸     一、背景 代码可测性,代码单元测试,TDD,,,,等无一不要求能够快速构建测试环境。那么在Spring环境下如何快速加载相应的配置,构建测试环境呢?本章就举一个小例子来说明   二、示例 不打算说太多废话,直接上代码   @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations = { "classpath:applicationContext.xml" }) public class SendFaxBizTest ...
博客提纲 一、背景说明 二、源码以及示例     一、背景说明 很多时候,我们需要将项目中使用到的配置信息,常量等写到properties文件里。然后用java加载该文件,在项目中使用礼貌的配置项以及相应的值。以前需要自己写文件的加载,解析,管理,等一系列的代码,但是自从有了Spring3X管理properties文件的新功能,(腿也不酸了,腰也不疼了,妈妈再也不用担心我的学习了)一切都是那么的优雅美好。。。     二、源码以及示例 其实也没啥好多说的,就是Spring的一个小功能的使用而已。废话不多说,直接上代码。 (1)biz.properties文件的内容如下: ...
这篇博客的提纲如下: 一、故障梳理 二、故障解决方案 三、XSS小结     一、故障梳理 这要从最近出的一个故障说起。故障的过程大致如下:   A系统与B系统域名不同,A系统中的数据提交到A系统某个form表单,然后通 ...
在开发中常常遇到一种场景,一个系统向另一个系统提交数据的时候,可能是通过json方式提交,也可能先写到html页面的form表单里面提交,这样就会带来几个问题,比如,json格式里面含有疑似XSS攻击的恶意字符串,或者含有与HTML语义相同的标签字符。 在这种情况下,就需要对所提交的字符串进行编码了。然后接收方进行解码。   编码的常见方式总结如下: 一、unicode编码   //import org.apache.commons.lang.StringEscapeUtils; String test="我是中国人()(),,& ...
最近一个人做了传真项目,项目不大,也用到了不少的知识点,借这个机会,好好总结下。以下是知识点目录,等总结完毕,会将对应的目录贴在下面。   1、UUID算法以及实现 2、HttpClient实现以及总结 3、Spring注解总结      http://kongxuan.iteye.com/admin/blogs/2023153   4、MyBatis的insert之后如何返回自动生成的主键值       http://kongxuan.iteye.com/blog/2021729   5、Spring注解实现事务管理使用以及源码分析 6、基于权重的资源分布算法实现 ...
# -*- coding: UTF-8 -*- import os,sys import gzip #找出路径下access_log.gz文件 files=[] fileDir=sys.argv[1] listFile = os.listdir(fileDir) for line in listFile: filepath = os.path.join(fileDir,line) if os.path.isdir(filepath): continue;#如果filepath是目录 if (filepath.find(" ...

shell处理故障

  以下是shell处理故障的一点积累,将来可能有用,先mark一下   (1)导出userid不为空,且下单日在2014-01-03日(含)以后的订单 mysql -u*** -h*** -P3307 -p**** -e "use XXX ;set names utf8; select distinct user_id, user_name from commission_order r where (r.user_id is not null and r.user_id !='' and order_date >='2014-01-03') and source= ...
下面是我自己的一些总结,都是做项目过程中血的教训,一定要遵守!   1、项目的需求阶段,需要多想想需求的合理性,一定一定要多问几个为什么。业务的合理性理解了,才能透彻的看到需求背后的理性和逻辑,也有助于 ...
有时候需要将数据库中的统计信息统计好之后,直接每天定时发邮件。 可用python脚本写好逻辑后,使用crontab每天定时执行   # -*- coding: UTF-8 -*- import MySQLdb import smtplib from email.MIMEMultipart import MIMEMultipart from email.MIMEText import MIMEText def queryDBdata(): #连数据库 conn = MySQLdb.connect(host='****', user='***', ...
简直在作死的节奏,一个项目出了三个故障,半夜被搞醒处理故障。。。 末了,需要从日志里面扣出数据,进行历史数据修复   开始用shell,奈何shell的水准半桶水都不到。。实在不行,果断用python.磕磕碰碰,一路百度。。终于完成了。 贴出来。。半夜的成果   (1)对于gz文件,已上面其中一个文件为例,执行脚本sudo python parse_gz_log.py  /home/q/www/hms.***.com/logs/access.2014-01-09.log.gz会在/home/q/www/hms.***.com/logs/下面生成相应的sql文件access.2 ...
Global site tag (gtag.js) - Google Analytics