特定于环境的Grails服务配置
使用特定于环境的值配置Grails服务的最佳方法是什么?我相信有两个选择:特定于环境的Grails服务配置,grails,grails-services,Grails,Grails Services,使用特定于环境的值配置Grails服务的最佳方法是什么?我相信有两个选择: 从服务类内访问grailsApplication值或 在Config.groovy或resources.groovy中的bean闭包中配置服务bean 我在stackoverflow和其他地方看到了几篇文章,展示了如何执行#1(在服务中访问grailsApplication)。其中一个职位是: 然而,我认为这会造成服务与Grails之间不必要的耦合。这是否类似于在pojo中访问Spring的applicationCont
内森我想你可以用你觉得舒服的。我倾向于直接从服务访问
grailsApplication.config
,因为这样可以使配置更具“语义”(因为没有更好的词),因为您可以根据配置选项所做的事情而不是它们控制的bean来命名配置选项。如果两个(或更多)不同的bean需要知道站点管理员的电子邮件地址(例如),那么它们都可以读取grailsApplication.config.myapp.admin.email
,而不必分别配置beans.monitorService.destinationEmail
和beans.userService.fromEmail
在单元测试中,您必须模拟
grailsApplication
config,因此为您的服务需要读取的配置选项填充测试值并没有什么大不了的。我想使用您更熟悉的选项。我倾向于直接从服务访问grailsApplication.config
,因为这样可以使配置更具“语义”(因为没有更好的词),因为您可以根据配置选项所做的事情而不是它们控制的bean来命名配置选项。如果两个(或更多)不同的bean需要知道站点管理员的电子邮件地址(例如),那么它们都可以读取grailsApplication.config.myapp.admin.email
,而不必分别配置beans.monitorService.destinationEmail
和beans.userService.fromEmail
在单元测试中,您必须模拟
grailsApplication
config,因此为您的服务需要读取的配置选项填充测试值没有什么大不了的。服务(服务文件夹中存在的类)和resources.groovy
中定义的Springbeans的概念有所不同
到,Grails已经设置了事务:
服务通常涉及域之间的协调逻辑
类,因此通常涉及跨大型
操作。鉴于服务的性质,他们经常需要
交易行为。您可以将编程事务用于
withTransaction方法,但是这是重复的,不会
充分利用Spring底层事务的强大功能
抽象
默认情况下,您声明的Springbean不是事务性的
“然而,我认为这会造成不必要的服务耦合
“圣杯”
由于Grails服务与Springbeans不同,我认为使用方法1没有问题
对于单元测试,您需要手动连接您的服务实例。例如:
class MyService {
def grailsApplication
}
class MyServiceTests {
MyService getServiceInstance() {
MyService myService = new MyService()
myService.grailsApplication = grailsApplication //static attribute in unit tests
return myService
}
}
在
resources.groovy
中定义的服务(服务文件夹中存在的类)和Springbean的概念上存在差异
到,Grails已经设置了事务:
服务通常涉及域之间的协调逻辑
类,因此通常涉及跨大型
操作。鉴于服务的性质,他们经常需要
交易行为。您可以将编程事务用于
withTransaction方法,但是这是重复的,不会
充分利用Spring底层事务的强大功能
抽象
默认情况下,您声明的Springbean不是事务性的
“然而,我认为这会造成不必要的服务耦合
“圣杯”
由于Grails服务与Springbeans不同,我认为使用方法1没有问题
对于单元测试,您需要手动连接您的服务实例。例如:
class MyService {
def grailsApplication
}
class MyServiceTests {
MyService getServiceInstance() {
MyService myService = new MyService()
myService.grailsApplication = grailsApplication //static attribute in unit tests
return myService
}
}
谢谢,这是有道理的。最后,一些理性的做法!从您所说的来看,grails发明家的思维似乎发生了转变,因为您描述的问题类型是复制spring配置中应该相同的值。因此,引用基本上集中在grailsApplication下的配置值是一个实际的改进。也许在groovy中安装比在Java中更容易,或者在Spring中也可以选择它。@NathanWard覆盖配置方法是inva