tomcat服务器常见配置及连接池配置

2017-04-25  本文已影响0人  法式大面包
<?xml version="1.0" encoding="UTF-8"?>
<Server port="8005" shutdown="SHUTDOWN">
  <Listener className="org.apache.catalina.startup.VersionLoggerListener"/>

  <Listener SSLEngine="on" className="org.apache.catalina.core.AprLifecycleListener"/>

  <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener"/>
  <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener"/>
  <Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener"/>


  <GlobalNamingResources>

  <Resource auth="Container" description="User database that can be updated and saved" factory="org.apache.catalina.users.MemoryUserDatabaseFactory" name="UserDatabase" pathname="conf/tomcat-users.xml" type="org.apache.catalina.UserDatabase"/>
  </GlobalNamingResources>


 <Service name="Catalina">



<!--   连接器 编码utf-8 port端口 -->
<Connector URIEncoding="utf-8" connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443"/>


<Connector port="8009" protocol="AJP/1.3" redirectPort="8443"/>



<Engine defaultHost="localhost" name="Catalina">

  <Realm className="org.apache.catalina.realm.LockOutRealm">
   
    <Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase"/>
  </Realm>

  <!-- 引擎,默认项目部署在webapps文件夹里,autoDeploy表示自动设置,只要放入到 appBase中,tomcat自动部署。unpackWARs -- WAR文件,tomcat自动解压并部署-->
  <Host appBase="webapps" autoDeploy="true" name="localhost" unpackWARs="true">

   <!-- 日志阀 -->
    <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" pattern="%h %l %u %t "%r" %s %b" prefix="localhost_access_log" suffix=".txt"/>
    <!-- 地址控制阀,不允许10.7.155.4访问, 10.7.155.* 不允许10.7.155内多有的ip访问
   <Valve className="org.apache.catalina.valves.RemoteAddrValue" allow="" deny="10.7.155.4" -->

  
  
  <!-- reloadable="true",eclipse每次自动会重启服务器,项目上线时部署时,应该设置为false
  把docBase的东西部署到服务器,通过path路径惊醒访问
  <Context docBase="D:\tomcat9.0\wtpwebapps\house" path="/house" reloadable="true" source="org.eclipse.jst.jee.server:house"/> -->
</Host>
  </Engine>
  </Service>
</Server>


在部署项目的时候,启用数据库连接池,xml中不能直接使用&符号,所有用转义符&代替

<Resource name="jdbc/hr" 
    auth="Container" -- 认证,让tomcat帮助认证用户名和密码,如果不认证,需要手动在代码中指定用户名和密码,tomcat帮助认证有更高的效率。
    type="javax.sql.DataSource" -- 连接类型
    maxIdle="10" -- 初始化时连接数
    maxActive="100" -- 最大连接数
    maxWait="5000" -- 超时时间
    username="root" -- 连接用户名
    password="123456" -- 连接密码
    driverClassName="com.mysql.jdbc.Driver" -- 驱动名
    url="jdbc:mysql://localhost:3306/hr?useUnicode=true&characterEncoding=utf8"--连接url,指定使用字符集和字符编码
    factory="org.apache.tomcat.jdbc.pool.DataSourceFactory"--通过factory可以看见创建连接时的问题,当连接不上会显示错误原因
/>

在项目上线的时候连接池一般是使用部署服务器的数据库连接池,上面再Tomcat的配置中配置了连接池,然后下面在Java代码中使用Tomcat的连接池的数据库连接。

package com.czy.utils;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

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

/**
 * 操作数据库工具类
 * @author czy
 *
 */
public class DbConfig {

/*  private static final String JDBC_DRV="com.mysql.jdbc.Driver";
private static final String JDBC_URL="jdbc:mysql://localhost:3306/hr?useUnicode=true&characterEncoding=utf8&useSSL=false";
private static final String JDBC_UID="root";
private static final String JDBC_PWD="123456";*/


    /**
     * 加载数据库的静态代码块
     */
/*  static{
    try {
        Class.forName(JDBC_DRV);
    } catch (ClassNotFoundException e) {
        throw new DbException("加载数据库驱动失败!", e);
    }
}*/

private static DataSource dataSource = null;

static{
    try {
        Context ctx = new InitialContext();
        //拿到连接池
        dataSource = (DataSource) ctx.lookup("java:comp/env/jdbc/hr");
    } catch (NamingException e) {
        e.printStackTrace();
        throw new DbException("创建数据库池时出错", e);
    }
    
}

/**
 * 构造器,不允许创建对象
 */
private DbConfig() {
    throw new AssertionError();
}

/**
 * 建立数据库连接
 * @return 数据库连接对象
 */
public static Connection getConnection(){
    try {
        //return DriverManager.getConnection(JDBC_URL, JDBC_UID, JDBC_PWD);
        return dataSource.getConnection();
    } catch (Exception e) {
        throw new DbException("创建数据库连接失败!", e);
    }
}

/**
 * 关闭连接语句
 * @param stmt 需要关闭的连接语句
 */
public static void closeStatment(Statement stmt) {
    try {
        if(stmt != null && !stmt.isClosed()) {
            stmt.close();
        }
    } catch (SQLException e) {
        e.printStackTrace();
        throw new DbException("关闭语句失败", e);
    }
}

/**
 * 关闭结果集
 * @param rs 需要关闭的结果集
 */
public static void closeResultSet(ResultSet rs) {
    try {
        if(rs != null && !rs.isClosed()) {
            rs.close();
        }
    } catch (SQLException e) {
        e.printStackTrace();
        throw new DbException("关闭结果集失败", e);
    }
}

/**
 * 关闭数据库连接
 * @param con 需要关闭的数据库连接
 */
public static void closeConnection(Connection con){
    try {
        if(con != null && !con.isClosed()) {
            //多态
            //使用数据库连接池的con并不是mysql提供的con
            //此处的close()并不是断开连接,而是释放连接池的连接,把连接归还到连接池
            con.close();
        }
    } catch (SQLException e) {
        throw new DbException("关闭数据库连接失败!", e);
    }
}
}
上一篇下一篇

猜你喜欢

热点阅读