This commit is contained in:
default
2018-09-29 11:38:05 +08:00
parent 9ae6f5addc
commit 57f8111c94
6 changed files with 42 additions and 35 deletions

View File

@@ -19,7 +19,7 @@ import com.jfinal.plugin.activerecord.tx.Tx;
* @author Administrator
*
*/
@Before({/*SyncDataInterceptor.class,*/Tx.class})
@Before({SyncDataInterceptor.class,Tx.class})
public class SyncThread implements Runnable {
private Logger logger = Logger.getLogger(this.getClass());
private SyncDbInfo syncDbInfo;
@@ -38,8 +38,9 @@ public class SyncThread implements Runnable {
try {
logger.info("开始主库数据同步分库任务");
// 获取url路径
final String url = "jdbc:mysql://" + syncDbInfo.get("ip") + ":" + syncDbInfo.get("port") + "/"
+ syncDbInfo.get("database_name");
final StringBuffer url=new StringBuffer();
url.append("jdbc:mysql://" + syncDbInfo.get("ip") + ":" + syncDbInfo.get("port") + "/"
+ syncDbInfo.get("database_name"));
logger.info("获取分库数据库连接信息"+url);
List<Record> find = Db.use("masterDataSource").find("select * from table_sync_info where db_id=? ",
syncDbInfo.get("id"));
@@ -64,10 +65,10 @@ public class SyncThread implements Runnable {
Db.use().tx(new IAtom() {
@Override
public boolean run() throws SQLException {
return Db.use(url).tx(new IAtom() {
return Db.use(url.toString()).tx(new IAtom() {
@Override
public boolean run() throws SQLException {
Db.use(url).batchSave(record.getStr("table_name"), data, record.getInt("batch_size"));
Db.use(url.toString()).batchSave(record.getStr("table_name"), data, record.getInt("batch_size"));
// 同步完成后 取出最后一条数据的id 更新到table_sync_info表中 用作下次使用
Object lastInsertId = data.get(data.size() - 1).get(record.getStr("id_name"));
logger.info("增量更新结束 获取最后一条更新数据的id信息"+JSON.toJSONString(lastInsertId));
@@ -98,7 +99,7 @@ public class SyncThread implements Runnable {
Db.use().tx(new IAtom() {
@Override
public boolean run() throws SQLException {
return Db.use(url).tx(new IAtom() {
return Db.use(url.toString()).tx(new IAtom() {
@Override
public boolean run() throws SQLException {
List<Integer> insertIds = new ArrayList<Integer>();
@@ -116,13 +117,13 @@ public class SyncThread implements Runnable {
+ record.getStr("id_name") + " in (" + insertStr + ") ",
insertIds.toArray());
for(Record insertData:insertDatas){
Record seqData = Db.use(url).findFirst("select nextval('seq_"+record.getStr("table_name")+"') seqId from dual");
Record seqData = Db.use(url.toString()).findFirst("select nextval('seq_"+record.getStr("table_name")+"') seqId from dual");
insertData.set(record.getStr("id_name"), seqData.getLong("seqId"));
if(record.getStr("table_name").equals("event_record_library")) {
insertData.set("sync_status",1);
}
}
Db.use(url).batchSave(record.getStr("table_name"), insertDatas, record.getInt("batch_size"));
Db.use(url.toString()).batchSave(record.getStr("table_name"), insertDatas, record.getInt("batch_size"));
// 同步完成后 取出最后一条数据的id 更新到table_sync_info表中 用作下次使用
Object lastInsertId = data.get(data.size() - 1).get("id");
logger.info("增量更新结束 获取最后一条更新数据的id信息"+JSON.toJSONString(lastInsertId));
@@ -153,7 +154,7 @@ public class SyncThread implements Runnable {
Db.use().tx(new IAtom() {
@Override
public boolean run() throws SQLException {
return Db.use(url).tx(new IAtom() {
return Db.use(url.toString()).tx(new IAtom() {
@Override
public boolean run() throws SQLException {
List<Integer> updateIds = new ArrayList<Integer>();
@@ -174,12 +175,12 @@ public class SyncThread implements Runnable {
updateIds.toArray());
//logger.info("获取所有修改数据的数据信息为"+JSON.toJSONString(updateDatas));
if (updateDatas != null && updateDatas.size() > 0) {
Db.use(url).batchUpdate(record.getStr("table_name"), record.getStr("id_name"),
Db.use(url.toString()).batchUpdate(record.getStr("table_name"), record.getStr("id_name"),
updateDatas, record.getInt("batch_size"));
}
logger.info("分库对主库修改操作的数据同步任务完成");
} else if (record.getInt("event") == 3) {
Db.use(url).update("delete from " + record.getStr("table_name") + " where "+record.getStr("id_name")+" in ("
Db.use(url.toString()).update("delete from " + record.getStr("table_name") + " where "+record.getStr("id_name")+" in ("
+ deleteStr + ") ", updateIds.toArray());
logger.info("分库对主库删除操作的数据同步完成");
}