[JAVA] Customizer für Platform Transaction Manager aus Spring Boot 1.5 hinzugefügt

Bei Verwendung von Spring Boot wird automatisch die Bean-Definition der Implementierungsklasse der Schnittstelle "PlatformTransactionManager" ("DataSourceTransactionManager", "JpaTransactionManager", "JtaTransactionManager" usw.) entsprechend der Verwendungstechnologie ausgeführt. Kann es als Standard verwendet werden? Es ist ein bisschen subtil und ich denke, es gibt einige Parameter, die angepasst werden sollten. Das war's ... Dieses Mal werde ich vorstellen, wie man "PlatformTransactionManager" auf Spring Boot anpasst.

Bis zum Spring Boot 1.4?

Wenn Sie bis zum Spring Boot 1.4 den PlatformTransactionManager anpassen wollten, mussten Sie einen der folgenden Schritte ausführen:

@Bean
PlatformTransactionManager transactionManager(DataSource dataSource) {
	DataSourceTransactionManager transactionManager = new DataSourceTransactionManager(dataSource);
	transactionManager.setDefaultTimeout(30);
	transactionManager.setRollbackOnCommitFailure(true);
	// ...
	return transactionManager;
}
@Autowired
void configureTransactionManager(AbstractPlatformTransactionManager transactionManager) { //Von Spring Boot automatisch gesetzte Bohnen werden injiziert und angepasst
	transactionManager.setDefaultTimeout(30);
	transactionManager.setRollbackOnCommitFailure(true);
	// ...
}

Ab Spring Boot 1.5 (voraussichtlich Ende Januar)?

Zusätzlich zu der oben beschriebenen Methode können Sie ab Spring Boot 1.5 Anpassungen vornehmen, indem Sie die Bean der Implementierungsklasse "org.springframework.boot.autoconfigure.transaction.PlatformTransactionManagerCustomizer" im DI-Container registrieren.

Auszug aus PlatformTransactionManagerCustomizer


public interface PlatformTransactionManagerCustomizer<T extends PlatformTransactionManager> {
	void customize(T transactionManager);
}

Ich denke, dieser Mechanismus ist nützlich, wenn Sie die Anpassungslogik für mehrere Anwendungen freigeben möchten.

Integrierte Implementierung von PlatformTransactionManagerCustomizer

Eigentlich ... Spring Boot bietet eine integrierte Klasse, die die Schnittstelle "PlatformTransactionManagerCustomizer" implementiert. Mit der von Spring Boot bereitgestellten integrierten Implementierung können Sie die Werte der folgenden Eigenschaften anpassen, die in "AbstractPlatformTransactionManager" definiert sind. (gh-7561)

src/main/resources/application.properties


spring.transaction.default-timeout=30
spring.transaction.rollback-on-commit-failure=true

Note:

In Bezug auf die Behandlung des Spring-Transaktions-Timeout-Werts ist "[MyBatis-Spring 1.3 mit dem Spring-Transaktions-Timeout-Wert verknüpft !! (Wie wird das Spring-Transaktions-Timeout-Wert verwendet?)](Http: // qiita. com / kazuki43zoo / items / 1ac208a49c1d6ceeb0b8 # spring% E3% 81% AE% E3% 83% 88% E3% 83% A9% E3% 83% B3% E3% 82% B6% E3% 82% AF% E3% 82% B7% E3% 83% A7% E3% 83% B3% E3% 82% BF% E3% 82% A4% E3% 83% A0% E3% 82% A2% E3% 82% A6% E3% 83% 88% E5% 80% A4% E3% 81% A3% E3% 81% A6% E3% 81% A9% E3% 81% 86% E4% BD% BF% E3% 82% 8F% E3% 82% 8C% E3% Für die Notwendigkeit von "82% 8B% E3% 81% AE% E3% 81% 8B)" und "Flag für die Durchführung der Rollback-Verarbeitung, wenn zum Festschreibungszeitpunkt ein Fehler auftritt", DataSourceTransactionManager von Spring Wenn Sie es verwenden, kann es im Fehlerfall festgeschrieben werden !? ".

Erstellen und Anpassen einer Implementierungsklasse für PlatformTransactionManagerCustomizer

Wenn Sie Ihre Anpassungslogik für mehrere Anwendungen freigeben möchten, empfiehlt es sich, eine Implementierungsklasse für "PlatformTransactionManagerCustomizer" zu erstellen und anzupassen. (Stellen Sie sich einen Fall vor, in dem es wie eine gemeinsame Bibliothek bereitgestellt wird.)

@Component
public class MyPlatformTransactionManagerCustomizer
		implements PlatformTransactionManagerCustomizer<AbstractPlatformTransactionManager> {
	@Override
	public void customize(AbstractPlatformTransactionManager transactionManager) {
		// ...Implementieren Sie die Anpassungslogik
	}
}

Note:

Die Methode "Anpassen" wird nur aufgerufen, wenn der von Spring Boot generierte "PlatformTransactionManager" dem in den Generika des "PlatformTransactionManagerCustomizer" angegebenen Typ zugewiesen werden kann.

Anpassen mit Lambda-Ausdrücken (Java SE 8+)

Für die anwendungsspezifische Anpassung können Sie auch die Methode "anpassen" von "PlatformTransactionManagerCustomizer" mithilfe von Lambda-Ausdrücken, die von Java SE 8 unterstützt werden, ad hoc implementieren, ohne eine Klasse wie die oben beschriebene zu erstellen.

@Bean
PlatformTransactionManagerCustomizer<AbstractPlatformTransactionManager> transactionManagerCustomizer() {
	return transactionManager -> {
		// ...Implementieren Sie die Anpassungslogik
	};
}

~~Warning:~~

~~ Bei Verwendung des Lambda-Ausdrucks ... Die Aufrufsteuerung der Methode "customize" nach dem in den Generika von "PlatformTransactionManagerCustomizer" angegebenen Typ funktioniert nicht (= Es wird davon ausgegangen, dass "PlatformTransactionManager" in den Generika angegeben ist ...). ~~ ~~ Wenn der von Spring Boot generierte PlatformTransactionManager nicht dem in den Generika angegebenen Typ zugewiesen werden kann ... CalssCastException wird auftreten, seien Sie also vorsichtig! !! ~~

** 30.12.15:40 hinzugefügt **

Wenn eine "ClassCastException" auftritt, wird sie ignoriert, sodass sie sich genauso verhält wie beim Erstellen der Klasse! !! !!

Anwendungsreihenfolge von PlatformTransactionManagerCustomizer

Es können mehrere PlatformTransactionManagerCustomizer angewendet werden, einschließlich der integrierten Implementierung von Spring Boot (TransactionProperties). Das Verhalten, wenn mehrere PlatformTransactionManagerCustomizer im DI-Container registriert sind, ist standardmäßig nicht definiert. Wenn Sie die Bestellung kontrollieren möchten ...

Dies kann auf diese Weise erreicht werden, aber es scheint, dass dies nach der integrierten Implementierung von Spring Boot (TransactionProperties) nicht möglich ist. (Zumindest ... konnte ich es nach der integrierten Implementierung in meiner Umgebung nicht tun, aber ich denke nicht, dass es ein Problem ist.)

Zusammenfassung

Obwohl es noch nicht veröffentlicht wurde, wurde ab Spring Boot 1.5 eine Schnittstelle (PlatformTransactionManagerCustomizer) hinzugefügt, die das Anpassen von PlatformTransactionManager unterstützt ~

Das bedeutet ...

Die folgenden Eigenschaften, die wahrscheinlich häufig angepasst werden, können jetzt mit application.properties (oder application.yml) ~ angepasst werden

Das habe ich vorgestellt.

Spring Boot 1.5 soll Anfang des Jahres in RC1 und Ende Januar in der offiziellen Version veröffentlicht werden. Wenn RC1 herauskommt, überprüfen wir die Änderungen von Spring Boot 1.4 (glaube ich).

schließlich

Ich denke, dieser Eintrag ist wahrscheinlich das Ende der diesjährigen Qiita. Ich denke darüber nach, nächstes Jahr zu posten, wie ich es mag, also hoffe ich, dass es allen ein wenig hilft. (Bitte kommentieren Sie, wenn es etwas Seltsames gibt oder wenn Sie mehr davon machen möchten !!)

Nun, dieses Jahr sind nur noch zwei Tage übrig ... Hab ein schönes Jahr ~: see_no_evil :: hear_no_evil :: speak_no_evil:

Recommended Posts

Customizer für Platform Transaction Manager aus Spring Boot 1.5 hinzugefügt
Versuchen Sie Spring Boot von 0 bis 100.
Spring Boot zum Lernen von Anmerkungen
Spring Boot zum ersten Mal
Häufige Anmerkungen für Spring Boot-Tests
Google Cloud Platform mit Spring Boot 2.0.0
Verwenden Sie DBUnit für den Spring Boot-Test
Rüsten Sie den Federstiefel von der 1.5-Serie auf die 2.0-Serie auf
Spring Boot ab Null Teil 2
Spring Boot ab Null Teil 1
Die Geschichte des Übergangs von Spring Boot 1.5 zu 2.1
Änderungen bei der Migration von Spring Boot 1.5 auf Spring Boot 2.0
WebMvcConfigurer-Memorandum von Spring Boot 2.0 (Spring 5)
Änderungen bei der Migration von Spring Boot 2.0 zu Spring Boot 2.2
Beispielcode für die DB-Steuerung durch deklarative Transaktion mit Spring Boot + Spring Data JPA
Bucheinführung: Spring Boot Empfohlenes Nachschlagewerk für Anfänger!
Hinweise zu Anmerkungen beim Schreiben von Tests für Spring Boot
◆ Rufen Sie die von Spring Boot erstellte API von React ab
Vom Aufbau einer AWS-Cloud-Umgebung bis zur Bereitstellung einer Spring Boot-App (für Anfänger)