gpt4 book ai didi

java - Autowiring 任务发送到 Spring TaskExecutor

转载 作者:IT老高 更新时间:2023-10-28 13:57:06 28 4
gpt4 key购买 nike

你怎么会有一个实现Runnable并自动提交给springsTaskExecutor的类?

例如,我有一个任务:

public class MyTask implements Runnable {

@Autowired private MyRepository myRepository;

@Override
public void run() {
myRepository.doSomething();
}
}

还有一个向spring TaskExecutor 发送任务的服务:

@Service
public class MyService {

@Autowired private TaskExecutor taskExecutor;

public void someMethod() {

MyTask myTask = new MyTask();
taskExecutor.execute(myTask);

}

}

我知道这些字段没有被自动连接,因为 MyTask 正在使用 new MyTask() 进行实例化。但是,我该如何解决这个问题?我应该访问 Spring 的 ApplicationContext 并通过它创建 bean 吗?您将如何在 Web 应用程序环境中执行此操作?

谢谢!

最佳答案

试试

public class MyTask implements Runnable {
private MyRepository myRepository;

public MyTask(MyRepository myRepository) {
this.myRepository = myRepository;
}

@Override
public void run() {
myRepository.doSomething();
}
}

@Service
public class MyService {
@Autowired private TaskExecutor taskExecutor;
@Autowired private MyRepository myRepository;


public void someMethod() {
MyTask myTask = new MyTask(myRepository);
taskExecutor.execute(myTask);
}
}

或者您可以声明 MyTask 的 scope = "prototype"并将 MyService 更改为

@Service
public class MyService {
@Autowired private ApplicationContext ctx;

public void someMethod() {
MyTask myTask = ctx.getBean(MyTask.class);
taskExecutor.execute(myTask);
}
}

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

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com