2017-07-30 4 views
0

私は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が発生します。

私は間違っていますか?エラーを修正する

+0

あなたはポストを見ることができますhttps://stackoverflow.com/questions/11787313/how-do-i-autowire-a-spring-taskexecutor-created-threadそれはあなたに役立ちます – Akash

答えて

1

次の手順を参照してください:IndexControllerクラス

  • ゴーへ

    1. ゴーpublic String test(ClassA ca)方法

    2. Class ca入力パラメータフォーム試験方法

    3. を削除します

      試験方法はこのようにする必要があります

    試験方法が変更されました:

    @RequestMapping("test") 
        public String test(){ 
         ca.doSht(); 
         return "test"; 
        } 
    

    の試験方法ではなく、あなたの使用して@SpringBootApplicationとして@Autowired注釈

  • +0

    彼は正しいです、あなたはメソッド引数を使用していますインスタンス変数の代わりに。 @RequestMappingに使用できる引数は、リクエスト本文、リクエストヘッダ、urlパラメータ、クエリパラメータです。 – Laurynas

    0

    から来caオブジェクトのcaメソッドの引数を使用しているため、NULLポインタ例外が発生しますAppクラスでは、カスタムBean定義をIOCに登録しています。また、Beanを正しくautowiringしています。さもなければ、autowiringクラスでエラーが発生します。

    したがって、オートワイヤリングの問題ではありません。デバッグポイントを設定してチェックすることができます。あなたのコントローラでは、同じ名前を使ってメソッドの引数を使ってインスタンス変数を使いこなしました。さらに@RequestMappingはカスタムクラスオブジェクトを提供しません。だから、それはnullとして来て、あなたは例外を取得しています。

    あなたは問題を理解していただきたいと思います。

    関連する問題