• 10.5 实现任务的自动调度


    # Default Properties file for use by StdSchedulerFactory
    # to create a Quartz Scheduler Instance, if a different
    # properties file is not explicitly specified.
    #
    
    org.quartz.scheduler.instanceName: DefaultQuartzScheduler
    org.quartz.scheduler.rmi.export: false
    org.quartz.scheduler.rmi.proxy: false
    org.quartz.scheduler.wrapJobExecutionInUserTransaction: false
    
    org.quartz.threadPool.class: org.quartz.simpl.SimpleThreadPool
    org.quartz.threadPool.threadCount: 10
    org.quartz.threadPool.threadPriority: 5
    org.quartz.threadPool.threadsInheritContextClassLoaderOfInitializingThread: true
    
    org.quartz.jobStore.misfireThreshold: 60000
    
    org.quartz.jobStore.class: org.quartz.simpl.RAMJobStore

    以上是quartz-2.2.3的quartz.properties的配置文件.加了注释之后:

    # Default Properties file for use by StdSchedulerFactory
    # to create a Quartz Scheduler Instance, if a different
    # properties file is not explicitly specified.
    #
    #配置主调度器属性
    org.quartz.scheduler.instanceName: DefaultQuartzScheduler
    org.quartz.scheduler.rmi.export: false
    org.quartz.scheduler.rmi.proxy: false
    org.quartz.scheduler.wrapJobExecutionInUserTransaction: false
    
    #配置线程池
    #Quartz线程池的实现类
    org.quartz.threadPool.class: org.quartz.simpl.SimpleThreadPool
    # 线程池的线程数量
    org.quartz.threadPool.threadCount: 10
    # 线程池里线程的优先级
    org.quartz.threadPool.threadPriority: 5
    org.quartz.threadPool.threadsInheritContextClassLoaderOfInitializingThread: true
    
    #配置作业存储
    org.quartz.jobStore.misfireThreshold: 60000
    
    org.quartz.jobStore.class: org.quartz.simpl.RAMJobStore

    接下来再看一下quartz-1.8.6的quartz.properties的配置文件.

    #============================================================================
    # Configure Main Scheduler Properties  
    #============================================================================
    
    org.quartz.scheduler.instanceName = TestScheduler
    org.quartz.scheduler.instanceId = AUTO
    
    org.quartz.scheduler.skipUpdateCheck = true
    
    #============================================================================
    # Configure ThreadPool  
    #============================================================================
    
    org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool
    org.quartz.threadPool.threadCount = 12
    org.quartz.threadPool.threadPriority = 5
    
    #============================================================================
    # Configure JobStore  
    #============================================================================
    
    org.quartz.jobStore.misfireThreshold = 60000
    
    org.quartz.jobStore.class = org.quartz.simpl.RAMJobStore
    
    #org.quartz.jobStore.class = org.quartz.impl.jdbcjobstore.JobStoreTX
    #org.quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcjobstore.PostgreSQLDelegate
    #org.quartz.jobStore.useProperties = false
    #org.quartz.jobStore.dataSource = myDS
    #org.quartz.jobStore.tablePrefix = QRTZ_
    #org.quartz.jobStore.isClustered = false
    
    #============================================================================
    # Configure Datasources  
    #============================================================================
    
    #org.quartz.dataSource.myDS.driver = org.postgresql.Driver
    #org.quartz.dataSource.myDS.URL = jdbc:postgresql://localhost/dev
    #org.quartz.dataSource.myDS.user = jhouse
    #org.quartz.dataSource.myDS.password = 
    #org.quartz.dataSource.myDS.maxConnections = 5

    添加注释之后再看看

    #============================================================================
    # Configure Main Scheduler Properties 配置主调度器属性 
    #============================================================================
    
    org.quartz.scheduler.instanceName = TestScheduler
    org.quartz.scheduler.instanceId = AUTO
    
    org.quartz.scheduler.skipUpdateCheck = true
    
    #============================================================================
    # Configure ThreadPool  配置线程池 Quartz线程池的实现类
    #============================================================================
    
    org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool
    #=============================================================================
    # 线程池的线程数量 线程里线程的优先级
    #=============================================================================
    org.quartz.threadPool.threadCount = 12
    org.quartz.threadPool.threadPriority = 5
    
    #============================================================================
    # Configure JobStore  配置作业存储
    #============================================================================
    
    org.quartz.jobStore.misfireThreshold = 60000
    
    org.quartz.jobStore.class = org.quartz.simpl.RAMJobStore
    
    #org.quartz.jobStore.class = org.quartz.impl.jdbcjobstore.JobStoreTX
    #org.quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcjobstore.PostgreSQLDelegate
    #org.quartz.jobStore.useProperties = false
    #org.quartz.jobStore.dataSource = myDS
    #org.quartz.jobStore.tablePrefix = QRTZ_
    #org.quartz.jobStore.isClustered = false
    
    #============================================================================
    # Configure Datasources  
    #============================================================================
    
    #org.quartz.dataSource.myDS.driver = org.postgresql.Driver
    #org.quartz.dataSource.myDS.URL = jdbc:postgresql://localhost/dev
    #org.quartz.dataSource.myDS.user = jhouse
    #org.quartz.dataSource.myDS.password = 
    #org.quartz.dataSource.myDS.maxConnections = 5
    import java.util.Date;
    
    import org.quartz.Job;
    import org.quartz.JobExecutionContext;
    import org.quartz.JobExecutionException;
    
    
    public class TestJob implements Job{
        /*
         * execute方法体是被调度的作业体
         * (non-Javadoc)
         * @see org.quartz.Job#execute(org.quartz.JobExecutionContext)
         */
        //判断作业是否执行的旗标
        private boolean isRunning = false;
        @Override
        public void execute(JobExecutionContext arg0) 
                throws JobExecutionException {
            // TODO Auto-generated method stub
           //如果作业没有被调度
           if(!isRunning)
           {
               System.out.println(new Date() + "    作业被调度。     ");
               //循环100次来模拟任务的执行
               for (int i = 0; i < 100; i++) {
                System.out.println("作业完成" + (i+1) + "%");
                
                try {
                    Thread.sleep(100);
                } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
               System.out.println(new Date() + "  作业调度结束。 ");
           }
           //如果作业正在运行,即使获得调度,也立即退出
           else{
               System.out.println(new Date() + "任务退出");
           }
           
            
        }
    }
    import org.quartz.JobDetail;
    import org.quartz.Scheduler;
    import org.quartz.SchedulerException;
    import org.quartz.SimpleTrigger;
    import org.quartz.Trigger;
    import org.quartz.impl.StdSchedulerFactory;
    
    
    public class MyQuartzServer {
       public static void main(String[] args) {
           MyQuartzServer server = new MyQuartzServer();
           try {
            server.startScheduler();
        } catch (SchedulerException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
    //执行调度
    private void startScheduler() throws SchedulerException{
        //使用工厂创建调度器实例
        Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
        //以作业创建JobDetail实例
        JobDetail jobDetail= new JobDetail("dd",Scheduler.DEFAULT_GROUP,TestJob.class);
        //创建trigger,创建一个简单的调度器
        //指定该任务被重复调度50次,每次间隔20秒
        Trigger trigger = new SimpleTrigger("dd",Scheduler.DEFAULT_GROUP,50,20000);        
        //调度器将作业与trigger关联起来
        scheduler.scheduleJob(jobDetail, trigger);
        //开始调度
        scheduler.start();
    }
    }
    SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
    SLF4J: Defaulting to no-operation (NOP) logger implementation
    SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
    Sun Nov 12 17:19:08 CST 2017    作业被调度。     
    作业完成1%
    作业完成2%
    作业完成3%
    作业完成4%
    作业完成5%
    作业完成6%
    作业完成7%
    作业完成8%
    作业完成9%
    作业完成10%
    作业完成11%
    作业完成12%
    作业完成13%
    作业完成14%
    作业完成15%
    作业完成16%
    作业完成17%
    作业完成18%
    作业完成19%
    作业完成20%
    作业完成21%
    作业完成22%
    作业完成23%
    作业完成24%
    作业完成25%
    作业完成26%
    作业完成27%
    作业完成28%
    作业完成29%
    作业完成30%
    作业完成31%
    作业完成32%
    作业完成33%
    作业完成34%
    作业完成35%
    作业完成36%
    作业完成37%
    作业完成38%
    作业完成39%
    作业完成40%
    作业完成41%
    作业完成42%
    作业完成43%
    作业完成44%
    作业完成45%
    作业完成46%
    作业完成47%
    作业完成48%
    作业完成49%
    作业完成50%
    作业完成51%
    作业完成52%
    作业完成53%
    作业完成54%
    作业完成55%
    作业完成56%
    作业完成57%
    作业完成58%
    作业完成59%
    作业完成60%
    作业完成61%
    作业完成62%
    作业完成63%
    作业完成64%
    作业完成65%
    作业完成66%
    作业完成67%
    作业完成68%
    作业完成69%
    作业完成70%
    作业完成71%
    作业完成72%
    作业完成73%
    作业完成74%
    作业完成75%
    作业完成76%
    作业完成77%
    作业完成78%
    作业完成79%
    作业完成80%
    作业完成81%
    作业完成82%
    作业完成83%
    作业完成84%
    作业完成85%
    作业完成86%
    作业完成87%
    作业完成88%
    作业完成89%
    作业完成90%
    作业完成91%
    作业完成92%
    作业完成93%
    作业完成94%
    作业完成95%
    作业完成96%
    作业完成97%
    作业完成98%
    作业完成99%
    作业完成100%
    Sun Nov 12 17:19:18 CST 2017  作业调度结束。 
    Sun Nov 12 17:19:28 CST 2017    作业被调度。     
    作业完成1%
    作业完成2%
    作业完成3%
    作业完成4%
    作业完成5%
    作业完成6%
    作业完成7%
    作业完成8%
    作业完成9%
    作业完成10%
    作业完成11%
    作业完成12%
    作业完成13%
    作业完成14%
    作业完成15%
    作业完成16%
    作业完成17%
    作业完成18%
    作业完成19%
    作业完成20%
    作业完成21%
    作业完成22%
    作业完成23%
    作业完成24%
    作业完成25%
    作业完成26%
    作业完成27%
    作业完成28%
    作业完成29%
    作业完成30%
    作业完成31%
    作业完成32%
    作业完成33%
    作业完成34%
    作业完成35%
    作业完成36%
    作业完成37%
    作业完成38%
    作业完成39%
    作业完成40%
    作业完成41%
    作业完成42%
    作业完成43%
    作业完成44%
    作业完成45%
    作业完成46%
    作业完成47%
    作业完成48%
    作业完成49%
    作业完成50%
    作业完成51%
    作业完成52%
    作业完成53%
    作业完成54%
    作业完成55%
    作业完成56%
    作业完成57%
    作业完成58%
    作业完成59%
    作业完成60%
    作业完成61%
    作业完成62%
    作业完成63%
    作业完成64%
    作业完成65%
    作业完成66%
    作业完成67%
    作业完成68%
    作业完成69%
    作业完成70%
    作业完成71%
    作业完成72%
    作业完成73%
    作业完成74%
    作业完成75%
    作业完成76%
    作业完成77%
    作业完成78%
    作业完成79%
    作业完成80%
    作业完成81%
    作业完成82%
    作业完成83%
    作业完成84%
    作业完成85%
    作业完成86%
    作业完成87%
    作业完成88%
    作业完成89%
    作业完成90%
    作业完成91%
    作业完成92%
    作业完成93%
    作业完成94%
    作业完成95%
    作业完成96%
    作业完成97%
    作业完成98%
    作业完成99%
    作业完成100%
    Sun Nov 12 17:19:38 CST 2017  作业调度结束。 
    Sun Nov 12 17:19:48 CST 2017    作业被调度。     
    作业完成1%
    作业完成2%
    作业完成3%
    作业完成4%
    作业完成5%
    作业完成6%
    作业完成7%
    作业完成8%
    作业完成9%
    作业完成10%
    作业完成11%
    作业完成12%
    作业完成13%
    作业完成14%
    作业完成15%
    作业完成16%
    作业完成17%
    作业完成18%
    作业完成19%
    作业完成20%
    作业完成21%
    作业完成22%
    作业完成23%
    作业完成24%
    作业完成25%
    作业完成26%
    作业完成27%
    作业完成28%
    作业完成29%
    作业完成30%
    作业完成31%
    作业完成32%
    作业完成33%
    作业完成34%
    作业完成35%
    作业完成36%
    作业完成37%
    作业完成38%
    作业完成39%
    作业完成40%
    作业完成41%
    作业完成42%
    作业完成43%
    作业完成44%
    作业完成45%
    作业完成46%
    作业完成47%
    作业完成48%
    作业完成49%
    作业完成50%
    作业完成51%
    作业完成52%
    作业完成53%
    作业完成54%
    作业完成55%
    作业完成56%
    作业完成57%
    作业完成58%
    作业完成59%
    作业完成60%
    作业完成61%
    作业完成62%
    作业完成63%
    作业完成64%
    作业完成65%
    作业完成66%
    作业完成67%
    作业完成68%
    作业完成69%
    作业完成70%
    作业完成71%
    作业完成72%
    作业完成73%
    作业完成74%
    作业完成75%
    作业完成76%
    作业完成77%
    作业完成78%
    作业完成79%
    作业完成80%
    作业完成81%
    作业完成82%
    作业完成83%
    作业完成84%
    作业完成85%
    作业完成86%
    作业完成87%
    作业完成88%
    作业完成89%
    作业完成90%
    作业完成91%
    作业完成92%
    作业完成93%
    作业完成94%
    作业完成95%
    作业完成96%
    作业完成97%
    作业完成98%
    作业完成99%
    作业完成100%
    Sun Nov 12 17:19:58 CST 2017  作业调度结束。 
    Sun Nov 12 17:20:08 CST 2017    作业被调度。     
    作业完成1%
    作业完成2%
    作业完成3%
    作业完成4%
    作业完成5%
    作业完成6%
    作业完成7%
    作业完成8%
    作业完成9%
    作业完成10%
    作业完成11%
    作业完成12%
    作业完成13%
    作业完成14%
    作业完成15%
    作业完成16%
    作业完成17%
    作业完成18%
    作业完成19%
    作业完成20%
    作业完成21%
    作业完成22%
    作业完成23%
    作业完成24%
    作业完成25%
    作业完成26%
    作业完成27%
    作业完成28%
    作业完成29%
    作业完成30%
    作业完成31%
    作业完成32%
    作业完成33%
    作业完成34%
    作业完成35%
    作业完成36%
    作业完成37%
    作业完成38%
    作业完成39%
    作业完成40%
    作业完成41%
    作业完成42%
    作业完成43%
    作业完成44%
    作业完成45%
    作业完成46%
    作业完成47%
    作业完成48%
    作业完成49%
    作业完成50%
    作业完成51%
    作业完成52%
    作业完成53%
    作业完成54%
    作业完成55%
    作业完成56%
    作业完成57%
    作业完成58%
    作业完成59%
    作业完成60%
    作业完成61%
    作业完成62%
    作业完成63%
    作业完成64%
    作业完成65%
    作业完成66%
    作业完成67%
    作业完成68%
    作业完成69%
    作业完成70%
    作业完成71%
    作业完成72%
    作业完成73%
    作业完成74%
    作业完成75%
    作业完成76%
    作业完成77%
    作业完成78%
    作业完成79%
    作业完成80%
    作业完成81%
    作业完成82%
    作业完成83%
    作业完成84%
    作业完成85%
    作业完成86%
    作业完成87%
    作业完成88%
    作业完成89%
    作业完成90%
    作业完成91%
    作业完成92%
    作业完成93%
    作业完成94%
    作业完成95%
    作业完成96%
    作业完成97%
    作业完成98%
    作业完成99%
    作业完成100%
    Sun Nov 12 17:20:18 CST 2017  作业调度结束。 
    Sun Nov 12 17:20:28 CST 2017    作业被调度。     
    作业完成1%
    作业完成2%
    作业完成3%
    作业完成4%
    作业完成5%
    作业完成6%
    作业完成7%
    作业完成8%
    作业完成9%
    作业完成10%
    作业完成11%
    作业完成12%
    作业完成13%
    作业完成14%
    作业完成15%
    作业完成16%
    作业完成17%
    作业完成18%
    作业完成19%
    作业完成20%
    作业完成21%
    作业完成22%
    作业完成23%
    作业完成24%
    作业完成25%
    作业完成26%
    作业完成27%
    作业完成28%
    作业完成29%
    作业完成30%
    作业完成31%
    作业完成32%
    作业完成33%
    作业完成34%
    作业完成35%
    作业完成36%
    作业完成37%
    作业完成38%
    作业完成39%
    作业完成40%
    作业完成41%
    作业完成42%
    作业完成43%
    作业完成44%
    作业完成45%
    作业完成46%
    作业完成47%
    作业完成48%
    作业完成49%
    作业完成50%
    作业完成51%
    作业完成52%
    作业完成53%
    作业完成54%
    作业完成55%
    作业完成56%
    作业完成57%
    作业完成58%
    作业完成59%
    作业完成60%
    作业完成61%
    作业完成62%
    作业完成63%
    作业完成64%
    作业完成65%
    作业完成66%
    作业完成67%
    作业完成68%
    作业完成69%
    作业完成70%
    作业完成71%
    作业完成72%
    作业完成73%
    作业完成74%
    作业完成75%
    作业完成76%
    作业完成77%
    作业完成78%
    作业完成79%
    作业完成80%
    作业完成81%
    作业完成82%
    作业完成83%
    作业完成84%
    作业完成85%
    作业完成86%
    作业完成87%
    作业完成88%
    作业完成89%
    作业完成90%
    作业完成91%
    作业完成92%
    作业完成93%
    作业完成94%
    作业完成95%
    作业完成96%
    作业完成97%
    作业完成98%
    作业完成99%
    作业完成100%
    Sun Nov 12 17:20:38 CST 2017  作业调度结束。 
    Sun Nov 12 17:20:48 CST 2017    作业被调度。     
    作业完成1%
    作业完成2%
    作业完成3%
    作业完成4%
    作业完成5%
    作业完成6%
    作业完成7%
    作业完成8%
    作业完成9%
    作业完成10%
    作业完成11%
    作业完成12%
    作业完成13%
    作业完成14%
    作业完成15%
    作业完成16%
    作业完成17%
    作业完成18%
    作业完成19%
    作业完成20%
    作业完成21%
    作业完成22%
    作业完成23%
    作业完成24%
    作业完成25%
    作业完成26%
    作业完成27%
    作业完成28%
    作业完成29%
    作业完成30%
    作业完成31%
    作业完成32%
    作业完成33%
    作业完成34%
    作业完成35%
    作业完成36%
    作业完成37%
    作业完成38%
    作业完成39%
    作业完成40%
    作业完成41%
    作业完成42%
    作业完成43%
    作业完成44%
    作业完成45%
    作业完成46%
    作业完成47%
    作业完成48%
    作业完成49%
    作业完成50%
    作业完成51%
    作业完成52%
    作业完成53%
    作业完成54%
    作业完成55%
    作业完成56%
    作业完成57%
    作业完成58%
    作业完成59%
    作业完成60%
    作业完成61%
    作业完成62%
    作业完成63%
    作业完成64%
    作业完成65%
    作业完成66%
    作业完成67%
    作业完成68%
    作业完成69%
    作业完成70%
    作业完成71%
    作业完成72%
    作业完成73%
    作业完成74%
    作业完成75%
    作业完成76%
    作业完成77%
    作业完成78%
    作业完成79%
    作业完成80%
    作业完成81%
    作业完成82%
    作业完成83%
    作业完成84%
    作业完成85%
    作业完成86%
    作业完成87%
    作业完成88%
    作业完成89%
    作业完成90%
    作业完成91%
    作业完成92%
    作业完成93%
    作业完成94%
    作业完成95%
    作业完成96%
    作业完成97%
    作业完成98%
    作业完成99%
    作业完成100%
    Sun Nov 12 17:20:58 CST 2017  作业调度结束。 
    Sun Nov 12 17:21:08 CST 2017    作业被调度。     
    作业完成1%
    作业完成2%
    作业完成3%
    作业完成4%
    作业完成5%
    作业完成6%
    作业完成7%
    作业完成8%
    作业完成9%
    作业完成10%
    作业完成11%
    作业完成12%
    作业完成13%
    作业完成14%
    作业完成15%
    作业完成16%
    作业完成17%
    作业完成18%
    作业完成19%
    作业完成20%
    作业完成21%
    作业完成22%
    作业完成23%
    作业完成24%
    作业完成25%
    作业完成26%
    作业完成27%
    作业完成28%
    作业完成29%
    作业完成30%
    作业完成31%
    作业完成32%
    作业完成33%
    作业完成34%
    作业完成35%
    作业完成36%
    作业完成37%
    作业完成38%
    作业完成39%
    作业完成40%
    作业完成41%
    作业完成42%
    作业完成43%
    作业完成44%
    作业完成45%
    作业完成46%
    作业完成47%
    作业完成48%
    作业完成49%
    作业完成50%
    作业完成51%
    作业完成52%
    作业完成53%
    作业完成54%
    作业完成55%
    作业完成56%
    作业完成57%
    作业完成58%
    作业完成59%
    作业完成60%
    作业完成61%
    作业完成62%
    作业完成63%
    作业完成64%
    作业完成65%
    作业完成66%
    作业完成67%
    作业完成68%
    作业完成69%
    作业完成70%
    作业完成71%
    作业完成72%
    作业完成73%
    作业完成74%
    作业完成75%
    作业完成76%
    作业完成77%
    作业完成78%
    作业完成79%
    作业完成80%
    作业完成81%
    作业完成82%
    作业完成83%
    作业完成84%
    作业完成85%
    作业完成86%
    作业完成87%
    作业完成88%
    作业完成89%
    作业完成90%
    作业完成91%
    作业完成92%
    作业完成93%
    作业完成94%
    作业完成95%
    作业完成96%
    作业完成97%
    作业完成98%
    作业完成99%
    作业完成100%
    Sun Nov 12 17:21:18 CST 2017  作业调度结束。 

    第一个考勤作业:PunchJob。系统每天为员工自动插入两次“旷工”考勤记录,而每次员工实际打卡时将会修改对应的考勤记录。

    package org.crazyit.hrsystem.schedule;
    
    import org.crazyit.hrsystem.service.EmpManager;
    import org.quartz.JobExecutionContext;
    import org.quartz.JobExecutionException;
    import org.springframework.scheduling.quartz.QuartzJobBean;
    
    public class PunchJob extends QuartzJobBean{
        //判断作业是否执行的旗标
        private boolean isRunning = false;
        //该作业类所依赖的业务逻辑组件
        private EmpManager empMgr;
        
        public void setEmpMgr(EmpManager empMgr) {
            this.empMgr = empMgr;
        }
    
        @Override
        protected void executeInternal(JobExecutionContext ctx)
                throws JobExecutionException {
            // TODO Auto-generated method stub
            if(!isRunning){
                System.out.println("开始调度自动打卡");
                isRunning = true;
                //调用业务逻辑方法
                empMgr.autoPunch();
                isRunning = false;
            }
        }
        
    }

    第二个是工资结算作业:PayJob。该作业在每月3日自动结算每个员工上个月的工资。

    package org.crazyit.hrsystem.schedule;
    
    import org.crazyit.hrsystem.service.EmpManager;
    import org.quartz.JobExecutionContext;
    import org.quartz.JobExecutionException;
    import org.springframework.scheduling.quartz.QuartzJobBean;
    
    public class PayJob extends QuartzJobBean{
        //判断作业是否执行的旗标
        private boolean isRunning = false;
        //该作业类所依赖的业务逻辑组件
        private EmpManager empMgr;
        
        public void setEmpMgr(EmpManager empMgr) {
            this.empMgr = empMgr;
        }
        //定义任务执行体
        @Override
        protected void executeInternal(JobExecutionContext arg0)
                throws JobExecutionException {
            // TODO Auto-generated method stub
            if(!isRunning){
                System.out.println("开始调度自动结算工资");
                isRunning = true;
                //调用业务逻辑方法
                empMgr.autoPay();
                isRunning = false;
            }
        }
    
    }

    10.6 实现系统Web层

     

     

    ActionSupport是需要导入xwork-2.1.1.jar包才可以.

  • 相关阅读:
    在页面生命周期执行时 Page 对象在 SaveState 阶段都发生了什么事?
    接收Firfox RESTClient #Post请求
    c# 单例模式[Singleton]之深夜闲聊
    JQuery 之 Ajax 异步和同步浅谈
    [模板]数学整合
    Yandex插件使用说明——Slager_Z
    模板练习(LUOGU)
    数学整合 新(LUOGU)
    [NOI.AC]DELETE(LIS)
    [NOI.AC]COUNT(数学)
  • 原文地址:https://www.cnblogs.com/ZHONGZHENHUA/p/7819912.html
Copyright © 2020-2023  润新知