私はSpring Bootを使用しており、サービス実行Beanにタスク実行プログラムを注入できません。 ここにいくつかのコードです:Beanにタスク実行プログラムを注入する
@Service
public class ClassA {
@Autowired
private ThreadPoolTaskExecutor taskExecutor;
public void doSht(){
for(int i = 0; i<this.taskExecutor.getMaxPoolSize(); i++){
this.taskExecutor.execute(new ClassB());
}
}
}
クラスB:
public class ClassB implements Runnable {
@Override
public void run() {
System.out.println("Class B running");
}
}
コントローラー:
@Controller
public class IndexController {
@Autowired
ClassA ca;
@RequestMapping("/")
public String index(){
return "index";
}
@RequestMapping("test")
public String test(ClassA ca){
ca.doSht();
return "test";
}
}
そして、ここでは、タスク実行の設定です:
@SpringBootApplication
public class App{
@Bean
public ThreadPoolTaskExecutor taskExecutor() {
ThreadPoolTaskExecutor taskExecutor = new ThreadPoolTaskExecutor();
taskExecutor.setCorePoolSize(5);
taskExecutor.setMaxPoolSize(10);
taskExecutor.setQueueCapacity(30);
return taskExecutor;
}
public static void main(String[] args) throws Exception{
SpringApplication app = new SpringApplication(App.class);
app.run(args);
}
}
私がClassBの研をしたいが、リクエストが/ testに来たときに実行されますが、タスクエグゼキュータがClassA Beanにautowiredされていないため、NullPointerExceptionが発生します。
私は間違っていますか?エラーを修正する
あなたはポストを見ることができますhttps://stackoverflow.com/questions/11787313/how-do-i-autowire-a-spring-taskexecutor-created-threadそれはあなたに役立ちます – Akash