Java Hibernate:使用单例会话写入日志(无刷新)

Java Hibernate:使用单例会话写入日志(无刷新),java,hibernate,session,nhibernate,castle-windsor,Java,Hibernate,Session,Nhibernate,Castle Windsor,我正在考虑使用单例会话为我们的应用程序编写请求日志 通常我会将Hibernate与Lifestyle PerWebRequest一起使用,但在我的特定情况下,没有Http上下文(我们使用套接字线程来侦听请求)。但是,我注意到,因为我们只使用会话来记录日志,所以我也可以使用单例Hibernate会话 即使有多个线程运行该会话,所有请求日志也只会在会话中累积起来,并在Hibernate感到舒适时保存。没有必要在日志写入后立即读取日志,这样就可以了 代码如下所示: // Got socket requ

我正在考虑使用单例会话为我们的应用程序编写请求日志

通常我会将Hibernate与Lifestyle PerWebRequest一起使用,但在我的特定情况下,没有Http上下文(我们使用套接字线程来侦听请求)。但是,我注意到,因为我们只使用会话来记录日志,所以我也可以使用单例Hibernate会话

即使有多个线程运行该会话,所有请求日志也只会在会话中累积起来,并在Hibernate感到舒适时保存。没有必要在日志写入后立即读取日志,这样就可以了

代码如下所示:

// Got socket request
// Doing some stuff here, saving to a legacy database (cannot use Hibernate with this one)

var logging = new Message(info);
loggingService.save(logging); // FYI: in case it fail, we don't want to roll back the previous work
我唯一担心的是,当我们想要在多台机器上运行两个程序来进行负载平衡时,这可能会是一个问题。我认为,在这种情况下,我们必须进行一些锁定/同步,以避免可能的冲突(尽管我现在想不出任何冲突)

单例会话是否可以使用,或者有一些可能的影响是我没有想到的?

利用单例会话这一“绝妙”的想法花费了我好几天的时间来收拾残局。起初,它产生了良好的结果,但随后出现了许多不可预测的错误

现在我可以确认会话不是为这样的事情设计的。 我选择删除这个问题,然后决定把它留给有同样“辉煌时刻”的人

TL;DR:我建议大家坚持“好的老方法”:一个线程一个会话。

这个利用单线程会话的“绝妙”想法花费了我好几天时间来清理混乱。起初,它产生了良好的结果,但随后出现了许多不可预测的错误

现在我可以确认会话不是为这样的事情设计的。 我选择删除这个问题,然后决定把它留给有同样“辉煌时刻”的人

TL;博士:我建议大家坚持“好的老办法”:一条线一个疗程。