java - Hibernate:使用单例 session 写入日志(无刷新)

标签 java hibernate session nhibernate castle-windsor

我正在考虑使用 Singleton Session 为我们的应用程序编写请求日志。

通常我会使用 Hibernate 和 Lifestyle PerWebRequest,但在我的特定情况下,没有 Http 上下文(我们使用套接字线程来监听请求)。但是,我注意到,由于我们只使用 session 来记录日志,因此我也可以使用单个 Hibernate session

即使多个线程运行 session ,所有请求日志也只会在 session 中添加,并在 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

我唯一担心的是,当我们想要对在多台机器上运行的 2 个程序进行负载平衡时,这可能是一个问题。我认为在这种情况下我们必须进行一些锁定/同步以避免可能的冲突(尽管我现在想不出任何冲突)。

单例 session 的使用是否合适,或者是否存在我没​​有想到的可能影响?

最佳答案

利用 Singleton Session 的这个“绝妙”想法花了我好几天的时间来清理困惑。起初它产生了良好的结果,但随后出现了许多不可预测的错误。

现在我可以确认 Session 并不是为这样的事情而设计的。 我选择删除这个问题,但随后决定将其留在这里,供任何拥有相同“辉煌时刻”的人使用。

TL;DR:我建议每个人都坚持“好的老方法”:一个线程 - 一个 session 。

关于java - Hibernate:使用单例 session 写入日志(无刷新),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33975022/

相关文章:

java - 在 Java 中使用正则表达式拆分字符串

java - 为什么会抛出空指针异常?

java - Hibernate 中的一对一映射?

java - 解决 JPA/Hibernate EntityNotFoundException

java - 从对象中删除属性

php - PHP如何检测session_start()是否被调用?

java - Maven:组合 2 个配置文件时没有覆盖范围

java - Jsp session 和重定向

php - 如何在 php 中生成唯一的 session ID

java - 将 ArrayList<> 对象传递给扩展 ArrayList 的类