Warum wird die Bereitstellung von Datenquellen unter Tomcat 7 mit Spring Boot aufgehoben?

Ich habe eine Anwendung, die eine Datenquelle hat. Jedes Mal, wenn ich die Bereitstellung der Anwendung über die Manager-GUI aufhebe, werden die Datenquellen geschlossen. Beim erneuten Bereitstellen bleibt die Datenquelle geschlossen und löst die folgende Ausnahme aus:

{
  "status" : "DOWN",
  "error" : "org.springframework.jdbc.CannotGetJdbcConnectionException: Could not get JDBC Connection; nested exception is java.sql.SQLException: Data source is closed"
}

Caused by: java.sql.SQLException: Data source is closed
    at org.apache.tomcat.dbcp.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:1362) ~[tomcat-dbcp.jar:7.0.53]
    at org.apache.tomcat.dbcp.dbcp.BasicDataSource.getConnection(BasicDataSource.java:1044) ~[tomcat-dbcp.jar:7.0.53]
    at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:139) ~[hibernate-core-4.3.1.Final.jar:4.3.1.Final]
    at org.hibernate.internal.AbstractSessionImpl$NonContextualJdbcConnectionAccess.obtainConnection(AbstractSessionImpl.java:380) ~[hibernate-core-4.3.1.Final.jar:4.3.1.Final]
    at org.hibernate.engine.jdbc.internal.LogicalConnectionImpl.obtainConnection(LogicalConnectionImpl.java:228) ~[hibernate-core-4.3.1.Final.jar:4.3.1.Final]
    ... 81 common frames omitted

Durch einen Neustart des Servers wird dieses Problem behoben. Dies ist jedoch 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 auf Spring Boot konvertiert und hatte vor der Konvertierung keine Probleme mit der Datenquelle.

Im Folgenden wird beschrieben, wie ich die Datenquelle erstelle, die sich derzeit in meiner Spring Boot Application.java-Datei befindet.

@Bean()
    public DataSource dataSource() {
        return new JndiDataSourceLookup().getDataSource("com.datasource.CONSUMER");
    }   

Wie kann ich das verhindern?

Antworten auf die Frage(1)

Ihre Antwort auf die Frage