我有一个使用spring,hibernate和c3p0制作的Web服务。我还有一个服务范围的缓存(它具有对服务进行的请求的结果),当服务无法返回时(由于任何原因),它可用于返回结果。
时,缓存可能会在数据库输出时返回过时的结果。我最近遇到了数据库中断,我的服务崩溃了。 我希望我的服务的客户能够在将来再次发生数据库中断。
为此,我需要我的服务:
处理这样的新传入请求:快速说数据库已关闭并抛出一些异常(快速失败)。
已处理的请求:持续时间不超过x秒。如何以某种方式中断处理请求的线程。
将整个数据库缓存在内存中以用于只读目的(这是疯了吗?)。
我做了一些观察:
如果有一个或多个状态为ESTABLISHED的连接,则不会尝试检出新连接。似乎任何一个状态为ESTABLISED的连接都被移交给接收请求的线程。现在,这个线程一直挂起,直到数据库重新启动为止 我想通过在处理与线程的连接之前知道db是否已启动来使此请求快速失败。如果不是,服务应该抛出异常而不是挂断。
如果状态ESTABLISHED没有连接,则请求会在10秒内失败,但“无法检出新连接”除外。这是因为我的结帐超时设置为10秒。
如果服务正在处理某个请求,那么现在db继续,然后服务调用db,调用db的线程将永远卡住。只有在db返回后它才会恢复执行 我想在x秒后打断线程是否能够完成请求。
有没有办法完成我所寻求的目标?
提前致谢。