spring的定时器管理

application-action.xml:

<bean id="storageYKTClient" class="com.talkweb.ecard.storage.action.StorageYKTClient" >
    </bean>
      
    <bean id="storageYKT" class="com.talkweb.ecard.storage.action.StorageYKTMonitor">
       <property name="databaseDao" ref="dataBaseDao"/>
       <property name="storageYKTClient" ref="storageYKTClient"/>
       <property name="monitorTime" value="-20"/>
   </bean>

   <!--  定义好具体要使用类的哪一个业务方法 -->  
   <bean id="StorageYKTMethod" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">  
        <!-- 目标bean -->  
        <property name="targetObject" ref="storageYKT"/>  
        <!-- 要执行目标bean的哪一个业务方法 -->
        <property name="targetMethod" value="monitor"/>
        <!-- 是否并发 非常重要 为防止任务阻塞设置为false-->  
        <property name="concurrent" value="false"/>  
    </bean> 
   
    <!-- 定义好调用模式: 如每隔20秒钟调用一次或每天的哪个时间调用一次等 -->  
    <bean id="StorageYKTTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">  
        <property name="jobDetail" ref="StorageYKTMethod"/>
        <property name="cronExpression" value="0/20 * * * * ?"/>  
    </bean>  
    <!--把定义好的任务放到调度(Scheduler)工厂里面 -->  
   <bean  class="org.springframework.scheduling.quartz.SchedulerFactoryBean">  
        <property name="triggers">  
            <list>  
                <ref bean="StorageYKTTrigger"/>
            </list>  
        </property>  
    </bean>

 

注意:注入的属性必须在monitor()这个方法中写,要不然会报空指针异常。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以使用Java的线程池来实现在Spring定时器循环中启动多线程。具体步骤如下: 1. 定义一个线程池,可以使用`java.util.concurrent.Executors`类中的静态方法创建线程池。 2. 在Spring定时器的方法中调用线程池的`submit()`方法,提交需要执行的任务。任务可以是实现了`java.lang.Runnable`接口的类或者是实现了`java.util.concurrent.Callable`接口的类。 3. 线程池会自动管理线程的数量,并且会自动创建新的线程来执行新的任务。如果任务队列中有多个任务等待执行,线程池会按照先进先出的顺序依次执行任务。 4. 如果需要停止或重启定时器,可以调用线程池的`shutdown()`方法来停止所有线程,并等待所有任务执行完成。如果需要重启定时器,可以重新创建一个新的线程池,并调用`submit()`方法提交任务。 下面是一个示例代码: ```java import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; public class MyTask implements Runnable { @Override public void run() { // 处理任务的代码 } } public class MyTimer { private ExecutorService executor = Executors.newFixedThreadPool(10); public void start() { // Spring定时器的方法 while (true) { executor.submit(new MyTask()); Thread.sleep(1000); } } public void stop() { executor.shutdown(); executor.awaitTermination(10, TimeUnit.SECONDS); } } ``` 在上面的代码中,`MyTask`类是需要执行的任务,`MyTimer`类是Spring定时器的类。`executor`是线程池对象,使用`newFixedThreadPool()`方法创建一个固定大小的线程池。`start()`方法是定时器的方法,在循环中调用`submit()`方法提交任务。`stop()`方法是停止定时器的方法,调用`shutdown()`方法停止所有线程,并等待所有任务执行完成。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值