使用相同数据库和表的两个Grails应用程序是否有特殊配置?

使用相同数据库和表的两个Grails应用程序是否有特殊配置?,grails,Grails,我在两个不同的应用服务器上部署了两个grails(1.2.1)应用程序。一个应用程序包含主站点(视图、控制器、域等),另一个应用程序具有执行核心和后端处理的Quartz插件。两个应用程序共享域类和相同的数据源配置。这意味着这两个应用程序正在访问相同的数据库和表 我的问题是:查询数据库会有任何惩罚吗 我只是注意到,如果Quartz job应用程序正在运行,那么主站点应用程序的速度会变慢。但没有明确的证据或统计数据。每个应用程序上的hibernate组件能否在某些事件中正确处理并发和事务?或者我也需

我在两个不同的应用服务器上部署了两个grails(1.2.1)应用程序。一个应用程序包含主站点(视图、控制器、域等),另一个应用程序具有执行核心和后端处理的Quartz插件。两个应用程序共享域类和相同的数据源配置。这意味着这两个应用程序正在访问相同的数据库和表

我的问题是:查询数据库会有任何惩罚吗

我只是注意到,如果Quartz job应用程序正在运行,那么主站点应用程序的速度会变慢。但没有明确的证据或统计数据。每个应用程序上的hibernate组件能否在某些事件中正确处理并发和事务?或者我也需要在每个应用程序上的grailsapp/conf中配置一些东西吗?现在,我没有添加额外的配置


谢谢。

我能想到的主要问题是二级缓存的问题。如果两个应用都尝试缓存数据,则当缓存与数据库不同步时,可能会导致StaleObjectException和类似情况,因为另一个应用正在更改数据库。默认情况下,第二级缓存处于禁用状态,因此您可能不会遇到问题


这还取决于您是在域类上使用默认提供的乐观锁还是在lock()方法中使用显式锁。乐观锁定不应导致速度减慢(但如果另一个应用程序更新了行,则可能会导致保存时出现异常)。

您是否考虑过一种体系结构,其中一个应用程序控制您的域类,而另一个应用程序通过消息或web服务调用与之集成?这样做,您就可以避免与应用程序之间的复制相关的一些问题。

谢谢您提供的信息。我认为在1.2.1中启用了二级缓存,是的,我在日志中看到org.hibernate.StaleObjectStateException。那么我需要关掉那个旗子吗?如果是这样的话,会有什么负面影响?很抱歉,grails framework的内部仍然不熟悉。您可以在DataSource.groovy中将其完全关闭,也可以向应用程序添加代码以处理保存时的异常并执行刷新(),再次更新并重试保存。您已经在每个类上显式启用了缓存,因此您可能没有实际使用缓存(即使它已启用)。过时对象异常将来自乐观锁定(通过域类上的版本列完成)。您可以通过在每个域类的映射闭包中添加“version false”来关闭此功能。风险在于,您可能会丢失更新,而每个系统都会相互覆盖。您需要确定风险是否足够小,以避免处理StaleObjectException的额外工作。那么StaleObjectStateException不是由于二级缓存造成的?是的,我有一些没有“版本”字段的域,还有一些域我没有修改。我还没有试过禁用二级缓存,如果我这样做,我似乎不得不更改一些代码?但是,您认为禁用二级缓存会提高性能吗?如果您没有向任何域类添加“cache true”,那么即使启用了二级缓存,也不会缓存任何内容。所以禁用它不会有任何区别(我不认为)。我会检查仍然有版本字段的域类,很可能是它们导致了异常