quartz及集群

来源:互联网 发布:linux应用放到哪里 编辑:程序博客网 时间:2024/06/11 18:10

准备工作:下载quartz1.7.3完整包,解压出来包含数据库表生成脚本,可按目录选择所需数据库

使用Spring+Quartz实现集群(实现的demo中使用了spring2.5+quartz1.7.3)。需要修复一个bug,步骤如网上流行的处理方法,有两种方式

demo中使用了其中一种,添加两个文件BeanInvokingJobDetailFactoryBean.java和MethodInvokingJobDetailFactoryBean.java,这个作用于

代替原来的org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean类(网上搜索可下载),因为这个不支持序列化到持久化数据库中,

配置文件修改为:

=========================================================================================

<bean id="dailyBillJobDetail" class="com.autelan.auteview.lib.util.MethodInvokingJobDetailFactoryBean">


        <property name="targetObject" ref="dailyBillJob"/>


        <property name="targetMethod" value="execute"/>


        <property name="shouldRecover" value="true"/>
        </bean>

===========================================================================================

接下来是实现执行操作任务类:这个类得实现序列化接口:

============================================================================================

public class DailyBillJob implements Serializable{
  private static int counter = 0;  
  private static final long serialVersionUID = 122323233244334343L;  
   //private static final Logger logger = (Logger) LogFactory.getLog(DailyBillJob.class);
 
   protected void execute(){  
      // public void execute(){
       long ms = System.currentTimeMillis();  
       System.out.println("\t\t" + new Date(ms));  
       System.out.println("(" + counter++ + ")");  
       }
}

============================================================================================

再这配置好属性文件xxx.properties(存放src目录下):

这个文件主要实现:集群共享数据库信息配置以及线程池

配置如下:

===========================================================================================

#=================================
#Configure Main Scheduler Properties
#=================================
org.quartz.scheduler.instanceName = quartzScheduler  
org.quartz.scheduler.instanceId = AUTO


#==============================================================    
#Configure JobStore    
#==============================================================   
org.quartz.jobStore.class = org.quartz.impl.jdbcjobstore.JobStoreTX  
org.quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcjobstore.StdJDBCDelegate  
org.quartz.jobStore.tablePrefix = QRTZ_  
org.quartz.jobStore.isClustered = true  
org.quartz.jobStore.clusterCheckinInterval = 20000    
org.quartz.jobStore.dataSource = myDS  


#==============================================================    
#Configure DataSource    
#==============================================================   
org.quartz.dataSource.myDS.driver = sun.jdbc.odbc.JdbcOdbcDriver 
org.quartz.dataSource.myDS.URL = jdbc:sqlserver://127.0.0.1:1433;SelectMethod=cursor;useUnicode=true;characterEncoding=UTF-8;DatabaseName=myquartz_db 
#org.quartz.dataSource.myDS.URL = jdbc:sqlserver://127.0.0.1:1433;DatabaseName=jh_baidu_push
org.quartz.dataSource.myDS.user = sa  
org.quartz.dataSource.myDS.password = test  
org.quartz.dataSource.myDS.maxConnections = 30  
#org.quartz.dataSource.myDS.validationQuery=select 0 from dual
#==============================================================    
#Configure ThreadPool    
#==============================================================   
org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool  
org.quartz.threadPool.threadCount = 10  
org.quartz.threadPool.threadPriority = 5  
org.quartz.threadPool.threadsInheritContextClassLoaderOfInitializingThread =true 

=======================================================================================================

最后就是现在执行配置化好的东西:

建立main函数主类

基本实现如下:

====================================================================

public class main_test {
  public static void main(String[] args)
   {
       System.out.println("Test start.");
       ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
       //如果配置文件中将startQuertz bean的lazy-init设置为false 则不用实例化
       //context.getBean("startQuertz");
       System.out.print("Test end.");
   }
}

====================================================================

至此基本完成!

1 0
原创粉丝点击