Warum schließen sich Datenquellen auf Tomcat 7, um die Bereitstellung mit Spring Boot zu beenden?

8

Ich habe eine Anwendung mit einer Datenquelle. Jedes Mal, wenn ich die Anwendung von der Manager-GUI deimplementiere, werden die Datenquellen geschlossen. Wenn ich versuche, eine erneute Bereitstellung durchzuführen, bleibt die Datenquelle geschlossen und löst die folgende Ausnahme aus:

%Vor%

Das Neustarten des Servers löst dieses Problem, aber das ist keine akzeptable Lösung für eine Produktionsanwendung.

Ich habe eine andere Anwendung mit einer anderen Datenquelle mit demselben Problem.

Beide Anwendungen verwenden Spring Boot Version 1.1.4 mit Tomcat 7. Eine der Anwendungen wurde in Spring Boot konvertiert und hatte vor der Konvertierung keine Probleme mit der Datenquelle.

Im Folgenden erstelle ich die Datenquelle in meiner Spring Boot Application.java-Datei.

%Vor%

Wie verhindere ich das?

    
zachariahyoung 05.08.2014, 23:31
quelle

1 Antwort

17

Dies ist nicht spezifisch für Spring Boot, es ist Standard Spring Verhalten.

Standardmäßig wird Spring auf die Methode zum Löschen eines Beans verweisen. Aus dem Javadoc für @Bean :

  

Der Container wird aus praktischen Gründen versuchen, eine Methode zum Zerstören auf ein Objekt zurückzuführen, das von der Methode @Bean zurückgegeben wurde. Wenn zum Beispiel eine Methode @Bean einen Apache Commons-DBCP BasicDataSource zurückgibt, wird der Container die für dieses Objekt verfügbare Methode close() bemerken und sie automatisch als destroyMethod registrieren. Dieser "Methoden-Inferenz-Modus" ist derzeit darauf beschränkt, nur öffentliche, keine Arg-Methoden mit dem Namen 'close' oder 'shutdown' zu erkennen.

Im Javadoc wird beschrieben, wie dieses Verhalten deaktiviert wird:

  

Um die Methodenableitung für eine bestimmte @Bean zu deaktivieren, geben Sie eine leere Zeichenfolge als Wert an, z. @Bean(destroyMethod="")

Sie müssen Ihre dataSource() Methode aktualisieren:

%Vor%     
Andy Wilkinson 06.08.2014, 11:11
quelle

Tags und Links