[JAVA] Die Ereignisverarbeitung wird im Frühjahr durchgeführt.

Was ist das "Ereignis" des Frühlings?

Spring Framework kann "Ereignisse" in der Mitte des Dienstes generieren. Auf diese Weise kann die Verarbeitung "lose gekoppelt" erfolgen, so dass die Verarbeitung des Dienstes in Teile geteilt werden kann.

Es funktioniert nur, indem es zwischen den Diensten eingeklemmt wird, sodass es für die Protokollausgabe und die Cache-Trends effektiv zu sein scheint. Da es eine unabhängige Konfiguration hat, ist es effektiv, wenn Sie verhindern möchten, dass die Verarbeitung des Dienstes langwierig wird, oder wenn Sie möchten, dass jemand anderes einige der Funktionen erstellt.

Anstatt die ab Spring 4.3 implementierten Annotationen zu implementieren, werden wir sie dieses Mal erstellen, indem wir die Schnittstelle und gorigori implementieren.

Flow bis zur Ausgabe des Ereignisses.

  1. Erstellen Sie Ihre eigene Veranstaltung
  2. Erstellen Sie einen Ereignis-Listener
  3. Implementieren Sie den Service
  4. Registrieren Sie Ereignis-Listener und -Dienste in DI
  5. Service mit Servlet starten!

1. Erstellen Sie ein Ereignis.

Erstellen Sie zunächst eine Ereignisklasse, die ** ApplicationEvent ** erbt. ** MyBeanEvent () ** wird hier ausgeführt.

MyBeanEvent.java


public class MyBeanEvent extends ApplicationEvent {

	public MyBeanEvent(Object source) {
		super(source);
		//TODO automatisch generierter Konstruktor-Stub
		System.out.println("Create MyBeanEvent");
	}

}

2. Erstellen Sie einen Ereignis-Listener

Erstellen Sie dann einen Ereignis-Listener Sie müssen lediglich eine Schnittstelle mit dem Namen ** ApplicationListner ** implementieren.

MyBeanEventListener.java


public class MyBeanEventListener implements ApplicationListener<MyBeanEvent> {

	@Override
	public void onApplicationEvent(MyBeanEvent event) {
		//TODO automatisch generierter Methodenstub
		System.out.println("Event Has Finished!!");
	}

}

Dieser Ereignis-Listener wird immer nach dem Ende des Ereignisses aufgerufen. Es kann sinnvoll sein, ein Endprotokoll zu schreiben

3. Erstellen Sie einen Service.

Erstellen Sie dann einen ** Dienst **, der das Ereignis ausführt. (Ich werde den Platz weglassen, um die Bohne in DI zu registrieren!)

MyBeanEventService.java



public class MyBeanEventService implements ApplicationEventPublisherAware{

	@Autowired
	private MyBeanEve beanEve;
	private ApplicationEventPublisher publisher;
	
	@Override
	public void setApplicationEventPublisher(ApplicationEventPublisher applicationEventPublisher) {
		//TODO automatisch generierter Methodenstub
		this.publisher = applicationEventPublisher;
		System.out.println("publisher set!!");
		
	}
	
	public void doService(String message) {
		System.out.println("Service Started!");
		beanEve.addMessage(message);
		publisher.publishEvent(new MyBeanEvent(this));
	}

}

Hier ist die Verarbeitung, die tatsächlich funktioniert, der doService-Teil. Von ** setApplicationEventListenerPublisher ** Wird eine Veranstaltung veröffentlichen. Publisher ist eine Convenience-Klasse, die Ereignisse veröffentlicht. Sie führen jetzt die Ereignisverarbeitung aus.

4. Registrieren Sie Ereignis-Listener und -Dienste in DI

Registrieren Sie abschließend den Ereignis-Listener und -Dienst in Java Config. Das Spring Framework ist jetzt bereit, die Veranstaltung zu veröffentlichen. (* ^ - ^ *)

MyBeanEveConfig.java


@Configuration
@ComponentScan(basePackages = "com.TsugaruInfo.bean")
public class MyBeanEveConfig {
	
	@Bean
	MyBeanEve myBean2() {
		return new MyBeanEve();
	}
	
	@Bean
	public MySampleApplicationListener addListener() {
		return new MySampleApplicationListener();
	}
	
	@Bean
	public MyBeanEventListener mybeanListener() {
		return new MyBeanEventListener();
	}
	
	@Bean
	public MyBeanEventService mybeanService() {
		return new MyBeanEventService();
	}
}

5. Service mit Servlet starten!

Führen Sie den Dienst abschließend auf dem Servlet oder Controller aus. Dieses Mal wird es von einem Servlet ausgeführt. Es funktioniert möglicherweise nicht, weil ich es ein wenig geändert habe (/ _;)

MySampleServlet.java


@WebServlet("/sample")
public class MySampleServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
	
	ApplicationContext app;
		
	@Autowired
	private MyBeanEventService myService;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public void init() throws ServletException{
        super.init();
        SpringBeanAutowiringSupport
        	.processInjectionBasedOnCurrentContext(this);
    }
    
	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		String message = request.getParameter("message");
		myService.doService(message);
		response.sendRedirect("sample");
	}

Lauf

Lassen Sie uns dieses Servlet einbetten und den Server starten.

image.png

Sie sollten die Zeichen ** Publisher-Set !! ** auf der Konsole sehen. (Lassen Sie andere Zeichen Es ist ein Beweis dafür, dass der Dienst ordnungsgemäß in DI registriert ist.

Lassen Sie uns einen Moment darauf zugreifen und die Methode verschieben.

image.png

Aus den Buchstaben auf der Konsole ** Service → Ereignis → Ereignis-Listener ** Sie können sehen, dass es in der Reihenfolge von funktioniert.

Zusammenfassung

Wenn Sie es gut verwenden, können Sie die Verarbeitung, die Sie verwenden möchten, vor dem Dienst ausführen. Dies ist eine praktische Funktion. Zu diesem Zweck ist jedoch die Gestaltung des zu teilenden Prozesses sehr wichtig. ~~ Es ist besser, das Team über die Beziehung zwischen dem Service und der Veranstaltung zu informieren (ry ~~

Denken Sie an Ihr Design und programmieren Sie intelligent im Frühling!

Nachschlagewerk Spring Framework 5 Einführung in die Programmierung https://www.amazon.co.jp/Spring-Framework-%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E5%85%A5%E9%96%80-%E6%8E%8C%E7%94%B0-%E6%B4%A5%E8%80%B6%E4%B9%83/dp/4798053740

Recommended Posts

Die Ereignisverarbeitung wird im Frühjahr durchgeführt.
Was ist @Autowired im Spring Boot?
Spring Autowired wird im Konstruktor geschrieben
Asynchrone Verarbeitung mit regelmäßiger Ausführung in Spring Boot
Das @ Import-Ziel wird im Frühjahr als @ Konfiguration behandelt
Injizieren Sie den Logger im Frühjahr
Was ist Spring Tools 4?
Verwenden Sie Interceptor im Frühjahr
Microservices in Spring Cloud
Verwenden Sie MouseListener für die Verarbeitung
ORA-08177, wenn Spring Batch kontinuierlich in Oracle ausgeführt wird
Holen Sie sich Cookies im Frühling
Legen Sie den Kontextparameter in Spring Boot fest
Schreibverarbeitung in IntelliJ IDEA
Feder mit Kotorin --6 Asynchrone Verarbeitung
Spring Boot 2 Multiprojekt mit Gradle
Gemessene Parallelverarbeitung mit Java
Fehler in der Spring-Datenbankverbindung
Mazume Urteilsverarbeitung in der Fischerei
Wichtige Änderungen in Spring Boot 1.5
NoHttpResponseException in Spring Boot + WireMock
Schleifenschritt mit Spring Batch
Gleichzeitiger Tastendruck in der Verarbeitung
Spring Boot 2.2 unterstützt jetzt RSocket. Probieren Sie es aus
ProxyFactory ist praktisch, wenn Sie AOP mit Spring testen möchten!
[Spring Boot] Bis @Autowired in der Testklasse [JUnit5] ausgeführt wird