Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 439|回复: 0

[jsp学习]应用JAVA数据库连接池技术提高电子商务网站性能

[复制链接]
  • TA的每日心情
    开心
    2021-3-12 23:18
  • 签到天数: 2 天

    [LV.1]初来乍到

    发表于 2014-10-1 16:19:33 | 显示全部楼层 |阅读模式

    1.   何谓网站的性能,运行效率,稳定性,可扩展性,其中最重要就是网站
    2. 的访问速度,对于一个网站来说起这至关重要的作用。特别对于一个
    3. 电子商务网站来说,它将会直接影响网站的客流量及客户对整个网站信任度及
    4. 信心,从而损失大量的客户,使得网站的收入减少。所以提高网站的访问速度,
    5. 是每个网站所追求的。那么应该如何提高呢?


    6.           首先,我们就要找到一个好的ISP(Internet服务供应商),尽可能的增加我们主机的网络带宽,这是最基础的。
    7.    
    8.           其次,要选用更好的电脑做为服务器,它会提高系统的运行效率。

    9.    

    10.       选用比较知名的系统软件,如Linux,它较Windows有更高的效率及其稳定性,记得我大学时一台服务器,开始用的Windows2000,速度还可以,但是每隔一个月就要重启一次,后来换成Linux,速度比较原来快了,而且,稳定的运行一年多也没有问题(你问后来怎么样了,不好意思,我毕业了)。
    复制代码

      
         另外,还有选用业界口碑比较好的服务器软件,如Apache,当然,我以上所说的都是免费的产品,一般的商务网站,为了节约成本,也比较倾向于这些产品,只有政府等大型的机构才会购买IBM或者BEA的产品,不过话说回来,那些产品组合确实提高更大的性能,利如我们曾经在WebSphere+Oracle下跑了N多个应用,一点问题没有。所以如果公司有实力,也不妨买回来爽一下,不过现在电子商务网站好像赚钱的不多啊,省一点是一点吧。

           最后,就是要提高我们网站系统的运行效率及稳定性了,原来很多的网站都是ASP,PHP的应用,现在也有很多,仍然占多数。但是慢慢有些大的网站应用部分或者更多的选择了java做为网站应用的技术,因为它有更多更优秀更先进的东西在里面。至少,我们不用花一分钱,就可以拥有一个电子商务平台,因为它的大多数东西都是可以免费得到的,而且它的可扩展性更强。
    下面我们用JAVA技术来讨论一下。

          众所周知,一个商务系统最根本的东西就是将商品的信息从数据库取出来显示到页面,然后将客户提交的东西保存到数据库。所以系统更多的是和数据库打交道,这也就是JAVA的数据库操作。最开始JAVA是通过ODBC和数据库通信,速度比较慢,后来JAVA有了自己的连接数据库驱动,也就是JDBC,速度有所提高,但对于整个系统而言,仍然是影响网站速度最大的瓶颈。最好的解决方式就是不访问数据库,那基本上不可能,我也曾经试图把信息存入到某些文件中,如现在流行的XML文件,一是解决了问题,二是也省一份的银子。但是由于技术的不成熟,真正使用起来会有很多问题,虽然现在也出现了类似的“数据库”,但是效果始终没有现在数据库那么理想,毕竟DBMS也经历了这么多年的发展,相当成熟了。只好另寻他路了。

         就现在看来只能使用JDBC来存取数据库了。我相信一句话:如果你要它,首先要了解它。我先来介绍一下它的工作原理。
    首先它要先创建一个数据库连接,就是要和数据库取得联系,这是最重要的。因为它是通过SOCKET方式,所以也是最影响效率的,但也是必不可少的。然后通过程序发送请求到已连接的数据库。最后,数据库响应我们的请求,并返回信息。最最后,我们要关闭数据库连接。

          也许大家会想,既然创建数据库连接最影响效率,干脆我们就不关了吧,可以提高很大的效率的,很有道理,但问题是我们不知道下次怎么得到那个连接,而且每次请求可能还要建立一个连接,都要占用系统资源,如果过多的话,就会使得数据库系统崩溃。也许有人会说,那们就把它放到一个地方,用的时候我们就拿出来用,不用的时候就放回去,如果请求过多,我们就让它等着,有空闲的连接再给它使用。这位老兄太聪明,这可能就是我们现有的最好的解决方案。这也就是现在比较流行的“数据库连接池”技术。

          对于JAVA来说,使用连接池比较直接使用JDBC操作数据库,性能提高1.5倍以上(网上数据,有待大家测试)。现在的商业的大型服务器都有自己内置的连接池,如WebSphere,WebLogic等,但一些免费的服务却需要我们自己处理,如Resin,Tomcat等。要省钱当然自己要麻烦一点了,现在主要应用的免费产品有很多,如C3P0,Proxool,DBCP,PoolMan,或者自己依照写一个都没有问题。Proxool和PoolMan都很不错,但是官方网站不再提供更新,DBCP是APACHE项目组织的,出身名门,但著名的开源项目HIBERNATE却不再提供对它的支持,主要原因是使用的稳定性不是很好。所以下面我给大家介绍一下应用C3P0来实现免费的数据库连接池。 从官方网站下载C3P0的JAR包,创建封装连接池的JAVA类:

    public class C3P0Connect {

    //LOG4J的日志记录,推荐使用,主要调试错误信息,重要的日志记录
    private static Logger log = Logger.getLogger(C3P0Connect.class);

    //JDBC的连接池接口,我们要用C3P0提供的类来实现这个接口,因为整个应用我们用一个连接池,声明为静态类
    private static DataSource ds = null;

    /**
    * 创建静态方法,实现JDBC定义的连接池接口
    * @throws SQLException
    * @throws ClassNotFoundException
    */
    public static void getDataSource() throws SQLException {

    //建议把数据库基本信息写到配置文件中,我写到XML文件中
    //加载数据库连接的驱动程序
    try {
        Class.forName(XMLConfig.getValue("driver"));
    } catch (Exception e) {

    //不能加载驱动程序,抛出异常
    throw new SQLException("driver was not found:" + XMLConfig.getValue("driver"));
    }

    //创建C3P0的连接池工具
    PoolConfig pcfg = new PoolConfig();

    //设置初始的连接池连接数
    pcfg.setInitialPoolSize(XMLConfig.getIntValue("minPoolSize"));

    //设置最小的连接池连接数
    pcfg.setMinPoolSize(XMLConfig.getIntValue("minPoolSize"));

    //设置最大的连接池连接数
    pcfg.setMaxPoolSize(XMLConfig.getIntValue("maxPoolSize"));

    //设置每次增长的连接池连接数的个数
    pcfg.setAcquireIncrement(XMLConfig.getIntValue("acquireIncrement"));

    //初始化连接池
    DataSource unpooled = DataSources.unpooledDataSource(XMLConfig
    .getValue("url"), XMLConfig.getValue("user"), XMLConfig.getValue("password"));

    //实现JDBC的连接池接口
    ds = DataSources.pooledDataSource(unpooled, pcfg);

    //记录日志信息,说明已经成功建立连接池
    log.info(" init c3p0 datasource ......");

    }

    /**
    * 创建静态方法,关闭连接池
    * @throws SQLException
    */
    public static void destroyDataSource() throws SQLException {
    //判断连接池是否存在
    if (ds != null) {

    //记录日志信息,说明开始关闭连接池
    log.info(" destroy c3p0 datasource ......");

    //调用C3P0接口,关闭数据库连接池
    DataSources.destroy(ds);
    }

    }

    /**
    * 创建新的方法,取得数据库连接
    * @return 数据库连接
    * @throws SQLException
    * @throws ClassNotFoundException
    */
    public static Connection getConnection() throws SQLException {
    //判断连接是否已经创建
    if (ds == null) {

    //如果没有创建,则新创建一个
    getDataSource();
    }

    //从连接池中取出一个数据库连接
    return ds.getConnection();
    }
    }

    上面的例子是一些C3P0的主要功能,也包括了实现数据库连接的基本功能。如果大家需要实现更高级的功能,请大家查看C3P0的JAR包的参考文档。
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2024-5-3 15:01 , Processed in 0.453869 second(s), 46 queries .

    Powered by Discuz! X3.4

    © 2001-2017 Comsenz Inc.

    快速回复 返回顶部 返回列表