精华内容
下载资源
问答
  • Java 时间触发器

    千次阅读 2012-10-21 20:15:30
    具体实现包括:2个类和web.xml设置 一、web.xml设置    com.common.trigger.SystemListener   二、 2.1 ...import java.util.Date; import java.util.Timer; import javax.servlet

    具体实现包括:2个类和web.xml设置

    一、web.xml设置

      <listener>
       <listener-class>com.common.trigger.SystemListener</listener-class>
      </listener>

    二、

    2.1

    package com.common.trigger;

    import java.util.Date;
    import java.util.Timer;
    import javax.servlet.ServletContextEvent;
    import javax.servlet.ServletContextListener;

    public class SystemListener implements ServletContextListener {
     private java.util.Timer timer = null;
     @Override
     public void contextDestroyed(ServletContextEvent event) {
      timer.cancel();
      event.getServletContext().log("定时器销毁");
     }

     @Override
     public void contextInitialized(ServletContextEvent event) {
      Date taskrun = new Date();
      System.out.println("taskrun:"+taskrun);
      timer = new Timer(true);
      event.getServletContext().log("定时器已启动");
      timer.schedule(new ListenerAction(),0,60*1000);
      event.getServletContext().log("已经添加任务调度表");
     }
    }

    2.2

    package com.common.trigger;

    import java.util.TimerTask;

    public class ListenerAction extends TimerTask {
     private static boolean isrunning = false;
     private static long dotaskmillis = 0l;
     @Override
     public void run() {
      System.out.println("dotaskmillis:"+dotaskmillis);
      if(!isrunning){
       isrunning = true;
       /*
        * 业务实现区
        */
       isrunning = false;
      }else{
       System.out.println("系统正忙,请稍后");
      }
     }
    }

    展开全文
  • 内含说详细明文档,和代码配置文件,初学者也能看懂代码
  • Java触发器CronTrigger

    2019-09-30 01:39:22
    摘要:如果需要像日历那样按日程来触发任务,而不是像SimpleTrigger 那样每隔特定的间隔时间触发,CronTriggers通常比SimpleTrigger更有用。 一、web.xml: <servlet> <servlet-name>boot</...

    摘要:如果需要像日历那样按日程来触发任务,而不是像SimpleTrigger 那样每隔特定的间隔时间触发,CronTriggers通常比SimpleTrigger更有用。

    一、web.xml:

    <servlet>
    		<servlet-name>boot</servlet-name>
    		<servletclass>xxx.xx.x.BootServlet</servlet-class>		
    		<load-on-startup>1</load-on-startup>
    </servlet>
    

    二、创建BootServlet.java

      

    public class BootServlet extends HttpServlet {
      public void init(ServletConfig config) throws ServletException {
        super.init(config);
        //初始化数据库
        new SrvInitDB().initDB();
        //启动预警触发器
        startExpenseRemain();
      }
        /***/
        public void startExpenseRemain(){
    	 try {
    	  Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
    	  scheduler.start();
    	  //每周的周五进行一次
    	  JobDetail expenseRemindJob = new JobDetail("ExpenseRemindJob",null,ExpenseRemindJob.class);
    	  CronTrigger expenseRemindJobTrigger=new CronTrigger("expenseRemindJobTrigger");
    	  expenseRemindJobTrigger.setStartTime(new Date());
    	  expenseRemindJobTrigger.setCronExpression("0 0 12 ? * FRI");		
    	  scheduler.scheduleJob(expenseRemindJob, expenseRemindJobTrigger);
    	 } catch (SchedulerException e) {
    	   e.printStackTrace();
    	 } catch (ParseException e) {
    	  e.printStackTrace();
    	 }
    	}
    }
    

    三、创建Job:ExpenseRemindJob.java

    public class ExpenseRemindJob implements Job{
      public void execute(JobExecutionContext arg0) throws JobExecutionException {
        sendExpenseSubjectRemind();
      }
      /***/
      public synchronized void sendExpenseSubjectRemind(){
    
      }
    
    }
    

     

    注:

    其中new CronTrigger("xxx").setCronExpression("0 0 12 ? * FRI");
    共计7个子表达式都描述了一个单独的日程细节。这些子表达式用空格分隔,分别表示: 
    1. Seconds 秒 
    2. Minutes 分钟 
    3. Hours 小时 
    4. Day-of-Month 月中的天 
    5. Month 月 
    6. Day-of-Week 周中的天 ("MON-FRI", "MON, WED, FRI"或者甚至"MON-WED,SAT")
    7. Year (optional field) 年(可选的域) 
    一个cron表达式的例子字符串为"0 0 12 ? * WED",这表示“每周三的中午12:00”。 

    所有的域中的值都有特定的合法范围,这些值的合法范围相当明显,例如:秒和分域的合法值为0到59,小时的合法范围是0到23,Day-of-Month中值得合法凡范围是0到31,但是需要注意不同的月份中的天数不同。月份的合法值是0到11。

        或者用字符串JAN,FEB MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV 及DEC来表示。Days-of-Week可以用1到7来表示(1=星期日)或者用字符串SUN, MON, TUE, WED, THU, FRI 和SAT来表示.

      通配符('*')可以被用来表示域中“每个”可能的值。因此在"Month"域中的*表示每个月,而在Day-Of-Week域中的*则表示“周中的每一天”。

      '?'字符可以用在day-of-month及day-of-week域中,它用来表示“没有指定值”。
        这对于需要指定一个或者两个域的值而不需要对其他域进行设置来说相当有用。

      '/'字符用来表示值的增量,例如, 如果分钟域中放入'0/15',它表示“每隔15分钟,从0开始”,
        如果在分钟域中使用'3/20',则表示“小时中每隔20分钟,从第3分钟开始”或者另外相同的形式就是'3,23,43'。

      'L'字符可以在day-of-month及day-of-week中使用,这个字符是"last"的简写,但是在两个域中的意义不同。

        例如,在day-of-month域中的"L"表示这个月的最后一天,即,一月的31日,非闰年的二月的28日。
        如果它用在day-of-week中,则表示"7"或者"SAT"。但是如果在day-of-week域中,这个字符跟在别的值后面,则表示"当月的最后的周XXX"。
        例如:"6L" 或者 "FRIL"都表示本月的最后一个周五。当使用'L'选项时,最重要的是不要指定列表或者值范围,否则会导致混乱。

      'W' 字符用来指定距离给定日最接近的周几(在day-of-week域中指定)。
        例如:如果你为day-of-month域指定为"15W",则表示“距离月中15号最近的周几”。

      '#'表示表示月中的第几个周几。例如:day-of-week域中的"6#3" 或者 "FRI#3"表示“月中第三个周五”。

    转载于:https://www.cnblogs.com/zhaoyhBlog/p/5996146.html

    展开全文
  • 我是放在客户端实现在指定时间触发SOCKET接口上传
  • 关于java触发器的经验分享

    千次阅读 2016-12-28 18:43:14
    触发器是我们在日常中经常使用,但近来却发现了这样一个问题:触发定制时间小于程序执行时间的问题,网络上有很多相关答案,可是我执行以后结果却大相径庭,于是做一番跟踪探索,今天和大家分享一下! ...

    触发器是我们在日常中经常使用,但近来却发现了这样一个问题:触发定制时间小于程序执行时间的问题,网络上有很多相关答案,可是我执行以后结果却大相径庭,于是做一番跟踪探索,今天和大家分享一下!

    工具/原料

    • Eclipse
    • win7
    • quartz框架

    方法/步骤

    1. 1

      今天遇到一个问题:在程序中加入的定时触发器,当时出现这样一个问题,触发器定时2秒,程序从后台查询数据经过复杂处理后时间超过了2秒,我查阅好些网络上说有可能触发器等待程序执行完毕后,在触发下一次,也有说是正在执行的程序被强制停止,然后触发器正常启动触发执行,可是都没有说到一种情况,而这种情况我恰好遇到了,大家也许没加到过,但是很普通,就是触发器正常执行,程序也正常执行,它的执行情况是这样的:首先触发器执行,然后开始正常程序操作,可是操作到一半的时候触发器的时间到了,这时候触发器启动了,再次来了一个线程,但是这个线程属于等待当中,然后继续上一次没有执行完的线程,直到上一次线程执行完毕以后开始执行本次正在等待的线程,然后刚开始一点点的时候触发器时间又到了,然后有开启了一个新的线程,此线程又在等待当中,然后执行上一次线程,上一次还没有执行完(快完的时候)触发器时间又到了,又来了一个线程,现在有两个线程在等待,然后继续前一个线程,前一个线程执行完毕以后,执行最先排队等待的线程。如此类推。最后我执行了进一个小时后等待线程达到了20-30个(没有具体统计,但大体看了一下,差不多了),可奇怪的是,这些直到最后也没有报错,也没有说什么内存不足啊什么的,这些线程都等哪去了?后来我执行了更长时间也没有问题,就是累计了大量的线程等待中,这个问题真是郁闷啊,郁闷点有如下几点,经过多方查阅和我相关实现经验,作如下回答,可能有不足之处可提出反馈和补充!

      关于java触发器的经验分享
    2. 2

      如上图是不是感觉混乱,混乱就对了,因为这是执行了很多次以后的,现在有很多线程在等待着执行,同时启动线程又来执行前面的程序,所以乱了,看第二个就是触发器时间足够等待程序执行的情况!(太长没有截图完,阶梯状的),好了让我们来看看问题和解答:

      1、每一次触发器执行的时候都是从头来的,它是怎么记住本次没有执行完毕的线程的而且还准确的记住位置,按道理来说既然触发器启动了,就程序从头开始了,那么前一次线程应该被迫终止啊;

      答:在这里就需要提到系统线程和进程的问题了!对于记住线程位置,那自然是系统的问题,系统默认情况下,一个进程你没有让他截止的时候他是不会截止的,而quartz启动下一个触发器的时候并不会自动让正在执行的进程结束,必须手动执行了,所以在触发器启动下一个线程的时候当前线程并没有终止,而是继续执行,并不会终止,新启动的线程!不好意思,你先等待一下!

    3. 3

      2、这个没有执行完的线程有是被谁记住的?触发器还是java程序的本身的线程池?(我用的定时调度器是quartz2.2.1);

      答:这个问题上面已经回答了,是系统记住的,和这两个都没有关系!因为一个线程启动以后进程就已经交给系统了!

    4. 4

      3、难道触发器还有记录进程的作用吗?

      答:不好意思,触发器暂时还没有这本事其他的暂时我也不清楚,目前我只知道quartz他能启动触发器,定时器和调度器,好像没有记录功能!

    5. 5

      结题:本次案例是为了写博客单独设计的案例,在我实际看法过程中是在连接数据库时发生了时间超过触发器时间而发现web出现已经结束了还在加载浏览器的问题,当时不知道什么原因,回来写了个案例做测试是发现原因,此处涉及商业秘密,就不阐述项目中的问题了!如果出现可有两解决办法:1、调整触发器时间让其足够执行程序;2、手动结束前一进程,否则会出现客户正在看着页面,突然什么都没做又来刷新了一遍,这可是不好的啊!

    展开全文
  • 有些人喜欢用java程序处理一些数据库事件,如时间.有人喜欢在java程序中new Date()然后持久化;再比如一个新闻留言次数、新闻被浏览次数,每次增加的时候,就把新闻表相关字段给update一下 也有一些朋友喜欢使用...

     有些人喜欢用java程序处理一些数据库事件,如时间.有人喜欢在java程序中new Date()然后持久化;再比如一个新闻留言次数、新闻被浏览次数,每次增加的时候,就把新闻表相关字段给update一下

     

    也有一些朋友喜欢使用数据库默认方法,比如时间处理,程序中insert时压根就没有时间,数据库中默认sysdate;也有的用触发器,留言表每增加一条记录,新闻表被触发器修改相关字段。

     

    到底使用哪种方法更好?个人觉得两种方法都有可行之处:比如吃鱼,从头开始还是从尾巴开始抑或是从肚子开始?没有人硬规定从哪里下口最好。纯属个人习惯、爱好。

     

    不过,从提高效率从发,习惯和爱好的观点就得靠后站了。举例:

     

     

    1、数据表的建立

    use login

    create table voteMaster   -----主表
    (
    voteId int primary key,    --编号
    voteTitle varchar(100) not null,   ---投票的项目
    voteSum int default 0   --总票数,默认为0
    )
    insert into voteMaster values(1,'选举工会主席',0)
    insert into voteMaster values(2,'对网站的建议',0)

    create table voteDetails    ---从表
    (
    voteId int foreign key references voteMaster(voteId),----外键 约束
    voteDetailsId int not null,
    voteItem varchar(20) not null,
    votNum int default 0,
    primary key(voteId,voteDetailsId)          ----连合主键
    )


    insert into voteDetails values(1,1,'于海涛',0)
    insert into voteDetails values(1,2,'王小刚',0)
    insert into voteDetails values(1,3,'张老三',0)

    insert into voteDetails values(2,1,'非常好',0)
    insert into voteDetails values(2,2,'好',0)
    insert into voteDetails values(2,3,'一般',0)
    insert into voteDetails values(2,4,'需要改进',0)

    2、触发器的创建

    create trigger updateMaster   -----创建触发器
    on voteDetails     -----触发器所建的表
    for update         -----触发器的条件
    as
    begin
               update voteMaster set voteSum=voteSum+1 where voteId=(select top 1 voteid from inserted)
    end

    最终效果:

    你只要对voteDetails 内votNum的数据进行更新,那么主表voteMaster 的voteSum就会加1,从而实现了对投票的总数的统计的实现。

    注意:    select top 1 voteid from deleted

              inserted表   deleted表
    insert          新插入的行                                             空
    update        数据库受到影响的行在更新之后的新值          数据库受到影响的行在更新之前的旧值 
    delete         空                                                          删除的行

     

    总结:本着提高程序效率着想,能用触发器的地方,还是尽量用触发器吧:)

     

     

     

    展开全文
  • 给位大侠们,我在sql server 2005 中建了一个触发器,想在插入数据时触发触发器,利用触发器写入当前时间,下面是我的建触发器语句: create trigger users_trigger on users after insert as update users ...
  • 如果需要计划一个任务在指定的时间执行,或者在指定的时间后以指定的间隔连续执行多次,比如希望在2005年1月12号上午11:22:54开始执行一个任务,在这之后每隔20分钟执行一次,共执行一次,这种情况下可以使用...
  • 开始和结束时间2.1.3. 优先级2.1.4. 过期策略2.2. 产生错失/补偿的原因三、`Cron`表达式3.1. 简述3.2. 结构3.3. 特殊字符含义3.4. 常用实例3.4. 对于`CronTrigger`触发器写法3.4.1. 主要写法3.4.2. 其他方式四、...
  • 触发器:Trigger,包括:SimpleTrigger和CronTrigger SimpleTrigger SimpleTrigger可以实现在一个指定时间段内执行一次作业任务或一个时间段内多次执行作业任务 public class MySimpleSchedule { public static ...
  • 可以基于数据库的值使用户具有操作数据库的某种权利#可以基于时间限制用户的操作,例如不允许下班后和节假日修改数据库数据。#可以基于数据库中的数据限制用户的操作,例如不允许股票的价格的升幅一次超过...
  • oracle触发器

    2015-08-29 18:22:00
    什么是触发器;(trigger) 1、数据库触发器是一个与表相关联的,存储的PL/SQL程序。...类似java程序的监听器的概念; 触发器的应用情景; 1.复杂的安全性检查;(禁止在非工作时间插入数据); 2.数据确认; 3.实现数...
  • Quartz简单触发器和cron触发器实例

    千次阅读 2018-08-19 11:53:48
    Quzrtz允许开发人员在不同的时间间隔(年、月、日、周、时等)定义触发器,到了特定的时间,触发相应的Job进行作业。 Quzrtz基本结构: 任务调度器Scheduler: scheduler是quartz的核心,管理job,trigger等。...
  • Mysql触发器入门总结

    2020-11-08 11:31:54
    前段时间,在儿童医院上线项目,有个需求是:Java技术往表里一直写入数据,需要我将这些数据在存到另一个表中。当然,业务逻辑也能实现,但是想直接通过mysql来解决掉这个问题。于是就接触到了触发器… 二、触发器...
  • 目录:apache beam 个人使用经验总结目录和入门指导(Java) 概念 触发器指 窗口的触发策略, 即窗口何时可以把该窗口内收集到的数据向下发送。 而手动设定触发器可以让我们做到2件事: 在窗口时间内, 我可以实现...
  • 触发器  建一个触发器,应包含以下部分:  触发器名字  触发器触发事件: insert,delete,update  激活时间: before,after  粒度: for each statement,for each row  过渡变量:
  • SQL Server 触发器讲解

    2017-09-14 19:31:22
    楼主是一名java开发程序员,现在因为业务情况要与另一家公司的.net程序进行数据对接,包括数据库中的数据同步,因为调接口的话,对方公司没有时间操作,所以我们选择了一个方便对方操作的方式,就是SQL Server的...
  • 是什么 触发器不同于定时器,触发器用在表中的记录上,每当表中的记录进行增、删、改操作时,则绑定在表上的对应的触发器被触发,进行对应的操作。...create trigger 触发器名字 触发时间 事件类型 ...
  • Quartz的主要接口类是Schedule、Job、Trigger,而触发器Trigger就是定时任务的触发时间,它规定安排了关联的任务会在什么时候执行,并且表明了再次执行的时机。 Quartz提供了多种触发器: 我们详细讲解最常用...
  • create table user_info_temp (  usId varchar2(20),  usNo varchar2(20), ...--oracle中如何查看当前系统时间 select sysdate from dual; --oracle中获取当前指定显示系统时间:yyyy 年份 selec
  • 定时触发器quartz 问题

    2011-11-21 18:08:34
    -- 定义触发时间 --> <!-- cron表达式 --> <!-- 每隔10秒执行一次 --> <value>0/10 * * * * ? <!-- 总管理类 如果将lazy-init='false'那么容器启动就会执行调度程序 --> ...
  • day70-oracle 12-触发器

    2017-04-04 16:59:00
    触发器类似于java中的监听器。 监听插入操作,执行一段PLSQL程序。 禁止在非工作时间插入数据,这就是复杂的安全性检查。 可以用触发器做审计:国家审计局每年做什么事情?就是看你这个单位有什么不好的事情。...
  • Java 语言的“事件触发器接口”。在 Total Control 的运行过程中存在一些特定的时间点,例如 Total Control 启动时,设备连接时,或设备断开连接时。Total Control 为这些时间点定义了一组专门的接口,可以使用户为...
  • 一个命令行工具,用于解析Java垃圾收集日志并进行分析,以支持针对OpenJDK和Sun / Oracle JDK的JVM调整和故障排除。 它与其他工具的不同之处在于,它超出了计算统计信息(例如最大暂停时间和吞吐量)的简单数学范围...
  • Quartz的触发器3.图解quartz工作流程4.quartz相关表达式5.简单小测试 1. Quartz介绍 任务调度框架“Quartz”是OpenSymphony开源组织在Job scheduling领域又一个开源项目,是完全由java开发的一个开源的任务日程管理...
  • 这是触发器的配置文件 [code="ruby"] <!--要调度的对象--> <bean id="lostCheck" class="com.java.Test"> <!-- 定义目标bean和bean中的方法 --> <value> CheckLost <!-- 定义触发的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 516
精华内容 206
热门标签
关键字:

java时间触发器

java 订阅