spring定时任务配置,以及不执行的解决办法
前几天,同事问了我一个问题,我告诉他用spring的定时任务解决,并给他配置了spring的定时任务。当时随便找了一个bean写了一段代码,验证定时任务正确执行后,就没再管,昨天下午,同事写代码的时候,把这段代码移到了自己特定的bean中。问题就来了,定时任务不执行了。我给他把代码的位置又换回之前的那个bean中。又可以执行。。
弄了老半天,终于解决了。原来是spring延迟加载的问题。
spring 定时任务的配置:
spring3.0后,引入了注解,因此配置显得很方便。只要配置好配置文件的命名空间,然后直接在代码中使用注解即可!
首先,配置文件的schema要加上 这两句:
- http://www.springframework.org/schema/task
- http://www.springframework.org/schema/task/spring-task-3.1.xsd
然后,配置namespace的别名:
- xmlns:task="http://www.springframework.org/schema/task"
配置文件的头部,就配置好了。
然后是,打开定时器的开关:
- <task:annotation-driven/>
这样。spring就可以根据注解扫描这些bean,然后检查注解代码了。
执行定时的代码:
- @Scheduled(cron="0/5 * * * * ? ")
- public void schetest(){
- System.out.println("scheduled invoke!");
- }
每隔五秒执行一次。
正常的配置应该如上。但是昨天却出了问题。把这个代码写到某个类中就没问题,写到这个包下面的同样别的bean中就不执行了。 后来去网上搜了一下,一篇文章说道:要顺利执行定时任务,执行这段代码的bean,不能使延迟加载而来的。 即 不能是default-lazy-init="true"。我看了一下,配置文件,发现这个文件beans 节点中,赫然写着default-lazy-init="true" 于是问题找到了。 这样写的目的是,加快启动时间,启动的时候,对bean的加载延迟。但是有错误却无法即使显现了。 因为配置文件是搭环境时配置好的。因此不便改动。因此采用别的办法,手动 配置这个bean不再延迟加载,即在这个bean上 加上:
- @Lazy(false)
这样,这个类就不再是延迟加载了。定时任务写在他里面,也正常执行了。
问题解决了。但我还有一个疑问:为什么,我在同一个包下面,把代码写到某些类中,他可以执行,写到某些类中却不可以执行呢? 仔细看了一遍那边配置文件,发现有一段代码:
- <bean id="methodCachePointCut"
- class="org.springframework.aop.support.RegexpMethodPointcutAdvisor">
- <property name="advice">
- <ref local="methodCacheInterceptor" />
- </property>
- <property name="patterns">
- <list>
- <!--
- <value>com.xajob.service.AdvertisService.getAll</value>
- <value>com.xajob.service.LinksService.getAll</value>
- <value>com.xajob.service.CompanyService.getFamousCompanies</value>
- <value>execution(com.xajob.service.JobService.getByIndustr*(..))</value>
- <value>execution(com.xajob.service.CompanyService.getByIndustr*(..))</value>
- <value>execution(com.xajob.service.CompanyService.getGraduate*(..))</value>
- <value>execution(com.xajob.service.JobService.getGraduate*(..))</value>
- <value>execution(com.xajob.service.JobService.countByIndustr*(..))</value>
- <value>execution(com.xajob.service.PersonService.getNew*(..))</value>
- <value>execution(com.xajob.service.JobService.getNew*(..))</value>
- <value>execution(com.xajob.service.CompanyService.getNew*(..))</value>
- <value>execution(com.xajob.service.ArticleService.get*(..))</value>
- <value>execution(com.xajob.service.ArticleService.page*(..))</value>
- <value>execution(com.xajob.service.ArticleService.group*(..))</value>
- <value>com.xajob.service.JobService.pageHighLevelJob</value>
- <value>execution(com.xajob.service.JobService.getTop*(..))</value>
- <value>execution(com.xajob.service.SpecialCompanyService.get*(..))</value>
- -->
- <value>com.xajob.service.LinksService.getAll</value>
- <value>com.xajob.service.AdvertisService.getAll</value>
- <value>.*getFamousCompanies</value>
- <value>.*getNewPerson</value>
- <value>.*getNew5Job</value>
- <value>.*getNew5Urgent</value>
- <value>.*getNewCompany</value>
- <value>.*getTop20HighLevelJob</value>
- <value>com.xajob.service.SpecialCompanyService.*</value>
- <value>com.xajob.service.ArticleService.getByType</value>
- <value>com.xajob.service.ArticleService.pageByType</value>
- <value>com.xajob.service.ArticleService.getTopTen</value>
- <value>com.xajob.service.ArticleService.getNewEight</value>
- <value>com.xajob.service.ArticleService.getImgNews</value>
- <value>com.xajob.service.ArticleService.groupByType</value>
- </list>
- </property>
- </bean>
- <bean id="cacheAdvertisService"
- class="com.xajob.service.AdvertisService">
- </bean>
- <bean id="cacheLinksService"
- class="com.xajob.service.LinksService">
- </bean>
- <bean id="cacheArticleService"
- class="com.xajob.service.ArticleService">
- </bean>
- <bean id="cacheCompanyService"
- class="com.xajob.service.CompanyService">
- </bean>
- <bean id="cacheJobService"
- class="com.xajob.service.JobService">
- </bean>
- <bean id="cacheSpecialCompanyService"
- class="com.xajob.service.SpecialCompanyService">
- </bean>
- <bean id="cachePersonService"
- class="com.xajob.service.PersonService">
- </bean>
- <bean id="cacheAdvertisInterceptor" class="org.springframework.aop.framework.ProxyFactoryBean">
- <property name="target">
- <list>
- <ref local="cacheAdvertisService"/>
- <ref local="cacheLinksService"/>
- <ref local="cacheArticleService"/>
- <ref local="cacheCompanyService"/>
- <ref local="cacheJobService"/>
- <ref local="cacheSpecialCompanyService"/>
- <ref local="cachePersonService"/>
- </list>
- </property>
- <property name="interceptorNames">
- <list>
- <value>methodCachePointCut</value>
- </list>
- </property>
- </bean>
看bean的名称,ProxyFactoryBean. 猜测应该和代理有关。百度了一下,的确如此。 考虑了一下,这段代码大体意思是,org.springframework.aop.support.RegexpMethodPointcutAdvisor 对其ref指向的下面的拦截的bean中的某些方法进行切面。拦截的方法就是pattern中定义的。
而org.springframework.aop.framework.ProxyFactoryBean 这个类,就是使用了代理,重新生成了几个对象,而使这几个bean避免了延迟加载,因此定时代码写在他里面会执行!
- 顶
- 0
- 踩
spring定时任务配置,以及不执行的解决办法的更多相关文章
- 基于Spring框架的简单多数据源切换解决办法
基于Spring框架的简单多数据源切换解决办法 Spring框架JDBC包提供了一个抽象类AbstractRoutingDataSource提供了动态切换数据库的基础方法.我们仅仅需要实现一个简单的数 ...
- Win 2008 R2安装SQL Server 2008“性能计数器注册表配置单元一致性”失败的解决办法
Win 2008 R2安装SQL Server 2008“性能计数器注册表配置单元一致性”失败的解决办法(2011-02-23 19:37:32) 转载▼ 今天在惠普服务器上安装数据库2008时, ...
- Win7安装Oracle Instantclient ODBC驱动 后配置DSN时出错的解决办法 SQORAS32
安装过程简述 oracle官网下载了 instantclient-odbc-nt--.zip instantclient-basic-nt-.zip 我这是32位版的win7,按照需要下载对应的版本. ...
- spring 定时任务配置
1.(易)如何在spring中配置定时任务? spring的定时任务配置分为三个步骤: 1.定义任务 2.任务执行策略配置 3.启动任务 (程序中一般我们都是到过写的,直观些) 1.定义任务 < ...
- struts,hibernate,spring配置时问题汇总及解决办法
1.java.lang.NoClassDefFoundError: org/objectweb/asm/ClassVisitor 缺少asm-3.3.jar 2.java.lang.NoClassDe ...
- Learn Rails5.2- ActiveRecord: Migration , spring的使用(不兼容的解决办法)
偶然一次: 运行rails generate停止不动,网上查找答案,可能是bundle update 之后 spring 版本变化了,和正在运行的 spring 实例不兼容. Spring导致的同样的 ...
- struts2,hibernate4,spring3配置时问题汇总及解决办法
文章转载于wanglihu的博客,原文链接http://wanglihu.iteye.com/blog/1897718 1.java.lang.NoClassDefFoundError: org/ob ...
- spring boot jpa 使用update 报错解决办法
在spring boot jpa 中自定义sql,执行update操作报错解决办法: 在@Query(...)上添加 @Modifying@Transactional注解
- Xshell 连接虚拟机OS Linux 设置静态ip ,网络配置中无VmWare8 的解决办法
前序:最近开始研究Hadoop平台的搭建,故在本机上安装了VMware workstation pro,并创建了Linux虚拟机(centos系统),为了方便本机和虚拟机间的切换,准备使用Xshell ...
随机推荐
- (转)Live555中RTSPClient分析
有RTSPServer,当然就要有RTSPClient. 如果按照Server端的架构,想一下Client端各部分的组成可能是这样:因为要连接RTSP server,所以RTSPClient要有TCP ...
- FunGene 功能基因数据库
背景:16SrRNA 基因通常作为分子标记进行微生物群落结构的研究,但是它有一些明显的限制,比如16S rRNA基因在物种中会有多个拷贝,而且,由于16S rRNA基因的进化速率较慢,在物种间保守,会 ...
- linux任务计划 chkconfig工具 systemd管理服务 unit介绍 target介绍
linux任务计划 任务计划:特定时间备份数据,重启服务,shell脚本,单独的命令等等. 任务计划配置文件:cat /etc/crontab [root@centos7 ~]# cat /etc/c ...
- 特殊权限set_uid /特殊权限set_gid/特殊权限stick_bit/软链接文件/硬连接文件
2.18 特殊权限set_uid 2.19 特殊权限set_gid 2.20 特殊权限stick_bit 2.21 软链接文件 2.22 硬连接文件 特殊权限set_uid(s权限用户user权限) ...
- oauth 2.0转
原文:http://www.ruanyifeng.com/blog/2014/05/oauth_2_0.html OAuth是一个关于授权(authorization)的开放网络标准,在全世界得到广泛 ...
- scala分析数据作图
参考网址:https://stackoverflow.com/questions/36984780/spark-shell-how-to-use-breeze-viz 刚开始按照网上的教程只导入了 两 ...
- Activity优化几个结束的方法
package com.itau.jingdong; import java.util.Stack; import android.app.Activity; import android.app.A ...
- JavaScript 使用穷举方式实现内容简繁转换
场景: 在Web开发中,有时存在对内容进行简体和繁体互相转换的需求,这时我们可以参考以下做法. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 ...
- 2013——M笔试南京——程序
迄今只参加了M南京笔试,可惜自己不是计算机出身,还有好多东西得学啊…… M的最后一题是编程: 输入:单链表L0.L1.L2……Ln-1.Ln,将链表变为:L0.Ln.L1.Ln-1.L2…… 算法: ...
- Uploading File using Ajax and receiving binary data in Asp.net (C#)[转]
基础知识,可由此衍生.原文:http://uniapple.net/blog/?p=2050 In this post, I will show you how to upload a file us ...