찾다

 >  Q&A  >  본문

java - spring-boot怎样优雅得插入一个后台线程?

我有一个守护,可它需要插入数据到数据库.不知道怎样注入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又开机运行在一个独立线程里呢?

巴扎黑巴扎黑2802일 전732

모든 응답(4)나는 대답할 것이다

  • 天蓬老师

    天蓬老师2017-04-18 10:50:11

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

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

    회신하다
    0
  • ringa_lee

    ringa_lee2017-04-18 10:50:11

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

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

    으아아아

    회신하다
    0
  • PHPz

    PHPz2017-04-18 10:50:11

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

    회신하다
    0
  • 伊谢尔伦

    伊谢尔伦2017-04-18 10:50:11

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

    회신하다
    0
  • 취소회신하다