java - Spring 任务

标签 java spring spring-mvc task

我有一个应用程序(使用注释的 Spring 4 MVC+ JPA + MySQL+Maven 集成示例),使用基于注释的配置将 Spring 与 Hibernate 集成;我想创建一个任务以便在 Controller 中使用它

有这个任务:

@Configurable
public class SMSSenderTask implements Runnable {

    protected static final Logger LOGGER = LoggerFactory.getLogger(SMSSenderTask.class);

    @Autowired
    SMSSender smsService;

    private String msg;

    private String to;

    public SMSSenderTask(String msg, String to) {
        super();
        this.msg = msg;
        this.to = to;
    }



    @Override
    public void run() {

        try {

            smsService.sendSMS(msg, to);

        } catch (UnsupportedEncodingException e) {
            LOGGER.error(e.getMessage());
        } catch (ClientProtocolException e) {
            LOGGER.error(e.getMessage());
        } catch (IOException e) {
            LOGGER.error(e.getMessage());
        }
    }
}

还有这个

public class SMSSenderTaskExecutor {

    private TaskExecutor taskExecutor;

     @Autowired
     SMSSender smsService;

     @Autowired
      public SMSSenderTaskExecutor(TaskExecutor taskExecutor) {
        this.taskExecutor = taskExecutor;
      }

     public void sendSMS(String msg, String to) {
          taskExecutor.execute(new SMSSenderTask (msg, to));
     }

}

--

我将这段代码放入 Controller 中,但出现 NullpointerException

SMSSenderTask smsSenderTask = new SMSSenderTask ("ddd", "33473664038");
smsSenderTask.run();

最佳答案

当你使用new语句构造一个任务对象时,你的 Autowiring 服务smsService还没有初始化。所以当你调用run方法时,当执行到smsService.sendSMS(msg, to);时,程序抛出空指针异常。

您可以将 SmsService 作为构造函数参数放入您的代码中以避免这种情况发生。

关于java - Spring 任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34824330/

相关文章:

java - 如何在我的 Recycler View 的寻呼机上显示点?

javascript - 如何将 jQgrid 格式化函数中的对象参数分配给函数?

java - Spring模型对象在jsp上变为空

java - 如何在 Spring MVC 应用程序中的 JSP 中显示属性文件中的值

java - 将 Infinispan 配置为 Hibernate 的远程二级缓存

java - 多个项目中的实体

java - 为什么多个 PropertyPlaceholderConfigurer 不起作用?

java - 正则表达式将最后一行与空行之前的数字或单词匹配

java - Android Java,onfinish();让我参与某项 Activity

java - 如何将扫描仪输入放入数组中......例如几个数字