一个下午,为的就是这20毫秒

        前几天费了九牛二虎之力终于实现了jsp与mysql和mssql的成功连接,原以为下个驱动就可以了事了,可万万没想到会有那么多事... ...
        今天趁还有兴致,就打算用刚弄成功的连接做一些数据库测试,花了一个上午写了一些常用数据库操作类(这是我的习惯了,呵呵),虽然在写这些类的时候也碰到了不少小问题,但稍微借助Internet就很快都搞定了,把写好的类测试了一下,还真不错,看了一下平均页面处理时间(操作:插入一条记录):40MS,总觉得有点不爽,问题很快就找出来了, 出在数据库连接类上,就光连接平均时间要:28MS,最低也在16MS,要是能省去数据库连接这部就好了,马上就想到前几天看过一本JSP技术内幕这本书,里面有介绍关于共享连接,后来在网上查了一些资料,有很多CSDN网友都不推荐用共享连接,推荐最多的是用连接池.
        一个人的话可能不可信,众人的话总是有他们一定的道理的.于是打消物理连接这种方法(毕竟我是菜菜嘛,当时没想那么多,以为一实现连接就OK了,呵呵),开始配置连接池.
        长话短说,在下面我大概讲一下我配置的大概经过之前,我先说一下我的开发环境:
        OS:  XP SP2
        DMS: MYSQL5.0
        Server: Tomcat 5.5
        Language: JAVA
      网上有很多关于tomcat配置连接池的文章,但大多数都是介绍5.0的,而且很多文章长的都是一个样的,当然了,要是能一步到位都无所谓了,我们讲究的是效率嘛,可不知道为什么,我每次都不能一帆风顺,这次也不例外,按网上的方法配置server.xml ,web.xml,重新启动服务器,执行出错,这也是我预料中的了,后来把错误信息在baidu上搜索了一下,找到好多相关的文章,硬着头皮一个一个的看过了,网页是换了好多个,但错误还是原来那样:Name jdbc is not bound in this Context  ,就因为这个错误我都搞了N个小时,后来试着用ADMIN来配置(一开始没用的原因是因为有不少网友说在5.5下该方法一般不行),只能死马当活马医了,要是这次又不行,我只能把tomcat降到5.0了,在用ADMIN之前说一下5.5的admin要自己去下过来,自己没有带的,可能官方也是从安全上考虑的吧,下过来直接覆盖相关文件夹就可以了,还有要注意的是在root下把原来的admin文件夹删除掉,不然你甭想进去:)  进入admin页面后,填了相关参数(很简单的操作),重新启动服务器,当时我是闭着眼睛的,怕又会看到那个错误,......是祸怎么躲也躲不了,还是那样...............................................那时真的无奈了,进入d:找到tomcat按下了del,这时只要敲个回车,我就要回到5.0的时代了,真有点不忍心,.......................作了好长的思想斗争后,最好还是没勇气按下去(可能我还不认输吧),点了取消后,又在网上毫无希望的找.................................

       最后在一个个人博客上找到了与我相似的一篇文章,一看....呵呵,不说了,大概大家也猜到了.....问题解决,现在我总结一下我在5.5下配置连接池的几个重要的步骤:

      登陆ADMIN---------------->填写相关参数------------->在conf下找到context.xml,在</Context>前加入  <Resource
      name="jdbc/mysql"
      type="javax.sql.DataSource"
      password="123456"
      driverClassName="com.mysql.jdbc.Driver"
      maxIdle="30"
      maxWait="10000"
      username="root"
      url="jdbc:mysql://localhost/database"
      maxActive="200"/>

这是最重要的一点,后来经过跟踪发现,在进入admin配置时,所影响到的页面有这么几个,conf/server.xml,ROOT/META-INF/context.xml   注意了不是上面那个context.xml

其实配置连接池就这么简单,其他细节问题我就不说了,希望这篇文章对像我昨天一样那么无奈的你有点帮助,有问题可以一起交流交流.

参考网上作的一些笔记:

一.在tomcat_home/common下放入jdbc的三个驱动程序(一定要的哦),可以在微软的网站上去下载,安装的SQLSERVER2k默认的用户名是sa,密码是空,但密码为空并不代表没有密码,所以你的url中一定要定义username和password,最好是重设定一下密码
二.出现不能引用错误的话一般就是路径没有写对,tomcat默认的路径是tomcat_home/webapps/不过使用5.5.x的话,按下面方法就行,不需要配置路径,而且也不用在youwebapp/WEB-INF/web.xml文件配置引用
三.tomcat5.5.x版的server.xml配置与tomcat5.0的配置不同,下面列举三种在tomcat5.5.x的配置方法,如果配置不正确会出现javax.naming.NameNotFoundException: Name is not bound in this Context 错误
方式一、全局数据库连接池
1、通过管理界面配置连接池,或者直接在tomcat/conf/server.xml的GlobalNamingResources中增加
<Resource name="jdbc/mydb" type="javax.sql.DataSource" password="mypwd" driverClassName="com.microsoft.jdbc.sqlserver.SQLServerDriver" maxIdle="2" maxWait="5000" validationQuery="select 1" username="sa" url="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=mydb" maxActive="4"/>
2、在tomcat/webapps/myapp/META-INF/context.xml的Context中增加:
<ResourceLink global="jdbc/mydb" name="jdbc/mydb" type="javax.sql.DataSource"/>
这样就可以了。
方式二、全局数据库连接池
1、同上
2、在tomcat/conf/context.xml的Context中增加:
<ResourceLink global="jdbc/mydb" name="jdbc/mydb" type="javax.sql.DataSource"/>
方式三、局部数据库连接池
只需在tomcat/webapps/myapps/META-INF/context.xml的Context中增加:
<Resource name="jdbc/mydb" type="javax.sql.DataSource" password="mypwd" driverClassName="com.microsoft.jdbc.sqlserver.SQLServerDriver" maxIdle="2" maxWait="5000" validationQuery="select 1" username="sa" url="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=mydb" maxActive="4"/>
参数说明:
driveClassName:JDBC驱动类的完整的名称;
maxActive:同时能够从连接池中被分配的可用实例的最大数;
maxIdle:可以同时闲置在连接池中的连接的最大数;
maxWait:最大超时时间,以毫秒计;
password:用户密码;
url:到JDBC的URL连接;
user:用户名称;
validationQuery:用来查询池中空闲的连接。
以上三种方式在tomcat 5.5.4下都可以。另外,sql server的jdbc driver是从微软网站上下载的sql server jdbc (sp3)。
四.报错org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot create PoolableConnectionFactory ([Microsoft][SQLServer 2000 Driver for JDBC]Error establishing socket.)此是一个小问题,因为我的SQLSERVER2K的服务改成手动的,所以每次启动后就要手动的启动SQLSERVER2K,由于一下子不记的启动了,所以报些错误,所以如果你经常要用到SQLSERVER2K的话,最好不要将其改为手动启动

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
如果请假八个小时为一天,而某天只上午或下午请假,我们可以将上午请假和下午请假分别视为半天的请假。以下是一个计算请假天数的示例代码: ```html <template> <div> <label for="start-date">开始日期:</label> <input type="date" id="start-date" v-model="startDate"> <label for="start-time">开始时间:</label> <input type="time" id="start-time" v-model="startTime"> <label for="end-date">结束日期:</label> <input type="date" id="end-date" v-model="endDate"> <label for="end-time">结束时间:</label> <input type="time" id="end-time" v-model="endTime"> <p>请假天数: {{ leaveDays }}</p> </div> </template> <script> export default { data() { return { startDate: '', startTime: '', endDate: '', endTime: '' }; }, computed: { leaveDays() { if (this.startDate && this.startTime && this.endDate && this.endTime) { const startDateTime = new Date(this.startDate + 'T' + this.startTime); const endDateTime = new Date(this.endDate + 'T' + this.endTime); const diffInMillis = endDateTime - startDateTime; const fullDayInMillis = 8 * 60 * 60 * 1000; const halfDayInMillis = fullDayInMillis / 2; if (diffInMillis <= halfDayInMillis) { return 0.5; } else { const days = Math.floor(diffInMillis / fullDayInMillis); const remainingMillis = diffInMillis % fullDayInMillis; if (remainingMillis >= halfDayInMillis) { return days + 1; } else { return days + 0.5; } } } else { return 0; } } } }; </script> ``` 在这个示例中,我们假设一天为8个小时,将8个小时的毫秒数定义为`fullDayInMillis`,将半天的毫秒数定义为`halfDayInMillis`。然后,我们根据开始时间和结束时间的差异来计算请假天数。 如果请假时间不足半天(即小于等于`halfDayInMillis`),请假天数为0.5天。 如果请假时间超过半天但不足一天(即大于`halfDayInMillis`但小于`fullDayInMillis`),请假天数为0.5天。 如果请假时间超过一天,我们将计算完整的请假天数,并检查剩余的毫秒数。如果剩余的毫秒数大于等于半天的毫秒数,将请假天数加1,否则请假天数加0.5。 这样就可以根据开始时间和结束时间计算请假天数,并将某天只上午或下午请假视为半天的请假。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值