public static Date calDate(Date date,int type, int num) { Calendar c = Calendar.getInstance(); c.setTime(date); c.add(type, num); return c.getTime(); }
方法 传入值: 时间、时间类型(分、秒 、时) 间隔
DateUtil.calDate(new Date(), Calendar.MINUTE,0)获取当前时间
DateUtil.calDate(new Date(),Calendar.MINUTE,time/60)获取当前时间往后推迟3分钟后的时间
--------------------------------
通过request 获取调用方的 IP ,URL, METHOD 等信息
public void setRequestInfo(HttpServletRequest request) { this.ip = request.getRemoteAddr(); this.inter = request.getRequestURI(); this.method = request.getMethod(); this.startTime = DateUtil.dateToString(new Date(), DateUtil.hms); }
---------------------------
执行命令封装 ,java程序执行linux命令
public static String execCmd(String cmd){ Process process = null; StringBuilder result = new StringBuilder(); LOGGER.info("要执行的命令:"+cmd); try { // 在单独的进程中执行指定的字符串命令 process = Runtime.getRuntime().exec(cmd); // 向标准输出或者标准错误输出写出数据 BufferedReader stdout = new BufferedReader(new InputStreamReader(process.getInputStream())); BufferedReader stderr = new BufferedReader(new InputStreamReader(process.getErrorStream(),"GBK")); // 读取输出 String line; while ((line = stdout.readLine()) != null){ LOGGER.info("标准输出:"+line); result.append(line); } while ((line = stderr.readLine()) != null){ LOGGER.info("错误输出:"+line); result.append(line); } // shell命令或者脚本的返回值 0 表示正常终止;否则,就表示异常失败 int status = process.waitFor(); LOGGER.info("命令执行状态:"+status); stdout.close(); stderr.close(); } catch (IOException e) { e.printStackTrace(); LOGGER.info("执行命令时IO异常:"+e.fillInStackTrace()); } catch (InterruptedException e) { e.printStackTrace(); LOGGER.info("命令执行时被中断:"+e.fillInStackTrace()); } finally { // 销毁子线程 if(null != process){ process.destroy(); } } String resultStr = result.toString(); result = null; LOGGER.info("命令执行结果:"+resultStr); return resultStr; }
----------------------------
用反射的机制来调用方法
public static Object executeInvoke(String classUrl, String methodName, Object[] methodParameters, Class ... parameterClasses){ try { Class cls = Class.forName(channelUrl +"." +classUrl); Object obj = cls.newInstance(); // 声明方法 Method m = cls.getDeclaredMethod(methodName, parameterClasses); // 调用方法 return m.invoke(obj, methodParameters); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (InstantiationException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (NoSuchMethodException e) { e.printStackTrace(); } catch (InvocationTargetException e) { e.printStackTrace(); } return null; }* @param classUrl 包名+类名 * @param methodName 执行方法 * @param methodParameters 参数值 * @param parameterClasses 参数类型
-------------------------------------------
自定义异常处理
另外在spring-mvc里面定义该类
<!-- 自定义的全局异常处理器 --> <bean class="cn.huimin100.pay.center.service.support.exception.ExceptionResolver"></bean>
public class ExceptionResolver implements HandlerExceptionResolver { private Logger logger = Logger.getLogger(ExceptionResolver.class); /** * @description 解析异常 * @param request * @param response * @param o * @param e 异常类型 * @return 将内容写入response中,无需跳转界面 */ @Override public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object o, Exception e) { logger.info("进入全局异常处理器"); String result = ""; // 将请求参数Map,转成BasicOrderModel实体 Map<String, String> reqParam = MapUtil.getParams(request.getParameterMap()); BasicOrderModel basicOrderModel = MapUtil.mapToBean(BasicOrderModel.class, reqParam); basicOrderModel.setRequestInfo(request); // 解析异常类型 if(e instanceof BusinessException){ BusinessException businessException = (BusinessException)e; result = ReplyUtil.failureReply(businessException.getMsg(), basicOrderModel, reqParam); }else{ if(ParamVerify.checkParamIsEmpty(e.getMessage())){ result = ReplyUtil.failureReply(ExceptionCode.E00001, basicOrderModel, reqParam); }else{ result = ReplyUtil.failureReply(e.getMessage(), basicOrderModel, reqParam); } } // 将内容写入response中 try { response.setContentType("text/json; charset=UTF-8"); response.getWriter().println(result); response.getWriter().flush(); response.getWriter().close(); } catch (Exception e1) { e1.printStackTrace(); logger.info("向HttpServletResponse写入异常信息失败:"+e1.fillInStackTrace()); } return null; }
--------------------------
logger日志的自定义
log4j.rootLogger=INFO,A1,R #日志输出到控制台 log4j.appender.A1=org.apache.log4j.ConsoleAppender #输出日志到控制台的方式 log4j.appender.A1.Target=System.out #使用灵活布局 log4j.appender.A1.layout=org.apache.log4j.PatternLayout #定义输出格式 log4j.appender.A1.layout.ConversionPattern=[%d{MM-dd HH:mm:ss}][%X{title}]%m%n #每天产生一个日志文件 log4j.appender.R=org.apache.log4j.DailyRollingFileAppender #日志输出地址 log4j.appender.R.File=/tomcat/logs/debug/date log4j.appender.R.Append=true log4j.appender.R.encoding=utf-8 #使用灵活布局 log4j.appender.R.layout=org.apache.log4j.PatternLayout log4j.appender.R.DatePattern='_'yyyyMMdd'.txt' #定义输出格式 log4j.appender.R.layout.ConversionPattern=[%d{MM-dd HH:mm:ss}][%X{title}]%m%n #订单日志单独打印设置 log4j.logger.cn.huimin100.pay.center.service.support.util.reply.OrderLogUtil=INFO,orderLog log4j.appender.orderLog=org.apache.log4j.DailyRollingFileAppender log4j.appender.orderLog.File=/tomcat/logs/access/date log4j.appender.orderLog.Append=true log4j.appender.orderLog.encoding=utf-8 log4j.appender.orderLog.layout=org.apache.log4j.PatternLayout log4j.appender.orderLog.DatePattern='_'yyyyMMdd'.txt'