您的位置:首页 > 编程语言 > Java开发

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

2017-09-25 13:59 246 查看
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触发
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: