由于我们在多线程应用程序中尝试使用 Hibernate 时可能遇到的所有问题(第 1 条线索、第 2 条线索、第 3 条线索等),我正在考虑另一种解决方案:在经典 Controller
中实现逻辑部分,然后简单地调用它从我的线程使用URL.openConnection()
.
换句话说,而不是做这样的事情:
MyThread.java
public class MyThread implements Runnable {
@Override
public void run() {
// do some great stuff with Hibernate
}
}
Anywhere.java
new Thread(new MyThread()).start();
我想尝试这样的事情:
MyController.java
@Controller
public class MyController {
@RequestMapping(value = "myUrl", method = RequestMethod.GET)
public void myMethod() {
// do some great stuff with Hibernate
}
}
MyThread.java
public class MyThread implements Runnable {
@Override
public void run() {
// simple call the above mapped url
}
}
Anywhere.java
new Thread(new MyThread()).start();
你怎么看待这件事?是好是坏?我还没有尝试过,但我认为这样的解决方案可以防止我们在多线程中使用 Hibernate 时遇到的常见错误,因为服务器将执行逻辑部分,就好像有人在请求假页面一样。
PS:我知道有一些在多线程应用程序中使用 Hibernate 的解决方案,但是每次我尝试一个时,都会出现另一个,直到我厌倦了它的不归路。
PS2:我知道需要保护这样的解决方案(例如作为令牌的 UID)。