2017-10-25 12 views
0

私はスレッドである自分のプロジェクトにデータベースリスナー(DatabaseChangeListener)を持っています。私はそのような私の春ブーツメインアプリケーションでこのスレッドを実行します。Springbootとスレッドの問題

@SpringBootApplication 
public class PocCamelRoutesManagerBootApplication { 

    public static void main(String[] args) { 
     SpringApplication.run(PocCamelRoutesManagerBootApplication.class, args); 
    } 

    @Autowired 
    private DataSource dataSource; 
    @Autowired 
    private RouteRepository routeRepository; 

    @Bean 
    public CommandLineRunner schedulingRunner(TaskExecutor executor) { 
     return args -> executor.execute(new DatabaseChangeListener(dataSource, routeRepository)); 
    } 

    @Bean 
    public TaskExecutor taskExecutor() { 
     return new SimpleAsyncTaskExecutor(); 
    } 

} 
  • それは動作しますが、それは(私が DatabaseChangeListener d = new DatabaseChangeListener(); d.start()を使用していたとき、それは働いていた)もう変更されませんでした、それはAutowired依存関係からか?
  • アプリケーションを(JBoss EAPから)アンデプロイしても、スレッドは引き続き実行されます。私はそれをやめなければならないのですか?
+1

スレッドがJVMではなく、アプリケーションに関連付けられている中で、以下の方法で、それを停止する必要があります。アプリケーションをアンデプロイすると、スレッドは引き続きJBOSS JVM上で実行されます。スレッドを停止するには、JBOSS JVMをシャットダウンする必要があります。 – duffymo

答えて

0

あなたはspringbootアプリがアンデプロイされるときに、クラスPocCamelRoutesManagerBootApplication

@PreDestroy 
    public void clear() { 

    }