2013-06-12 22 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