使用审计插入grails中的双记录

我已将audit-logging插件安装到我的应用程序中。 grails版本是2.1.1 ,插件版本是1.0.1

在我的Config.groovy类中,我添加了这个

auditLog {
    verbose = true // verbosely log all changed values to db
    logIds = true  // log db-ids of associated objects.
    // Note: if you change next 2 properties, you must update your database schema!
    tablename = 'audit_logs' // table name for audit logs.
    transactional = false
    actorClosure = { request, session ->
        org.apache.shiro.SecurityUtils.getSubject()?.getPrincipal()
    }

并在我的领域类中添加了这个

class Survey {
    static auditable = true
    static final int NO_RUNNING_SURVERY = 0
    static final int RUNNING_SURVERY = 1

    static final int CALL_NO_Record_SURVEY = 0
    static final int CALL_Record_SURVEY = 1

    static final int REALTIME_SURVEY = 0
    static final int HISTORICAL_SURVEY = 1
    static final int STANDARD_SURVERY = 2

    String name
    String description
    int status
}  

当我添加,删除和更新一些东西。 在我的audit_logs表中,针对一个操作插入双记录,例如,如果我从我的控制器类中更改状态值

def stopSurvey(Long id) {
        def survey = Survey.findById(params['stop'])
        survey.status = Survey.NO_RUNNING_SURVERY


        redirect(action: "list")
    } 

它会为每个呼叫插入两条记录。


@Bertl

我认为问题在于插件。 我的应用程序使用三个数据库,一个是主数据库,另外两个用于其他目的。 我的数据源如下。

dataSource.driverClassName = net.sourceforge.jtds.jdbcx.JtdsDataSource
dataSource.dbCreate = update
dataSource.url = jdbc:jtds:sqlserver://localhost:1433/test
dataSource.username = test
dataSource.password = 123

               #TEST1
dataSource_TEST1.driverClassName = net.sourceforge.jtds.jdbcx.JtdsDataSource
dataSource_TEST1.readOnly = true
dataSource_TEST1.url = jdbc:jtds:sqlserver://xxx.xxx.xxx.xxx:1433/test1
dataSource_TEST1.username = test1
dataSource_TEST1.password = 123


#                   TEST2  
dataSource_TEST2.driverClassName = net.sourceforge.jtds.jdbcx.JtdsDataSource
dataSource_TEST2.readOnly = true
dataSource_TEST2.url = jdbc:jtds:sqlserver://xxx.xxx.xxxx.xxx:1433/test2
dataSource_TEST2.username =  test2
dataSource_TEST2.password = 123

当我只使用test数据源,并删除其他dataSources ,它插入一条记录。 当我使用两个数据源时,它会在audit logging表中插入两个reocrd。 与当我使用三个数据源时一样,它在审计日志中插入三条记录。 我需要全部三个数据库,但它造成了问题。 我现在应该怎么做?


在这里也没有看到这种行为。 在很多项目中使用这个插件。 你能设置verbose = false并再次测试吗? 如果问题也发生,那就意味着这些事件不仅会被解雇一次。

一个小测试应用程序会很好。

BTW:我们在包含测试应用程序(audit-test)的插件项目中使用spock测试来检查audit_log表中存储了多少事件。 因此,我假设您的应用中存在边缘情况或特定问题。

链接地址: http://www.djcxy.com/p/21181.html

上一篇: Double records inserted in grails using audit

下一篇: Integrating MuPDF as a library project (Android)