recherche

Maison  >  Questions et réponses  >  le corps du texte

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 Il y a quelques jours729

répondre à tous(4)je répondrai

  • 天蓬老师

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

    Désolé tout le monde, j'ai trouvé un moyen moi-même. : http://stackoverflow.com/ques...

    Selon la réponse. Passez à
    @Component
    class ThreadRun implémente DisposableBean.... Ensuite, démarrez le thread dans la structure, fermez le thread dans destroy et vous pouvez utiliser l'injection automatique

    répondre
    0
  • ringa_lee

    ringa_lee2017-04-18 10:50:11

    Voulez-vous dire que vous souhaitez injecter automatiquement les beans de l'interface ? Vous pouvez vous référer à l'injection par Spring de beans de classe abstraite ou d'objets d'interface
    pour créer une classe abstraite DataService implémente Runnable pour l'injection. Ensuite, prolongez-le.
    Étant donné que le cycle de vie du springbean est terminé lorsque le beanFactory est créé, votre objet ne doit être injecté que lors de sa création, ce qui entre en conflit avec le concept de spring.

    Ce qui suit est tiré de stackoverflow,

        
    Mark the abstract base class definition as abstract by using the abstract attribute , and in the concrete class definition , make the parent attribute be the name of the abstract class 's bean name
    
    Something like this:
    
    <bean id="abstractBaseClass" abstract="true" class="pacakge1.AbstractBaseClass">
      <property name="mailserver" value="DefaultMailServer"/>
    </bean>
    
    <bean id="concreteClass1" class="pacakge1.ConcreteClass1" parent="abstractBaseClass">     
      <!--Override the value of the abstract based class if necessary-->
      <property name="mailserver" value="AnotherMailServer"/>
    </bean>

    répondre
    0
  • PHPz

    PHPz2017-04-18 10:50:11

    Utilisez l'injection automatique et essayez de configurer le scope en tant que prototype.

    répondre
    0
  • 伊谢尔伦

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

    A quoi sert ce fil ?

    répondre
    0
  • Annulerrépondre