JSP空间操作手册
  返回目录
部署工具-数据库连接池JNDI配置
   本功能为配置JSP容器(tomcat或resin)的数据源连接池,该功能是给有需要配置数据库连接池的站点使用,若贵站点未使用数据源连接池或您对数据源连接(JNDI)不了解,请不要进行配置,以免对贵站资源造成浪费,操作步骤如下:
登陆会员平台,点击【JSP主机】菜单下的【JSP主机管理】,从该列表点击【JSP控制面板】 进入控制面板后点击部署工具下的【数据库连接池】。


(图一:数据库连接池)


说明:

 

       1、为什么使用数据库连接池?

数据库连接的建立及关闭对系统而言是耗费系统资源的操作,在多层结构的应用程序环境中,这种耗费资源的动作对系统的性能影响尤为明显。

    在传统的数据库连接方式(指通过DriverManager)中,一个数据库连接对象均对应一个物理数据库连接,每次操作都打开一个物理连接,使用完都关闭连接,这样造成系统的性能低下。

    数据库连接池的解决方案是在应用程序启动时建立足够的数据库连接,并将这些连接组成一个连接池,由应用程序动态地对池中的连接进行申请、使用和释放。对于多于连接池中连接数的并发请求,应在请求队列中排队等待。并且应用程序可根据池中连接的使用率,动态增加或减少池中的连接数。

连接池技术尽可能多地重用了消耗内存的资源,大大节省了内存,提高了服务器的服务效率,能够支持更多的客户服务。通过使用连接池,将大大提高程序运行效率,同时,我们可以通过其自身的管理机制来监视数据库连接的数量、使用情况等。

 

2、我站如何配置配置数据源连接池?

我站在主机管理的详情中,含有配置数据源连接池的功能,通过简单明了的配置,您就可以完成数据源连接池的配置,一般只要定义下JNDI名称(您调用该数据源连接池的标识),其它设置为默认就可以了(默认连接到赠送给该主机的数据库上)。

配置界面如下图:

图二:数据源连接池配置界面

 

       3.调用JNDIJava实例

import java.sql.*;

import java.util.Properties;

import javax.naming.*;

import javax.sql.DataSource;

import org.apache.log4j.Logger;

public class MysqlConnection {

       public static MysqlConnection database = new MysqlConnection();

 

       private final Logger logger = Logger.getLogger(this.getClass());

 

       Context IC_ictx = null;

 

       String jndi = "java:comp/env/jdbc/mysql";

 

       DataSource dataSource = null;

 

       public MysqlConnection() {

       }

 

       /**

        * 取得数据库源;

        *

        * @return

        *

        */

       public DataSource getDataSource() {

              return dataSource;

       }

 

       /**

        * 取得连接

        *

        * @return

        * @throws Exception

        *

        */

       public static Connection getConnection() throws Exception {

              Connection connection = null;

              String jndi = database.getJndi();

              try {

                     DataSource dataSource = database.getDataSource();

                     if (dataSource == null)

                            dataSource = database.init();

                     connection = dataSource.getConnection();

                     return connection;

              } catch (SQLException PaEx_ex) {

                     database.logger.warn(String.valueOf(String

                                   .valueOf((new StringBuffer("从连接池中无法取得")).append(jndi)

                                                 .append("连接"))));

                     throw new Exception(String.valueOf(String

                                   .valueOf((new StringBuffer("从数据源")).append(jndi).append(

                                                 "取连接失败: ").append(PaEx_ex.getMessage()))));

              } catch (Exception PaEx_ex) {

                     database.logger.warn(String.valueOf(String

                                   .valueOf((new StringBuffer("从连接池中无法取得")).append(jndi)

                                                 .append("连接"))));

                     throw PaEx_ex;

              }

       }

 

       /**

        * 初始化连接;

        *

        * @return

        * @throws Exception

        *

        */

       public DataSource init() throws Exception {

              try {

                     Properties p = new Properties();

                     IC_ictx = new InitialContext(p);

                     dataSource = (DataSource) IC_ictx.lookup(jndi);

                     return dataSource;

              } catch (NameNotFoundException PaEx_ex) {

                     logger.warn(String.valueOf(String.valueOf((new StringBuffer(

                                   "从连接池中无法取得")).append(jndi).append("连接"))));

                     throw new Exception(String.valueOf(String

                                   .valueOf((new StringBuffer("数据源 ")).append(jndi).append(

                                                 " 在应用服务器的JNDI环境上没有找到"))));

              }

       }

 

       public String getJndi() {

              return jndi;

       }

       public void setJndi(String jndi) {

              this.jndi = jndi;

       }

}