您的位置:首页 > 编程语言 > Java开发

关于Spring Mvc定时任务中无法获取Bean容器中的对象

2018-04-04 17:36 621 查看
定时器的类继承QuartzJobBean后,托管在Spring中的Bean无法被获取到,不管是实例化还是默认加载获得的对象都为空值,这时候需要手动获取ApplicationContext的上下文,才能取得被Spring保管的对象。
public class QuartzTask extends QuartzJobBean {
private static final Logger log = LoggerFactory.getLogger(QuartzTask.class);

@Override
protected void executeInternal(JobExecutionContext jobExecutionContext) throws JobExecutionException {

System.out.println("自动添加数据库已启动");

Scheduler scheduler = jobExecutionContext.getScheduler();
try {
//由于定时任务中无法获取对应Bean中的对象,所以先通过工厂类获取该对象
SchedulerContext schedulerContext = jobExecutionContext.getScheduler().getContext();
ApplicationContext applicationContext = (ApplicationContext)schedulerContext.get("applicationContext");
ConsultationDao consultationDao = (ConsultationDao)applicationContext.getBean("ConsultationDao");
CmsRobotConIdDao cmsRobotConIdDao = (CmsRobotConIdDao)applicationContext.getBean("CmsRobotConIdDao");

String time = getTime();
String NowTime = getNowTime();

这里的两个Dao对象就是被Spring保管的对象,通过此方法获取的Dao对象测试完全可用。
但Dao层对象中还会出现org.hibernate.exception.SQLGrammarException: could not execute statement的报错信息,测试后发现在XML文件中需要配置Hibratate4,然后在Dao层的实现类上添加注解文件@Transactional就能解决@Repository
@Transactional
public class CmsRobotConIdDaoImpl extends HibernateBaseDao<CmsRobot_ext,Integer> implements CmsRobotConIdDao {注解文件在Applicationcontext.xml<bean id="treeInterceptor" class="com.jeecms.common.hibernate4.TreeIntercptor"/>
<bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
<context:annotation-config/>
<tx:annotation-driven transaction-manager="transactionManager" />
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Spring Mvc 定时任务