如何在grails中使用不同持久性策略的项目之间共享域?



我是Grails的新手,在三个不同的应用程序之间共享域模型时遇到了一些问题。其中两个需要持久化模型对象,第三个不需要。

通常的管理方法似乎是创建一个插件并将域类放入其中。问题在于域类包含特定的持久化信息,并且每个应用程序持久化对象的方式存在一些差异。此外,其中一个应用程序根本不需要持久化这些对象,因为它使用JSON web界面从另一个应用程序检索和删除它们。当我在dbCreate = "create-drop"模式下运行这个应用程序时,Grails在启动时为这些类创建了不需要的表。

我认为所有的问题都来自于在领域类中混合了特定于模型和持久性的信息。我怎么解它?是否有更好的方法来共享领域模型?

你的方法是正确的,在所有的域类插件。这种方法适合于对dataSource进行多个配置,并且不操纵插件的行为。为了达到同样的目的,您可以相应地修改每个应用程序中的数据源。例如,如下所示:

//Application 1:
//DataSource.groovy
dataSource{
    environments{
        production{
            .........
            dbCreate = "update"
            url = "prod db url"
            ..........
        }
    }
}
//Application 2: [Similar to Application 1]
//DataSource.groovy
dataSource{
    environments{
        production{
            .........
            dbCreate = "update"
            url = "prod db url"
            ..........
        }
    }
}
//Application 3: [which does not persist model to db]
//DataSource.groovy
dataSource{
    environments{
        production{
            .........
            //anything other than update, create-drop, validate does nothing
            //Taking into consideration you already have the tables created from 
            //any of the other application.
            dbCreate = "none"
            url = "prod db url"
            readOnly = true //To be on the safer side
            ..........
        }
    }
}

同样的行为适用于其他环境。请参阅DataSource以了解更多有关其属性的信息。

如果你已经有了这些表,并且想要为这些表生成域类,你可以毫不费力地使用db-reverse-engineer插件。

但是,如果您需要从应用程序3中使用其他连接,则可以使用多个数据源

相关内容

最新更新