在springboot应用程序中启动线程
我想在Spring Boot开始后执行一个Java类(其中包含我要执行的Java线程)。我的初始代码:
@SpringBootApplicationpublic class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
这是我想在开始时执行的代码:
public class SimularProfesor implements Runnable{ // Class atributes
// Constructor
public SimularProfesor() {
//Initialization of atributes
}
@Override
public void run() {
while(true) {
// Do something
}
}
}
我怎么称呼这个线程?这是我应该做的:
@SpringBootApplicationpublic class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
// Call thread (constructor must be executed too)
}
}
回答:
不要自己弄乱线程。Spring(还有普通的Java)对此有一个很好的抽象。
首先TaskExecutor
在您的配置中创建该类型的Bean
@Beanpublic TaskExecutor taskExecutor() {
return new SimpleAsyncTaskExecutor(); // Or use another one of your liking
}
然后创建一个CommandLineRunner
(尽管ApplicationListener<ContextRefreshedEvent>
也可以)计划您的任务。
@Beanpublic CommandLineRunner schedulingRunner(TaskExecutor executor) {
return new CommandLineRunner() {
public void run(String... args) throws Exception {
executor.execute(new SimularProfesor());
}
}
}
当然,您也可以在Spring之前安排自己的课程。
这样做的好处是,Spring还将为您清理线程,而您不必自己考虑。我在CommandLineRunner
这里使用了a
,因为它将在所有bean都初始化之后执行。
以上是 在springboot应用程序中启动线程 的全部内容, 来源链接: utcz.com/qa/435918.html