Heim  >  Artikel  >  Java  >  So verwenden Sie den Springboot-Ereignis-Listener

So verwenden Sie den Springboot-Ereignis-Listener

PHPz
PHPznach vorne
2023-05-14 10:01:20862Durchsuche

Leitfaden

Sehen wir uns unten einen einfachen Fall an:

@Configuration
public class SelfBusiness {
    public static void main(String[] args) {
        AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(SelfBusiness.class);
        context.getBean(MyService.class).doBusiness();
        context.close();
    }
    @Component
    static class MyService {
        private static final Logger logger = LoggerFactory.getLogger(MyService.class);
        @Autowired
        private ApplicationEventPublisher publisher;
        public void doBusiness (){
            logger.debug("主线业务");
            logger.debug("发送短信");
            logger.debug("发送邮件");
        }
    }

Führen Sie den obigen Code aus und beobachten Sie den Effekt

So verwenden Sie den Springboot-Ereignis-Listener

In Kombination mit den Ausgabeergebnissen ist die von diesem Code zu implementierende Logik die nach dem Hauptliniengeschäft Wenn die Ausführung abgeschlossen ist, muss sie ausgeführt werden. Es ist nichts Falsches daran, Vorgänge wie das Versenden von Textnachrichten und E-Mails durchzuführen, aber es ist nicht elegant genug und nicht benutzerfreundlich genug im Hinblick auf die spätere Skalierbarkeit des Geschäfts Es muss eine weitere Prüfoperation hinzugefügt werden. Durch das Hinzufügen einer neuen Codelogik werden die Hauptgeschäfts- und Nebengeschäftslogik eng gekoppelt. Das heißt, wir erwarten, dass sich das Hauptgeschäftsgeschäft nicht um andere Geschäftsvorgänge kümmert überhaupt und muss nur seine eigene Logik vervollständigen. Dies erfordert die Verwendung der von Spring bereitgestellten Ereignis-Listener-Funktion. , indem die ApplicationListener-Schnittstelle implementiert wird, und die andere darin besteht, sie zur Klasse @EventListener hinzuzufügen. Als Nächstes werden diese beiden Methoden nacheinander erläutert

1 Implementierungsschritte durch Implementierung der ApplicationListener-Schnittstelle

1. Passen Sie eine Ereignisklasse (Objekt) an und erben Sie ApplicationEvent

 static class MyEvent extends ApplicationEvent {
        public MyEvent(Object source) {
            super(source);
        }
    }

Es kann so verstanden werden: Im Code kann es viele Arten von Ereignissen geben, und unterschiedliche Unternehmen entsprechen unterschiedlichen Ereignissen. Für einen bestimmten Zuhörer möchte es nur

2. Benutzerdefiniertes Geschäft Die Klasse implementiert die ApplicationListener-Schnittstelle

  
	@Data
    static class Params {
        private String id ;
        private String name;
        private String phone;
    }
	@Component
    static class SmsApplicationListener implements ApplicationListener<MyEvent> {
        private static final Logger logger = LoggerFactory.getLogger(SmsApplicationListener.class);
        @Override
        public void onApplicationEvent(MyEvent myEvent) {
            Object source = myEvent.getSource();
            try {
                Params params = objectMapper.readValue(source.toString(), Params.class);
                logger.debug("userId : {}",params.getId());
            } catch (JsonProcessingException e) {
                e.printStackTrace();
            }
            logger.debug("执行 sms 发短信业务");
        }
    }
    @Component
    static class EmailApplicationListener implements ApplicationListener<MyEvent> {
        private static final Logger logger = LoggerFactory.getLogger(SmsApplicationListener.class);
        @Override
        public void onApplicationEvent(MyEvent myEvent) {
            Object source = myEvent.getSource();
            logger.debug("执行 email 发邮件业务");
        }
    }

Offensichtlich ist der Ereignistyp, den der Listener hier abhören möchte, auf diese Weise, wenn Das Geschäft wird ausgelöst, die übergebenen Parameter können in onApplicationEvent abgerufen werden, sodass der Geschäftsvorgang per SMS ausgeführt wird (E-Mail senden)

3. Das Hauptgeschäftsgeschäft veröffentlicht Ereignisse. Für das Hauptgeschäftsgeschäft ist es nicht erforderlich, Text zu schreiben Zu diesem Zeitpunkt ist nur ein Herausgeber erforderlich, um das Ereignis zu veröffentlichen. Wenn Sie Parameter übergeben müssen, übergeben Sie sie zusammen. Sie können sehen, dass der erwartete Effekt immer noch erzielt werden kann Der vollständige Code ist direkt unten aufgeführt. Führen Sie den obigen Code aus und beobachten Sie den erwarteten Effekt. Außerdem können Sie ihn asynchron verwenden Wir hoffen, dass die Geschäftslogik der Veröffentlichungsereignisse asynchron ausgeführt wird, um die Logikausführungseffizienz des Hauptgeschäfts zu verbessern.

Wenn wir uns den Quellcode ansehen, können wir erkennen, dass ApplicationEventPublisher synchrones Senden mit einem Thread verwendet Wenn Sie Ereignisse standardmäßig veröffentlichen, müssen Sie ThreadPoolTaskExecutor und SimpleApplicationEventMulticaster anpassen. Fügen Sie der obigen Business-Klasse die folgenden beiden Beans hinzu Führen Sie den Code zu diesem Zeitpunkt erneut aus, führen Sie ihn mehrmals aus und Sie können den Effekt sehen

Vergleichen Sie den obigen Single-Threaded-Effekt

Das obige ist der detaillierte Inhalt vonSo verwenden Sie den Springboot-Ereignis-Listener. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:yisu.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen