基础 | Tomcat 配置数据源
Posted 创智俱乐部ISA
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基础 | Tomcat 配置数据源相关的知识,希望对你有一定的参考价值。
点击蓝字关注,创智助你长姿势
Tomcat数据源入门
Tomcat 数据源是 JavaWeb 开发中的一个重要知识点。通过Tomcat数据源取得数据库连接可以提高服务器的稳定性以及开发效率。
配置数据源的三种方式
一、JNDI+Tomcat 配置数据源
1.1 全局 JNDI 配置
在 tomcat 服务器的 lib 目录下导入数据库的驱动 jar 包(此处以mysql 数据库为例)
打开 tomcat 安装路径下 conf 目录下的 server.xml ,在
<GlobalNamingResources></GlobalNamingResources>标签之间加入下面的内容:
<Resource name="jdbc/appDS" auth="Container"
type="javax.sql.DataSource"
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/app?rewriteBatchedStatements=true"
username="root"
password="root"
maxActive="100"
maxIdle="20"
maxWait="10000"/>
在 tomcat 安装路径下 conf目录下的context.xml,在 <Context> 和 </Context> 标签之间加入如下内容:
<ResourceLink name="jdbc/appDS" global="jdbc/appDS" type="javax.sql.DataSource"/>
想让一个数据源起作用的话,还必须在 web.xml 中进行配置添加(注意:是 web 项目下 WEB-INF/web.xml 文件,而不是tomcat 服务器的 web.xml 文件之中完成配置)
<resource-ref>
<description>app_DataSource</description>
<res-ref-name>jdbc/appDS</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
在 web 项目的 WebRoot/META-INF 目录下创建一个 context.xml 文件,内容如下:
<Context>
<Resource name="jdbc/appDS" auth="Container"
type="javax.sql.DataSource"
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/app?rewriteBatchedStatements=true"
username="root"
password="root"
maxActive="100"
maxIdle="20"
maxWait="10000"/>
</Context>
在 web 项目的 WebRoot/META-INF/web.xml 中添加如下配置:
<resource-ref>
<description>app_DataSource</description>
<res-ref-name>jdbc/appDS</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
测试:以上两种方式配置数据源在程序中调用可以按照以下思路实现:
初始化名称查找上下文
通过 JNDI 名称找到 DataSource
通过 DataSource 取得一个连接
操作数据库
关闭数据库连接,关闭的时候是将连接放回到连接池之中
"/c3p0") (
public class Testc3p0 extends HttpServlet {
private static final long serialVersionUID = 1L;
public Testc3p0() {
super();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
ResultSet rs = null;
try {
//此类是执行命名操作的初始上下文。用于解析该 URL
InitialContext ctx = new InitialContext();
//lookup检索配置。
DataSource ds = (DataSource)ctx.lookup("java:comp/env/jdbc/appDS");
//获取连接
Connection con = ds.getConnection();
/*Statement stmt = con.createStatement();
rs = stmt.executeQuery("select count(*) as ant from user");
while(rs.next()){
if(rs!=null){
System.out.println(rs.getInt("ant"));
}
}*/
System.out.println(ds.getConnection());
} catch (NamingException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
二、c3p0 配置数据源
c3p0 是一个开放源代码的 JDBC 连接池,它在 lib 目录中与 Hibernate 一起发布,包括
http://sourceforge.net/projects/c3p0/files/?source=navbar
解压该压缩包得到 c3p0-0.9.2.jar,mchange-commons-java-0.2.11.jar,将这两个 jar 包拷贝到项目的 WEB-INF/lib 下,同时确保 tomcat 的 lib 目录下存在 mysql-connect-java-xxxx.jar的驱动 jar 包(这里以 MySQL 数据库为例)
<c3p0-config>
<default-config>
<!-- 默认数据库连接池配置信息-->
<property name="driverClass">com.mysql.jdbc.Driver</property>
<property name="jdbcUrl">jdbc:mysql://localhost:3306/day16</property>
<property name="user">root</property>
<property name="password">root</property>
<property name="acquireIncrement">5</property>
<property name="initialPoolSize">10</property>
<property name="minPoolSize">5</property>
<property name="maxPoolSize">20</property>
</default-config>
<!-- 第二个数据库连接池配置信息-->
<named-config name="flx">
<property name="driverClass">com.mysql.jdbc.Driver</property>
<property name="jdbcUrl">jdbc:mysql://localhost:3306/day16</property>
<property name="user">root</property>
<property name="password">root</property>
<property name="acquireIncrement">5</property>
<property name="initialPoolSize">10</property>
<property name="minPoolSize">5</property>
<property name="maxPoolSize">20</property>
</named-config>
</c3p0-config>
注意事项:
在页面的调用代码:ComboPooledDataSource ds = new ComboPooledDataSource(连接信息名)
此处对应 c3p0-config.xml 文件中 <named-config name="flx"> 元素——指定名称的数据源。
数据源名称不写,则自动在类路径下搜索并使用 “默认数据源”
若书写名称,同样会搜索并调用指定名称的数据源
c3p0 数据源的调用代码 如下:
public class JdbcUtils_C3P0 {
private static ComboPooledDataSource ds = null;
static{
try{
ds = new ComboPooledDataSource();
}catch (Exception e) {
throw new ExceptionInInitializerError(e);
}
}
public static Connection getConnection() throws SQLException{
return ds.getConnection();
}
public static void release(Connection conn,Statement st,ResultSet rs){
if(rs!=null){
try{
rs.close();
}catch (Exception e) {
e.printStackTrace
}
rs = null;
}
if(st!=null){
try{
st.close();
}catch (Exception e) {
e.printStackTrace();
}
st = null;
}
if(conn!=null){
try{
conn.close();
}catch (Exception e) {
e.printStackTrace();
}
}
}
}
三、DBCP 配置数据源
DBCP (DataBase connection pool) 是 Apache 上的一个 java 连接池项目,也是 tomcat 使用的连接池组件。
导包:导入 dbcp 所必须的jar包:commons-dbcp2-2.1.1.jar ,commons-pool2-2.4.2.jar
-
在项目的 resources 目录下添加以 .properties 结尾的配置文件,如下:
driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/struts2?useSSL=true
username=root
password=123456
initialSize=10
maxActive=50
maxIdle=20
minIdle=5
maxWait=60000
connectionProperties=useUnicode=true;characterEncoding=utf8
defaultAutoCommit=true
DBCP 数据源的调用代码,如下:
import java.sql.Connection;
import java.sql.SQLException;
import java.util.Properties;
import javax.sql.DataSource;
import org.apache.commons.dbcp.BasicDataSourceFactory;
//使用DBCP数据源
public class DBCPUtil {
//1.定义一个数据源
private static DataSource ds;
//2.给数据源赋值
static {
Properties prop = new Properties();
try {
prop.load(DBCPUtil.class.getClassLoader().getResourceAsStream("dbcpconfig.properties"));
ds = BasicDataSourceFactory.createDataSource(prop);//得到数据源
} catch (Exception e) {
throw new ExceptionInInitializerError("初始化数据源错误");
}
}
//3.获取数据源
public static DataSource getDataSource() {
return ds;
}
//4.获取连接
public static Connection getConnection() {
try {
return ds.getConnection();
} catch (SQLException e) {
throw new RuntimeException("获取连接失败");
}
}
}
上期推荐
good
下期预告
nice
基础 | 思科交换机中的 STP 生成树协议
创智俱乐部
微信:sziitlSA
一个让你涨姿势的社团
长按二维码关注
以上是关于基础 | Tomcat 配置数据源的主要内容,如果未能解决你的问题,请参考以下文章
[vscode]--HTML代码片段(基础版,reactvuejquery)
在Tomcat的安装目录下conf目录下的server.xml文件中增加一个xml代码片段,该代码片段中每个属性的含义与用途