2017-02-20 13 views
0

Mit Blick auf den folgenden Code ist die Methode destroy "close" und diese Methode nur in der Implementierungsklasse von javax.sql.DataSource (HikariDataSource), aber nicht in javax.sql.DataSource.Spring Bean destroyMethod

@Bean(destroyMethod = "close") 
public javax.sql.DataSource dataSource() throws NamingException { 
    Context ctx = new InitialContext(); 
    return (DataSource) ctx.lookup("java:comp/env/jdbc/abc"); 
} 

entspringt der Lage über die enge Methode aufzurufen oder ich brauche die Bean Java Config neu zu definieren, wie unten eine Implementierungsklasse zurückzukehren?

Antwort

0

Wenn Sie die Datenquelle über eine JNDI-Suche abrufen, handelt es sich um eine freigegebene Ressource, die in Ihrem Container konfiguriert ist. Und es ist die Aufgabe dieses Containers, den Lebenszyklus der Datenquelle zu verwalten. Spring macht nur Gebrauch davon, also ist es nicht erforderlich, es zu schließen. Ich würde empfehlen, es wie folgt zu konfigurieren:

@Bean(destroyMethod = "") 
public javax.sql.DataSource dataSource() throws NamingException { 
    Context ctx = new InitialContext(); 
    return (DataSource) ctx.lookup("java:comp/env/jdbc/abc"); 
}