基础 | Tomcat 配置数据源

Posted 创智俱乐部ISA

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基础 | Tomcat 配置数据源相关的知识,希望对你有一定的参考价值。


点击蓝字关注,创智助你长姿势


Tomcat数据源入门



Tomcat 数据源是 JavaWeb 开发中的一个重要知识点。通过Tomcat数据源取得数据库连接可以提高服务器的稳定性以及开发效率。


配置数据源的三种方式



一、JNDI+Tomcat 配置数据源


1.1 全局 JNDI 配置

在 tomcat 服务器的 lib 目录下导入数据库的驱动 jar 包(此处以mysql 数据库为例)


基础 | Tomcat 配置数据源

打开 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> 
1.2 局部 JNDI 配置


在 web 项目的 WebRoot/META-INF 目录下创建一个 context.xml 文件,内容如下:


<?xml version='1.0' encoding='utf-8'?><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 取得一个连接

  • 操作数据库

  • 关闭数据库连接,关闭的时候是将连接放回到连接池之中


@WebServlet("/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 一起发布,包括

了实现 jdbc3 和 jdbc2 扩展规范说明的 Connection 和 Statement 池的 DataSources 对象。

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 数据库为例)


基础 | Tomcat 配置数据源
编写配置文件 c3p0-config.xml


<?xml version="1.0" encoding="UTF-8"?> <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  使用的连接池组件。


  1. 导包:导入 dbcp 所必须的jar包:commons-dbcp2-2.1.1.jar ,commons-pool2-2.4.2.jar

  2. 在项目的 resources 目录下添加以 .properties 结尾的配置文件,如下:
driverClassName=com.mysql.jdbc.Driverurl=jdbc:mysql://localhost:3306/struts2?useSSL=trueusername=rootpassword=123456initialSize=10maxActive=50maxIdle=20minIdle=5maxWait=60000connectionProperties=useUnicode=true;characterEncoding=utf8defaultAutoCommit=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代码片段,该代码片段中每个属性的含义与用途

Tomcat 基础及配置

SSL基础知识及Nginx/Tomcat配置SSL

Tomcat基础及常见使用入门

Tomcat基础配置