文档章节

quartz 计算上次触发时间

len
 len
发布于 2014/06/06 18:32
字数 5074
阅读 172
收藏 0

产品需求周期任务,但定义的是任务的结束时间,如每天18点完成,但任务的生成时间会是每天8点,如果一个用户在11点新建了这么一个任务,已经过了当天的触发时间,但又没有到任务结束时间,所以产品认为有必要为用户添加一个今天8点到18点的任务,这就涉及到要计算上次触发时间了。因为quartz 提供了从某一个时间计算下次执行时间的接口,一开的设计是在当前时间上往前减一月再以这个时间计算下次执行时间,直到下次执行时间比当次大。平时这个逻辑没发现问题,但有一天为了测试提交了一个每2分钟的任务,结果发现服务没有响应,调试时发现这个计算是很耗时的。于是有发下面的这个方案,原理是认为下次执行时间和上次执行的时间差应该是差不多的,注意是差不多,不是相等,以这个差去计算一个大致的上交执行时间,再以这个时间进行计算。

    public static Date getNextFireTime(String cronExpression) throws Exception {
        return getNextFireTime(new Date(), cronExpression);
    }

    public static Date getNextFireTime(Date date, String cronExpression) throws Exception {
        if (StringUtils.isBlank(cronExpression)) {
            return null;
        }
        CronExpression cron = new CronExpression(cronExpression);
        Date nextFireDate = cron.getNextValidTimeAfter(date);
        return nextFireDate;
    }

    private static Date getPreFireDate(Date pre, Date now, String cronExpression) throws Exception {
        if (pre.after(now)) {
            return null;
        }
        Date next = getNextFireTime(pre, cronExpression);
        if (next.after(now)) {
            return null;
        }
        while (next != null && next.before(now)) {
            pre = next;
            next = getPreFireDate(next, now, cronExpression);
        }
        return pre;
    }

    public static Date getPreFireDate(String cronExpression) throws Exception {
        int i = 0;
        Date now = new Date();
        Date next = now;
        while (true) {
            i++;
            next = getNextFireTime(next, cronExpression);
            long interval = next.getTime() - now.getTime();
            Date pre = new Date(now.getTime() - interval);
            Date result = getPreFireDate(pre, now, cronExpression);//            System.out.println((result == null) + "\t下次执行时间:" + dsf.format(next) + "\t" + dsf.format(pre));
            if (i > 31 || result != null) {
                if (result != null) {
                    System.out.println("最终结果:计算了" + i + "次,|" + "|" + cronExpression + "|,当前时间" + dsf.format(now) + "\t上次应该执行时间:" + dsf.format(result));
                    return result;
                } else {
                    System.err.println("最终结果:计算了" + i + "次,|" + "|" + cronExpression + "|,当前时间" + dsf.format(now) + "\t上次应该执行时间:未知");
                }
                break;
            }
        }
        return null;
    }

以下是测试结果

最终结果:计算了2次,||0 0 0 */1 * ?|,当前时间2014-05-21 13:23:08	上次应该执行时间:2014-05-21 00:00:00
cost:10ms
最终结果:计算了2次,||0 0 0 ? * 1-5|,当前时间2014-05-21 13:23:08	上次应该执行时间:2014-05-21 00:00:00
cost:4ms
最终结果:计算了1次,||0 0 10 3/1 * ?|,当前时间2014-05-21 13:23:08	上次应该执行时间:2014-05-21 10:00:00
cost:2ms
最终结果:计算了2次,||0 0 10 ? * 1,3,5|,当前时间2014-05-21 13:23:08	上次应该执行时间:2014-05-20 10:00:00
cost:2ms
最终结果:计算了1次,||0 0 10 ? * 1-5|,当前时间2014-05-21 13:23:08	上次应该执行时间:2014-05-21 10:00:00
cost:1ms
最终结果:计算了2次,||0 0 10 L * ?|,当前时间2014-05-21 13:23:08	上次应该执行时间:2014-04-30 10:00:00
cost:2ms
最终结果:计算了5次,||0 0 11 25/2 * ?|,当前时间2014-05-21 13:23:08	上次应该执行时间:2014-04-29 11:00:00
cost:6ms
最终结果:计算了2次,||0 0 11 25/7 * ?|,当前时间2014-05-21 13:23:08	上次应该执行时间:2014-04-25 11:00:00
cost:2ms
最终结果:计算了1次,||0 0 12 */1 * ?|,当前时间2014-05-21 13:23:08	上次应该执行时间:2014-05-21 12:00:00
cost:0ms
最终结果:计算了1次,||0 0 12 */1 * ?|,当前时间2014-05-21 13:23:08	上次应该执行时间:2014-05-21 12:00:00
cost:1ms
最终结果:计算了1次,||0 0 12 */1 * ?|,当前时间2014-05-21 13:23:08	上次应该执行时间:2014-05-21 12:00:00
cost:1ms
最终结果:计算了1次,||0 0 12 */1 * ?|,当前时间2014-05-21 13:23:08	上次应该执行时间:2014-05-21 12:00:00
cost:1ms
最终结果:计算了1次,||0 0 12 */1 * ?|,当前时间2014-05-21 13:23:08	上次应该执行时间:2014-05-21 12:00:00
cost:1ms
最终结果:计算了2次,||0 0 12 */7 * ?|,当前时间2014-05-21 13:23:08	上次应该执行时间:2014-05-15 12:00:00
cost:1ms
最终结果:计算了2次,||0 0 12 */7 * ?|,当前时间2014-05-21 13:23:08	上次应该执行时间:2014-05-15 12:00:00
cost:1ms
最终结果:计算了2次,||0 0 12 */7 * ?|,当前时间2014-05-21 13:23:08	上次应该执行时间:2014-05-15 12:00:00
cost:1ms
最终结果:计算了2次,||0 0 12 */7 * ?|,当前时间2014-05-21 13:23:08	上次应该执行时间:2014-05-15 12:00:00
cost:1ms
最终结果:计算了1次,||0 0 12 ? * 1,2,3,4,5/7|,当前时间2014-05-21 13:23:08	上次应该执行时间:2014-05-21 12:00:00
cost:1ms
最终结果:计算了1次,||0 0 12 ? * 2,4|,当前时间2014-05-21 13:23:08	上次应该执行时间:2014-05-21 12:00:00
cost:2ms
最终结果:计算了2次,||0 0 14 ? * 5/14|,当前时间2014-05-21 13:23:08	上次应该执行时间:2014-05-15 14:00:00
cost:1ms
最终结果:计算了2次,||0 0 17 ? * 5/7|,当前时间2014-05-21 13:23:08	上次应该执行时间:2014-05-15 17:00:00
cost:1ms
最终结果:计算了2次,||0 0 18 */1 * ?|,当前时间2014-05-21 13:23:08	上次应该执行时间:2014-05-20 18:00:00
cost:1ms
最终结果:计算了2次,||0 0 18 */5 * ?|,当前时间2014-05-21 13:23:08	上次应该执行时间:2014-05-16 18:00:00
cost:1ms
最终结果:计算了1次,||0 0 18 14 * ?|,当前时间2014-05-21 13:23:08	上次应该执行时间:2014-05-14 18:00:00
cost:1ms
最终结果:计算了1次,||0 0 18 17 * ?|,当前时间2014-05-21 13:23:08	上次应该执行时间:2014-05-17 18:00:00
cost:1ms
最终结果:计算了1次,||0 0 18 20 * ?|,当前时间2014-05-21 13:23:08	上次应该执行时间:2014-05-20 18:00:00
cost:0ms
最终结果:计算了2次,||0 0 18 24 * ?|,当前时间2014-05-21 13:23:08	上次应该执行时间:2014-04-24 18:00:00
cost:2ms
最终结果:计算了2次,||0 0 18 3/1 * ?|,当前时间2014-05-21 13:23:08	上次应该执行时间:2014-05-20 18:00:00
cost:1ms
最终结果:计算了2次,||0 0 18 3/1 * ?|,当前时间2014-05-21 13:23:08	上次应该执行时间:2014-05-20 18:00:00
cost:1ms
最终结果:计算了2次,||0 0 18 3/1 * ?|,当前时间2014-05-21 13:23:08	上次应该执行时间:2014-05-20 18:00:00
cost:0ms
最终结果:计算了1次,||0 0 18 ? * 1|,当前时间2014-05-21 13:23:08	上次应该执行时间:2014-05-18 18:00:00
cost:1ms
最终结果:计算了1次,||0 0 18 ? * 1|,当前时间2014-05-21 13:23:08	上次应该执行时间:2014-05-18 18:00:00
cost:0ms
最终结果:计算了1次,||0 0 18 ? * 1|,当前时间2014-05-21 13:23:08	上次应该执行时间:2014-05-18 18:00:00
cost:1ms
最终结果:计算了1次,||0 0 18 ? * 1|,当前时间2014-05-21 13:23:08	上次应该执行时间:2014-05-18 18:00:00
cost:0ms
最终结果:计算了1次,||0 0 18 ? * 1|,当前时间2014-05-21 13:23:08	上次应该执行时间:2014-05-18 18:00:00
cost:0ms
最终结果:计算了2次,||0 0 18 ? * 1,2,3,4,5|,当前时间2014-05-21 13:23:08	上次应该执行时间:2014-05-20 18:00:00
cost:1ms
最终结果:计算了2次,||0 0 18 ? * 1,2,3,4,5|,当前时间2014-05-21 13:23:08	上次应该执行时间:2014-05-20 18:00:00
cost:1ms
最终结果:计算了2次,||0 0 18 ? * 1,2,3,4,5,6,7|,当前时间2014-05-21 13:23:08	上次应该执行时间:2014-05-20 18:00:00
cost:1ms
最终结果:计算了2次,||0 0 18 ? * 1,2,5,6/21|,当前时间2014-05-21 13:23:08	上次应该执行时间:2014-05-19 18:00:00
cost:1ms
最终结果:计算了1次,||0 0 18 ? * 1,3,5|,当前时间2014-05-21 13:23:08	上次应该执行时间:2014-05-20 18:00:00
cost:1ms
最终结果:计算了2次,||0 0 18 ? * 1-5|,当前时间2014-05-21 13:23:08	上次应该执行时间:2014-05-20 18:00:00
cost:0ms
最终结果:计算了2次,||0 0 18 ? * 1-5|,当前时间2014-05-21 13:23:08	上次应该执行时间:2014-05-20 18:00:00
cost:1ms
最终结果:计算了2次,||0 0 18 ? * 1-5|,当前时间2014-05-21 13:23:08	上次应该执行时间:2014-05-20 18:00:00
cost:1ms
最终结果:计算了2次,||0 0 18 ? * 1-5|,当前时间2014-05-21 13:23:08	上次应该执行时间:2014-05-20 18:00:00
cost:1ms
最终结果:计算了2次,||0 0 18 ? * 1-5|,当前时间2014-05-21 13:23:08	上次应该执行时间:2014-05-20 18:00:00
cost:1ms
最终结果:计算了2次,||0 0 18 ? * 1-5|,当前时间2014-05-21 13:23:08	上次应该执行时间:2014-05-20 18:00:00
cost:0ms
最终结果:计算了2次,||0 0 18 ? * 1-5|,当前时间2014-05-21 13:23:08	上次应该执行时间:2014-05-20 18:00:00
cost:1ms
最终结果:计算了2次,||0 0 18 ? * 1-5|,当前时间2014-05-21 13:23:08	上次应该执行时间:2014-05-20 18:00:00
cost:1ms
最终结果:计算了2次,||0 0 18 ? * 1-5|,当前时间2014-05-21 13:23:08	上次应该执行时间:2014-05-20 18:00:00
cost:0ms
最终结果:计算了2次,||0 0 18 ? * 1-5|,当前时间2014-05-21 13:23:08	上次应该执行时间:2014-05-20 18:00:00
cost:1ms
最终结果:计算了2次,||0 0 18 ? * 1-5|,当前时间2014-05-21 13:23:08	上次应该执行时间:2014-05-20 18:00:00
cost:0ms
最终结果:计算了2次,||0 0 18 ? * 1-5|,当前时间2014-05-21 13:23:08	上次应该执行时间:2014-05-20 18:00:00
cost:1ms
最终结果:计算了2次,||0 0 18 ? * 1-5|,当前时间2014-05-21 13:23:08	上次应该执行时间:2014-05-20 18:00:00
cost:1ms
最终结果:计算了2次,||0 0 18 ? * 1-5|,当前时间2014-05-21 13:23:08	上次应该执行时间:2014-05-20 18:00:00
cost:0ms
最终结果:计算了2次,||0 0 18 ? * 1-5|,当前时间2014-05-21 13:23:08	上次应该执行时间:2014-05-20 18:00:00
cost:1ms
最终结果:计算了2次,||0 0 18 ? * 1-5|,当前时间2014-05-21 13:23:08	上次应该执行时间:2014-05-20 18:00:00
cost:0ms
最终结果:计算了2次,||0 0 18 ? * 1-5|,当前时间2014-05-21 13:23:08	上次应该执行时间:2014-05-20 18:00:00
cost:1ms
最终结果:计算了1次,||0 0 18 ? * 1/7|,当前时间2014-05-21 13:23:08	上次应该执行时间:2014-05-18 18:00:00
cost:0ms
最终结果:计算了1次,||0 0 18 ? * 2|,当前时间2014-05-21 13:23:08	上次应该执行时间:2014-05-19 18:00:00
cost:0ms
最终结果:计算了1次,||0 0 18 ? * 2|,当前时间2014-05-21 13:23:08	上次应该执行时间:2014-05-19 18:00:00
cost:1ms
最终结果:计算了1次,||0 0 18 ? * 2|,当前时间2014-05-21 13:23:08	上次应该执行时间:2014-05-19 18:00:00
cost:0ms
最终结果:计算了1次,||0 0 18 ? * 2/7|,当前时间2014-05-21 13:23:08	上次应该执行时间:2014-05-19 18:00:00
cost:0ms
最终结果:计算了1次,||0 0 18 ? * 3|,当前时间2014-05-21 13:23:08	上次应该执行时间:2014-05-20 18:00:00
cost:0ms
最终结果:计算了1次,||0 0 18 ? * 3|,当前时间2014-05-21 13:23:08	上次应该执行时间:2014-05-20 18:00:00
cost:0ms
最终结果:计算了1次,||0 0 18 ? * 3|,当前时间2014-05-21 13:23:08	上次应该执行时间:2014-05-20 18:00:00
cost:1ms
最终结果:计算了1次,||0 0 18 ? * 3|,当前时间2014-05-21 13:23:08	上次应该执行时间:2014-05-20 18:00:00
cost:0ms
最终结果:计算了1次,||0 0 18 ? * 3|,当前时间2014-05-21 13:23:08	上次应该执行时间:2014-05-20 18:00:00
cost:0ms
最终结果:计算了1次,||0 0 18 ? * 3|,当前时间2014-05-21 13:23:08	上次应该执行时间:2014-05-20 18:00:00
cost:1ms
最终结果:计算了1次,||0 0 18 ? * 3|,当前时间2014-05-21 13:23:08	上次应该执行时间:2014-05-20 18:00:00
cost:0ms
最终结果:计算了1次,||0 0 18 ? * 3|,当前时间2014-05-21 13:23:08	上次应该执行时间:2014-05-20 18:00:00
cost:0ms
最终结果:计算了1次,||0 0 18 ? * 3,5/21|,当前时间2014-05-21 13:23:08	上次应该执行时间:2014-05-20 18:00:00
cost:1ms
最终结果:计算了2次,||0 0 18 ? * 4|,当前时间2014-05-21 13:23:08	上次应该执行时间:2014-05-14 18:00:00
cost:0ms
最终结果:计算了3次,||0 0 18 ? * 4,5/21|,当前时间2014-05-21 13:23:08	上次应该执行时间:2014-05-15 18:00:00
cost:2ms
最终结果:计算了2次,||0 0 18 ? * 5|,当前时间2014-05-21 13:23:08	上次应该执行时间:2014-05-15 18:00:00
cost:1ms
最终结果:计算了2次,||0 0 18 ? * 5|,当前时间2014-05-21 13:23:08	上次应该执行时间:2014-05-15 18:00:00
cost:1ms
最终结果:计算了2次,||0 0 18 ? * 5|,当前时间2014-05-21 13:23:08	上次应该执行时间:2014-05-15 18:00:00
cost:0ms
最终结果:计算了2次,||0 0 18 ? * 5|,当前时间2014-05-21 13:23:08	上次应该执行时间:2014-05-15 18:00:00
cost:1ms
最终结果:计算了2次,||0 0 18 ? * 5|,当前时间2014-05-21 13:23:08	上次应该执行时间:2014-05-15 18:00:00
cost:1ms
最终结果:计算了2次,||0 0 18 ? * 5|,当前时间2014-05-21 13:23:08	上次应该执行时间:2014-05-15 18:00:00
cost:1ms
最终结果:计算了2次,||0 0 18 ? * 5|,当前时间2014-05-21 13:23:08	上次应该执行时间:2014-05-15 18:00:00
cost:1ms
最终结果:计算了2次,||0 0 18 ? * 5|,当前时间2014-05-21 13:23:08	上次应该执行时间:2014-05-15 18:00:00
cost:1ms
最终结果:计算了2次,||0 0 18 ? * 5|,当前时间2014-05-21 13:23:08	上次应该执行时间:2014-05-15 18:00:00
cost:0ms
最终结果:计算了2次,||0 0 18 ? * 5|,当前时间2014-05-21 13:23:08	上次应该执行时间:2014-05-15 18:00:00
cost:1ms
最终结果:计算了2次,||0 0 18 ? * 5|,当前时间2014-05-21 13:23:08	上次应该执行时间:2014-05-15 18:00:00
cost:0ms
最终结果:计算了2次,||0 0 18 ? * 5|,当前时间2014-05-21 13:23:08	上次应该执行时间:2014-05-15 18:00:00
cost:1ms
最终结果:计算了2次,||0 0 18 ? * 5|,当前时间2014-05-21 13:23:08	上次应该执行时间:2014-05-15 18:00:00
cost:0ms
最终结果:计算了2次,||0 0 18 ? * 5|,当前时间2014-05-21 13:23:08	上次应该执行时间:2014-05-15 18:00:00
cost:1ms
最终结果:计算了2次,||0 0 18 ? * 5/7|,当前时间2014-05-21 13:23:08	上次应该执行时间:2014-05-15 18:00:00
cost:1ms
最终结果:计算了2次,||0 0 18 ? * 5/7|,当前时间2014-05-21 13:23:08	上次应该执行时间:2014-05-15 18:00:00
cost:0ms
最终结果:计算了2次,||0 0 18 ? * 5/7|,当前时间2014-05-21 13:23:08	上次应该执行时间:2014-05-15 18:00:00
cost:1ms
最终结果:计算了2次,||0 0 18 L * ?|,当前时间2014-05-21 13:23:08	上次应该执行时间:2014-04-30 18:00:00
cost:0ms
最终结果:计算了2次,||0 0 18 L * ?|,当前时间2014-05-21 13:23:08	上次应该执行时间:2014-04-30 18:00:00
cost:1ms
最终结果:计算了2次,||0 0 19 ? * 1-5|,当前时间2014-05-21 13:23:08	上次应该执行时间:2014-05-20 19:00:00
cost:0ms
最终结果:计算了1次,||0 0 8 21/1 * ?|,当前时间2014-05-21 13:23:08	上次应该执行时间:2014-05-21 08:00:00
cost:1ms
最终结果:计算了1次,||0 0 9 */2 * ?|,当前时间2014-05-21 13:23:08	上次应该执行时间:2014-05-21 09:00:00
cost:0ms
最终结果:计算了1次,||0 0 9 */2 * ?|,当前时间2014-05-21 13:23:08	上次应该执行时间:2014-05-21 09:00:00
cost:0ms
最终结果:计算了8次,||0 0 9 25/1 * ?|,当前时间2014-05-21 13:23:08	上次应该执行时间:2014-04-30 09:00:00
cost:3ms
最终结果:计算了2次,||0 0/2 * * * ?|,当前时间2014-05-21 13:23:08	上次应该执行时间:2014-05-21 13:22:00
cost:0ms
最终结果:计算了4次,||0 30 10 ? * 1,5/1|,当前时间2014-05-21 13:23:08	上次应该执行时间:2014-05-18 10:30:00
cost:1ms
最终结果:计算了1次,||0 30 10 ? * 1-5|,当前时间2014-05-21 13:23:08	上次应该执行时间:2014-05-21 10:30:00
cost:0ms
最终结果:计算了2次,||0 30 18 ? * 1-5|,当前时间2014-05-21 13:23:08	上次应该执行时间:2014-05-20 18:30:00
cost:1ms
最终结果:计算了2次,||0 30 18 ? * 1-5|,当前时间2014-05-21 13:23:08	上次应该执行时间:2014-05-20 18:30:00
cost:0ms
最终结果:计算了1次,||0 30 9 ? * 1|,当前时间2014-05-21 13:23:08	上次应该执行时间:2014-05-18 09:30:00
cost:1ms
最终结果:计算了1次,||0 30 9 ? * 1|,当前时间2014-05-21 13:23:08	上次应该执行时间:2014-05-18 09:30:00
cost:0ms
最终结果:计算了1次,||0 30 9 ? * 1|,当前时间2014-05-21 13:23:08	上次应该执行时间:2014-05-18 09:30:00
cost:0ms
最终结果:计算了1次,||0 30 9 ? * 1|,当前时间2014-05-21 13:23:08	上次应该执行时间:2014-05-18 09:30:00
cost:1ms
最终结果:计算了1次,||0 30 9 ? * 1|,当前时间2014-05-21 13:23:08	上次应该执行时间:2014-05-18 09:30:00
cost:0ms
最终结果:计算了1次,||0 30 9 ? * 1|,当前时间2014-05-21 13:23:08	上次应该执行时间:2014-05-18 09:30:00
cost:0ms
最终结果:计算了1次,||0 30 9 ? * 1|,当前时间2014-05-21 13:23:08	上次应该执行时间:2014-05-18 09:30:00
cost:1ms
最终结果:计算了1次,||0 30 9 ? * 1|,当前时间2014-05-21 13:23:08	上次应该执行时间:2014-05-18 09:30:00
cost:0ms
最终结果:计算了1次,||0 30 9 ? * 1|,当前时间2014-05-21 13:23:08	上次应该执行时间:2014-05-18 09:30:00
cost:0ms
最终结果:计算了1次,||0 30 9 ? * 2,4,5/7|,当前时间2014-05-21 13:23:08	上次应该执行时间:2014-05-21 09:30:00
cost:1ms


© 著作权归作者所有

共有 人打赏支持
len

len

粉丝 3
博文 3
码字总数 7984
作品 0
西城
项目经理
私信 提问
一个简单的使用Quartz和Oozie调度作业给大数据计算平台执行

一,介绍 Oozie是一个基于Hadoop的工作流调度器,它可以通过Oozie Client 以编程的形式提交不同类型的作业,如MapReduce作业和Spark作业给底层的计算平台(如 Cloudera Hadoop)执行。 Quartz...

Zero零_度
2016/09/22
14
0
Spring+Quartz(一)

Quartz是一个非常优秀的任务调度引擎,详情请见官网:http://www.quartz-scheduler.org/ 而Spring很好地集成了Quartz,为企业级的任务调度提供了方便。 下面先看一个实现了Job接口的任务Hello...

YaZi-Liu
2016/06/13
34
0
基于 Quartz 开发企业级任务调度应用

简介: Quartz 是 OpenSymphony 开源组织在任务调度领域的一个开源项目,完全基于 Java 实现。作为一个优秀的开源调度框架,Quartz 具有功能强大,应用灵活,易于集成的特点。本文剖析了 Qu...

IBMdW
2013/05/19
13.5K
29
Quartz实践--misfire错过触发时机的处理

引言 要弄清楚作业的misfire,首先需要了解几个重要的概念: 触发器超时 : 举个例子说明这个概念。比如调度引擎中有5个线程,然后在某天的下午2点 有6个任务需要执行,那么由于调度引擎中只...

spinachgit
05/23
0
0
Quartz将Job保存在数据库中所需表的说明

QRTZ_CALENDARS 以 Blob 类型存储 Quartz 的 Calendar 信息 QRTZCRONTRIGGERS 存储 Cron Trigger,包括 Cron表达式和时区信息 QRTZFIREDTRIGGERS 存储与已触发的 Trigger 相关的状态信息,以...

Leons
2015/08/04
0
0

没有更多内容

加载失败,请刷新页面

加载更多

一个本科学生对Linux的认知

一个本科学生对Linux的认知 我是一名大三的普通一本大学的软件工程的一名学生,学校开设了一些关于系统开发的课程,纸上得来终觉浅,学校的课程课时较短,想要在56个课时之内学会一些公司需要...

linuxCool
13分钟前
0
0
CentOS 安装Tomcat

Tomcat 介绍 Tomcat是Apache软件基金会(Apache Software Foundation)的Jakarta项目中的一个核心项目,由Apache、Sun和其他一些公司及个人共同开发而成。 Java 程序写的网站用tomcat+jdk来运...

野雪球
27分钟前
0
0
OSChina 周四乱弹 —— 每天都迟到是种什么样的体验

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @开源中国首席机器人 :《Too Good At Goodbyes (Acoustic) - Sam Smith - 单曲》 《Too Good At Goodbyes (Acoustic) - Sam Smith - 单曲》 ...

小小编辑
32分钟前
68
8
jquery通过id显示隐藏

var $div3 = $('#div3'); 显示 $div3.show(); 隐藏 $div3.hide();

yan_liu
今天
3
0
《乱世佳人》读书笔记及相关感悟3900字

《乱世佳人》读书笔记及相关感悟3900字: 之前一直听「荔枝」,后来不知怎的转向了「喜马拉雅」,一听就是三年。上班的时候听房产,买房了以后听装修,兴之所至时听旅行,分手后听亲密关系,...

原创小博客
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部