当前位置: 首页 > 知识库问答 >
问题:

使用Spring任务计划程序时无法自动触发DAO[重复]

萧升
2023-03-14

如果我调用notifyStaff方法,这是有效的,但是如果我使用ducedure注释并将该方法作为计划任务运行,则无法实例化UserDAO。有什么工作可以做吗?

@Service
public class FollowUp {

    @Autowired
    private UserDAO userDAO;

    @Scheduled(fixedDelay=5000)
    public void notifyStaff() {         
        List<User> users = userDAO.findAll();
        // do stuff with list of users 
    }
}
<?xml version="1.0" encoding="UTF-8"?>
<beans 
    xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="
        http://www.springframework.org/schema/beans 
        http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">

    <!--  Dao Layer generic config-->    
    <bean id="abstractDaoTarget" class="com.example.department.appname.persistence.hibernate.GenericDAOHibernateImpl" abstract="true">
        <property name="sessionFactory" ref="sessionFactory"/>
    </bean>

    <!--  Dao Layer instances -->
    <bean id="DivisionDAO" parent="abstractDaoTarget" class="com.example.department.appname.persistence.hibernate.DivisionDAOHibernateImpl" />
    <bean id="ModalityDAO" parent="abstractDaoTarget" class="com.example.department.appname.persistence.hibernate.ModalityDAOHibernateImpl" />
    <bean id="ScoreDAO" parent="abstractDaoTarget" class="com.example.department.appname.persistence.hibernate.ScoreDAOHibernateImpl" />
    <bean id="UserDAO" parent="abstractDaoTarget" class="com.example.department.appname.persistence.hibernate.UserDAOHibernateImpl" />
    <bean id="ReviewDAO" parent="abstractDaoTarget" class="com.example.department.appname.persistence.hibernate.ReviewDAOHibernateImpl" />
    <bean id="QaCaseDAO" parent="abstractDaoTarget" class="com.example.department.appname.persistence.hibernate.QaCaseDAOHibernateImpl" />
    <bean id="ExamDAO" parent="abstractDaoTarget" class="com.example.department.appname.persistence.hibernate.ExamDAOHibernateImpl" />
    <bean id="PatientDAO" parent="abstractDaoTarget" class="com.example.department.appname.persistence.hibernate.PatientDAOHibernateImpl" />
    <bean id="RoleDAO" parent="abstractDaoTarget" class="com.example.department.appname.persistence.hibernate.RoleDAOHibernateImpl" />

</beans>
public class UserDAOHibernateImpl extends
    GenericDAOHibernateImpl<User> implements UserDAO {

    public UserDAOHibernateImpl() {
        super(User.class);
    }

    @SuppressWarnings("unchecked")
    public List<T> findAll() {
        // This assumes that the table name is the same as the simple name of the class
        return currentSession().createCriteria(getType())
            .list();
    }
}
public interface UserDAO extends GenericDomainDAO<User> {
        List<T> findAll();
}
12:08:31.452 [myScheduler-1] ERROR org.springframework.scheduling.support.TaskUtils$LoggingErrorHandler - Unexpected error occurred in scheduled task.
    java.lang.NullPointerException: null
    at com.example.department.appname.mvc.utility.FollowUp.notifyStaff(FollowUp.java:44) ~[FollowUp.class:na]
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.7.0_11]
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) ~[na:1.7.0_11]
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.7.0_11]
    at java.lang.reflect.Method.invoke(Method.java:601) ~[na:1.7.0_11]
    at org.springframework.scheduling.support.ScheduledMethodRunnable.run(ScheduledMethodRunnable.java:64) ~[spring-context-3.1.0.RC1.jar:3.1.0.RC1]
    at org.springframework.scheduling.support.DelegatingErrorHandlingRunnable.run(DelegatingErrorHandlingRunnable.java:53) ~[spring-context-3.1.0.RC1.jar:3.1.0.RC1]
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471) [na:1.7.0_11]
    at java.util.concurrent.FutureTask$Sync.innerRunAndReset(FutureTask.java:351) [na:1.7.0_11]
    at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:178) [na:1.7.0_11]
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:178) [na:1.7.0_11]
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293) [na:1.7.0_11]
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110) [na:1.7.0_11]
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603) [na:1.7.0_11]
    at java.lang.Thread.run(Thread.java:722) [na:1.7.0_11]

共有1个答案

富念
2023-03-14

您必须让spring知道您的@autowiredbeans,以便它能够注册它们。

添加到上下文文件:

<context:component-scan base-package="path.to.the.FollowUp" />
 类似资料:
  • 我正在建立一个特定的任务。 我需要跟踪程序何时结束,制作报告并分析它。所以,我想为它创建一个时间表。 例如,我有一个名为的进程,我想在它完成作业后检查它的日志。我有文件。我只需要在完成作业并关闭后运行它。 我无法更改程序代码中的任何内容,因此我相信,任务调度程序是唯一的方法。 帮帮我求你了

  • 我有一个用c#编写的.net控制台应用程序,它在Visual Studio中运行时以及单击文件系统中的.exe文件时完全可以执行它应该做的事情。它像一个魅力一样运行。但是,当我在 Windows 7 开发计算机或 Windows 2008 R2 生产计算机中创建计划的 Windows 任务时,它无法在应用程序中执行最后一步。此步骤是在后台打开一个.doc,并将其隐藏(只需运行另存为)到.docx。

  • 我正在使用 Windows 服务器 2016 数据中心。每当服务器重新启动时,我在任务计划程序中的计划任务总是停止运行。只有在我手动进入应用程序并重新键入我的用户帐户密码后,它才会再次开始工作。这是设置还是条件问题?

  • 我在我的Windows 2008 R2机器中安排了一个任务,但它未能触发日志中的以下错误(事件日志)。 错误: 任务计划程序无法启动用户“SAFFRON3\cb_admin”的“\Hyatt_International_Distribution”任务。其他数据:错误值:2147943645。 任务计划程序启动任务引擎""进程失败,原因是"LUAIsUpatedToken"中发生错误。命令="tas

  • 我在我的Windows 2008 R2服务器上使用任务计划程序创建了一个任务。它会打开一个. bat文件。这个bat没有错误,工作正常。如果我开始任务(即单击运行),它会执行bat文件。从现在开始,它应该每隔x分钟重复一次(目前设置为1分钟),但它没有。我尝试了很多,几乎改变了每个属性,但它仍然不会重复执行我的bat文件。 我已经阅读了不同的问题和答案,但没有任何效果。 有人知道我做错了什么吗?

  • 有一个非常标准的Spring Boot(1.3.5)应用程序。 使用(在主应用程序入口点和注释类上尝试)启用调度。 使用方法创建了一个简单的类(简单的fixedDelay时间表)。 计划任务执行两次(始终)。 从我目前收集的信息来看,这可能是因为加载了两个上下文,然后两次拿起了我的豆子。好啊既然所有配置基本上都是隐藏的Spring Boot魔法,那么我该如何修复/防止这种双重执行呢? 框架版本: