在做一个功能,需要把Web端数据库里与当前用户相关的数据同步到移动设备端。移动设备端在联网的情况下定时同步数据,在不联网时可查询旧的数据。
解决方案是:
1.假设初始状态Web端数据库为空。用户在录数据过程中,将操作记录到一张日志表中。
2.移动设备端启动线程,定时访问日志表。获取和自己相关的最新改动记录。
3.将这些改动更新到本地的SQLite
使用到技术:
1.用Hibernate Listener记录用户所有的操作。将对关心表的操作记入日志表。日志表包含:操作类型(insert update delete)、操作表名、记录ID和操作人。
2.Hibernate Listener 中没有Servlet,无法获取当前操作人的信息。因此使用ThreadLocal
一些疑问:
1.原打算用aspectJ在Session类做切面,记录数据库操作日志。发现aspectJ在Session做切面的代码不执行。不知道原因,可能和hibernate动态生成代码有关系。
public class HibernateHistoryListener implements PostInsertEventListener,
PostUpdateEventListener, PostDeleteEventListener {
static final Class accessClass[] = { DmMenu.class, DmRMenuDish.class,
DmCategory.class, DmDish.class, DmDishImage.class, DmEvaluate.class };
public final static ThreadLocal userLocal = new ThreadLocal();
public void onPostInsert(PostInsertEvent arg) {
log("insert", arg.getEntity(), arg.getId().toString(), arg.getSession());
}
public void onPostUpdate(PostUpdateEvent arg) {
log("update", arg.getEntity(), arg.getId().toString(), arg.getSession());
}
public void onPostDelete(PostDeleteEvent arg) {
log("delete", arg.getEntity(), arg.getId().toString(), arg.getSession());
}
private void log(String method, Object obj, String id, Session session) {
boolean access = false;
for (int i = 0; i < accessClass.length; i++) {
Class array_element = accessClass[i];
if (obj.getClass().equals(array_element)) {
access = true;
break;
}
}
if (!access) {
return;
}
DmOperationLog log = new DmOperationLog();
log.setOperationName(method);
log.setOperationTime(new Date());
log.setRecordId(id);
log.setTargetName(obj.getClass().toString());
log.setDmUser((DmUser) userLocal.get());
Session temp = session.getSessionFactory().openSession();
Transaction tx = null;
try {
tx = temp.beginTransaction();
temp.save(log);
tx.commit();
} catch (Exception e) {
tx.rollback();
} finally {
temp.close();
}
}
}
分享到:
相关推荐
生成SQL之后利用后台服务去获取生成的SQL生成bat文件同步到指定的实例中去。这个方法适用于只两台数据库服务器不能直接通讯的情况下, 献丑了。 注意:需要一个后台服务去支持,我不想浪费大家时间,希望对有需要的...
即使程序没有实现读写分离,数据库同步之后也能够作为双机热备的方案,此时对数据库同步时间的实施性要求就不高了 4. 实现效果 内网A、B两个Sqlserver数据库服务器 A服务器某库表结构、数据、存储过程、自定义函数...
附件是基于mysql-binlog-connector-java实现的简单binlog同步,插件可热插拔,用户可自定义自己的表加工逻辑
1、 跨网络进行增量同步数据,即隔着网闸,网络不能直连,使用dblink、主从库等方案解决不了; 2、 源表跟目标表字段名称可以不一致,但表名称要一致(表名称不一致也可以实现); 3、 自定义增量的控制字段,可以是...
内容涉及oracle 12的容器数据库,可插入数据库,目前只做了DML的数据同步(不含ddl的同步)
如清除系统日志,数据同步,数据备份,整理数据库空间,调用存储过程等。已测试支持Oracle、SqlServer、MySql等数据库、及Access、Excel等OleDb数据库。 文件操作任务:同步服务器上的文件,或删除服务器上的日志...
将数据从一个Postgres数据库同步到另一个数据库(例如pg_dump / pg_restore )。 设计用于: 速度-表格并行传输 安全性-防止敏感数据离开服务器的内置方法 灵活性-优雅地处理架构差异,例如缺少列和多余的列 便利...
组合驱动,自定义库同步到库组合,关系型数据库与非关系型之间组合,任意搭配表同步映射关系 实时监控,驱动全量或增量实时同步运行状态、结果、同步日志和系统日志 开发插件,自定义转化同步逻辑
组合驱动,自定义库同步到库组合,关系型数据库与非关系型之间组合,任意搭配表同步映射关系 实时监控,驱动全量或增量实时同步运行状态、结果、同步日志和系统日志 开发插件,自定义转化同步逻辑
使用webservice进行异地多点数据库和远端数据定时进行数据同步,客户端将实体序列化成josn后压缩传输到远端服务器,服务器端解压缩后反序列化成实体,实体涉及业务只保留一个实体作为参考,使用时可自定义实体,...
组合驱动,自定义库同步到库组合,关系型数据库与非关系型之间组合,任意搭配表同步映射关系 实时监控,驱动全量或增量实时同步运行状态、结果、同步日志和系统日志 开发插件,自定义转化同步逻辑 安装配置 步骤 ...
组合驱动,自定义库同步到库组合,关系型数据库与非关系型之间组合,任意搭配表同步映射关系。实时监控,驱动全量或增量实时同步运行状态、结果、同步日志和系统日志。开发插件,自定义转化同步逻辑
主要提供以下功能:数据库准实时同步数据库迁移数据库治理自定义源端、目标端数据同步自定义数据抽取逻辑核心功能:原生支持Oracle|Mysql到Jdbc关系型数据库最终一致同步插件友好化,支持自定义源端消费插件、目标端...
本项目是springboot集成canal-adapter实现项目中对于数据库数据监听和自定义消费 canal基于MySQL数据库增量日志解析,提供增量数据订阅和消费,是阿里开源CDC工具,它可以获取MySQL binlog数据并解析,然后将数据...
它还具有连接到数据库并在其中存储所有清单数据的功能,以便在设备之间进行同步。 用户只需要提供有效SQL登录名,后端就会通过Entity Framework处理数据库的创建和验证。 用户也可以在没有任何数据库连接的情况下...
无论如何,Full Convert是目前转换数据库最简单,最有效的方法(包括简单的数据副本和复杂的自定义要求),并为经常需要在不同数据库引擎之间导入和导出数据库文件的用户提供完整的,一个 - 停止软件解决方案
· 支持自定义选择需要同步的数据表 · 支持将配置保存为方案,以方便日后重新使用 · 针对不同的机器配置,可以选择单线程或多线程同步方式 最新版本可到官网: http://www.szmesoft.com 下载
例如,如果这个迁移是用来往多个数据库同一张表 ( 假设每个数据库都有news表 ) 添加字段的,那么你可以使用addColumn_news (该名称自定义)这个名称并运行如下命令: yii migrate/create addColumn_news 注意:...
yugong 是阿里巴巴推出的去Oracle数据迁移同步工具(全量 增量,目标支持MySQL/DRDS)。2008年左右,阿里巴巴开始尝试MySQL的相关研究,并开发了基于MySQL分库分表技术的相关产品,Cobar/TDDL(目前为阿里云DRDS产品),...
BDB是由贝恩软件(www.bainsoft.com)发布的数据库...11、提供自定义功能、可以根据需要扩展数据库结构定义文件。 12、支持多语言(目前版本语言:中/英文)。并提供了新的语言定义的说明、 可根据需要增加新的语言版本。