Tomcat+c3p0配置jndi数据源2种实现方法解析
在Java Web应用中,使用数据库是非常常见的需求。而常用的JDBC操作数据库的方式,需要手动处理连接的获取、释放、连接池的创建和维护等操作。为了简化这些操作并提供更好的性能表现,我们可以使用连接池,而c3p0就是常用的Java连接池之一。不过在Tomcat中,我们可以使用J2EE规范对数据源进行配置并使用,而这就需要使用Tomcat提供的JNDI机制来管理数据源。
本文将会介绍Tomcat+c3p0配置JNDI数据源的两种实现方法。
方法一:使用Tomcat提供的配置文件
-
在Tomcat的conf目录下,新建一个名为catlina.properties的文件,加入以下配置:
```
数据库URL
db.url=jdbc:mysql://localhost:3306/test
数据库用户名
db.username=root
数据库密码
db.password=123456
数据库驱动类
db.driverClassName=com.mysql.jdbc.Driver
初始连接池大小
db.initialPoolSize=5
最小空闲连接数
db.minPoolSize=5
最大连接池大小
db.maxPoolSize=20
最大闲置时间,单位是秒,默认值为0,表示无限制
db.maxIdleTime=0
获取连接的最长等待时间,单位是毫秒,默认值为0,表示无限制
db.checkoutTimeout=0
最大连接使用次数,默认值为0,表示无限制
db.maxConnectionAge=0
连接池重置时间,单位是秒,默认值为120,表示2分钟
db.idleConnectionTestPeriod=120
连接池中连接出现错误时的重试次数
db.acquireRetryAttempts=1
连接池中连接出现错误时的重试间隔时间,单位是毫秒
db.acquireRetryDelay=1000
``` -
在Tomcat的conf目录下,新建一个名为context.xml的文件,加入以下配置:
<Context>
<!-- 数据源JNDI名称 -->
<Resource name="jdbc/dbpool" auth="Container" type="javax.sql.DataSource"
driverClassName="${db.driverClassName}"
url="${db.url}"
username="${db.username}"
password="${db.password}"
maxActive="${db.maxPoolSize}"
maxIdle="${db.minPoolSize}"
minIdle="${db.minPoolSize}"
maxWait="-1"/>
</Context>在这个配置中,将Tomcat提供的JNDI机制与c3p0数据源相关属性结合,定义了一个名为jdbc/dbpool的JNDI数据源。
-
在Java Web应用的META-INF目录下,新建一个名为context.xml的文件,并加入以下配置:
<Context>
<ResourceLink name="jdbc/dbpool"
type="javax.sql.DataSource"
global="jdbc/dbpool"/>
</Context>在这个配置中,定义了一个ResourceLink元素,将JNDI名称jdbc/dbpool映射到全局环境中。这样,应用就可以通过这个名称找到数据源并使用它了。
-
在Java Web应用中,在需要使用数据源的Java类中加入以下代码:
try {
// 通过JNDI名称获取数据源
Context ctx = new InitialContext();
DataSource ds = (DataSource) ctx.lookup("java:/comp/env/jdbc/dbpool");
// 获取连接
Connection con = ds.getConnection();
} catch (NamingException | SQLException e) {
e.printStackTrace();
}在这个代码中,首先通过InitialContext来获取数据源,然后调用其getConnection()方法获取一个连接。
方法二:在Java Web应用中直接配置数据源
-
在Java Web应用中,加入c3p0的相关依赖,并加入以下配置:
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"
destroy-method="close">
<property name="driverClass"
value="com.mysql.jdbc.Driver" />
<property name="jdbcUrl" value="jdbc:mysql://localhost:3306/test" />
<property name="user" value="root" />
<property name="password" value="123456" />
<property name="initialPoolSize" value="5" />
<property name="minPoolSize" value="5" />
<property name="maxPoolSize" value="20" />
<property name="maxIdleTime" value="0" />
<property name="checkoutTimeout" value="0" />
<property name="maxConnectionAge" value="0" />
<property name="idleConnectionTestPeriod" value="120" />
<property name="acquireRetryAttempts" value="1" />
<property name="acquireRetryDelay" value="1000" />
</bean>在这个配置中,我们使用了Spring的配置方式来定义c3p0数据源,并将其命名为dataSource。
-
在需要使用数据源的Java类中,注入dataSource,并使用它来获取连接:
```
@Autowired
private DataSource dataSource;public void someMethod() {
try {
// 获取连接
Connection con = dataSource.getConnection();
} catch (SQLException e) {
e.printStackTrace();
}
}
```在这个代码中,首先通过@Autowired注解将dataSource自动注入到Java类中,然后调用其getConnection()方法获取一个连接。
以上就是Tomcat+c3p0配置JNDI数据源的两种实现方法,希望对你有所帮助。
示例1:使用Tomcat提供的配置文件的方式
我在Tomcat的conf目录下新建了一个名为catlina.properties的文件,并加入以下配置:
# 数据库URL
db.url=jdbc:mysql://localhost:3306/test
# 数据库用户名
db.username=root
# 数据库密码
db.password=123456
# 数据库驱动类
db.driverClassName=com.mysql.jdbc.Driver
# 初始连接池大小
db.initialPoolSize=5
# 最小空闲连接数
db.minPoolSize=5
# 最大连接池大小
db.maxPoolSize=20
# 最大闲置时间,单位是秒,默认值为0,表示无限制
db.maxIdleTime=0
# 获取连接的最长等待时间,单位是毫秒,默认值为0,表示无限制
db.checkoutTimeout=0
# 最大连接使用次数,默认值为0,表示无限制
db.maxConnectionAge=0
# 连接池重置时间,单位是秒,默认值为120,表示2分钟
db.idleConnectionTestPeriod=120
# 连接池中连接出现错误时的重试次数
db.acquireRetryAttempts=1
# 连接池中连接出现错误时的重试间隔时间,单位是毫秒
db.acquireRetryDelay=1000
然后在Tomcat的conf目录下新建了一个名为context.xml的文件,并加入以下配置:
<Context>
<!-- 数据源JNDI名称 -->
<Resource name="jdbc/dbpool" auth="Container" type="javax.sql.DataSource"
driverClassName="${db.driverClassName}"
url="${db.url}"
username="${db.username}"
password="${db.password}"
maxActive="${db.maxPoolSize}"
maxIdle="${db.minPoolSize}"
minIdle="${db.minPoolSize}"
maxWait="-1"/>
</Context>
最后,在Java Web应用的META-INF目录下新建一个名为context.xml的文件,并加入以下配置:
<Context>
<ResourceLink name="jdbc/dbpool"
type="javax.sql.DataSource"
global="jdbc/dbpool"/>
</Context>
示例2:在Java Web应用中直接配置数据源
我在Java Web应用中加入了c3p0的相关依赖,并加入以下配置:
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"
destroy-method="close">
<property name="driverClass"
value="com.mysql.jdbc.Driver" />
<property name="jdbcUrl" value="jdbc:mysql://localhost:3306/test" />
<property name="user" value="root" />
<property name="password" value="123456" />
<property name="initialPoolSize" value="5" />
<property name="minPoolSize" value="5" />
<property name="maxPoolSize" value="20" />
<property name="maxIdleTime" value="0" />
<property name="checkoutTimeout" value="0" />
<property name="maxConnectionAge" value="0" />
<property name="idleConnectionTestPeriod" value="120" />
<property name="acquireRetryAttempts" value="1" />
<property name="acquireRetryDelay" value="1000" />
</bean>
然后,在需要使用数据源的Java类中注入dataSource,并使用它来获取连接:
@Autowired
private DataSource dataSource;
public void someMethod() {
try {
// 获取连接
Connection con = dataSource.getConnection();
} catch (SQLException e) {
e.printStackTrace();
}
}
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Tomcatc3p0配置jnid数据源2种实现方法解析 - Python技术站