2013-02-28 58 views
3

在下面的例子中,JdbcTemplate創建兩個連接還是一個?每次調用query()時,JdbcTemplate都會創建一個新的連接嗎?

public class MyDao { 

    private JdbcTemplate jdbcTemplate; 

    public List<Data1> getData1() { 
      return jdbcTemplate.query(mySql, myParams, myCallback); 
    } 

    public List<Data2> getData2() { 
      jdbcTemplate.query(mySql2, myParams2, myCallback2); 
    } 
} 

public class Main { 
    public static void main(String[] args) { 
     MyDao dao = new MyDao(); 
     List<Data1> d1 = dao.getData1(); 
     List<Data2> d2 = dao.getData2(); 
     doStuff(d1, d2); 
    } 
} 

也就是說,是否重複使用第一個查詢中的連接?我們假設它是用一個基本的數據源(而不是一個合併的數據源)構建的。

+1

我猜如果在spring xml文件中有簡單的配置,將會使用兩個連接。 – 2013-02-28 05:21:10

回答

7

它取決於JdbcTempate的DataSource。如果您提供了連接池,如Apache commons-dbcp,那麼DBCP將盡其所能重用Connections。如果您使用Spring JDBC的DriverManagerDataSource,則會在每個JdbcTemplate.query調用上創建/關閉新的Connection。

+0

我明白了。我想到的數據源(正如你猜對的那樣)是Spring的DriverManagerDataSource。你提到Apache DBCP ...你能告訴我,這是C3P0的一大改進嗎?我知道C3P0不再被維護。 – ktm5124 2013-02-28 05:30:33

+0

我不認爲我可以更好地解釋差異比http://stackoverflow.com/questions/520585/connection-pooling-options-with-jdbc-dbcp-vs-c3p0 – 2013-02-28 05:38:12

相關問題