java - 使用连接池时出错

标签 java performance connection-pooling

我是java新手。我有一个java类,它通过jdbc访问数据库。在此类的每个方法中,我都会打开和关闭连接,这似乎会导致性能下降。我尝试过使用 jdbc 连接池,但不确定如何继续。我创建了一个 Server.xml 和 Context.xml 文件,如下所示。

服务器.xml

<GlobalNamingResources>
  <Resource type="javax.sql.DataSource"
            name="jdbc/TestDB"
            factory="org.apache.tomcat.jdbc.pool.DataSourceFactory"
            driverClassName="com.mysql.jdbc.Driver"
            url=""
            username=""
            password=""
/>
 </GlobalNamingResources>

上下文.xml

<Context>
  <ResourceLink type="javax.sql.DataSource"
                name="jdbc/LocalTestDB"
                global="jdbc/TestDB"
/>
 </Context>

我创建了一个测试java类,如下所示。

import java.sql.Connection;

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.sql.DataSource;

public class TestDBConnections {

    Context initContext = new InitialContext();
    Context envContext = (Context) initContext.lookup("java:/comp/env");
    DataSource datasource = (DataSource) envContext.lookup("jdbc/LocalTestDB");
    Connection con = datasource.getConnection();

}    

我收到以下错误:

Default constructor cannot handle exception type NamingException thrown by implicit super constructor. Must define an explicit constructor.

请帮我解决。

最佳答案

我正在复制我的配置,它对我有用。您可以将您的配置更改为相同的,我认为它会起作用...

上下文.xml

<ResourceLink
        global="jdbc/ManagerDB"
        name="jdbc/ManagerDB"
        type="javax.sql.DataSource"/>

服务器.xml

<Resource name="jdbc/ManagerDB"
              auth="Container"
              type="com.mchange.v2.c3p0.ComboPooledDataSource"
              factory="org.apache.naming.factory.BeanFactory"
              user="MQG7qJMthHrAYL1eoLkJlg=="
              password="Y3XTGQyJCRs9xY1/ZPvYiQ=="
              driverClass="com.microsoft.sqlserver.jdbc.SQLServerDriver"
              jdbcUrl="jdbc:sqlserver://;serverName=172.16.2.45;port=1433;DatabaseName=mgmt"
              preferredTestQuery="SELECT 1"
              testConnectionOnCheckout="false"
              maxPoolSize="75"  
              initialPoolSize="30" 
              numHelperThreads="5"
              maxStatementsPerConnection="1875"
              testConnectionOnCheckin="false"
              idleConnectionTestPeriod="300"
              checkoutTimeout="10000" /> 

现在下面的代码示例可用于通过jndi查找获取数据源

Context initContext = new InitialContext();
DataSource dataSource = (DataSource)ctx.lookup("java:comp/env/jdbc/ManagerDB");

注意:1)我在资源链接中具有相同的全局值和名称值
2)我使用的是C3p0数据源,你可以使用tomcat的默认数据源。

关于java - 使用连接池时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17102487/

相关文章:

performance - Perforce - RpcTransport : partial message read

mysql - MySQL的。 WordPress。使用IN语句时查询速度慢

java - 如何在 Jboss 中以编程方式监控连接池?

mysql - rails : Does every http request creates a new connection pool?

java - 从 PSD 文件获取动画信息?

java - 如何让 for 循环中的数组在每次运行时实际更改 for 循环的大小?

java - 接收大型 XML 时,agentcontext 中的 Request_Content 为空

java - 使用 setRowSelectionInterval(int, int) 后无法通过箭头键导航 JTable

python - 在列表中查找排名和百分比排名

java - 当调用 openSession 并且无法建立与 DB 的连接时,Hibernate 不会抛出异常