目 录
在数据库中建立操作记录(方式一)
这种方式主要是在每个方法中设置静态常量String
相当于对方法的注释,并建立数据库日志表,用户登陆ERP
系统并进行操作时,读取用户登录信息Session
,同方法中的静态常量,和时间一并写入数据库的日志表中,由此来达到建立ERP
系统操作日志的目的
缺点:此方法较为比较麻烦需要在每个方法中定义静态常量,并且影响ERP
系统的工作效率,当一个操作执行多次时ERP
多次读取用户信息Sessions
,为TOMCAT
增加较高的负荷,但思路简单,代码量大,实现方便。也可以考虑将信息写入到XML
或者TXT
文档中去。
在SSH
环境下,将数据库操作事务交给Spring
管理
1
、尽量使用注解声明事务;
2
、写一个类扫描使用了事务的方法。根据楼主提出的技术需求分析,只有写入动作才需要记录,同样数据库只有写入才需要事务,读取不需要,所以在不需要事务的方法上面标注@Transactional(propagation=Propagation.NOT_SUPPORTED,readOnly=true)
,这样可以精确过滤出需要记录日志的方法;
3
、利用AOP
编程实现日志记录功能。
时间:AOP
切入点处取系统时间
操作员和IP
:控制层在session
作用域里取得用户对象和request
取IP
地址传给切入点
操作:可以在操作数据库的DAO
组件上(
方法)
用自定义注解标上,例如:@Operation=INSERT|DELETE|UPDATE...
只要读取到这个配置就知道操作类型。当然也可以利用Hibernate
来得知,得要看Hibernate
的源代码。
结果:事务成功即成功,事务回滚即失败。
业务数据ID
:这个有两种解决方法,一种笨拙的办法是所有的数据模型层的实体对象都抽取ID
到父类;二是实体映射的配置方法采用注解方式,这样可以写一个类扫描出实体的ID
字段和类型,自然能记录之。
粒度问题:首先只要应用到事务的地方都可以记录之,批量操作数据行实际是循环调用DAO
组件,也就实现了批量记录。当然,如果送批量SQL
语句到数据库,由DBMS
来做那就无奈了。
这种方案设计可以一次编写,终身使用,不受项目的模块增减影响。代码量小,维护容易。