开发环境,系统在长时间不访问(第二天),重新访问,系统地sql执行要在2秒以上,db2top查看,在db2中执行毫秒级的。通过javacore查看,感觉都堵在org/springframework/jdbc/datasource/DriverManagerDataSource.getConnectionFromDriverManager(DriverManagerDataSource.java:173(Compiled Code))获取数据库连接上了。连接写法如下:
<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName">
<value>jdbc/xxxx</value>
</property>
</bean>
问问大家,Was上有什么限制,说每次长时间不用,再重新获得数据库连接要重建吗?
连接池的最小连接数是10
这个很可能是时间长了以后,数据库的连接都断开了,然后数据库就自动关闭了,下次连接的时候,数据库要激活,所以要花费较长时间。
你可以试试在启动数据库的时候,先激活数据库 db2 activate db xxxx
这样,即使数据库没有连接,数据库也不会关闭。
你这种情况应该采用了隐式激活数据库方法。
在db2数据库里,数据库启动其实分为两部分:启动实例、激活数据库。激活数据库就是启动数据库相关的线程、分配缓冲池、其它各种数据库用到的内存堆。
而激活数据库有两种方式:
1,显示激活,就是启动实例后执行激活数据库的命令:activate database DB_NAME,这种激活方式可以保持数据库一直处于激活状态。
2,隐式激活,就是启动实例后不执行计划数据库命令,而是用户发起connect 连接数据库的命令,这样数据库会先激活数据库,然后再把用户连接进来,当数据库所有用户都断开数据库连接之后,数据库会取消激活,等下次有用户连进来又再次激活。因为激活数据库需要消耗一定的时间,所以用户连接会比较旧。