22
2014
01

数据库连接池丢失连接异常

最近做的一个服务端项目,用DBCP创建数据库连接池,连接MySQL。服务器挂了几天,客户端请求时偶尔会发现java.sql.SQLException: Already closed异常。检查并没有发现业务逻辑错误。仔细查找资料得知:当一个连接长时间没有数据请求时,MySQL会根据超时时间关闭这个连接。而DBCP并不知道连接已经关闭了,再通过这个连接请求数据库就会抛出这个异常。

解决方法:给DBCP设置一个验证查询,在每次取出连接时验证连接的有效性。如果验证失败,则从池中去除这个连接,并尝试取出另一个。

看上去很麻烦,其实DBCP提供了很简单的方法:


        //SQL查询,用来验证从连接池取出的连接,在将连接返回给调用者之前.

        //如果指定,则查询必须是一个SQL SELECT并且 必须返回至少一行记录

        ds.setValidationQuery("select 1");

        //指明是否在从池中取出连接前进行检验,如果检验失败,则从池中去除连接并尝试取出另一个

        ds.setTestOnBorrow(true);


08
2013
11

推荐两个服务器性能测试工具

  1. ab

  2. 这其实是apache里提取出来的工具,用于测试Http连接性能,吐吞量等。

    使用方法如下:

    1.png

31
2013
07

JAVA中如何等待所有子线程处理完毕

多线程开发中,经常会遇到某个操作需要等待其它线程处理完毕才能执行。比如主线程要等若干个数据库提交线程处理完毕后关闭数据库连接,如果用join会让线程变成顺序执行,失去了多线程的意义,如果用计数来标记逻辑上又混乱,这里介绍JAVA提供的一个多线程同步工具类:

java.util.concurrent.CountDownLatch
 

CountDownLatch使用很简单,在构造的时候指定线程的数量标记,每当一个子线程run()执行完毕以后调用一次其countDown()方法来标记一个线程执行结束。在主线程中通过await()方法来完成与其它线程的同步。

19
2013
07

开发手游服务端,网络连接框架的选择

   JAVA有很多优秀的网络连接框架。Mina、Netty、Gretty、Xsocket都是不错的高性能连接框架,如果做网络游戏服务器该如何选取呢?我简单凭我的了解和使用经验介绍一下,错误之处欢迎指正。

   Apache Mina,以高性能和高扩展性著称,应用广泛。它是基于NIO的TCP/UDP框架,支持各种协议,并且能很容易的整合spring等WEB框架,可以说功能很强大,扩展性很强,较偏向于web应用方面。Mina使用起来需要了解一些通信协议以及NIO的知识,不易入门,好在网上资料很全。

12
2013
07

游戏服务器中,内存数据库的用途

大家都知道游戏服务器需要做数据库连接池和cache。但是有一些特殊的数据检索,从cache中检索实现起来非常麻烦。

比如某个游戏有积分榜,这个积分榜客户端会以各种条件去请求,比如前100名哪些是我们工会的,哪些是好友,哪些是首轮注册的玩家等等……

这些条件用SQL语句很好实现,但是时事检索数据库会带来很大的开销。内存数据库非常适合这种数据量小,写入操作少,高并发的需求。在上述的例子中,服务器可以定期检索前n条排行数据放在内存数据库中,当客户端请求时,不用麻烦地根据条件查找cache,直接将SQL语句提交给内存数据库即可,省时实力、高性能还具备良好的维护性、扩展性。

11
2013
07

Log4j

Log4j是Apache的一个开放源代码项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台、文件、GUI组件、甚至是套接口服务 器、NT的事件记录器、UNIX Syslog守护进程。


项目地址:http://logging.apache.org/log4j/2.x/


使用方法很简单:

«1»