日期:2014-05-18  浏览次数:21216 次

JAVA EE连接MYSQL报连接数出错Address already in use: connect
Address already in use: connect

先说一下我的代码的具体情况吧。我的代码是每隔一小时就采集中国2400家企业的股价,然后把采集的结果一条一条地插入到数据库中,每采集到一家公司就会直接插入表中,所以会产生很多连接,代码是运行在TOMCAT下的,在本机测试时,每次插入表中四五百条记录后就报错,如标题所示错误代码。当然了,我的代码里没有特别地弄一个连接池,但我是把获取数据库连接对象写在一个方法内的,如方法内这样写
conntection conn = null;
.
.
conn = DBUtil.getConntection();
所以,每次插入表时会把原创建的数据库连接对象引用置空,然后新建一个数据库连接对象,所以,我想在我这功能中应该是满足需求了,但是没想到的时才处理几百条就报错了,然后停了几分钟又自动跑了。

然后今天整个下午一直在百度谷歌,查出的原因,是本机或我的TOMCAT下设置的连接最大数过小,而在我们把数据库引用对象置为null时,它并不会马上被垃圾收集器回收,看了下网上说的只是先把它设为timewait状态,240秒后才回收,大概就是这样的,我想问下不修改我的代码的情况下我怎么修改这个连接最大数,让它变得更大一点,本人对WEB不熟悉,可以说是第一次弄吧,所以按网上说的在配置文件server.xml中添加minProcessors、maxProcessors这两个属性并给个更大的值就好了。因为我下的TOMCAT,server.xml文件上是找不到这两个属性的,所以网上说了我就添加上去了,然后把maxProcessors设为3000,想着我只采集2400家股票,应该足够了,结题修改后重新启动,还是和原来一样没有变化

在这请教下大额怎么解决怎么修改这个连接数,因为网上资料是好多,但我看了一下下午还是弄不了了,是不是我操作错了还是方式不对,或者大家对我这代码修改有什么好建议的也可以说说。

------解决方案--------------------
引用:
Quote: 引用:

Quote: 引用:

Quote: 引用:

 Address already in use: connect  应该是端口被占用的情况,但是你说插入几百条才开始报错,你是不是链接没有关闭呀?  又没有释放,超过最大数之后没有拿到连接很正常了
我连接没有直接关闭,但我每次操作完一条记录就会把连接前面生成的conn=null;,所以应该也有关闭的意思了

一定要close吧?
不一定吧,把引用置NULL了也差不多的,置NULL后,JVM垃圾收集器会自动收拾处理被弃的连接对象

。。。这个不仅是回收对象的问题,Connection的close方法还会通知数据库释放资源,数据库连接又不是只有程序的事情。
我实在不明白你为什么不用连接池,明明是并发插入,你非要每次插入都重新创建新的连接,这样的消耗非常浪费。而且你还没关闭连接,这样的做法如果让DBA看到了,杀了你的心思都有了。