spring写一个timer之后,不启动问题分析。
源文件:
1. timer类文件
@Component("task")
@Lazy
public class Task {
public Task(){
System.out.println("construct Task!!!");
}
DateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
@Scheduled(cron = "* * * * * ?")
public void pushQuestionnaire() {
System.out.println("定时任务1,自动执行:" + format.format(new Date()));
}
}
2. spring-config.xml主要配置
<context:annotation-config />
<context:component-scan base-package="heller"/>
<!--开启配置-->
<task:scheduler id="qbScheduler" pool-size="10"/>
<task:annotation-driven scheduler="qbScheduler" mode="proxy"/>
3. 启动spring
public class Start {
public static void main(String[] args) throws InterruptedException {
ApplicationContext context = new ClassPathXmlApplicationContext("./spring-config.xml");
}
}
问题
启动Start类后,不能执行Task里面定义的任务
分析
1. 我们看spring-config.xml里面的配置
<task:scheduler id="qbScheduler" pool-size="10"/>表示创建了一个计划任务的线程池实例。
<task:annotation-driven scheduler="qbScheduler" mode="proxy"/>这个注解表示从spring管理的实例中扫描,看是否有实例带有@Scheduled标签的类,如果有则把这个实例放入任务线程池中。而我们的Task类上的注解Lazy默认为true,也就是不会创建实例,所以也就不会加到任务线程池中。
解决办法
在Task类上面加入@Lazy(false)注解
分享到:
相关推荐
请注意,`Timer`并不是线程安全的,如果需要处理多个并发任务,建议使用`ScheduledExecutorService`,它是Spring `@Scheduled`注解背后的实际实现。 总结,Spring中使用`Timer`和`TimerTask`来实现精确时间运行的...
4. **启动应用**:最后,启动Spring应用,`scheduleTask`方法会在指定的cron表达式触发时执行,调用`HelloWorldTask`的`run`方法,打印出“Hello, World!”。 通过这个简单的例子,我们了解到如何在Spring框架中...
标题与描述均提到了“Java_Timer定时器实例_Spring实例”,这表明文章主要讨论的是如何在Java中使用Timer类创建定时任务,并将其整合到Spring框架中。以下是对该主题的详细解析: ### Java中的Timer定时器 #### ...
在IT行业中,定时任务是许多应用不可或缺的一部分,用于在特定时间执行特定的业务逻辑,例如数据备份、报表生成等。Spring框架提供了强大的定时任务支持,可以方便地与Spring MVC进行集成,实现灵活的定时任务调度。...
【Java Timer定时器】 在Java中,`java.util.Timer` 类是用于调度任务的类,它可以在特定的时间点或者按照设定的周期执行某项任务。`Timer` 类提供了两种计划任务的方法:`schedule(TimerTask task, long delay)` ...
Timer timer = new Timer(); // 创建一个定时器实例 TimerTask task = new TimerTask() { // 创建一个定时任务 @Override public void run() { // 重写 run 方法 System.out.println("定时任务开始执行"); } ...
Spring框架提供了多种实现定时任务的方式,包括但不限于`@Scheduled`注解、`ScheduledExecutorService`以及`Timer`类。其中,基于`Timer`类的定时任务配置较为传统但依然具有一定的实用价值,尤其是在需要控制任务...
在Java世界中,`java.util.Timer` 和 `java.util.TimerTask` 是用于实现定时任务的基本工具,但它们在多线程环境中的表现并不理想,容易引发内存泄漏。Spring框架提供了更强大的定时任务管理机制,可以避免这些问题...
在iOS开发中,定时器(Timer)是一种常用的技术,用于执行特定间隔的任务。然而,不当使用定时器会导致内存管理问题,尤其是循环引用。循环引用是iOS内存管理中的一个常见陷阱,它可能导致对象无法被正确释放,进而...
Timer类主要用于执行一次性的任务或周期性任务,但它的功能相对有限,不适用于处理复杂的时间调度需求。例如,下面是一个使用Timer创建简单定时任务的例子: ```java import java.util.TimerTask; public class ...
这些问题在Spring框架中得到了改善。 Spring定时器,也称为Spring的`@Scheduled`注解和`TaskScheduler`接口,提供了更强大且灵活的定时任务管理。Spring使用`@Configuration`类配合`@EnableScheduling`注解开启定时...
Spring并不直接支持`TimerTask`,但可以通过Spring的`TaskScheduler`接口间接使用。`TaskScheduler`允许你异步执行任务,并可以设定延迟和周期。 首先,创建一个`@Component`,实现`TimerTask`,然后定义一个`@Bean...
这里用到的`Timer`类是Java标准库中的定时器,它可以按照预设的时间间隔或绝对时间点执行任务,但其功能相对简单,不适合处理复杂的调度需求。 总结起来,Spring的定时任务通过Quartz库提供了更强大和灵活的定时...
TaskExecutor提供了异步执行任务的能力,但需要注意的是,Timer在处理多个定时任务时可能会有线程安全问题,因此在大型项目中通常不推荐使用。 在本实例中,你将学习到如何设置Quartz和Timer,以及如何在Spring中...
通过深入分析和运行这个源码,你可以学习到如何设置任务执行间隔、如何处理并发问题、如何在Spring中管理定时任务,以及如何在不需要外部数据库的情况下实现业务逻辑。这对于理解和掌握Spring框架以及Java定时任务的...
- **生命周期管理**:Spring容器管理的定时任务,随着应用的启动和关闭自动开始和停止,无需手动干预。 **示例**: ```java @Component public class ScheduledTasks { @Scheduled(cron = "0 0 7 * * 1-5") // ...
本文将以一个具体的例子——商丘地区集抄系统每日向中间库传输日冻结数据的过程——来介绍如何使用Spring框架中的`java.util.Timer`实现定时任务。 #### Java Timer的实现 1. **定义定时任务类** 首先,需要创建...
Spring提供了一个接口`org.springframework.scheduling.quartz.SchedulerFactoryBean`,用于配置和启动Quartz调度器。 2. **基于Java的Timer和TimerTask**:虽然Spring更推荐使用Quartz,但同时它也支持使用JDK自带...
在大型企业级应用如Spring、Struts2和Mybatis的组合框架下,`Timer`和`TimerTask`可以发挥重要作用,比如进行后台数据处理、定期检查更新、发送通知等。下面我们将详细探讨这两个类以及如何在实际项目中运用它们。 ...