关于Spring Mvc定时任务中无法获取Bean容器中的对象
2018-04-04 17:36
621 查看
定时器的类继承QuartzJobBean后,托管在Spring中的Bean无法被获取到,不管是实例化还是默认加载获得的对象都为空值,这时候需要手动获取ApplicationContext的上下文,才能取得被Spring保管的对象。
这里的两个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" />
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" />
相关文章推荐
- web项目如何获取容器中的bean对象?
- spring mvc 从bean中自动获取对象
- 在filter中获取spring容器中的bean对象
- 普通类中获取spring容器中的javabean对象
- Spring MVC项目启动时在容器加载完毕后插入一个定时任务
- 在web容器中获取spring容器中的bean对象
- spring接口 BeanFactoryAware,动态获取IOC容器里面的对象(多例)
- Spring MVC 在JSP中获取service层的Bean对象
- 获取Spring的Bean持有容器对象的方法
- 获取Spring容器Bean对象工具类
- Web容器中获取spring容器的bean对象
- java 从spring容器中获取注入的bean对象
- Spring+Quartz 定时任务无法自动注入bean的问题
- Spring MVC 在JSP中获取service层的Bean对象
- spring+quartz实现定时任务遇到问题总结(bean无法注入)
- (转帖)关于easyui中的datagrid在加载数据时候报错:无法获取属性"Length"的值,对象为null或未定义
- 关于SpringBoot获取IOC容器中注入的Bean(推荐)
- Spring Boot 获取 Bean (添加定时任务)
- 【Spring】手动获取spring容器对象时,报no qualifying bean of type is defined
- 关于在IE9下RequiredFieldValidator出现“无法获取属性“toLowerCase”的值: 对象为 null 或未定义”的Bug