반응형
스프링 부트 응용 프로그램에서 스레드 시작
spring boot 시작 후 Java 클래스(실행하고 싶은 Java 스레드 포함)를 실행하고 싶다.초기 코드:
@SpringBootApplication
public 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
}
}
}
이 실을 뭐라고 부릅니까?내가 해야 할 일은 이거야
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
// Call thread (constructor must be executed too)
}
}
스스로 실타래를 만지작거리지 마세요.Spring(및 일반 Java)은 이를 위한 멋진 추상화를 가지고 있다.
먼저 이런 종류의 콩을 만듭니다.TaskExecutor
구성 중
@Bean
public TaskExecutor taskExecutor() {
return new SimpleAsyncTaskExecutor(); // Or use another one of your liking
}
그 후,CommandLineRunner
(단,ApplicationListener<ContextRefreshedEvent>
작업 스케줄 설정에도 도움이 됩니다.
@Bean
public CommandLineRunner schedulingRunner(TaskExecutor executor) {
return new CommandLineRunner() {
public void run(String... args) throws Exception {
executor.execute(new SimularProfesor());
}
}
}
물론 봄까지 여러분만의 수업을 만들 수도 있습니다.
이것의 장점은 봄은 여러분을 위해 실타래를 정리해주기 때문에 여러분은 그것에 대해 스스로 생각할 필요가 없다는 것입니다.사용하였습니다.CommandLineRunner
모든 콩이 초기화된 후에 실행되기 때문입니다.
메인 클래스 스프링 부트
@SpringBootApplication @EnableAsync @Controller public class ...
클래스 컨트롤러의 예
import javax.annotation.PostConstruct; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.ApplicationContext; import org.springframework.core.task.TaskExecutor; import org.springframework.stereotype.Component; @Component public class ExecutorBase { private static final Logger log = LoggerFactory.getLogger(ExecutorBase.class); @Autowired private TaskExecutor taskExecutor; @Autowired private ApplicationContext applicationContext; private Boolean debug = true; @PostConstruct public void atStartup() { ClasseTaskRunn classeTaskRunn = applicationContext.getBean(ClasseTaskRunn.class); taskExecutor.execute(classeTaskRunn ); if (debug) { log.warn("###### Startup ok"); } } }
실행 가능한 클래스 태스크 예시
import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Component; @Component @Scope("application") public class ClasseTaskRunn implements Runnable { private static final Logger log = LoggerFactory.getLogger(ClasseTaskRunn.class); @Autowired ClasseDAO classeDAO; @Override public void run() { longBackgorund(); } protected void longBackgorund() { while (test) { if (debug) { log.warn("###### DEBUG: " ... ); } try { Thread.sleep(10000); } catch (InterruptedException e) { e.printStackTrace(); } } } }
언급URL : https://stackoverflow.com/questions/37390718/start-thread-at-springboot-application
반응형
'programing' 카테고리의 다른 글
.htaccess, YSlow 및 "쿠키 프리 도메인 사용" (0) | 2023.04.05 |
---|---|
angular.ui 모듈 내부에 각도 컨트롤러 의존성을 주입하는 올바른 방법 (0) | 2023.04.05 |
예쁜이 사용 안 함Photo WordPress (Visual Composer (0) | 2023.04.05 |
Python 2.5에서 사용할 수 있는 JSON 모듈은 무엇입니까? (0) | 2023.04.05 |
AngularJs ng-repeat orderBy date가 작동하지 않음 (0) | 2023.04.05 |