2013-06-12 44 views
0

我正在構建一個使用Tomcat 7的Web應用程序,它可以讓團隊成員直接訪問任意數量的數據庫(可以是任何類型的MySQL,Oracle等) 。Java servlet(tomcat)跟蹤到多個數據庫的多個jdbc連接

可能數據庫的數量可能在幾十個,它們的連接細節存儲在應用程序自己的數據庫中。

我正在尋找處理連接和連接池的方法。我無法決定如何處理連接的打開和關閉。我知道我不想爲每個請求或每個會話打開一個連接。我曾想過創建一個全局哈希映射來存儲當前打開的連接池,並創建一個過期的過程,以便不使用過期的過程。

是否有任何事情可以做到這一點?我不禁感到自己正在重新發明輪子。 Tomcats連接池一次只能處理一個數據庫嗎?

+0

您將需要一個'DataSource'爲每個數據庫。對於連接池,可以使用BoneCP或C3P0等。 –

回答

1

您可以在servlet中實例化Tomcat的連接池。

它應該是這樣的:

public class YourServlet extends HttpServlet { 

    private DataSource ds; 

    public void init(ServletConfig config) throws ServletException { 
    org.apache.tomcat.jdbc.pool.PoolProperties prop; 
    prop = new org.apache.tomcat.jdbc.pool.PoolProperties(); 
    prop.setUrl("jdbc:mysql://localhost:3306/foo"); 
    prop.setDriverClassName("com.mysql.jdbc.Driver"); 
    prop.setUsername("user"); 
    prop.setPassword("password"); 

    org.apache.tomcat.jdbc.pool.DataSource dataSource; 
    dataSource = new org.apache.tomcat.jdbc.pool.DataSource(); 
    dataSource.setPoolProperties(prop); 

    ds = dataSource; 
    } 

    protected void doGet(HttpServletRequest request, 
    HttpServletResponse response) throws ServletException { 
    Connection conn = ds.getConnection(); 
    ... 
    } 

請參考下面的文檔瞭解詳細信息:

http://tomcat.apache.org/tomcat-7.0-doc/jdbc-pool.html#Plain_Ol「_JAVA