0

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

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

我认为所有问题都来自于在域类中混合模型和持久性特定信息。我该如何解决?有没有更好的方法来共享域模型?

4

1 回答 1

1

您的方法是正确的,因为有一个包含所有域类的插件。这种方法适用于对 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 使用其他连接,则可以使用多个数据源。

于 2013-06-11T18:50:34.737 回答