【发布时间】:2014-06-17 18:39:28
【问题描述】:
我的 Web 项目在 Tomcat 7 中运行。我的服务器提供商已经有一个 MySql 服务器,但是我想使用 H2,因为它给了我更多的灵活性和速度。我的服务器提供商对我施加了一个限制,即我不应该启动一个新线程,这样做会自动导致 tomcat 停止。 我的项目处于 alpha 接近 beta 阶段,因此在本地进行了测试。我经常收到另一个进程锁定的 SqlException。当 Tomcat 更新线程池时会发生这种情况,大多数时候发生在从 Eclipse 自动发布时(这不是交易,因为它不会在服务器上发生),但有时它只是随机发生。 我的应用程序不直接访问数据库,而是通过一个我确信它不会造成问题但也可以防止它发生的包装器。 看起来 Tomcat 它正在发送保持与后台连接的线程,并且任何前台线程都会失败(我的应用程序是数据库密集型的)。 在服务器模式下打开连接将解决问题,但它将在我不大声的新进程中运行。 我想保留 H2,所以在我必须切换到 MySql 之前,我需要以下任何答案的解决方案:
- 我能否以某种方式连接到嵌入式 H2 而不会发生 Tomcat 线程池冲突?
- 我可以在不创建新进程的情况下连接到服务器模式 H2 吗?
注意:我不能发布任何实际代码。我确定不是我的应用程序问题。我认为没有必要,但如果需要,我会写一个关于我的包装器如何处理连接的描述,但问题已如上所述确定。
【问题讨论】:
-
当你说不允许启动一个新线程时,它真的是一个线程还是一个进程?
-
@Serge Ballesta 对不起,如果我弄错了,但是,Java 中关于线程和进程的区别是什么?如果是这样,我将检查我的服务器提供商条件和 h2 文档并回复您
-
我想你是不允许创建新进程的,因为 Tomcat 已经是多线程的了。
-
@Serge Ballesta 我已经与我的服务器提供商确认我不允许在服务器模式下运行 H2,它不符合我的条件。
-
我做了一些研究和测试,H2应该允许多个连接,只要它们来自同一个JVM。您应该提供有关如何声明数据库以及正在使用的连接池的更多详细信息,但我已经怀疑 Eclipse 和 Tomcat 在同一时刻尝试连接数据库,这是不允许的。您能否尝试不使用 Eclipse 直接在 Tomcat 下运行您的应用程序并对其施加压力(多个连接!)以查看问题是否仍然存在。