SSH架构中记录操作日志
来源:互联网 发布:和淘宝联盟一样的软件 编辑:程序博客网 时间:2024/05/07 01:56
在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来做那就无奈了。
这种方案设计可以一次编写,终身使用,不受项目的模块增减影响。代码量小,维护容易。 在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来做那就无奈了。 这种方案设计可以一次编写,终身使用,不受项目的模块增减影响。代码量小,维护容易。
- SSH架构中记录操作日志
- linux 下记录ssh的操作日志
- 配置ssh登陆账号及其操作命令的日志记录
- SSH整体架构记录
- SSH项目中异常处理与日志记录
- SSH的log4j日志记录
- sa--记录操作日志
- 记录mysql操作日志
- 中心化日志记录架构
- Linux中系统户登录和操作日志的记录
- Oracle审计sys操作记录到操作系统系统日志中
- ubuntu linux ssh 操作记录
- JAVA记录用户操作日志
- MySQL设置记录操作日志
- Delphi操作Excel日志记录
- mysql记录操作日志功能
- 动静分离操作日志记录
- C#记录日志,文件操作
- weblogic9线程数调整
- FreePBX中的拨号模式(Dial Rules) - [CTI开发]
- 重新开始
- VC.net中如何使用自定义资源
- 易查:搜索苦行僧
- SSH架构中记录操作日志
- ThinkPHP数据库基础配置
- 关于滤波电容、去耦电容、旁路电容作用
- Ibaits返回结果集【转载】
- 纯C实现unicode-utf8互转
- setsockopt函数解析
- nandflash读写源码,代码清晰
- define进行多行宏定义
- [ASP中使用三层架构] 8.文件目录结构