刚接触连接池,在网上找了下资料,发现大家都是把连接池的信息配在Tomcat的server.xml文件里面的,可不可以把配置连接池的信息配在项目里的一个.xml文件呢?由于本人对这部分了解不够,请大家举出一个简单的完整例子....谢谢!用的WEB服务器是Tomcat 5.0....

解决方案 »

  1.   

    可以的
    1.$CATALINA_HOME/conf/catalina/localhost目录下找到需要数据库连接池的程序的配置文档,此处是shopping.xml。在<Context> </Context>之间添加如下信息,声明一个数据库连接池:
      
      <Resource name="jdbc/mysql" auth="Container" type="javax.sql.DataSource"/>
      
      <ResourceParams name="jdbc/mysql">
      
      <parameter>
      
      <name>factory</name>
      
      <value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
      
      </parameter>
      
      <parameter>
      
      <name>maxWait</name>
      
      <value>5000</value>
      
      </parameter>
      
      <parameter>
      
      <name>maxActive</name>
      
      <value>20</value>
      
      </parameter>
      
      <parameter>
      
      <name>password</name>
      
      <value>123</value>
      
      </parameter>
      
      <parameter>
      
      <name>url</name>
      
      <value>jdbc:mysql://localhost/shopdb?useUnicode=true&characterEncoding=gb2312</value>
      
      </parameter>
      
      <parameter>
      
      <name>driverClassName</name>
      
      <value>com.mysql.jdbc.Driver</value>
      
      </parameter>
      
      <parameter>
      
      <name>maxIdle</name>
      
      <value>10</value>
      
      </parameter>
      
      <parameter>
      
      <name>username</name>
      
      <value>shopadm</value>
      
      </parameter>
      
      </ResourceParams>
      
      这里的参数和上一种方法中添加到server.xml里的信息几乎是完全一样的。
      
      2.在对应程序的WEB-INF下建立一个web.xml文档,添加如下信息:
      
      <?xml version="1.0" encoding="ISO-8859-1"?>
      
      <web-app xmlns="http://java.sun.com/xml/ns/j2ee"
      
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      
      xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
      
      http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
      
      version="2.4">
      
      <resource-ref>
      
      <description>DB Connection</description>
      
      <res-ref-name>jdbc/mysql</res-ref-name>
      
      <res-type>javax.sql.DataSource</res-type>
      
      <res-auth>Container</res-auth>
      
      </resource-ref>
      
      </web-app>
      

  2.   

    这样shopping.xml还是要放在TOMCAT目录下阿,我想把这个保存连接池信息的.xml文件放在项目下面阿,比如:项目的WEB-INF下....该怎么做阿?
      

  3.   

    infowain(infowain) ( ) 信誉:100 
    请回答阿其它兄弟也帮忙看看阿。。
      

  4.   

    配置一个DBCP连接池:/**
     * @author Administrator
     *
     * TODO To change the template for this generated type comment go to
     * Window - Preferences - Java - Code Style - Code Templates
     */
    public class DbConnPoolManager {
            
        /**
         * xml configuration
         */    static Log log = LogFactory.getLog( DbConnPoolManager.class );
        private  Configuration  m_appConf = null;
        //private  Configuration  m_appConf = null;
            /**
         *
         */
        private  BasicDataSource m_dataSource = null;        private final static DbConnPoolManager m_singleton = new DbConnPoolManager();        private DbConnPoolManager()  {               log.info("--------初始化数据库连接池-------------");                m_appConf = ConfigManager.getInstance().getConfiguration();                Properties properties = new Properties();
                    try {
                            m_dataSource = (BasicDataSource) BasicDataSourceFactory
                                            .createDataSource(properties);
                            String user = m_appConf
                                            .getString("DBResource.DBResourceParams.user");                        log.info("DBResource.DBResourceParams.user:" + user);                        m_dataSource.setUsername(user);
                            String password = m_appConf
                                            .getString("DBResource.DBResourceParams.password");
                            m_dataSource.setPassword(password);
                            String driverClassName = m_appConf
                                            .getString("DBResource.DBResourceParams.driverClassName");
                            m_dataSource.setDriverClassName(driverClassName);
                            String driverUrl = m_appConf
                                            .getString("DBResource.DBResourceParams.driverUrl");
                            m_dataSource.setUrl(driverUrl);
                            String maxActive = m_appConf
                                            .getString("DBResource.DBResourceParams.maxActive");
                            m_dataSource.setMaxActive(Integer.parseInt(maxActive));
                            String initSize = m_appConf
                                            .getString("DBResource.DBResourceParams.initSize");
                            m_dataSource.setInitialSize(Integer.parseInt(initSize));
                            String maxIdle = m_appConf
                                            .getString("DBResource.DBResourceParams.maxIdle");
                            m_dataSource.setMaxIdle(Integer.parseInt(maxIdle));
                            String maxWait = m_appConf
                                            .getString("DBResource.DBResourceParams.maxWait");
                            m_dataSource.setMaxWait(Integer.parseInt(maxWait));                        m_dataSource.getConnection();                        log.info("---------获取连接-----------");
                    } catch (Exception e) {
                            //m_log.error("Exception occur, inside FilterManager()");
                            log.error("数据库连接池初始化异常:" + e.toString());                }        }        public static DbConnPoolManager getInstance() {
                    return m_singleton;
            }        /**
             * 返回数据源
             * @return
             */
            public BasicDataSource getDataSource() {
                    return m_dataSource;
            }        public void shutDown() throws SQLException {
                    m_dataSource.close();
            }
    }
    以上m_appConf 是解析xml文件类。这里用的是apache的Configuration来解析xml.(解析过程这里就不具体说明了,可根据情况自己选择)
    本例中的xml配置如下:(我用的是sql server,其他数据库也类似)<?xml version="1.0"?>
    <!-- XMLConfiguration for Alarm dispatchd -->
    <AppConfig>
    <!-- Section for  database -->             
    <DBResource>
    <dblink>jdbc/sqlserver</dblink>
    <type>javax.sql.DataSource</type>
    <!-- Section for Database Params --> 
    <DBResourceParams>   
    <user>sa</user>     
    <password>123</password>
    <driverClassName>com.microsoft.jdbc.sqlserver.SQLServerDriver</driverClassName>              
    <driverUrl>jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=mydb</driverUrl>
    <!-- Connection pool -->
    <maxActive>20</maxActive>
    <initSize>5</initSize>
    <maxIdle>5</maxIdle>
    <maxWait>60000</maxWait>
    </DBResourceParams>
    </DBResource>
    </AppConfig>
    --------------------------------------------
    以上代码仅供参考,有不妥之处还望各位兄弟指点^-^
      

  5.   

    infowain(infowain) ( 一星(中级))说的可以,如果配置不好,可以下载tomcat的管理工具,
    在图形界面下可以配置。会自动生成文件。
      

  6.   

    tomcat 5.0 自带了管理工具控制台,http://localhost:8080/admin
    帐号admin,然后新建一个数据库连接迟,至于你在工程中培植的话,
    在Tomcat 5.0\conf\Catalina\localhost新建对应的工程文件,如jndi.xml
    打开并修改内容:
    <?xml version='1.0' encoding='utf-8'?>
    <Context displayName="jndi" docBase="jndi" path="/jndi" workDir="work\Catalina\localhost\jndi">
      <Resource description="myjndi" name="jdbc/myjndi" type="javax.sql.DataSource"/>
      <ResourceParams name="UserDatabase">
          <parameter>
            <name>factory</name>
            <value>org.apache.catalina.users.MemoryUserDatabaseFactory</value>
          </parameter>
          <parameter>
            <name>pathname</name>
            <value>conf/tomcat-users.xml</value>
          </parameter>
        </ResourceParams>
        <ResourceParams name="jdbc/myjndi">
          <parameter>
            <name>url</name>
            <value>jdbc:odbc:webTest</value>
          </parameter>
          <parameter>
            <name>password</name>
            <value>000</value>
          </parameter>
          <parameter>
            <name>maxActive</name>
            <value>4</value>
          </parameter>
          <parameter>
            <name>maxWait</name>
            <value>5000</value>
          </parameter>
          <parameter>
            <name>driverClassName</name>
            <value>sun.jdbc.odbc.JdbcOdbcDriver</value>
          </parameter>
          <parameter>
            <name>username</name>
            <value>test</value>
          </parameter>
          <parameter>
            <name>maxIdle</name>
            <value>2</value>
          </parameter>
        </ResourceParams>
    </Context>