如何在不使用JNDI数据源的情况下使用JDBC连接池? (在Apache Tomcat中)

我有一个Apache Tomcat 7服务器。 我有一个相当复杂的Java Servlet应用程序在其上运行,每个POST需要一些MySQL查询。 因此,我需要一个MySQL数据库连接来执行查询。 目前我使用下面的Java代码来创build数据源:

//db is for example: jdbc:mysql://127.0.0.1:3306/databasename DataSource ds = new DataSource(initPoolProperties(db, user, pass)); private PoolProperties initPoolProperties(String db, String user, String pass) { PoolProperties defaultPoolProperties = new PoolProperties(); defaultPoolProperties.setUrl(db); defaultPoolProperties.setUsername(user); defaultPoolProperties.setPassword(pass); defaultPoolProperties.setDriverClassName("com.mysql.jdbc.Driver"); // And a long list of properties here ... return defaultPoolProperties; } 

在我的整个分层Java Servlet应用程序中,我只为每个POST创build一个每个数据库连接的DataSource(通过HTML表单浏览网站)。 在此之后,我使用了几次ds.getConnection()来获得执行一些MySQL查询所需的连接。

每个人似乎都使用JNDI数据源。 这意味着他们在应用程序的context.xml中定义一个标记,并使用JNDI查找来获取数据源,并按照我的方式使用连接。

问题在于我在这里实际上做着同样的事情。 我在多个访问者/客户之间使用,汇集和共享连接吗? 因为我的在线网站应用程序将被大量使用,并且一些页面包含相当繁重的SQL查询。 我不想冒险等待超过0.01秒的加载页面。

我在这个网站上阅读了关于我这样做的方式(如上面的简单代码示例所示): http : //tomcat.apache.org/tomcat-7.0-doc/jdbc-pool.html向下滚动一下,你会发现Good ol'Java的部分,我觉得跟使用的一样,但是我不确定。 我怎么能确定我的应用程序使用连接池,并共享客户之间呢?

PS我更喜欢使用PoolProperties,而不是在context.xml中放置一些东西,因为我使用在configuration数据库中定义的多个数据库。 所选的数据库取决于用户。 因此,我可以通过这种方式更容易地在MySQLpipe理程序中维护数据库,而不是在context.xml中放置大量的代码。

如果你想在不使用Tomcat 7提供的内置function的情况下进行池化,则必须自己pipe理(不推荐)或者引入第三方库(如c3p0),不推荐使用DBCP: 请参见此处 。

在我看来,我将在context.xml中定义所有可能的数据源(以受益于Tomcat 7 JDBC池),并且我将在服务层中实现逻辑,以根据您的上下文select使用哪个数据源。 Spring框架可以帮助我们定义这样的服务和DAO。