您的位置:首页 > 其它

JCrontab的一个简单的案例

2013-06-13 15:43 281 查看
JCrontab的一个简单的案例
最近学了一下JCrontab,一下是关于JCrontab的一个简单实例,供大家学习参考,如果有错误还请大家及时指出,谢谢大家。

1、普通文件持久化

1.      首先要下载JCrontab的相关jar包,Jcrontab-2.0-RC0.jar。

2.      在web.xml文件中配置JCrontab

<servlet>
    <servlet-name>LoadOnStartupServlet</servlet-name>
        <servlet-class>org.jcrontab.web.loadCrontabServlet</servlet-class>
       <init-param>
           <param-name>PROPERTIES_FILE</param-name>
           <!--此处路径是绝对路径 -->
           <param-value>C:\Users\pc\Workspaces\MyEclipse 8.5\jcrontab\src\jcrontab.properties</param-value>
       </init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>LoadOnStartupServlet</servlet-name>
    <url-pattern>/Startup</url-pattern>
</servlet-mapping>

3.  jcrontab.properties

#指定crontab文件的地址
org.jcrontab.data.file =C:/Users/pc/Workspaces/MyEclipse8.5/jcrontab/src/crontab
#配置持久化文件为org.jcrontab.data.FileSource,也就是普通文件
org.jcrontab.data.datasource = org.jcrontab.data.FileSource

注:想知道更多的配置信息,可以参考JCrontab jar包中的jcrontab.properties

4.  crontab文件(描述了任务的调度安排)

# Tasks planification configuration file.
# IMPORTANT: All the index begin in 0, except day of month and
#       month that begin in 1.
#              minute         0-59
#              hour           0-23
#              day of month   1-31
#              month          1-12
#              day of week    0-6 (0 is Sunday)
 
#每两分钟执行一次 CrontabMainTest的 main方法
 */2 * * * * com.jrontab.crontab.CrontabMainTest
#每一分钟执行一次 CrontabRunTest的 run方法,并传入参数Hello
World
 * * * * * com.jrontab.crontab.CrontabRunTest#run Hello World

注:想知道更多的配置信息,可以参考JCrontab jar包中的crontab文件

5下面是CrontabMainTest和CrontabRunTest的代码

public
class
CrontabMainTest {
 
    /**
     * @param args
     */
    public
static void
main(String[] args) {
       // TODO Auto-generated method stub
       System.out.println("hello world from main()");
    }
 
}

public
class
CrontabRunTest implements Runnable {
 
    private
static
String[] args;
    public CrontabRunTest(String[] args) {
       this.args=args;
    }
    public
void
run() {
       if(args.length>0&&args!=null){
           for(String str:args){
              System.out.println(str+"---->");
           }
       }
    }
 
}

2、xml文件持久化

1.导入相关的jar包:Jcrontab-2.0-RC0.jar,xerces.jar

2.和上面“普通文件持久化”的2 相同

3.Jcrontab.properties

#指定xml配置文件的地址(绝对路径)
org.jcrontab.data.file=C:/Users/pc/Workspaces/MyEclipse8.5/jcrontab/WebRoot/WEB-INF/crontab.xml
#配置xml解析器
org.xml.sax.driver=org.apache.xerces.parsers.SAXParser
#指定持久化文件为xml文件
org.jcrontab.data.datasource=org.jcrontab.data.XMLSource

5.      crontab.xml配置文件(描述了任务的调度安排)

每五分钟执行一次Crontab1的run方法

<?xmlversion="1.0"encoding="utf-8"?>
<crontab>
    <crontabentryid="2014">
    <seconds>0,5,10,15,20,25,30,35,40,45,50,55</seconds>
    <minutes>*</minutes>
    <hours>*</hours>
    <daysofmonth>*</daysofmonth>
    <months>*</months>
    <daysofweek>*</daysofweek>
    <years>*</years>
    <bussinesdays>true</bussinesdays>
    <startDate></startDate>
    <endDate></endDate>
    <class>com.jrontab.crontab.Crontab1</class>
    <method>run</method>
     <parameters></parameters>
    <description></description>
  </crontabentry>
</crontab>

6 Crontab1的代码

public
class
Crontab1 {
    public
static void
run(String[] args) {
       System.out.println("hello world!!!");
    }
}

3、配置文件中的绝对路径改成相对路径

以上两种配置都用的是Jcrontab-2.0-RC0.jar包中的org.jcrontab.web.loadCrontabServlet,配置文件都用的是绝对路径,这样每次一定项目到别的目录是就要更改配置文件,因此我们可以自定义一个servlet来替换org.jcrontab.web.loadCrontabServlet加载JCrontab(方法就是仿照loadCrontabServlet)。

复制源代码,并在添加红色框中的代码,如下图:

相对路径加载properties文件的代码

String propz = "/WEB-INF/jcrontab.properties";
/*String path = getServletConfig().getServletContext().getRealPath(".");
System.out.println("Real Path: ******" + path);*/
String props = getServletConfig().getInitParameter("PROPERTIES_FILE");
if (props == null) {
props = propz;
}
props = this.getServletContext().getRealPath(props);

相对路径加载properties文件里指定的路径的代码

datafile = this.getServletContext().getRealPath(datafile);

propObj.setProperty("org.jcrontab.data.file", datafile);

dd = propObj.getProperty("org.jcrontab.data.file");

这是LoadCrontabServlet的员代码,供大家参考

public
class
loadCrontabServlet
extends
HttpServlet {
   
    private Crontabcrontab =null;
        /** Refer to Servlet Javadoc
         * This method is invoked by the Servlet container
        * When the app-server starts.
         * @param config The ServletConfig
         */
    public
void
init(ServletConfig config) throws ServletException{
       super.init(config);
      
       try {
           System.out.print("Working?...");
                 process();
           System.out.println("OK");
       } catch (Exception e) {
           throw
new
ServletException(e);
       }
    }
 
    protected InputStream createPropertiesStream(String name)
       throws IOException {
       return
new
FileInputStream(name);
    }
     /**
      * This method  starts the Crontab and lets the system
      * Continue without wasting more resources.
      * This method can receive the config File as a variable in web.xml
      */       
    public
void
process() {
 
       String propz = "jcrontab.properties";
       //String path = getServletConfig().getServletContext()
       //                          .getRealPath(".");
       //System.out.println("Real Path: " + path);
       String props = getServletConfig()
              .getInitParameter("PROPERTIES_FILE");
       if (props ==null) {
           props = propz;
       }
       // Load the servlet config parameters
       // and override the properties
       Properties propObj = new Properties();
       try {
           InputStream input = createPropertiesStream(props);
           propObj.load(input);
       } catch (IOException ioe) {
           ioe.printStackTrace();
       }
        ServletConfig c = getServletConfig();
        Enumeration keys = c.getInitParameterNames();
        while (keys.hasMoreElements()) {
            String key = (String) keys.nextElement();
            propObj.setProperty(key, c.getInitParameter(key));
        }
 
       crontab = Crontab.getInstance();
 
       try {
           ShutdownHook();
           crontab.init(propObj);
       } catch (Exception e) {
           Log.error(e.toString(), e);
       }
    }
   
    /**
     * This method seths a ShutdownHook to the system
     *  This traps the CTRL+C or kill signal and shutdows
     * Correctly the system.
     * @throws Exception
     */
     public
void
ShutdownHook() throws Exception {
             Runtime.getRuntime().addShutdownHook(new Thread() {        
        public
void
run() {
                doStop();
              }
           });
    }
    
    public
void
destroy() {
        doStop();
    }
   
    public
void
doStop() {
        Log.info("Shutting down...");
           // stops the system in 100 miliseconds :-)
           crontab.uninit(100);
           Log.info("Stoped");
    }
}                } catch (Exception e) {

                            Log.error(e.toString(), e);

                   }

         }

        

    /**

          * This method seths a ShutdownHook to the system

          *  This traps the CTRL+C or kill signal and shutdows

          * Correctly the system.

          * @throws Exception

          */

          public void ShutdownHook() throws Exception {

             Runtime.getRuntime().addShutdownHook(new Thread() {        

                 public void run() {

                doStop();

                                     }

                            });

    }

    

    public void destroy() {

        doStop();

    }

   

    public void doStop() {

                 Log.info("Shutting down...");

                            // stops the system in 100 miliseconds :-)

                            crontab.uninit(100);

                            Log.info("Stoped");

    }

}

此时可以配置web.xml中的servlet为

<servlet-class>com.jrontab.servlet.JcrontabServlet</servlet-class>

此案例的代码已上传csdn,下载地址:git@code.csdn.net:jijijiujiu123/jcrontab.git

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  jcrontab 定时任务