2016-11-28 8 views
1

I Frühling bin mit einem Verbindungs ​​Bean in Application.java wie folgt zu konfigurieren:Retrying fehlgeschlagen JDBC-Verbindung

@Bean 
public Connection getConnection(
     @Value("${sqlserver.host}") String host, 
     @Value("${sqlserver.user}") String user, 
     @Value("${sqlserver.password}") String password, 
     @Value("${sqlserver.dbname}") String dbname){ 
    try { 
     return DriverManager.getConnection(String.format("jdbc:jtds:sqlserver://%s:1433;instance=MSSQLSERVER;DatabaseName=%s", host, dbname), user, password); 
    }catch(Exception ex){ 
     System.out.println(ex.getMessage()); 
    } 

    return null; 
} 

In meinem Controller, ich bin diese Verbindung Auto-Verkabelung. Auch in meinem Controller habe ich Methoden geplant, die in einem Zeitintervall ausgeführt werden und Daten mithilfe dieser automatisch verdrahteten Verbindung abrufen. Meine Fragen sind: Wie kann ich über das Schließen der Verbindung in den geplanten Methoden gehen, da, wenn ich die Verbindung schließe, das nächste Mal, wenn die geplante Methode ausgeführt wird, die Verbindung null ist. Und wenn eine Verbindung null ist, wie kann ich versuchen, die Verbindung erneut herzustellen.

Was wäre die richtige Strategie, um dies zu tun?

+1

Verwenden Sie einen Verbindungspool, das ist, was sie für erfunden wurden. – dunni

Antwort

1

Die Feder bietet eine sehr einfache SingleConnectionDataSource that wraps a single Connection that is not closed after each use wie in der Dokumentation. In der gleichen Dokumentation wird auch erwähnt, dass Dies ist in erster Linie eine Testklasse. Zu folgen, um Ihre Methodensignatur

@Bean 
public DataSource dataSource( 
     @Value("${sqlserver.host}") String host, 
     @Value("${sqlserver.user}") String user, 
     @Value("${sqlserver.password}") String password, 
     @Value("${sqlserver.dbname}") String dbname)) { 

    SingleConnectionDataSource dataSource = new SingleConnectionDataSource(); 
    dataSource.setSuppressClose(true); 
    dataSource.setUrl(String.format("jdbc:jtds:sqlserver://%s:1433;instance=MSSQLSERVER;DatabaseName=%s", host, dbname)); 
    dataSource.setUsername(user); 
    dataSource.setPassword(password); 
    return dataSource; 
} 

There is a dedicated section in the Documentation, die präsentiert wird, wie Sie konnte Setup die C3P0 und DBCP DB-Verbindungspools, die produktionsbereit sind.

DBCP Konfiguration:

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> 
    <property name="driverClassName" value="${jdbc.driverClassName}"/> 
    <property name="url" value="${jdbc.url}"/> 
    <property name="username" value="${jdbc.username}"/> 
    <property name="password" value="${jdbc.password}"/> 
</bean> 

<context:property-placeholder location="jdbc.properties"/> 

C3P0 Konfiguration: direkt aus der obigen Dokumentation Zitiert

<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close"> 
    <property name="driverClass" value="${jdbc.driverClassName}"/> 
    <property name="jdbcUrl" value="${jdbc.url}"/> 
    <property name="user" value="${jdbc.username}"/> 
    <property name="password" value="${jdbc.password}"/> 
</bean> 

<context:property-placeholder location="jdbc.properties"/> 
+0

Also kümmert sich diese Implementierung um das Schließen von Verbindungen? Erneutes Öffnen von Verbindungen und erneuter Versuch bei fehlgeschlagener Verbindung – StephCurry3093

+0

Angenommen, ich verwende DriverManagerDataSource – StephCurry3093

+0

Das Öffnen einer Verbindung zur Datenbank ist eine kostspielige Operation. DB-Verbindungspools wie DBCP, DBCP2, C3P0, Hikari, Tomcat haben ihre eigenen benannten Parameter, um die Informationen von initSize (Anzahl der beim Start geöffneten Verbindungen), maxIdle, maxSize (= aktiv) usw. zu speichern. Siehe Dokumentation der DB-Verbindung Pool, den Sie verwenden möchten, um diese Parameter und ihre Standardwerte zu sehen. Hier ist die Konfigurationsseite für DBCP: http://commons.apache.org/proper/commons-dbcp/configuration.html – dimitrisli

Verwandte Themen