我是Grails的新手,我在三个不同的应用程序之间分享我的域模型时遇到了一些问题。其中两个需要持久化模型对象,而第三个则不需要。
管理这一点的通常方法似乎是创建一个插件并将域类放入其中。问题是域类包含特定的持久性信息,并且每个应用程序持久保存对象的方式存在一些差异。
此外,其中一个应用程序根本不需要持久保存这些对象,因为它使用另一个JSON Web界面检索和删除它们。当我以模式dbCreate = "create-drop"
运行此应用程序时,Grails会在启动时为这些类创建不需要的表。
我认为所有问题都来自于在域类中混合模型和持久性特定信息。 我该如何解决?是否有一种更好的方法来共享域模型?
答案 0 :(得分:1)
你的方法是正确的,有一个包含所有域类的插件。此方法适用于具有dataSource的多个配置,而不适用于操纵插件的行为。为了实现相同目的,您可以相应地修改每个应用程序中的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插件。
但是,如果需要在Application 3中使用其他连接,则可以使用多个数据源。