我是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/