java得到距离指定时间num时间的时间、以及反射调用方法、Log日志配置信息

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'

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值