Spring定时器Quartz,定时调用存储过程

来源:互联网 发布:网络摄像机球机 编辑:程序博客网 时间:2024/06/05 14:20
  1. maven依赖导入:
<dependency>              <groupId>org.quartz-scheduler</groupId>              <artifactId>quartz</artifactId>              <version>1.8.5</version>          </dependency> <spring.version>4.0.8.RELEASE</spring.version> <dependency>            <groupId>org.springframework</groupId>            <artifactId>spring-context</artifactId>            <version>${spring.version}</version>

2、配置:

<!-- 定时加载的类 -->    <bean id="time1" class="com.gent.timeTest"></bean>     <!-- 定时器的配置 -->     <bean id="timeDitail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">     <property name="targetObject" ref="time1"></property><!-- 指定任务类  -->     <property name="targetMethod" value="getTime"></property><!-- 指定任务方法 -->     </bean>     <!-- 定时时间间隔触发器 -->     <bean id="timeTigger" class="org.springframework.scheduling.quartz.CronTriggerBean">     <property name="jobDetail" ref="timeDitail"></property>     <property name="cronExpression">     <value>0 27 08 * * ?</value>     </property>     </bean>     <!-- 启动定时器 -->     <bean id="startJob" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">     <property name="triggers">     <list>     <ref bean="timeTigger"/>     </list>     </property>     </bean>

3、定时任务:

public class timeTest {    public timeTest(){}    @Test    public void getTime(){        System.out.println("定时任务启动");        /**         * 1,定义变量         */        String driverClass ="oracle.jdbc.OracleDriver";        String url="jdbc:oracle:thin:@192.168.10.20:1421:sy";        String user="sy";        String password="sy";        try{            //映射            Class.forName(driverClass);            //2、获取连接对象            Connection connection=DriverManager.getConnection(url,user,password);            //3.创建执行存储过程的语句对象            String sql="{call TestProcess()}";            CallableStatement callableStatement=connection.prepareCall(sql);            /**            *告诉JDBC,这些个参数,哪些是输出参数,输出参数的类型用java.sql.Types来指定            *下面的意思是,第3个?和第4个?是输出参数,类型是INTEGER的            *Types后面具体写什么类型,得看你的存储过程参数怎么定义的            */            //CallableStatement cstmt = conn.prepareCall("{call p(?,?,?,?)}");            //4、设置参数            /*            cstmt.registerOutParameter(3, Types.INTEGER);            cstmt.registerOutParameter(4, Types.INTEGER);            */            /**            *在我这里第1个?和第2个?是输入参数,第3个是输出参数,第4个既输入又输出            *下面是设置他们的值,第一个设为3,第二个设为4,第4个设置为5            *没设第3个,因为它是输出参数            */            /*            cstmt.setInt(1, 3);            cstmt.setInt(2, 4);            cstmt.setInt(4, 5);            */            //5、执行            //callableStatement.executeQuery();            callableStatement.execute();            //6、获取数据            //  int three = cstmt.getInt(3);            ResultSet set=callableStatement.getResultSet();            System.out.print("set:"+set);            //释放资源        }catch(Exception e){            e.printStackTrace();        }    }}

4、存储过程:

create or replace procedure TestProcess
AS

innamee varchar2(2000);

cursor cour is select name from sys_user where del_flag=’0’;

Begin

open cour;

loop

fetch cour into innamee;

exit when cour%NOTFOUND;

DBMS_OUTPUT.PUT_LINE(cour);

end loop;

close cour;

End;

5.
附表:
“0 0 12 * * ?” 每天中午12点触发
“0 15 10 ? * *” 每天上午10:15触发
“0 15 10 * * ?” 每天上午10:15触发
“0 15 10 * * ? *” 每天上午10:15触发
“0 15 10 * * ? 2005” 2005年的每天上午10:15触发
“0 * 14 * * ?” 在每天下午2点到下午2:59期间的每1分钟触发
“0 0/5 14 * * ?” 在每天下午2点到下午2:55期间的每5分钟触发
“0 0/5 14,18 * * ?” 在每天下午2点到2:55期间和下午6点到6:55期间的每5分钟触发
“0 0-5 14 * * ?” 在每天下午2点到下午2:05期间的每1分钟触发
“0 10,44 14 ? 3 WED” 每年三月的星期三的下午2:10和2:44触发
“0 15 10 ? * MON-FRI” 周一至周五的上午10:15触发
“0 15 10 15 * ?” 每月15日上午10:15触发
“0 15 10 L * ?” 每月最后一日的上午10:15触发
“0 15 10 ? * 6L” 每月的最后一个星期五上午10:15触发
“0 15 10 ? * 6L 2002-2005” 2002年至2005年的每月的最后一个星期五上午10:15触发
“0 15 10 ? * 6#3” 每月的第三个星期五上午10:15触发

原创粉丝点击