java - spring-boot怎样优雅得插入一个后台线程?
巴扎黑
巴扎黑 2017-04-18 10:48:11
0
4
727

我有一个守护,可它需要插入数据到数据库.不知道怎样注入Bean服务,所以目前是这样的:

public static void main(String[] args) {
         Thread daemon=new Thread(new DaemonRun());        
            daemon.setDaemon(true);
            daemon.start();   
        SpringApplication.run(Application.class, args);
    }
    ....
public class DaemonRun implements Runnable {
    private DataService dataService;
    public synchronized  DataService getDataService(){
        if(dataService==null)
                dataService=(DataService)SpringApplicationContextHolder.getSpringBean("dataService");
        return dataService;
    }

有没有办法让DataService 自动注入DaemonRun同时DaemonRun又开机运行在一个独立线程里呢?

巴扎黑
巴扎黑

모든 응답(4)
Peter_Zhu

죄송합니다 여러분, 제가 직접 방법을 찾았습니다.: http://stackoverflow.com/ques...

답변에 따르면
@Component
클래스로 변경하면 ThreadRun이 DisposableBean을 구현합니다.... 그런 다음 구조에서 스레드를 시작하고 destroy에서 스레드를 닫으면 자동 주입을 사용할 수 있습니다

左手右手慢动作

인터페이스의 빈을 자동으로 주입하겠다는 뜻인가요? Spring의 추상 클래스 Bean 또는 인터페이스 객체
주입을 참조하여 DataService가 주입을 위해 Runnable을 구현하는 추상 클래스를 생성할 수 있습니다. 그런 다음 확장하십시오.
beanFactory가 생성되면 Springbean의 Life Cycle이 완료되므로 객체가 생성될 때만 객체를 주입해야 하는데 이는 Spring의 개념과 충돌합니다.

다음은 stackoverflow에서 가져온 것입니다.

으아아아
PHPzhong

자동 주입을 사용하고 범위를 프로토타입으로 구성해 보세요.

伊谢尔伦

이 스레드는 무엇에 사용되나요?

최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿