Grails2.4.3。多个数据源。发生错误时如何回滚事务?
假设以下情况Grails2.4.3。多个数据源。发生错误时如何回滚事务?,grails,groovy,transactions,multiple-databases,Grails,Groovy,Transactions,Multiple Databases,假设以下情况 我在datasource.groovy中声明了三种不同的数据源(datasource、datasource_b和datasource_c) 我有三个不同的域对象使用这些数据源 在我的控制器中,我从保存对象a、b的服务调用一个方法和c。我需要的是,如果发生错误,它们都不会被保存 因此: DataSource.groovy environments { development { dataSource { [...]
- 我在datasource.groovy中声明了三种不同的数据源(datasource、datasource_b和datasource_c)
- 我有三个不同的域对象使用这些数据源
- 在我的控制器中,我从保存对象a、b的服务调用一个方法和c。我需要的是,如果发生错误,它们都不会被保存李>
environments {
development {
dataSource {
[...]
}
dataSource_b {
[...]
}
dataSource_c {
[...]
}
}
}
class ObjectA{
[...]
static mapping = {
//use default datasource
}
}
class ObjectB{
[...]
static mapping = {
datasource 'b'
[...]
}
}
class ObjectC{
[...]
static mapping = {
datasource 'c'
[...]
}
}
public savingObjects(ObjectA a,ObjectB b,ObjectC c){
a.save()
b.save()
c.save()
}
ObjectA.groovy
environments {
development {
dataSource {
[...]
}
dataSource_b {
[...]
}
dataSource_c {
[...]
}
}
}
class ObjectA{
[...]
static mapping = {
//use default datasource
}
}
class ObjectB{
[...]
static mapping = {
datasource 'b'
[...]
}
}
class ObjectC{
[...]
static mapping = {
datasource 'c'
[...]
}
}
public savingObjects(ObjectA a,ObjectB b,ObjectC c){
a.save()
b.save()
c.save()
}
ObjectB.groovy
environments {
development {
dataSource {
[...]
}
dataSource_b {
[...]
}
dataSource_c {
[...]
}
}
}
class ObjectA{
[...]
static mapping = {
//use default datasource
}
}
class ObjectB{
[...]
static mapping = {
datasource 'b'
[...]
}
}
class ObjectC{
[...]
static mapping = {
datasource 'c'
[...]
}
}
public savingObjects(ObjectA a,ObjectB b,ObjectC c){
a.save()
b.save()
c.save()
}
ObjectC.groovy
environments {
development {
dataSource {
[...]
}
dataSource_b {
[...]
}
dataSource_c {
[...]
}
}
}
class ObjectA{
[...]
static mapping = {
//use default datasource
}
}
class ObjectB{
[...]
static mapping = {
datasource 'b'
[...]
}
}
class ObjectC{
[...]
static mapping = {
datasource 'c'
[...]
}
}
public savingObjects(ObjectA a,ObjectB b,ObjectC c){
a.save()
b.save()
c.save()
}
MyService.groovy
environments {
development {
dataSource {
[...]
}
dataSource_b {
[...]
}
dataSource_c {
[...]
}
}
}
class ObjectA{
[...]
static mapping = {
//use default datasource
}
}
class ObjectB{
[...]
static mapping = {
datasource 'b'
[...]
}
}
class ObjectC{
[...]
static mapping = {
datasource 'c'
[...]
}
}
public savingObjects(ObjectA a,ObjectB b,ObjectC c){
a.save()
b.save()
c.save()
}
我使用的是Grails2.4.3,我知道服务中的方法是跨事件的,但是,例如,如果在保存“c”时发生错误,则保存“a”和“b”时不进行任何刷新(保存刷新:true)
有没有办法纠正这种行为我希望避免使用XA数据源。
谢谢 您所描述的正是XA数据源存在的原因。在这种情况下,如果您不想使用XA datsource,那么添加您自己的错误缓存机制并手动回滚更改。是的,我知道,这是XA数据源的目的。我想也许Grails可以提供另一种解决方案。所以我想我会添加自己的错误缓存机制。谢谢你的反馈!您所描述的正是XA数据源存在的原因。在这种情况下,如果您不想使用XA datsource,那么添加您自己的错误缓存机制并手动回滚更改。是的,我知道,这是XA数据源的目的。我想也许Grails可以提供另一种解决方案。所以我想我会添加自己的错误缓存机制。谢谢你的反馈!