2017-02-20 71 views
0

查看下面的代碼,destroy方法是「close」,並且此方法僅在javax.sql.DataSource(HikariDataSource)的實現類中可用,但不在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"); 
} 

春天在什麼可以撥打以上close方法或者我需要重新定義的Java Bean的配置爲如下返回一個實現類?

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

回答

0

當您通過JNDI查找獲取數據源時,它是您的容器中配置的共享資源。而容器的工作就是管理數據源的生命週期。 Spring只是利用它,所以不需要關閉它。我會建議像這樣配置它:

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