xiebin
2026-02-09 bf4bf0e15922961be005bbf6693cf306e18d327c
数据库迁移初始化提交
1 files modified
21 files added
2754 ■■■■■ changed files
.idea/.gitignore 8 ●●●●● patch | view | raw | blame | history
.idea/inspectionProfiles/Project_Default.xml 5 ●●●●● patch | view | raw | blame | history
LICENSE 21 ●●●●● patch | view | raw | blame | history
README.md 59 ●●●●● patch | view | raw | blame | history
jobs-20260205.xml 351 ●●●●● patch | view | raw | blame | history
jobs.xml 423 ●●●●● patch | view | raw | blame | history
jobs1111.xml 351 ●●●●● patch | view | raw | blame | history
jobs20260209.xml 423 ●●●●● patch | view | raw | blame | history
jobs20260226.xml 351 ●●●●● patch | view | raw | blame | history
pom.xml 120 ●●●●● patch | view | raw | blame | history
src/main/java/cn/net/communion/dbdatasync/App.java 115 ●●●●● patch | view | raw | blame | history
src/main/java/cn/net/communion/dbdatasync/DataTask.java 117 ●●●●● patch | view | raw | blame | history
src/main/java/cn/net/communion/dbdatasync/Tool.java 15 ●●●●● patch | view | raw | blame | history
src/main/java/cn/net/communion/dbdatasync/dbhelper/DbHelper.java 14 ●●●●● patch | view | raw | blame | history
src/main/java/cn/net/communion/dbdatasync/dbhelper/Factory.java 18 ●●●●● patch | view | raw | blame | history
src/main/java/cn/net/communion/dbdatasync/dbhelper/impl/MySql.java 67 ●●●●● patch | view | raw | blame | history
src/main/java/cn/net/communion/dbdatasync/dbhelper/impl/PostgreSql.java 84 ●●●●● patch | view | raw | blame | history
src/main/java/cn/net/communion/dbdatasync/dbhelper/impl/SqlServer.java 60 ●●●●● patch | view | raw | blame | history
src/main/java/cn/net/communion/dbdatasync/entity/DbInfo.java 40 ●●●●● patch | view | raw | blame | history
src/main/java/cn/net/communion/dbdatasync/entity/JobInfo.java 54 ●●●●● patch | view | raw | blame | history
src/main/java/log4j.properties 20 ●●●●● patch | view | raw | blame | history
src/test/java/cn/net/communion/dbdatasync/AppTest.java 38 ●●●●● patch | view | raw | blame | history
.idea/.gitignore
New file
@@ -0,0 +1,8 @@
# Default ignored files
/shelf/
/workspace.xml
# Editor-based HTTP Client requests
/httpRequests/
# Datasource local storage ignored files
/dataSources/
/dataSources.local.xml
.idea/inspectionProfiles/Project_Default.xml
New file
@@ -0,0 +1,5 @@
<component name="InspectionProjectProfileManager">
  <profile version="1.0">
    <option name="myName" value="Project Default" />
  </profile>
</component>
LICENSE
New file
@@ -0,0 +1,21 @@
The MIT License (MIT)
Copyright (c) 2016 GongDexing
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
README.md
@@ -1,4 +1,59 @@
## database-sync-master
# Database-Sync
基于java开发的功能强大、配置灵活的数据库之间同步工具,和数据产生器一样,均是前段时间因为项目需要编写的小工具,在实际应用场景中,我们经常需要定期将一个数据库的数据同步到另外一个数据库中,常见的一种做法是将源数据库的数据dump为sql文件,然后到目标数据库执行sql文件完成数据库的导入,但是这种方法至少存在以下问题:
- 需要手工操作,效率低
- 当涉及数据表较多时,容易遗漏、出错
- 如果要定期同步,操作人容易忘记
- 难以应付频繁变更数据表或者字段
数据库迁移
针对以上存在的问题,将珍贵人力从这种重复、无意义的工作中解脱出来,特意开发这个小工具,其中主要配置主要在jobs.xml中完成
## 主要功能
- 目标数据目前只支持MySQL和SQL Sever,源数据库为任何支持sql语法的数据库
- 根据cron表达式配置数据同步的周期和时间
- 执行多个数据同步任务
- 源数据是根据配置的sql语句查询得到,使用者可以非常灵活根据需要进行修改
- 根据配置的字段,判断同步数据是插入还是更新
## 编译和运行
> mvn package
>cp jobs.xml ./target/jobs.xml
> cd target
> java -jar DataGenerator-0.0.1-SNAPSHOT.jar
## 基本使用
cat jobs.xml
```xml
<?xml version="1.0" encoding="UTF-8"?>
<root>
    <code>0001</code>
    <source> <!-- 源数据库连接方式 -->
        <url>jdbc:oracle:thin:@192.168.1.179:1521:XE</url>
        <username>test</username>
        <password>test</password>
        <dbtype>oracle</dbtype>
        <driver>oracle.jdbc.driver.OracleDriver</driver>
    </source>
    <dest> <!-- 目标数据库连接方式 -->
        <url>jdbc:sqlserver://192.168.1.191:1433;DatabaseName=test</url>
        <username>test</username>
        <password>test</password>
        <dbtype>sqlserver</dbtype>
        <driver>com.microsoft.sqlserver.jdbc.SQLServerDriver</driver>
    </dest>
    <jobs> <!-- 数据库同步任务,可以根据实际需要添加多个job -->
        <job>
            <name>1</name> <!-- job的名称,每一个job的名称最好不一样 -->
            <cron>0/10 * * * * ?</cron> <!-- 定时调度cron表达式 -->
            <srcSql>select username as username,pwd as password from user</srcSql> <!-- 源数据库的查询语句 -->
            <destTable>user</destTable> <!-- 目标数据库的数据表 -->
            <destTableFields>username,password</destTableFields> <!-- 目标数据库数据表的字段,必须和源数据库中查询语句的字段保持一致 -->
            <destTableKey>username</destTableKey> <!-- 根据此字段判断同步的数据是否在目标数据库总存在 -->
            <destTableUpdate>password</destTableUpdate> <!-- 如果目标数据库中存在destTableKey标签字段相同的数据,则更新此字段 -->
        </job>
    </jobs>
</root>
```
jobs-20260205.xml
New file
@@ -0,0 +1,351 @@
<?xml version="1.0" encoding="UTF-8"?>
<root>
    <code>4500000001</code>
    <source>
        <url>jdbc:mysql://139.196.74.78:3308/jagzw_test</url>
        <username>root</username>
        <password>jxpskj_2018</password>
        <dbtype>mysql</dbtype>
        <driver>com.mysql.cj.jdbc.Driver</driver>
    </source>
    <dest>
        <url>jdbc:postgresql://139.196.74.78:5433/jagzw_test?currentSchema=jagzw</url>
        <username>gaussdb</username>
        <password>Ztzf@81f4</password>
        <dbtype>postgresql</dbtype>
        <driver>org.postgresql.Driver</driver>
    </dest>
    <jobs>
<!--        <job>-->
<!--            &lt;!&ndash; job的名称,每一个job的名称最好不一样 &ndash;&gt;-->
<!--            <name>blade_attach_sync</name>-->
<!--            &lt;!&ndash; 定时调度cron表达式 &ndash;&gt;-->
<!--            <cron>0/10 * * * * ?</cron>-->
<!--            &lt;!&ndash; 源数据库的查询语句 &ndash;&gt;-->
<!--            <srcSql>SELECT * from blade_attach</srcSql>-->
<!--            &lt;!&ndash; 目标数据库的数据表 &ndash;&gt;-->
<!--            <destTable>blade_attach</destTable>-->
<!--            &lt;!&ndash; 目标数据库数据表的字段,必须和源数据库中查询语句的字段保持一致 &ndash;&gt;-->
<!--            <destTableFields>id,tenant_id,link,domain_url,name,nick_name,original_name,extension,attach_size,patrol_task_id,result_type,device_sn,workspace_id,metadata,drone_data,remark,md5,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableFields>-->
<!--            &lt;!&ndash; 根据此字段判断同步的数据是否在目标数据库总存在 &ndash;&gt;-->
<!--            <destTableKey>id</destTableKey>-->
<!--            &lt;!&ndash; 如果目标数据库中存在destTableKey标签字段相同的数据,则更新此字段 &ndash;&gt;-->
<!--            <destTableUpdate>tenant_id,link,domain_url,name,nick_name,original_name,extension,attach_size,patrol_task_id,result_type,device_sn,workspace_id,metadata,drone_data,remark,md5,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableUpdate>-->
<!--        </job>-->
<!--        <job>-->
<!--            <name>blade_dept_sync</name>-->
<!--            <cron>0/10 * * * * ?</cron>-->
<!--            <srcSql>SELECT * from blade_dept</srcSql>-->
<!--            <destTable>blade_dept</destTable>-->
<!--            <destTableFields>id,dept_code,tenant_id,parent_id,ancestors,dept_category,dept_name,full_name,sort,remark,dept_nature,bing_id,bind_code,deployment_mode,area_code,status,is_deleted,create_time,update_time</destTableFields>-->
<!--            <destTableKey>id</destTableKey>-->
<!--            <destTableUpdate>dept_code,tenant_id,parent_id,ancestors,dept_category,dept_name,full_name,sort,remark,dept_nature,bing_id,bind_code,deployment_mode,area_code,status,is_deleted,create_time,update_time</destTableUpdate>-->
<!--        </job>-->
<!--        <job>-->
<!--            <name>blade_dict_sync</name>-->
<!--            <cron>0/10 * * * * ?</cron>-->
<!--            <srcSql>SELECT * from blade_dict</srcSql>-->
<!--            <destTable>blade_dict</destTable>-->
<!--            <destTableFields>id,parent_id,code,dict_key,dict_value,sort,remark,is_sealed,is_deleted</destTableFields>-->
<!--            <destTableKey>id</destTableKey>-->
<!--            <destTableUpdate>parent_id,code,dict_key,dict_value,sort,remark,is_sealed,is_deleted</destTableUpdate>-->
<!--        </job>-->
<!--        <job>-->
<!--            <name>blade_dict_biz_sync</name>-->
<!--            <cron>0/10 * * * * ?</cron>-->
<!--            <srcSql>SELECT * from blade_dict_biz</srcSql>-->
<!--            <destTable>blade_dict_biz</destTable>-->
<!--            <destTableFields>id,tenant_id,parent_id,code,dict_key,dict_value,sort,remark,is_sealed,is_deleted</destTableFields>-->
<!--            <destTableKey>id</destTableKey>-->
<!--            <destTableUpdate>tenant_id,parent_id,code,dict_key,dict_value,sort,remark,is_sealed,is_deleted</destTableUpdate>-->
<!--        </job>-->
        <job>
            <name>blade_job_info_sync</name>
            <cron>0/10 * * * * ?</cron>
            <srcSql>SELECT * from blade_job_info</srcSql>
            <destTable>blade_job_info</destTable>
            <destTableFields>id,job_server_id,job_id,job_name,job_description,job_params,time_expression_type,time_expression,execute_type,processor_type,processor_info,max_instance_num,concurrency,instance_time_limit,instance_retry_num,task_retry_num,min_cpu_cores,min_memory_space,min_disk_space,designated_workers,max_worker_count,notify_user_ids,enable,dispatch_strategy,lifecycle,alert_threshold,statistic_window_len,silence_window_len,log_type,log_level,extra,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableFields>
            <destTableKey>id</destTableKey>
            <destTableUpdate>job_server_id,job_id,job_name,job_description,job_params,time_expression_type,time_expression,execute_type,processor_type,processor_info,max_instance_num,concurrency,instance_time_limit,instance_retry_num,task_retry_num,min_cpu_cores,min_memory_space,min_disk_space,designated_workers,max_worker_count,notify_user_ids,enable,dispatch_strategy,lifecycle,alert_threshold,statistic_window_len,silence_window_len,log_type,log_level,extra,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableUpdate>
        </job>
<!--        <job>-->
<!--            <name>blade_job_server_sync</name>-->
<!--            <cron>0/10 * * * * ?</cron>-->
<!--            <srcSql>SELECT * from blade_job_server</srcSql>-->
<!--            <destTable>blade_job_server</destTable>-->
<!--            <destTableFields>id,job_server_name,job_server_url,job_app_name,job_app_password,job_remark,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableFields>-->
<!--            <destTableKey>id</destTableKey>-->
<!--            <destTableUpdate>job_server_name,job_server_url,job_app_name,job_app_password,job_remark,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableUpdate>-->
<!--        </job>-->
<!--        <job>-->
<!--            <name>blade_log_api_sync</name>-->
<!--            <cron>0/10 * * * * ?</cron>-->
<!--            <srcSql>SELECT * from blade_log_api</srcSql>-->
<!--            <destTable>blade_log_api</destTable>-->
<!--            <destTableFields>id,tenant_id,service_id,server_host,server_ip,env,type,title,method,request_uri,user_agent,remote_ip,method_class,method_name,params,time,create_by,create_time</destTableFields>-->
<!--            <destTableKey>id</destTableKey>-->
<!--            <destTableUpdate>tenant_id,service_id,server_host,server_ip,env,type,title,method,request_uri,user_agent,remote_ip,method_class,method_name,params,time,create_by,create_time</destTableUpdate>-->
<!--        </job>-->
<!--        <job>-->
<!--            <name>blade_log_error_sync</name>-->
<!--            <cron>0/10 * * * * ?</cron>-->
<!--            <srcSql>SELECT * from blade_log_error</srcSql>-->
<!--            <destTable>blade_log_error</destTable>-->
<!--            <destTableFields>id,tenant_id,service_id,server_host,server_ip,env,method,request_uri,user_agent,stack_trace,exception_name,message,line_number,remote_ip,method_class,file_name,method_name,params,create_by,create_time</destTableFields>-->
<!--            <destTableKey>id</destTableKey>-->
<!--            <destTableUpdate>tenant_id,service_id,server_host,server_ip,env,method,request_uri,user_agent,stack_trace,exception_name,message,line_number,remote_ip,method_class,file_name,method_name,params,create_by,create_time</destTableUpdate>-->
<!--        </job>-->
<!--        <job>-->
<!--            <name>blade_log_usual_sync</name>-->
<!--            <cron>0/10 * * * * ?</cron>-->
<!--            <srcSql>SELECT * from blade_log_usual</srcSql>-->
<!--            <destTable>blade_log_usual</destTable>-->
<!--            <destTableFields>id,tenant_id,service_id,server_host,server_ip,env,log_level,log_id,log_data,method,request_uri,remote_ip,method_class,method_name,user_agent,params,create_by,create_time</destTableFields>-->
<!--            <destTableKey>id</destTableKey>-->
<!--            <destTableUpdate>tenant_id,service_id,server_host,server_ip,env,log_level,log_id,log_data,method,request_uri,remote_ip,method_class,method_name,user_agent,params,create_by,create_time</destTableUpdate>-->
<!--        </job>-->
<!--        <job>-->
<!--            <name>blade_menu_sync</name>-->
<!--            <cron>0/10 * * * * ?</cron>-->
<!--            <srcSql>SELECT * from blade_menu</srcSql>-->
<!--            <destTable>blade_menu</destTable>-->
<!--            <destTableFields>id,parent_id,code,name,alias,path,source,sort,category,sys_type,action,is_open,is_device,component,remark,is_deleted</destTableFields>-->
<!--            <destTableKey>id</destTableKey>-->
<!--            <destTableUpdate>parent_id,code,name,alias,path,source,sort,category,sys_type,action,is_open,is_device,component,remark,is_deleted</destTableUpdate>-->
<!--        </job>-->
<!--        <job>-->
<!--            <name>blade_model_sync</name>-->
<!--            <cron>0/10 * * * * ?</cron>-->
<!--            <srcSql>SELECT * from blade_model</srcSql>-->
<!--            <destTable>blade_model</destTable>-->
<!--            <destTableFields>id,datasource_id,model_name,model_code,model_table,model_class,model_remark,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableFields>-->
<!--            <destTableKey>id</destTableKey>-->
<!--            <destTableUpdate>datasource_id,model_name,model_code,model_table,model_class,model_remark,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableUpdate>-->
<!--        </job>-->
<!--        <job>-->
<!--            <name>blade_model_prototype_sync</name>-->
<!--            <cron>0/10 * * * * ?</cron>-->
<!--            <srcSql>SELECT * from blade_model_prototype</srcSql>-->
<!--            <destTable>blade_model_prototype</destTable>-->
<!--            <destTableFields>id,model_id,jdbc_name,jdbc_type,jdbc_comment,property_type,property_entity,property_name,is_list,is_form,is_row,component_type,dict_code,is_required,is_query,query_type,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableFields>-->
<!--            <destTableKey>id</destTableKey>-->
<!--            <destTableUpdate>model_id,jdbc_name,jdbc_type,jdbc_comment,property_type,property_entity,property_name,is_list,is_form,is_row,component_type,dict_code,is_required,is_query,query_type,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableUpdate>-->
<!--        </job>-->
<!--        <job>-->
<!--            <name>blade_notice_sync</name>-->
<!--            <cron>0/10 * * * * ?</cron>-->
<!--            <srcSql>SELECT * from blade_notice</srcSql>-->
<!--            <destTable>blade_notice</destTable>-->
<!--            <destTableFields>id,tenant_id,title,category,release_time,content,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableFields>-->
<!--            <destTableKey>id</destTableKey>-->
<!--            <destTableUpdate>tenant_id,title,category,release_time,content,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableUpdate>-->
<!--        </job>-->
<!--        <job>-->
<!--            <name>blade_oss_sync</name>-->
<!--            <cron>0/10 * * * * ?</cron>-->
<!--            <srcSql>SELECT * from blade_oss</srcSql>-->
<!--            <destTable>blade_oss</destTable>-->
<!--            <destTableFields>id,tenant_id,category,oss_code,endpoint,transform_endpoint,access_key,secret_key,bucket_name,app_id,region,remark,is_def,expire,object_dir_prefix,name,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableFields>-->
<!--            <destTableKey>id</destTableKey>-->
<!--            <destTableUpdate>tenant_id,category,oss_code,endpoint,transform_endpoint,access_key,secret_key,bucket_name,app_id,region,remark,is_def,expire,object_dir_prefix,name,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableUpdate>-->
<!--        </job>-->
<!--        <job>-->
<!--            <name>blade_param_sync</name>-->
<!--            <cron>0/10 * * * * ?</cron>-->
<!--            <srcSql>SELECT * from blade_param</srcSql>-->
<!--            <destTable>blade_param</destTable>-->
<!--            <destTableFields>id,param_name,param_key,param_value,remark,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableFields>-->
<!--            <destTableKey>id</destTableKey>-->
<!--            <destTableUpdate>param_name,param_key,param_value,remark,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableUpdate>-->
<!--        </job>-->
<!--        <job>-->
<!--            <name>blade_post_sync</name>-->
<!--            <cron>0/10 * * * * ?</cron>-->
<!--            <srcSql>SELECT * from blade_post</srcSql>-->
<!--            <destTable>blade_post</destTable>-->
<!--            <destTableFields>id,tenant_id,category,post_code,post_name,sort,remark,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableFields>-->
<!--            <destTableKey>id</destTableKey>-->
<!--            <destTableUpdate>tenant_id,category,post_code,post_name,sort,remark,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableUpdate>-->
<!--        </job>-->
<!--        <job>-->
<!--            <name>blade_process_leave_sync</name>-->
<!--            <cron>0/10 * * * * ?</cron>-->
<!--            <srcSql>SELECT * from blade_process_leave</srcSql>-->
<!--            <destTable>blade_process_leave</destTable>-->
<!--            <destTableFields>id,process_definition_id,process_instance_id,start_time,end_time,reason,task_user,apply_time,attach_url,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableFields>-->
<!--            <destTableKey>id</destTableKey>-->
<!--            <destTableUpdate>process_definition_id,process_instance_id,start_time,end_time,reason,task_user,apply_time,attach_url,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableUpdate>-->
<!--        </job>-->
<!--        <job>-->
<!--            <name>blade_region_sync</name>-->
<!--            <cron>0/10 * * * * ?</cron>-->
<!--            <srcSql>SELECT * from blade_region</srcSql>-->
<!--            <destTable>blade_region</destTable>-->
<!--            <destTableFields>id,code,parent_code,ancestors,name,province_code,province_name,city_code,city_name,district_code,district_name,town_code,town_name,village_code,village_name,region_level,type,sort,remark,status,create_time,update_time</destTableFields>-->
<!--            <destTableKey>id</destTableKey>-->
<!--            <destTableUpdate>code,parent_code,ancestors,name,province_code,province_name,city_code,city_name,district_code,district_name,town_code,town_name,village_code,village_name,region_level,type,sort,remark,status,create_time,update_time</destTableUpdate>-->
<!--        </job>-->
<!--        <job>-->
<!--            <name>blade_report_file_sync</name>-->
<!--            <cron>0/10 * * * * ?</cron>-->
<!--            <srcSql>SELECT * from blade_report_file</srcSql>-->
<!--            <destTable>blade_report_file</destTable>-->
<!--            <destTableFields>id,name,content,create_time,update_time,is_deleted</destTableFields>-->
<!--            <destTableKey>id</destTableKey>-->
<!--            <destTableUpdate>name,content,create_time,update_time,is_deleted</destTableUpdate>-->
<!--        </job>-->
<!--        <job>-->
<!--            <name>blade_role_sync</name>-->
<!--            <cron>0/10 * * * * ?</cron>-->
<!--            <srcSql>SELECT * from blade_role</srcSql>-->
<!--            <destTable>blade_role</destTable>-->
<!--            <destTableFields>id,tenant_id,parent_id,role_name,sort,role_alias,is_deleted</destTableFields>-->
<!--            <destTableKey>id</destTableKey>-->
<!--            <destTableUpdate>tenant_id,parent_id,role_name,sort,role_alias,is_deleted</destTableUpdate>-->
<!--        </job>-->
<!--        <job>-->
<!--            <name>blade_role_menu_sync</name>-->
<!--            <cron>0/10 * * * * ?</cron>-->
<!--            <srcSql>SELECT * from blade_role_menu</srcSql>-->
<!--            <destTable>blade_role_menu</destTable>-->
<!--            <destTableFields>id,menu_id,role_id</destTableFields>-->
<!--            <destTableKey>id</destTableKey>-->
<!--            <destTableUpdate>menu_id,role_id</destTableUpdate>-->
<!--        </job>-->
<!--        <job>-->
<!--            <name>blade_role_scope_sync</name>-->
<!--            <cron>0/10 * * * * ?</cron>-->
<!--            <srcSql>SELECT * from blade_role_scope</srcSql>-->
<!--            <destTable>blade_role_scope</destTable>-->
<!--            <destTableFields>id,scope_category,scope_id,role_id</destTableFields>-->
<!--            <destTableKey>id</destTableKey>-->
<!--            <destTableUpdate>scope_category,scope_id,role_id</destTableUpdate>-->
<!--        </job>-->
<!--        <job>-->
<!--            <name>blade_scope_api_sync</name>-->
<!--            <cron>0/10 * * * * ?</cron>-->
<!--            <srcSql>SELECT * from blade_scope_api</srcSql>-->
<!--            <destTable>blade_scope_api</destTable>-->
<!--            <destTableFields>id,menu_id,resource_code,scope_name,scope_path,scope_type,remark,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableFields>-->
<!--            <destTableKey>id</destTableKey>-->
<!--            <destTableUpdate>menu_id,resource_code,scope_name,scope_path,scope_type,remark,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableUpdate>-->
<!--        </job>-->
<!--        <job>-->
<!--            <name>blade_scope_data_sync</name>-->
<!--            <cron>0/10 * * * * ?</cron>-->
<!--            <srcSql>SELECT * from blade_scope_data</srcSql>-->
<!--            <destTable>blade_scope_data</destTable>-->
<!--            <destTableFields>id,menu_id,resource_code,scope_name,scope_field,scope_class,scope_column,scope_type,scope_value,remark,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableFields>-->
<!--            <destTableKey>id</destTableKey>-->
<!--            <destTableUpdate>menu_id,resource_code,scope_name,scope_field,scope_class,scope_column,scope_type,scope_value,remark,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableUpdate>-->
<!--        </job>-->
<!--        <job>-->
<!--            <name>blade_sms_sync</name>-->
<!--            <cron>0/10 * * * * ?</cron>-->
<!--            <srcSql>SELECT * from blade_sms</srcSql>-->
<!--            <destTable>blade_sms</destTable>-->
<!--            <destTableFields>id,tenant_id,category,sms_code,template_id,access_key,secret_key,region_id,sign_name,remark,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableFields>-->
<!--            <destTableKey>id</destTableKey>-->
<!--            <destTableUpdate>tenant_id,category,sms_code,template_id,access_key,secret_key,region_id,sign_name,remark,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableUpdate>-->
<!--        </job>-->
<!--        <job>-->
<!--            <name>blade_tenant_sync</name>-->
<!--            <cron>0/10 * * * * ?</cron>-->
<!--            <srcSql>SELECT * from blade_tenant</srcSql>-->
<!--            <destTable>blade_tenant</destTable>-->
<!--            <destTableFields>id,tenant_id,tenant_name,domain_url,background_url,linkman,contact_number,address,account_number,expire_time,package_id,datasource_id,license_key,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableFields>-->
<!--            <destTableKey>id</destTableKey>-->
<!--            <destTableUpdate>tenant_id,tenant_name,domain_url,background_url,linkman,contact_number,address,account_number,expire_time,package_id,datasource_id,license_key,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableUpdate>-->
<!--        </job>-->
<!--        <job>-->
<!--            <name>blade_tenant_package_sync</name>-->
<!--            <cron>0/10 * * * * ?</cron>-->
<!--            <srcSql>SELECT * from blade_tenant_package</srcSql>-->
<!--            <destTable>blade_tenant_package</destTable>-->
<!--            <destTableFields>id,package_name,menu_id,remark,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableFields>-->
<!--            <destTableKey>id</destTableKey>-->
<!--            <destTableUpdate>package_name,menu_id,remark,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableUpdate>-->
<!--        </job>-->
<!--        <job>-->
<!--            <name>blade_top_menu_sync</name>-->
<!--            <cron>0/10 * * * * ?</cron>-->
<!--            <srcSql>SELECT * from blade_top_menu</srcSql>-->
<!--            <destTable>blade_top_menu</destTable>-->
<!--            <destTableFields>id,tenant_id,code,name,source,sort,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableFields>-->
<!--            <destTableKey>id</destTableKey>-->
<!--            <destTableUpdate>tenant_id,code,name,source,sort,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableUpdate>-->
<!--        </job>-->
<!--        <job>-->
<!--            <name>blade_top_menu_setting_sync</name>-->
<!--            <cron>0/10 * * * * ?</cron>-->
<!--            <srcSql>SELECT * from blade_top_menu_setting</srcSql>-->
<!--            <destTable>blade_top_menu_setting</destTable>-->
<!--            <destTableFields>id,top_menu_id,menu_id</destTableFields>-->
<!--            <destTableKey>id</destTableKey>-->
<!--            <destTableUpdate>top_menu_id,menu_id</destTableUpdate>-->
<!--        </job>-->
<!--        <job>-->
<!--            <name>blade_user_sync</name>-->
<!--            <cron>0/10 * * * * ?</cron>-->
<!--            <srcSql>SELECT * from blade_user</srcSql>-->
<!--            <destTable>blade_user</destTable>-->
<!--            <destTableFields>id,tenant_id,code,user_type,account,password,name,real_name,avatar,email,phone,birthday,sex,role_id,dept_id,post_id,flight_start_time,flight_end_time,max_login_num,expire_time,create_user,create_dept,create_time,update_user,update_time,status,is_deleted,area_code</destTableFields>-->
<!--            <destTableKey>id</destTableKey>-->
<!--            <destTableUpdate>tenant_id,code,user_type,account,password,name,real_name,avatar,email,phone,birthday,sex,role_id,dept_id,post_id,flight_start_time,flight_end_time,max_login_num,expire_time,create_user,create_dept,create_time,update_user,update_time,status,is_deleted,area_code</destTableUpdate>-->
<!--        </job>-->
<!--        <job>-->
<!--            <name>blade_user_app_sync</name>-->
<!--            <cron>0/10 * * * * ?</cron>-->
<!--            <srcSql>SELECT * from blade_user_app</srcSql>-->
<!--            <destTable>blade_user_app</destTable>-->
<!--            <destTableFields>id,user_id,user_ext</destTableFields>-->
<!--            <destTableKey>id</destTableKey>-->
<!--            <destTableUpdate>user_id,user_ext</destTableUpdate>-->
<!--        </job>-->
<!--        <job>-->
<!--            <name>blade_user_dept_sync</name>-->
<!--            <cron>0/10 * * * * ?</cron>-->
<!--            <srcSql>SELECT * from blade_user_dept</srcSql>-->
<!--            <destTable>blade_user_dept</destTable>-->
<!--            <destTableFields>id,user_id,dept_id</destTableFields>-->
<!--            <destTableKey>id</destTableKey>-->
<!--            <destTableUpdate>user_id,dept_id</destTableUpdate>-->
<!--        </job>-->
<!--        <job>-->
<!--            <name>blade_user_oauth_sync</name>-->
<!--            <cron>0/10 * * * * ?</cron>-->
<!--            <srcSql>SELECT * from blade_user_oauth</srcSql>-->
<!--            <destTable>blade_user_oauth</destTable>-->
<!--            <destTableFields>id,tenant_id,uuid,user_id,username,nickname,avatar,blog,company,location,email,remark,gender,source</destTableFields>-->
<!--            <destTableKey>id</destTableKey>-->
<!--            <destTableUpdate>tenant_id,uuid,user_id,username,nickname,avatar,blog,company,location,email,remark,gender,source</destTableUpdate>-->
<!--        </job>-->
<!--        <job>-->
<!--            <name>blade_user_other_sync</name>-->
<!--            <cron>0/10 * * * * ?</cron>-->
<!--            <srcSql>SELECT * from blade_user_other</srcSql>-->
<!--            <destTable>blade_user_other</destTable>-->
<!--            <destTableFields>id,user_id,user_ext</destTableFields>-->
<!--            <destTableKey>id</destTableKey>-->
<!--            <destTableUpdate>user_id,user_ext</destTableUpdate>-->
<!--        </job>-->
<!--        <job>-->
<!--            <name>blade_user_web_sync</name>-->
<!--            <cron>0/10 * * * * ?</cron>-->
<!--            <srcSql>SELECT * from blade_user_web</srcSql>-->
<!--            <destTable>blade_user_web</destTable>-->
<!--            <destTableFields>id,user_id,user_ext</destTableFields>-->
<!--            <destTableKey>id</destTableKey>-->
<!--            <destTableUpdate>user_id,user_ext</destTableUpdate>-->
<!--        </job>-->
<!--        <job>-->
<!--            <name>help_center_sync</name>-->
<!--            <cron>0/10 * * * * ?</cron>-->
<!--            <srcSql>SELECT * from help_center</srcSql>-->
<!--            <destTable>help_center</destTable>-->
<!--            <destTableFields>id,level_one_type,level_two_type,upload_user,create_time,file_path</destTableFields>-->
<!--            <destTableKey>id</destTableKey>-->
<!--            <destTableUpdate>level_one_type,level_two_type,upload_user,create_time,file_path</destTableUpdate>-->
<!--        </job>-->
    </jobs>
</root>
jobs.xml
New file
@@ -0,0 +1,423 @@
<?xml version="1.0" encoding="UTF-8"?>
<root>
    <code>4500000001</code>
    <source>
        <url>jdbc:mysql://139.196.74.78:3308/jagzw_test</url>
        <username>root</username>
        <password>jxpskj_2018</password>
        <dbtype>mysql</dbtype>
        <driver>com.mysql.cj.jdbc.Driver</driver>
    </source>
    <dest>
        <url>jdbc:postgresql://139.196.74.78:5433/jagzw_test?currentSchema=jagzw</url>
        <username>gaussdb</username>
        <password>Ztzf@81f4</password>
        <dbtype>postgresql</dbtype>
        <driver>org.postgresql.Driver</driver>
    </dest>
    <jobs>
<!--        <job>-->
<!--            &lt;!&ndash; job的名称,每一个job的名称最好不一样 &ndash;&gt;-->
<!--            <name>blade_attach_sync</name>-->
<!--            &lt;!&ndash; 定时调度cron表达式 &ndash;&gt;-->
<!--            <cron>0/10 * * * * ?</cron>-->
<!--            &lt;!&ndash; 源数据库的查询语句 &ndash;&gt;-->
<!--            <srcSql>SELECT * from blade_attach</srcSql>-->
<!--            &lt;!&ndash; 目标数据库的数据表 &ndash;&gt;-->
<!--            <destTable>blade_attach</destTable>-->
<!--            &lt;!&ndash; 目标数据库数据表的字段,必须和源数据库中查询语句的字段保持一致 &ndash;&gt;-->
<!--            <destTableFields>id,tenant_id,link,domain_url,name,nick_name,original_name,extension,attach_size,patrol_task_id,result_type,device_sn,workspace_id,metadata,drone_data,remark,md5,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableFields>-->
<!--            &lt;!&ndash; 根据此字段判断同步的数据是否在目标数据库总存在 &ndash;&gt;-->
<!--            <destTableKey>id</destTableKey>-->
<!--            &lt;!&ndash; 如果目标数据库中存在destTableKey标签字段相同的数据,则更新此字段 &ndash;&gt;-->
<!--            <destTableUpdate>tenant_id,link,domain_url,name,nick_name,original_name,extension,attach_size,patrol_task_id,result_type,device_sn,workspace_id,metadata,drone_data,remark,md5,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableUpdate>-->
<!--        </job>-->
<!--        <job>-->
<!--            <name>blade_dept_sync</name>-->
<!--            <cron>0/10 * * * * ?</cron>-->
<!--            <srcSql>SELECT * from blade_dept</srcSql>-->
<!--            <destTable>blade_dept</destTable>-->
<!--            <destTableFields>id,dept_code,tenant_id,parent_id,ancestors,dept_category,dept_name,full_name,sort,remark,dept_nature,bing_id,bind_code,deployment_mode,area_code,status,is_deleted,create_time,update_time</destTableFields>-->
<!--            <destTableKey>id</destTableKey>-->
<!--            <destTableUpdate>dept_code,tenant_id,parent_id,ancestors,dept_category,dept_name,full_name,sort,remark,dept_nature,bing_id,bind_code,deployment_mode,area_code,status,is_deleted,create_time,update_time</destTableUpdate>-->
<!--        </job>-->
<!--        <job>-->
<!--            <name>blade_dict_sync</name>-->
<!--            <cron>0/10 * * * * ?</cron>-->
<!--            <srcSql>SELECT * from blade_dict</srcSql>-->
<!--            <destTable>blade_dict</destTable>-->
<!--            <destTableFields>id,parent_id,code,dict_key,dict_value,sort,remark,is_sealed,is_deleted</destTableFields>-->
<!--            <destTableKey>id</destTableKey>-->
<!--            <destTableUpdate>parent_id,code,dict_key,dict_value,sort,remark,is_sealed,is_deleted</destTableUpdate>-->
<!--        </job>-->
<!--        <job>-->
<!--            <name>blade_dict_biz_sync</name>-->
<!--            <cron>0/10 * * * * ?</cron>-->
<!--            <srcSql>SELECT * from blade_dict_biz</srcSql>-->
<!--            <destTable>blade_dict_biz</destTable>-->
<!--            <destTableFields>id,tenant_id,parent_id,code,dict_key,dict_value,sort,remark,is_sealed,is_deleted</destTableFields>-->
<!--            <destTableKey>id</destTableKey>-->
<!--            <destTableUpdate>tenant_id,parent_id,code,dict_key,dict_value,sort,remark,is_sealed,is_deleted</destTableUpdate>-->
<!--        </job>-->
        <job>
            <name>ja_fw_alarm_favorite_sync</name>
            <cron>0/10 * * * * ?</cron>
            <srcSql>SELECT * from ja_fw_alarm_favorite</srcSql>
            <destTable>ja_fw_alarm_favorite</destTable>
            <destTableFields>id,alarm_record_id,user_id,title,remark,create_time,create_user,create_dept,update_user,update_time,status,is_deleted</destTableFields>
            <destTableKey>id</destTableKey>
            <destTableUpdate>alarm_record_id,user_id,title,remark,create_time,create_user,create_dept,update_user,update_time,status,is_deleted</destTableUpdate>
        </job>
<!--        <job>-->
<!--            <name>ja_fw_area_divide_sync</name>-->
<!--            <cron>0/10 * * * * ?</cron>-->
<!--            <srcSql>SELECT * from ja_fw_area_divide</srcSql>-->
<!--            <destTable>ja_fw_area_divide</destTable>-->
<!--            <destTableFields>id,area_name,trigger_condition,response_mechanism,control_level,police_station_id,device_ids,fly_time_start,fly_time_end,fly_date_start,fly_date_end,area_code,create_user,create_dept,create_time,update_user,update_time,status,is_deleted,area_type_keys</destTableFields>-->
<!--            <destTableKey>id</destTableKey>-->
<!--            <destTableUpdate>area_name,trigger_condition,response_mechanism,control_level,police_station_id,device_ids,fly_time_start,fly_time_end,fly_date_start,fly_date_end,area_code,create_user,create_dept,create_time,update_user,update_time,status,is_deleted,area_type_keys</destTableUpdate>-->
<!--        </job>-->
<!--        <job>-->
<!--            <name>ja_fw_area_divide_ext_sync</name>-->
<!--            <cron>0/10 * * * * ?</cron>-->
<!--            <srcSql>SELECT * from ja_fw_area_divide_ext</srcSql>-->
<!--            <destTable>ja_fw_area_divide_ext</destTable>-->
<!--            <destTableFields>id,area_divide_id,area_type_key,area_type_value,geom_json,area_code,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableFields>-->
<!--            <destTableKey>id</destTableKey>-->
<!--            <destTableUpdate>area_divide_id,area_type_key,area_type_value,geom_json,area_code,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableUpdate>-->
<!--        </job>-->
<!--        <job>-->
<!--            <name>ja_fw_defense_scene_sync</name>-->
<!--            <cron>0/10 * * * * ?</cron>-->
<!--            <srcSql>SELECT * from ja_fw_defense_scene</srcSql>-->
<!--            <destTable>ja_fw_defense_scene</destTable>-->
<!--            <destTableFields>id,scene_name,scene_type,device_mode,area_divide_ids,area_code,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableFields>-->
<!--            <destTableKey>id</destTableKey>-->
<!--            <destTableUpdate>scene_name,scene_type,device_mode,area_divide_ids,area_code,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableUpdate>-->
<!--        </job>-->
<!--        <job>-->
<!--            <name>ja_fw_defense_scene_manage_sync</name>-->
<!--            <cron>0/10 * * * * ?</cron>-->
<!--            <srcSql>SELECT * from ja_fw_defense_scene_manage</srcSql>-->
<!--            <destTable>ja_fw_defense_scene_manage</destTable>-->
<!--            <destTableFields>id,defense_scene_id,scene_name,longitude,latitude,defense_leader,leader_phone,effective_date_start,effective_date_end,area_code,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableFields>-->
<!--            <destTableKey>id</destTableKey>-->
<!--            <destTableUpdate>defense_scene_id,scene_name,longitude,latitude,defense_leader,leader_phone,effective_date_start,effective_date_end,area_code,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableUpdate>-->
<!--        </job>-->
<!--        <job>-->
<!--            <name>ja_fw_defense_zone_sync</name>-->
<!--            <cron>0/10 * * * * ?</cron>-->
<!--            <srcSql>SELECT * from ja_fw_defense_zone</srcSql>-->
<!--            <destTable>ja_fw_defense_zone</destTable>-->
<!--            <destTableFields>id,zone_name,zone_area,defense_scene_ids,area_divide_ids,device_ids,geom,area_code,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableFields>-->
<!--            <destTableKey>id</destTableKey>-->
<!--            <destTableUpdate>zone_name,zone_area,defense_scene_ids,area_divide_ids,device_ids,geom,area_code,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableUpdate>-->
<!--        </job>-->
<!--        <job>-->
<!--            <name>ja_fw_device_sync</name>-->
<!--            <cron>0/10 * * * * ?</cron>-->
<!--            <srcSql>SELECT * from ja_fw_device</srcSql>-->
<!--            <destTable>ja_fw_device</destTable>-->
<!--            <destTableFields>id,airport_id,device_sn,device_name,device_type,device_att,device_model,device_specification,manufacturer,source,purpose,belong_dept,charger,contact_phone,remark,battery_pct,azimuth,elevation,detect_target_cnt,effective_range_km,work_mode,latitude,longitude,area_code,track_status,final_outbound_area,final_outbound_area_code,is_enabled,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableFields>-->
<!--            <destTableKey>id</destTableKey>-->
<!--            <destTableUpdate>airport_id,device_sn,device_name,device_type,device_att,device_model,device_specification,manufacturer,source,purpose,belong_dept,charger,contact_phone,remark,battery_pct,azimuth,elevation,detect_target_cnt,effective_range_km,work_mode,latitude,longitude,area_code,track_status,final_outbound_area,final_outbound_area_code,is_enabled,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableUpdate>-->
<!--        </job>-->
<!--        <job>-->
<!--            <name>ja_fw_device_config_sync</name>-->
<!--            <cron>0/10 * * * * ?</cron>-->
<!--            <srcSql>SELECT * from ja_fw_device_config</srcSql>-->
<!--            <destTable>ja_fw_device_config</destTable>-->
<!--            <destTableFields>id,device_id,config_version,is_latest,config_json,area_code,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableFields>-->
<!--            <destTableKey>id</destTableKey>-->
<!--            <destTableUpdate>device_id,config_version,is_latest,config_json,area_code,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableUpdate>-->
<!--        </job>-->
<!--        <job>-->
<!--            <name>ja_fw_device_maintain_plan_sync</name>-->
<!--            <cron>0/10 * * * * ?</cron>-->
<!--            <srcSql>SELECT * from ja_fw_device_maintain_plan</srcSql>-->
<!--            <destTable>ja_fw_device_maintain_plan</destTable>-->
<!--            <destTableFields>id,device_id,plan_cycle_type,plan_cycle_value,maintain_status,last_maintain_time,area_code,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableFields>-->
<!--            <destTableKey>id</destTableKey>-->
<!--            <destTableUpdate>device_id,plan_cycle_type,plan_cycle_value,maintain_status,last_maintain_time,area_code,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableUpdate>-->
<!--        </job>-->
<!--        <job>-->
<!--            <name>ja_fw_device_maintain_record_sync</name>-->
<!--            <cron>0/10 * * * * ?</cron>-->
<!--            <srcSql>SELECT * from ja_fw_device_maintain_record</srcSql>-->
<!--            <destTable>ja_fw_device_maintain_record</destTable>-->
<!--            <destTableFields>id,device_id,plan_id,maintain_time,maintain_content,replace_part,remark,area_code,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableFields>-->
<!--            <destTableKey>id</destTableKey>-->
<!--            <destTableUpdate>device_id,plan_id,maintain_time,maintain_content,replace_part,remark,area_code,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableUpdate>-->
<!--        </job>-->
<!--        <job>-->
<!--            <name>ja_fw_device_per_share_sync</name>-->
<!--            <cron>0/10 * * * * ?</cron>-->
<!--            <srcSql>SELECT * from ja_fw_device_per_share</srcSql>-->
<!--            <destTable>ja_fw_device_per_share</destTable>-->
<!--            <destTableFields>id,device_sn,device_id,loan_from_dept_id,loan_to_dept_id,area_code,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableFields>-->
<!--            <destTableKey>id</destTableKey>-->
<!--            <destTableUpdate>device_sn,device_id,loan_from_dept_id,loan_to_dept_id,area_code,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableUpdate>-->
<!--        </job>-->
<!--        <job>-->
<!--            <name>ja_fw_device_scrap_sync</name>-->
<!--            <cron>0/10 * * * * ?</cron>-->
<!--            <srcSql>SELECT * from ja_fw_device_scrap</srcSql>-->
<!--            <destTable>ja_fw_device_scrap</destTable>-->
<!--            <destTableFields>id,device_id,scrap_time,scrap_reason,dispose_way,area_code,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableFields>-->
<!--            <destTableKey>id</destTableKey>-->
<!--            <destTableUpdate>device_id,scrap_time,scrap_reason,dispose_way,area_code,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableUpdate>-->
<!--        </job>-->
<!--        <job>-->
<!--            <name>ja_fw_device_track_sync</name>-->
<!--            <cron>0/10 * * * * ?</cron>-->
<!--            <srcSql>SELECT * from ja_fw_device_track</srcSql>-->
<!--            <destTable>ja_fw_device_track</destTable>-->
<!--            <destTableFields>id,device_id,out_time,out_target,out_target_code,purpose,charger,contact_phone,area_code,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableFields>-->
<!--            <destTableKey>id</destTableKey>-->
<!--            <destTableUpdate>device_id,out_time,out_target,out_target_code,purpose,charger,contact_phone,area_code,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableUpdate>-->
<!--        </job>-->
<!--        <job>-->
<!--            <name>ja_fw_drone_alarm_record_sync</name>-->
<!--            <cron>0/10 * * * * ?</cron>-->
<!--            <srcSql>SELECT * from ja_fw_drone_alarm_record</srcSql>-->
<!--            <destTable>ja_fw_drone_alarm_record</destTable>-->
<!--            <destTableFields>id,device_id,device_type,drone_name,device_sn,drone_serial_no,drone_type,alarm_type,alarm_time,trigger_reason,flight_status,longitude,latitude,area_name,signal_freq_mhz,flight_height_m,flight_speed_ms,stay_duration,counter_way,area_divide_id,defense_scene_id,area_code,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableFields>-->
<!--            <destTableKey>id</destTableKey>-->
<!--            <destTableUpdate>device_id,device_type,drone_name,device_sn,drone_serial_no,drone_type,alarm_type,alarm_time,trigger_reason,flight_status,longitude,latitude,area_name,signal_freq_mhz,flight_height_m,flight_speed_ms,stay_duration,counter_way,area_divide_id,defense_scene_id,area_code,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableUpdate>-->
<!--        </job>-->
<!--        <job>-->
<!--            <name>ja_fw_drone_flight_record_sync</name>-->
<!--            <cron>0/10 * * * * ?</cron>-->
<!--            <srcSql>SELECT * from ja_fw_drone_flight_record</srcSql>-->
<!--            <destTable>ja_fw_drone_flight_record</destTable>-->
<!--            <destTableFields>id,device_id,area_divide_id,device_type,drone_name,area_name,serial_no,alarm_time,trigger_type,stay_duration,area_code,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableFields>-->
<!--            <destTableKey>id</destTableKey>-->
<!--            <destTableUpdate>device_id,area_divide_id,device_type,drone_name,area_name,serial_no,alarm_time,trigger_type,stay_duration,area_code,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableUpdate>-->
<!--        </job>-->
<!--        <job>-->
<!--            <name>ja_fw_drone_flight_record_detail_sync</name>-->
<!--            <cron>0/10 * * * * ?</cron>-->
<!--            <srcSql>SELECT * from ja_fw_drone_flight_record_detail</srcSql>-->
<!--            <destTable>ja_fw_drone_flight_record_detail</destTable>-->
<!--            <destTableFields>id,flight_record_id,longitude,latitude,point_time,is_alarm,area_code,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableFields>-->
<!--            <destTableKey>id</destTableKey>-->
<!--            <destTableUpdate>flight_record_id,longitude,latitude,point_time,is_alarm,area_code,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableUpdate>-->
<!--        </job>-->
<!--        <job>-->
<!--            <name>ja_fw_effect_eval_sync</name>-->
<!--            <cron>0/10 * * * * ?</cron>-->
<!--            <srcSql>SELECT * from ja_fw_effect_eval</srcSql>-->
<!--            <destTable>ja_fw_effect_eval</destTable>-->
<!--            <destTableFields>id,alarm_record_id,counter_way,device_id,device_sn,device_name,device_model,device_type,drone_name,drone_type,drone_device_code,find_time,counter_effect,deploy_longitude,deploy_latitude,cover_radius_m,work_mode,area_code,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableFields>-->
<!--            <destTableKey>id</destTableKey>-->
<!--            <destTableUpdate>alarm_record_id,counter_way,device_id,device_sn,device_name,device_model,device_type,drone_name,drone_type,drone_device_code,find_time,counter_effect,deploy_longitude,deploy_latitude,cover_radius_m,work_mode,area_code,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableUpdate>-->
<!--        </job>-->
<!--        <job>-->
<!--            <name>ja_fw_police_station_sync</name>-->
<!--            <cron>0/10 * * * * ?</cron>-->
<!--            <srcSql>SELECT * from ja_fw_police_station</srcSql>-->
<!--            <destTable>ja_fw_police_station</destTable>-->
<!--            <destTableFields>id,station_name,address,longitude,latitude,contact_person,contact_phone,area_code,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableFields>-->
<!--            <destTableKey>id</destTableKey>-->
<!--            <destTableUpdate>station_name,address,longitude,latitude,contact_person,contact_phone,area_code,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableUpdate>-->
<!--        </job>-->
<!--        <job>-->
<!--            <name>ja_fw_task_schedule_sync</name>-->
<!--            <cron>0/10 * * * * ?</cron>-->
<!--            <srcSql>SELECT * from ja_fw_task_schedule</srcSql>-->
<!--            <destTable>ja_fw_task_schedule</destTable>-->
<!--            <destTableFields>id,device_id,area_divide_id,defense_scene_id,longitude,latitude,dispatch_user,dispatch_start_time,dispatch_end_time,dispatch_content,dispatch_result,dispose_measure,area_code,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableFields>-->
<!--            <destTableKey>id</destTableKey>-->
<!--            <destTableUpdate>device_id,area_divide_id,defense_scene_id,longitude,latitude,dispatch_user,dispatch_start_time,dispatch_end_time,dispatch_content,dispatch_result,dispose_measure,area_code,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableUpdate>-->
<!--        </job>-->
<!--        <job>-->
<!--            <name>ja_gd_application_innovation_sync</name>-->
<!--            <cron>0/10 * * * * ?</cron>-->
<!--            <srcSql>SELECT * from ja_gd_application_innovation</srcSql>-->
<!--            <destTable>ja_gd_application_innovation</destTable>-->
<!--            <destTableFields>id,case_name,belong_domain,innovation_status,application_scenario_desc,matter_name,resource_name,resource_code,case_desc,area_code,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableFields>-->
<!--            <destTableKey>id</destTableKey>-->
<!--            <destTableUpdate>case_name,belong_domain,innovation_status,application_scenario_desc,matter_name,resource_name,resource_code,case_desc,area_code,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableUpdate>-->
<!--        </job>-->
<!--        <job>-->
<!--            <name>ja_gd_clue_event_sync</name>-->
<!--            <cron>0/10 * * * * ?</cron>-->
<!--            <srcSql>SELECT * from ja_gd_clue_event</srcSql>-->
<!--            <destTable>ja_gd_clue_event</destTable>-->
<!--            <destTableFields>id,result_id,work_order_id,event_num,dispose_user,dispose_dept,longitude,latitude,event_status,area_code,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableFields>-->
<!--            <destTableKey>id</destTableKey>-->
<!--            <destTableUpdate>result_id,work_order_id,event_num,dispose_user,dispose_dept,longitude,latitude,event_status,area_code,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableUpdate>-->
<!--        </job>-->
<!--        <job>-->
<!--            <name>ja_gd_data_evaluation_sync</name>-->
<!--            <cron>0/10 * * * * ?</cron>-->
<!--            <srcSql>SELECT * from ja_gd_data_evaluation</srcSql>-->
<!--            <destTable>ja_gd_data_evaluation</destTable>-->
<!--            <destTableFields>id,title,data_name,propose_dept_id,data_provide_dept_id,score,is_resolved,evaluation_content,area_code,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableFields>-->
<!--            <destTableKey>id</destTableKey>-->
<!--            <destTableUpdate>title,data_name,propose_dept_id,data_provide_dept_id,score,is_resolved,evaluation_content,area_code,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableUpdate>-->
<!--        </job>-->
<!--        <job>-->
<!--            <name>ja_gd_data_objection_sync</name>-->
<!--            <cron>0/10 * * * * ?</cron>-->
<!--            <srcSql>SELECT * from ja_gd_data_objection</srcSql>-->
<!--            <destTable>ja_gd_data_objection</destTable>-->
<!--            <destTableFields>id,title,objection_type,objection_status,catalog_resource_name,submitter,submitter_contact,handle_unit,objection_desc,objection_basis,other_objection_detail,review_opinion,apply_target_dept_id,area_code,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableFields>-->
<!--            <destTableKey>id</destTableKey>-->
<!--            <destTableUpdate>title,objection_type,objection_status,catalog_resource_name,submitter,submitter_contact,handle_unit,objection_desc,objection_basis,other_objection_detail,review_opinion,apply_target_dept_id,area_code,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableUpdate>-->
<!--        </job>-->
<!--        <job>-->
<!--            <name>ja_gd_data_objection_attachment_sync</name>-->
<!--            <cron>0/10 * * * * ?</cron>-->
<!--            <srcSql>SELECT * from ja_gd_data_objection_attachment</srcSql>-->
<!--            <destTable>ja_gd_data_objection_attachment</destTable>-->
<!--            <destTableFields>id,objection_id,attach_id,attach_name,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableFields>-->
<!--            <destTableKey>id</destTableKey>-->
<!--            <destTableUpdate>objection_id,attach_id,attach_name,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableUpdate>-->
<!--        </job>-->
<!--        <job>-->
<!--            <name>ja_gd_flyer_sync</name>-->
<!--            <cron>0/10 * * * * ?</cron>-->
<!--            <srcSql>SELECT * from ja_gd_flyer</srcSql>-->
<!--            <destTable>ja_gd_flyer</destTable>-->
<!--            <destTableFields>id,flyer_id,flyer_name,flyer_phone,region_code,flight_hours,project_experience,technical_strength,skilled_uav_type,skilled_task_type,flyer_address,certification,area_code,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableFields>-->
<!--            <destTableKey>id</destTableKey>-->
<!--            <destTableUpdate>flyer_id,flyer_name,flyer_phone,region_code,flight_hours,project_experience,technical_strength,skilled_uav_type,skilled_task_type,flyer_address,certification,area_code,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableUpdate>-->
<!--        </job>-->
<!--        <job>-->
<!--            <name>ja_gd_implement_list_sync</name>-->
<!--            <cron>0/10 * * * * ?</cron>-->
<!--            <srcSql>SELECT * from ja_gd_implement_list</srcSql>-->
<!--            <destTable>ja_gd_implement_list</destTable>-->
<!--            <destTableFields>id,matter_name,matter_code,area_code,area_name,org_code,org_name,catalog_code,implement_code,implement_name,process_definition_id,process_instance_id,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableFields>-->
<!--            <destTableKey>id</destTableKey>-->
<!--            <destTableUpdate>matter_name,matter_code,area_code,area_name,org_code,org_name,catalog_code,implement_code,implement_name,process_definition_id,process_instance_id,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableUpdate>-->
<!--        </job>-->
<!--        <job>-->
<!--            <name>ja_gd_manage_device_sync</name>-->
<!--            <cron>0/10 * * * * ?</cron>-->
<!--            <srcSql>SELECT * from ja_gd_manage_device</srcSql>-->
<!--            <destTable>ja_gd_manage_device</destTable>-->
<!--            <destTableFields>id,airport_id,device_sn,child_sn,device_name,longitude,latitude,nickname,device_type,device_payload,geom,firmware_version,mode_code,insure_expired_time,traffic_remaining,traffic_expire_time,location,height,is_with_dock,area_code,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableFields>-->
<!--            <destTableKey>id</destTableKey>-->
<!--            <destTableUpdate>airport_id,device_sn,child_sn,device_name,longitude,latitude,nickname,device_type,device_payload,geom,firmware_version,mode_code,insure_expired_time,traffic_remaining,traffic_expire_time,location,height,is_with_dock,area_code,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableUpdate>-->
<!--        </job>-->
<!--        <job>-->
<!--            <name>ja_gd_material_sync</name>-->
<!--            <cron>0/10 * * * * ?</cron>-->
<!--            <srcSql>SELECT * from ja_gd_material</srcSql>-->
<!--            <destTable>ja_gd_material</destTable>-->
<!--            <destTableFields>id,material_name,necessity,is_all_scenario,material_desc,area_code,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableFields>-->
<!--            <destTableKey>id</destTableKey>-->
<!--            <destTableUpdate>material_name,necessity,is_all_scenario,material_desc,area_code,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableUpdate>-->
<!--        </job>-->
<!--        <job>-->
<!--            <name>ja_gd_operational_revenue_sync</name>-->
<!--            <cron>0/10 * * * * ?</cron>-->
<!--            <srcSql>SELECT * from ja_gd_operational_revenue</srcSql>-->
<!--            <destTable>ja_gd_operational_revenue</destTable>-->
<!--            <destTableFields>id,operating_income,total_cost,net_profit,financial_irr,market_space,create_time,create_user,create_dept,update_time,update_user,nick_name,is_deleted,earn_forecast</destTableFields>-->
<!--            <destTableKey>id</destTableKey>-->
<!--            <destTableUpdate>operating_income,total_cost,net_profit,financial_irr,market_space,create_time,create_user,create_dept,update_time,update_user,nick_name,is_deleted,earn_forecast</destTableUpdate>-->
<!--        </job>-->
<!--        <job>-->
<!--            <name>ja_gd_patrol_task_sync</name>-->
<!--            <cron>0/10 * * * * ?</cron>-->
<!--            <srcSql>SELECT * from ja_gd_patrol_task</srcSql>-->
<!--            <destTable>ja_gd_patrol_task</destTable>-->
<!--            <destTableFields>id,work_order_id,task_no,patrol_task_name,patrol_task_type,execute_time,airline_id,patrol_route_url,recommend_flyer_name,device_id,task_desc,reject_reason,task_status,area_code,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableFields>-->
<!--            <destTableKey>id</destTableKey>-->
<!--            <destTableUpdate>work_order_id,task_no,patrol_task_name,patrol_task_type,execute_time,airline_id,patrol_route_url,recommend_flyer_name,device_id,task_desc,reject_reason,task_status,area_code,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableUpdate>-->
<!--        </job>-->
<!--        <job>-->
<!--            <name>ja_gd_supply_demand_sync</name>-->
<!--            <cron>0/10 * * * * ?</cron>-->
<!--            <srcSql>SELECT * from ja_gd_supply_demand</srcSql>-->
<!--            <destTable>ja_gd_supply_demand</destTable>-->
<!--            <destTableFields>id,demand_name,demand_type,contact_person,contact_phone,contact_email,demand_status,update_cycle,apply_basis,share_type,application_scene,responsible_dept_id,apply_target_dept_id,data_source,demand_info,area_code,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableFields>-->
<!--            <destTableKey>id</destTableKey>-->
<!--            <destTableUpdate>demand_name,demand_type,contact_person,contact_phone,contact_email,demand_status,update_cycle,apply_basis,share_type,application_scene,responsible_dept_id,apply_target_dept_id,data_source,demand_info,area_code,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableUpdate>-->
<!--        </job>-->
<!--        <job>-->
<!--            <name>ja_gd_supply_demand_audit_sync</name>-->
<!--            <cron>0/10 * * * * ?</cron>-->
<!--            <srcSql>SELECT * from ja_gd_supply_demand_audit</srcSql>-->
<!--            <destTable>ja_gd_supply_demand_audit</destTable>-->
<!--            <destTableFields>id,demand_id,audit_status,audit_opinion,area_code,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableFields>-->
<!--            <destTableKey>id</destTableKey>-->
<!--            <destTableUpdate>demand_id,audit_status,audit_opinion,area_code,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableUpdate>-->
<!--        </job>-->
<!--        <job>-->
<!--            <name>ja_gd_supply_demand_audit_attachment_sync</name>-->
<!--            <cron>0/10 * * * * ?</cron>-->
<!--            <srcSql>SELECT * from ja_gd_supply_demand_audit_attachment</srcSql>-->
<!--            <destTable>ja_gd_supply_demand_audit_attachment</destTable>-->
<!--            <destTableFields>id,demand_id,attach_id,area_code,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableFields>-->
<!--            <destTableKey>id</destTableKey>-->
<!--            <destTableUpdate>demand_id,attach_id,area_code,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableUpdate>-->
<!--        </job>-->
<!--        <job>-->
<!--            <name>ja_gd_task_result_sync</name>-->
<!--            <cron>0/10 * * * * ?</cron>-->
<!--            <srcSql>SELECT * from ja_gd_task_result</srcSql>-->
<!--            <destTable>ja_gd_task_result</destTable>-->
<!--            <destTableFields>id,patrol_task_id,result_code,result_url,shoot_time,photo_data,longitude,latitude,distribute_status,area_code,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableFields>-->
<!--            <destTableKey>id</destTableKey>-->
<!--            <destTableUpdate>patrol_task_id,result_code,result_url,shoot_time,photo_data,longitude,latitude,distribute_status,area_code,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableUpdate>-->
<!--        </job>-->
<!--        <job>-->
<!--            <name>ja_gd_thing_list_material_rel_sync</name>-->
<!--            <cron>0/10 * * * * ?</cron>-->
<!--            <srcSql>SELECT * from ja_gd_thing_list_material_rel</srcSql>-->
<!--            <destTable>ja_gd_thing_list_material_rel</destTable>-->
<!--            <destTableFields>id,implement_list_id,material_id,sort,scenario_config,status,create_user,create_dept,create_time,update_user,update_time,is_deleted</destTableFields>-->
<!--            <destTableKey>id</destTableKey>-->
<!--            <destTableUpdate>implement_list_id,material_id,sort,scenario_config,status,create_user,create_dept,create_time,update_user,update_time,is_deleted</destTableUpdate>-->
<!--        </job>-->
<!--        <job>-->
<!--            <name>ja_gd_work_order_sync</name>-->
<!--            <cron>0/10 * * * * ?</cron>-->
<!--            <srcSql>SELECT * from ja_gd_work_order</srcSql>-->
<!--            <destTable>ja_gd_work_order</destTable>-->
<!--            <destTableFields>id,work_order_name,work_order_code,work_order_type,device_load_demand,recommend_device_ids,work_order_status,execute_start_time,execute_end_time,service_party,geom,remark,reject_reason,full_snapshot,area_code,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableFields>-->
<!--            <destTableKey>id</destTableKey>-->
<!--            <destTableUpdate>work_order_name,work_order_code,work_order_type,device_load_demand,recommend_device_ids,work_order_status,execute_start_time,execute_end_time,service_party,geom,remark,reject_reason,full_snapshot,area_code,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableUpdate>-->
<!--        </job>-->
<!--        <job>-->
<!--            <name>ja_gd_work_order_flow_sync</name>-->
<!--            <cron>0/10 * * * * ?</cron>-->
<!--            <srcSql>SELECT * from ja_gd_work_order_flow</srcSql>-->
<!--            <destTable>ja_gd_work_order_flow</destTable>-->
<!--            <destTableFields>id,flow_name,flow_status,flow_desc,work_order_id,work_status,operator,type,area_code,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableFields>-->
<!--            <destTableKey>id</destTableKey>-->
<!--            <destTableUpdate>flow_name,flow_status,flow_desc,work_order_id,work_status,operator,type,area_code,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableUpdate>-->
<!--        </job>-->
<!--        <job>-->
<!--            <name>ja_log_operation_log_sync</name>-->
<!--            <cron>0/10 * * * * ?</cron>-->
<!--            <srcSql>SELECT * from ja_log_operation_log</srcSql>-->
<!--            <destTable>ja_log_operation_log</destTable>-->
<!--            <destTableFields>id,tenant_id,service_id,server_host,server_ip,env,type,title,method,request_uri,user_agent,remote_ip,method_class,method_name,params,create_by,create_time</destTableFields>-->
<!--            <destTableKey>id</destTableKey>-->
<!--            <destTableUpdate>tenant_id,service_id,server_host,server_ip,env,type,title,method,request_uri,user_agent,remote_ip,method_class,method_name,params,create_by,create_time</destTableUpdate>-->
<!--        </job>-->
<!--        <job>-->
<!--            <name>manage_device_per_share_sync</name>-->
<!--            <cron>0/10 * * * * ?</cron>-->
<!--            <srcSql>SELECT * from manage_device_per_share</srcSql>-->
<!--            <destTable>manage_device_per_share</destTable>-->
<!--            <destTableFields>id,device_sn,loan_from_dept_id,loan_to_dept_id,device_per_menu_id,create_user,create_time</destTableFields>-->
<!--            <destTableKey>id</destTableKey>-->
<!--            <destTableUpdate>device_sn,loan_from_dept_id,loan_to_dept_id,device_per_menu_id,create_user,create_time</destTableUpdate>-->
<!--        </job>-->
<!--        <job>-->
<!--            <name>sys_config_sync</name>-->
<!--            <cron>0/10 * * * * ?</cron>-->
<!--            <srcSql>SELECT * from sys_config</srcSql>-->
<!--            <destTable>sys_config</destTable>-->
<!--            <destTableFields>id,name,dept_id,create_time,update_time,remark,is_deleted</destTableFields>-->
<!--            <destTableKey>id</destTableKey>-->
<!--            <destTableUpdate>name,dept_id,create_time,update_time,remark,is_deleted</destTableUpdate>-->
<!--        </job>-->
    </jobs>
</root>
jobs1111.xml
New file
@@ -0,0 +1,351 @@
<?xml version="1.0" encoding="UTF-8"?>
<root>
    <code>4500000001</code>
    <source>
        <url>jdbc:mysql://139.196.74.78:3308/jagzw_test</url>
        <username>root</username>
        <password>jxpskj_2018</password>
        <dbtype>mysql</dbtype>
        <driver>com.mysql.cj.jdbc.Driver</driver>
    </source>
    <dest>
        <url>jdbc:postgresql://139.196.74.78:5433/jagzw_test?currentSchema=jagzw</url>
        <username>gaussdb</username>
        <password>Ztzf@81f4</password>
        <dbtype>postgresql</dbtype>
        <driver>org.postgresql.Driver</driver>
    </dest>
    <jobs>
<!--        <job>-->
<!--            &lt;!&ndash; job的名称,每一个job的名称最好不一样 &ndash;&gt;-->
<!--            <name>blade_attach_sync</name>-->
<!--            &lt;!&ndash; 定时调度cron表达式 &ndash;&gt;-->
<!--            <cron>0/10 * * * * ?</cron>-->
<!--            &lt;!&ndash; 源数据库的查询语句 &ndash;&gt;-->
<!--            <srcSql>SELECT * from blade_attach</srcSql>-->
<!--            &lt;!&ndash; 目标数据库的数据表 &ndash;&gt;-->
<!--            <destTable>blade_attach</destTable>-->
<!--            &lt;!&ndash; 目标数据库数据表的字段,必须和源数据库中查询语句的字段保持一致 &ndash;&gt;-->
<!--            <destTableFields>id,tenant_id,link,domain_url,name,nick_name,original_name,extension,attach_size,patrol_task_id,result_type,device_sn,workspace_id,metadata,drone_data,remark,md5,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableFields>-->
<!--            &lt;!&ndash; 根据此字段判断同步的数据是否在目标数据库总存在 &ndash;&gt;-->
<!--            <destTableKey>id</destTableKey>-->
<!--            &lt;!&ndash; 如果目标数据库中存在destTableKey标签字段相同的数据,则更新此字段 &ndash;&gt;-->
<!--            <destTableUpdate>tenant_id,link,domain_url,name,nick_name,original_name,extension,attach_size,patrol_task_id,result_type,device_sn,workspace_id,metadata,drone_data,remark,md5,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableUpdate>-->
<!--        </job>-->
<!--        <job>-->
<!--            <name>blade_dept_sync</name>-->
<!--            <cron>0/10 * * * * ?</cron>-->
<!--            <srcSql>SELECT * from blade_dept</srcSql>-->
<!--            <destTable>blade_dept</destTable>-->
<!--            <destTableFields>id,dept_code,tenant_id,parent_id,ancestors,dept_category,dept_name,full_name,sort,remark,dept_nature,bing_id,bind_code,deployment_mode,area_code,status,is_deleted,create_time,update_time</destTableFields>-->
<!--            <destTableKey>id</destTableKey>-->
<!--            <destTableUpdate>dept_code,tenant_id,parent_id,ancestors,dept_category,dept_name,full_name,sort,remark,dept_nature,bing_id,bind_code,deployment_mode,area_code,status,is_deleted,create_time,update_time</destTableUpdate>-->
<!--        </job>-->
<!--        <job>-->
<!--            <name>blade_dict_sync</name>-->
<!--            <cron>0/10 * * * * ?</cron>-->
<!--            <srcSql>SELECT * from blade_dict</srcSql>-->
<!--            <destTable>blade_dict</destTable>-->
<!--            <destTableFields>id,parent_id,code,dict_key,dict_value,sort,remark,is_sealed,is_deleted</destTableFields>-->
<!--            <destTableKey>id</destTableKey>-->
<!--            <destTableUpdate>parent_id,code,dict_key,dict_value,sort,remark,is_sealed,is_deleted</destTableUpdate>-->
<!--        </job>-->
<!--        <job>-->
<!--            <name>blade_dict_biz_sync</name>-->
<!--            <cron>0/10 * * * * ?</cron>-->
<!--            <srcSql>SELECT * from blade_dict_biz</srcSql>-->
<!--            <destTable>blade_dict_biz</destTable>-->
<!--            <destTableFields>id,tenant_id,parent_id,code,dict_key,dict_value,sort,remark,is_sealed,is_deleted</destTableFields>-->
<!--            <destTableKey>id</destTableKey>-->
<!--            <destTableUpdate>tenant_id,parent_id,code,dict_key,dict_value,sort,remark,is_sealed,is_deleted</destTableUpdate>-->
<!--        </job>-->
<!--        <job>-->
<!--            <name>blade_job_info_sync</name>-->
<!--            <cron>0/10 * * * * ?</cron>-->
<!--            <srcSql>SELECT * from blade_job_info</srcSql>-->
<!--            <destTable>blade_job_info</destTable>-->
<!--            <destTableFields>id,job_server_id,job_id,job_name,job_description,job_params,time_expression_type,time_expression,execute_type,processor_type,processor_info,max_instance_num,concurrency,instance_time_limit,instance_retry_num,task_retry_num,min_cpu_cores,min_memory_space,min_disk_space,designated_workers,max_worker_count,notify_user_ids,enable,dispatch_strategy,lifecycle,alert_threshold,statistic_window_len,silence_window_len,log_type,log_level,extra,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableFields>-->
<!--            <destTableKey>id</destTableKey>-->
<!--            <destTableUpdate>job_server_id,job_id,job_name,job_description,job_params,time_expression_type,time_expression,execute_type,processor_type,processor_info,max_instance_num,concurrency,instance_time_limit,instance_retry_num,task_retry_num,min_cpu_cores,min_memory_space,min_disk_space,designated_workers,max_worker_count,notify_user_ids,enable,dispatch_strategy,lifecycle,alert_threshold,statistic_window_len,silence_window_len,log_type,log_level,extra,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableUpdate>-->
<!--        </job>-->
<!--        <job>-->
<!--            <name>blade_job_server_sync</name>-->
<!--            <cron>0/10 * * * * ?</cron>-->
<!--            <srcSql>SELECT * from blade_job_server</srcSql>-->
<!--            <destTable>blade_job_server</destTable>-->
<!--            <destTableFields>id,job_server_name,job_server_url,job_app_name,job_app_password,job_remark,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableFields>-->
<!--            <destTableKey>id</destTableKey>-->
<!--            <destTableUpdate>job_server_name,job_server_url,job_app_name,job_app_password,job_remark,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableUpdate>-->
<!--        </job>-->
<!--        <job>-->
<!--            <name>blade_log_api_sync</name>-->
<!--            <cron>0/10 * * * * ?</cron>-->
<!--            <srcSql>SELECT * from blade_log_api</srcSql>-->
<!--            <destTable>blade_log_api</destTable>-->
<!--            <destTableFields>id,tenant_id,service_id,server_host,server_ip,env,type,title,method,request_uri,user_agent,remote_ip,method_class,method_name,params,time,create_by,create_time</destTableFields>-->
<!--            <destTableKey>id</destTableKey>-->
<!--            <destTableUpdate>tenant_id,service_id,server_host,server_ip,env,type,title,method,request_uri,user_agent,remote_ip,method_class,method_name,params,time,create_by,create_time</destTableUpdate>-->
<!--        </job>-->
<!--        <job>-->
<!--            <name>blade_log_error_sync</name>-->
<!--            <cron>0/10 * * * * ?</cron>-->
<!--            <srcSql>SELECT * from blade_log_error</srcSql>-->
<!--            <destTable>blade_log_error</destTable>-->
<!--            <destTableFields>id,tenant_id,service_id,server_host,server_ip,env,method,request_uri,user_agent,stack_trace,exception_name,message,line_number,remote_ip,method_class,file_name,method_name,params,create_by,create_time</destTableFields>-->
<!--            <destTableKey>id</destTableKey>-->
<!--            <destTableUpdate>tenant_id,service_id,server_host,server_ip,env,method,request_uri,user_agent,stack_trace,exception_name,message,line_number,remote_ip,method_class,file_name,method_name,params,create_by,create_time</destTableUpdate>-->
<!--        </job>-->
<!--        <job>-->
<!--            <name>blade_log_usual_sync</name>-->
<!--            <cron>0/10 * * * * ?</cron>-->
<!--            <srcSql>SELECT * from blade_log_usual</srcSql>-->
<!--            <destTable>blade_log_usual</destTable>-->
<!--            <destTableFields>id,tenant_id,service_id,server_host,server_ip,env,log_level,log_id,log_data,method,request_uri,remote_ip,method_class,method_name,user_agent,params,create_by,create_time</destTableFields>-->
<!--            <destTableKey>id</destTableKey>-->
<!--            <destTableUpdate>tenant_id,service_id,server_host,server_ip,env,log_level,log_id,log_data,method,request_uri,remote_ip,method_class,method_name,user_agent,params,create_by,create_time</destTableUpdate>-->
<!--        </job>-->
<!--        <job>-->
<!--            <name>blade_menu_sync</name>-->
<!--            <cron>0/10 * * * * ?</cron>-->
<!--            <srcSql>SELECT * from blade_menu</srcSql>-->
<!--            <destTable>blade_menu</destTable>-->
<!--            <destTableFields>id,parent_id,code,name,alias,path,source,sort,category,sys_type,action,is_open,is_device,component,remark,is_deleted</destTableFields>-->
<!--            <destTableKey>id</destTableKey>-->
<!--            <destTableUpdate>parent_id,code,name,alias,path,source,sort,category,sys_type,action,is_open,is_device,component,remark,is_deleted</destTableUpdate>-->
<!--        </job>-->
<!--        <job>-->
<!--            <name>blade_model_sync</name>-->
<!--            <cron>0/10 * * * * ?</cron>-->
<!--            <srcSql>SELECT * from blade_model</srcSql>-->
<!--            <destTable>blade_model</destTable>-->
<!--            <destTableFields>id,datasource_id,model_name,model_code,model_table,model_class,model_remark,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableFields>-->
<!--            <destTableKey>id</destTableKey>-->
<!--            <destTableUpdate>datasource_id,model_name,model_code,model_table,model_class,model_remark,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableUpdate>-->
<!--        </job>-->
<!--        <job>-->
<!--            <name>blade_model_prototype_sync</name>-->
<!--            <cron>0/10 * * * * ?</cron>-->
<!--            <srcSql>SELECT * from blade_model_prototype</srcSql>-->
<!--            <destTable>blade_model_prototype</destTable>-->
<!--            <destTableFields>id,model_id,jdbc_name,jdbc_type,jdbc_comment,property_type,property_entity,property_name,is_list,is_form,is_row,component_type,dict_code,is_required,is_query,query_type,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableFields>-->
<!--            <destTableKey>id</destTableKey>-->
<!--            <destTableUpdate>model_id,jdbc_name,jdbc_type,jdbc_comment,property_type,property_entity,property_name,is_list,is_form,is_row,component_type,dict_code,is_required,is_query,query_type,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableUpdate>-->
<!--        </job>-->
<!--        <job>-->
<!--            <name>blade_notice_sync</name>-->
<!--            <cron>0/10 * * * * ?</cron>-->
<!--            <srcSql>SELECT * from blade_notice</srcSql>-->
<!--            <destTable>blade_notice</destTable>-->
<!--            <destTableFields>id,tenant_id,title,category,release_time,content,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableFields>-->
<!--            <destTableKey>id</destTableKey>-->
<!--            <destTableUpdate>tenant_id,title,category,release_time,content,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableUpdate>-->
<!--        </job>-->
<!--        <job>-->
<!--            <name>blade_oss_sync</name>-->
<!--            <cron>0/10 * * * * ?</cron>-->
<!--            <srcSql>SELECT * from blade_oss</srcSql>-->
<!--            <destTable>blade_oss</destTable>-->
<!--            <destTableFields>id,tenant_id,category,oss_code,endpoint,transform_endpoint,access_key,secret_key,bucket_name,app_id,region,remark,is_def,expire,object_dir_prefix,name,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableFields>-->
<!--            <destTableKey>id</destTableKey>-->
<!--            <destTableUpdate>tenant_id,category,oss_code,endpoint,transform_endpoint,access_key,secret_key,bucket_name,app_id,region,remark,is_def,expire,object_dir_prefix,name,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableUpdate>-->
<!--        </job>-->
<!--        <job>-->
<!--            <name>blade_param_sync</name>-->
<!--            <cron>0/10 * * * * ?</cron>-->
<!--            <srcSql>SELECT * from blade_param</srcSql>-->
<!--            <destTable>blade_param</destTable>-->
<!--            <destTableFields>id,param_name,param_key,param_value,remark,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableFields>-->
<!--            <destTableKey>id</destTableKey>-->
<!--            <destTableUpdate>param_name,param_key,param_value,remark,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableUpdate>-->
<!--        </job>-->
<!--        <job>-->
<!--            <name>blade_post_sync</name>-->
<!--            <cron>0/10 * * * * ?</cron>-->
<!--            <srcSql>SELECT * from blade_post</srcSql>-->
<!--            <destTable>blade_post</destTable>-->
<!--            <destTableFields>id,tenant_id,category,post_code,post_name,sort,remark,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableFields>-->
<!--            <destTableKey>id</destTableKey>-->
<!--            <destTableUpdate>tenant_id,category,post_code,post_name,sort,remark,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableUpdate>-->
<!--        </job>-->
<!--        <job>-->
<!--            <name>blade_process_leave_sync</name>-->
<!--            <cron>0/10 * * * * ?</cron>-->
<!--            <srcSql>SELECT * from blade_process_leave</srcSql>-->
<!--            <destTable>blade_process_leave</destTable>-->
<!--            <destTableFields>id,process_definition_id,process_instance_id,start_time,end_time,reason,task_user,apply_time,attach_url,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableFields>-->
<!--            <destTableKey>id</destTableKey>-->
<!--            <destTableUpdate>process_definition_id,process_instance_id,start_time,end_time,reason,task_user,apply_time,attach_url,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableUpdate>-->
<!--        </job>-->
        <job>
            <name>blade_region_sync</name>
<!--            <cron>0 * * 5 * 2026</cron>-->
            <srcSql>SELECT * from blade_region limit 0,1</srcSql>
            <destTable>blade_region</destTable>
            <destTableFields>id,code,parent_code,ancestors,name,province_code,province_name,city_code,city_name,district_code,district_name,town_code,town_name,village_code,village_name,region_level,type,sort,remark,status,create_time,update_time</destTableFields>
            <destTableKey>id</destTableKey>
            <destTableUpdate>code,parent_code,ancestors,name,province_code,province_name,city_code,city_name,district_code,district_name,town_code,town_name,village_code,village_name,region_level,type,sort,remark,status,create_time,update_time</destTableUpdate>
        </job>
<!--        <job>-->
<!--            <name>blade_report_file_sync</name>-->
<!--            <cron>0/10 * * * * ?</cron>-->
<!--            <srcSql>SELECT * from blade_report_file</srcSql>-->
<!--            <destTable>blade_report_file</destTable>-->
<!--            <destTableFields>id,name,content,create_time,update_time,is_deleted</destTableFields>-->
<!--            <destTableKey>id</destTableKey>-->
<!--            <destTableUpdate>name,content,create_time,update_time,is_deleted</destTableUpdate>-->
<!--        </job>-->
<!--        <job>-->
<!--            <name>blade_role_sync</name>-->
<!--            <cron>0/10 * * * * ?</cron>-->
<!--            <srcSql>SELECT * from blade_role</srcSql>-->
<!--            <destTable>blade_role</destTable>-->
<!--            <destTableFields>id,tenant_id,parent_id,role_name,sort,role_alias,is_deleted</destTableFields>-->
<!--            <destTableKey>id</destTableKey>-->
<!--            <destTableUpdate>tenant_id,parent_id,role_name,sort,role_alias,is_deleted</destTableUpdate>-->
<!--        </job>-->
<!--        <job>-->
<!--            <name>blade_role_menu_sync</name>-->
<!--            <cron>0/10 * * * * ?</cron>-->
<!--            <srcSql>SELECT * from blade_role_menu</srcSql>-->
<!--            <destTable>blade_role_menu</destTable>-->
<!--            <destTableFields>id,menu_id,role_id</destTableFields>-->
<!--            <destTableKey>id</destTableKey>-->
<!--            <destTableUpdate>menu_id,role_id</destTableUpdate>-->
<!--        </job>-->
<!--        <job>-->
<!--            <name>blade_role_scope_sync</name>-->
<!--            <cron>0/10 * * * * ?</cron>-->
<!--            <srcSql>SELECT * from blade_role_scope</srcSql>-->
<!--            <destTable>blade_role_scope</destTable>-->
<!--            <destTableFields>id,scope_category,scope_id,role_id</destTableFields>-->
<!--            <destTableKey>id</destTableKey>-->
<!--            <destTableUpdate>scope_category,scope_id,role_id</destTableUpdate>-->
<!--        </job>-->
<!--        <job>-->
<!--            <name>blade_scope_api_sync</name>-->
<!--            <cron>0/10 * * * * ?</cron>-->
<!--            <srcSql>SELECT * from blade_scope_api</srcSql>-->
<!--            <destTable>blade_scope_api</destTable>-->
<!--            <destTableFields>id,menu_id,resource_code,scope_name,scope_path,scope_type,remark,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableFields>-->
<!--            <destTableKey>id</destTableKey>-->
<!--            <destTableUpdate>menu_id,resource_code,scope_name,scope_path,scope_type,remark,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableUpdate>-->
<!--        </job>-->
<!--        <job>-->
<!--            <name>blade_scope_data_sync</name>-->
<!--            <cron>0/10 * * * * ?</cron>-->
<!--            <srcSql>SELECT * from blade_scope_data</srcSql>-->
<!--            <destTable>blade_scope_data</destTable>-->
<!--            <destTableFields>id,menu_id,resource_code,scope_name,scope_field,scope_class,scope_column,scope_type,scope_value,remark,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableFields>-->
<!--            <destTableKey>id</destTableKey>-->
<!--            <destTableUpdate>menu_id,resource_code,scope_name,scope_field,scope_class,scope_column,scope_type,scope_value,remark,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableUpdate>-->
<!--        </job>-->
<!--        <job>-->
<!--            <name>blade_sms_sync</name>-->
<!--            <cron>0/10 * * * * ?</cron>-->
<!--            <srcSql>SELECT * from blade_sms</srcSql>-->
<!--            <destTable>blade_sms</destTable>-->
<!--            <destTableFields>id,tenant_id,category,sms_code,template_id,access_key,secret_key,region_id,sign_name,remark,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableFields>-->
<!--            <destTableKey>id</destTableKey>-->
<!--            <destTableUpdate>tenant_id,category,sms_code,template_id,access_key,secret_key,region_id,sign_name,remark,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableUpdate>-->
<!--        </job>-->
<!--        <job>-->
<!--            <name>blade_tenant_sync</name>-->
<!--            <cron>0/10 * * * * ?</cron>-->
<!--            <srcSql>SELECT * from blade_tenant</srcSql>-->
<!--            <destTable>blade_tenant</destTable>-->
<!--            <destTableFields>id,tenant_id,tenant_name,domain_url,background_url,linkman,contact_number,address,account_number,expire_time,package_id,datasource_id,license_key,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableFields>-->
<!--            <destTableKey>id</destTableKey>-->
<!--            <destTableUpdate>tenant_id,tenant_name,domain_url,background_url,linkman,contact_number,address,account_number,expire_time,package_id,datasource_id,license_key,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableUpdate>-->
<!--        </job>-->
<!--        <job>-->
<!--            <name>blade_tenant_package_sync</name>-->
<!--            <cron>0/10 * * * * ?</cron>-->
<!--            <srcSql>SELECT * from blade_tenant_package</srcSql>-->
<!--            <destTable>blade_tenant_package</destTable>-->
<!--            <destTableFields>id,package_name,menu_id,remark,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableFields>-->
<!--            <destTableKey>id</destTableKey>-->
<!--            <destTableUpdate>package_name,menu_id,remark,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableUpdate>-->
<!--        </job>-->
<!--        <job>-->
<!--            <name>blade_top_menu_sync</name>-->
<!--            <cron>0/10 * * * * ?</cron>-->
<!--            <srcSql>SELECT * from blade_top_menu</srcSql>-->
<!--            <destTable>blade_top_menu</destTable>-->
<!--            <destTableFields>id,tenant_id,code,name,source,sort,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableFields>-->
<!--            <destTableKey>id</destTableKey>-->
<!--            <destTableUpdate>tenant_id,code,name,source,sort,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableUpdate>-->
<!--        </job>-->
<!--        <job>-->
<!--            <name>blade_top_menu_setting_sync</name>-->
<!--            <cron>0/10 * * * * ?</cron>-->
<!--            <srcSql>SELECT * from blade_top_menu_setting</srcSql>-->
<!--            <destTable>blade_top_menu_setting</destTable>-->
<!--            <destTableFields>id,top_menu_id,menu_id</destTableFields>-->
<!--            <destTableKey>id</destTableKey>-->
<!--            <destTableUpdate>top_menu_id,menu_id</destTableUpdate>-->
<!--        </job>-->
<!--        <job>-->
<!--            <name>blade_user_sync</name>-->
<!--            <cron>0/10 * * * * ?</cron>-->
<!--            <srcSql>SELECT * from blade_user</srcSql>-->
<!--            <destTable>blade_user</destTable>-->
<!--            <destTableFields>id,tenant_id,code,user_type,account,password,name,real_name,avatar,email,phone,birthday,sex,role_id,dept_id,post_id,flight_start_time,flight_end_time,max_login_num,expire_time,create_user,create_dept,create_time,update_user,update_time,status,is_deleted,area_code</destTableFields>-->
<!--            <destTableKey>id</destTableKey>-->
<!--            <destTableUpdate>tenant_id,code,user_type,account,password,name,real_name,avatar,email,phone,birthday,sex,role_id,dept_id,post_id,flight_start_time,flight_end_time,max_login_num,expire_time,create_user,create_dept,create_time,update_user,update_time,status,is_deleted,area_code</destTableUpdate>-->
<!--        </job>-->
<!--        <job>-->
<!--            <name>blade_user_app_sync</name>-->
<!--            <cron>0/10 * * * * ?</cron>-->
<!--            <srcSql>SELECT * from blade_user_app</srcSql>-->
<!--            <destTable>blade_user_app</destTable>-->
<!--            <destTableFields>id,user_id,user_ext</destTableFields>-->
<!--            <destTableKey>id</destTableKey>-->
<!--            <destTableUpdate>user_id,user_ext</destTableUpdate>-->
<!--        </job>-->
<!--        <job>-->
<!--            <name>blade_user_dept_sync</name>-->
<!--            <cron>0/10 * * * * ?</cron>-->
<!--            <srcSql>SELECT * from blade_user_dept</srcSql>-->
<!--            <destTable>blade_user_dept</destTable>-->
<!--            <destTableFields>id,user_id,dept_id</destTableFields>-->
<!--            <destTableKey>id</destTableKey>-->
<!--            <destTableUpdate>user_id,dept_id</destTableUpdate>-->
<!--        </job>-->
<!--        <job>-->
<!--            <name>blade_user_oauth_sync</name>-->
<!--            <cron>0/10 * * * * ?</cron>-->
<!--            <srcSql>SELECT * from blade_user_oauth</srcSql>-->
<!--            <destTable>blade_user_oauth</destTable>-->
<!--            <destTableFields>id,tenant_id,uuid,user_id,username,nickname,avatar,blog,company,location,email,remark,gender,source</destTableFields>-->
<!--            <destTableKey>id</destTableKey>-->
<!--            <destTableUpdate>tenant_id,uuid,user_id,username,nickname,avatar,blog,company,location,email,remark,gender,source</destTableUpdate>-->
<!--        </job>-->
<!--        <job>-->
<!--            <name>blade_user_other_sync</name>-->
<!--            <cron>0/10 * * * * ?</cron>-->
<!--            <srcSql>SELECT * from blade_user_other</srcSql>-->
<!--            <destTable>blade_user_other</destTable>-->
<!--            <destTableFields>id,user_id,user_ext</destTableFields>-->
<!--            <destTableKey>id</destTableKey>-->
<!--            <destTableUpdate>user_id,user_ext</destTableUpdate>-->
<!--        </job>-->
<!--        <job>-->
<!--            <name>blade_user_web_sync</name>-->
<!--            <cron>0/10 * * * * ?</cron>-->
<!--            <srcSql>SELECT * from blade_user_web</srcSql>-->
<!--            <destTable>blade_user_web</destTable>-->
<!--            <destTableFields>id,user_id,user_ext</destTableFields>-->
<!--            <destTableKey>id</destTableKey>-->
<!--            <destTableUpdate>user_id,user_ext</destTableUpdate>-->
<!--        </job>-->
<!--        <job>-->
<!--            <name>help_center_sync</name>-->
<!--            <cron>0/10 * * * * ?</cron>-->
<!--            <srcSql>SELECT * from help_center</srcSql>-->
<!--            <destTable>help_center</destTable>-->
<!--            <destTableFields>id,level_one_type,level_two_type,upload_user,create_time,file_path</destTableFields>-->
<!--            <destTableKey>id</destTableKey>-->
<!--            <destTableUpdate>level_one_type,level_two_type,upload_user,create_time,file_path</destTableUpdate>-->
<!--        </job>-->
    </jobs>
</root>
jobs20260209.xml
New file
@@ -0,0 +1,423 @@
<?xml version="1.0" encoding="UTF-8"?>
<root>
    <code>4500000001</code>
    <source>
        <url>jdbc:mysql://139.196.74.78:3308/jagzw_test</url>
        <username>root</username>
        <password>jxpskj_2018</password>
        <dbtype>mysql</dbtype>
        <driver>com.mysql.cj.jdbc.Driver</driver>
    </source>
    <dest>
        <url>jdbc:postgresql://139.196.74.78:5433/jagzw_test?currentSchema=jagzw</url>
        <username>gaussdb</username>
        <password>Ztzf@81f4</password>
        <dbtype>postgresql</dbtype>
        <driver>org.postgresql.Driver</driver>
    </dest>
    <jobs>
<!--        <job>-->
<!--            &lt;!&ndash; job的名称,每一个job的名称最好不一样 &ndash;&gt;-->
<!--            <name>blade_attach_sync</name>-->
<!--            &lt;!&ndash; 定时调度cron表达式 &ndash;&gt;-->
<!--            <cron>0/10 * * * * ?</cron>-->
<!--            &lt;!&ndash; 源数据库的查询语句 &ndash;&gt;-->
<!--            <srcSql>SELECT * from blade_attach</srcSql>-->
<!--            &lt;!&ndash; 目标数据库的数据表 &ndash;&gt;-->
<!--            <destTable>blade_attach</destTable>-->
<!--            &lt;!&ndash; 目标数据库数据表的字段,必须和源数据库中查询语句的字段保持一致 &ndash;&gt;-->
<!--            <destTableFields>id,tenant_id,link,domain_url,name,nick_name,original_name,extension,attach_size,patrol_task_id,result_type,device_sn,workspace_id,metadata,drone_data,remark,md5,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableFields>-->
<!--            &lt;!&ndash; 根据此字段判断同步的数据是否在目标数据库总存在 &ndash;&gt;-->
<!--            <destTableKey>id</destTableKey>-->
<!--            &lt;!&ndash; 如果目标数据库中存在destTableKey标签字段相同的数据,则更新此字段 &ndash;&gt;-->
<!--            <destTableUpdate>tenant_id,link,domain_url,name,nick_name,original_name,extension,attach_size,patrol_task_id,result_type,device_sn,workspace_id,metadata,drone_data,remark,md5,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableUpdate>-->
<!--        </job>-->
<!--        <job>-->
<!--            <name>blade_dept_sync</name>-->
<!--            <cron>0/10 * * * * ?</cron>-->
<!--            <srcSql>SELECT * from blade_dept</srcSql>-->
<!--            <destTable>blade_dept</destTable>-->
<!--            <destTableFields>id,dept_code,tenant_id,parent_id,ancestors,dept_category,dept_name,full_name,sort,remark,dept_nature,bing_id,bind_code,deployment_mode,area_code,status,is_deleted,create_time,update_time</destTableFields>-->
<!--            <destTableKey>id</destTableKey>-->
<!--            <destTableUpdate>dept_code,tenant_id,parent_id,ancestors,dept_category,dept_name,full_name,sort,remark,dept_nature,bing_id,bind_code,deployment_mode,area_code,status,is_deleted,create_time,update_time</destTableUpdate>-->
<!--        </job>-->
<!--        <job>-->
<!--            <name>blade_dict_sync</name>-->
<!--            <cron>0/10 * * * * ?</cron>-->
<!--            <srcSql>SELECT * from blade_dict</srcSql>-->
<!--            <destTable>blade_dict</destTable>-->
<!--            <destTableFields>id,parent_id,code,dict_key,dict_value,sort,remark,is_sealed,is_deleted</destTableFields>-->
<!--            <destTableKey>id</destTableKey>-->
<!--            <destTableUpdate>parent_id,code,dict_key,dict_value,sort,remark,is_sealed,is_deleted</destTableUpdate>-->
<!--        </job>-->
<!--        <job>-->
<!--            <name>blade_dict_biz_sync</name>-->
<!--            <cron>0/10 * * * * ?</cron>-->
<!--            <srcSql>SELECT * from blade_dict_biz</srcSql>-->
<!--            <destTable>blade_dict_biz</destTable>-->
<!--            <destTableFields>id,tenant_id,parent_id,code,dict_key,dict_value,sort,remark,is_sealed,is_deleted</destTableFields>-->
<!--            <destTableKey>id</destTableKey>-->
<!--            <destTableUpdate>tenant_id,parent_id,code,dict_key,dict_value,sort,remark,is_sealed,is_deleted</destTableUpdate>-->
<!--        </job>-->
<!--        <job>-->
<!--            <name>ja_fw_alarm_favorite_sync</name>-->
<!--            <cron>0/10 * * * * ?</cron>-->
<!--            <srcSql>SELECT * from ja_fw_alarm_favorite</srcSql>-->
<!--            <destTable>ja_fw_alarm_favorite</destTable>-->
<!--            <destTableFields>id,alarm_record_id,user_id,title,remark,create_time,create_user,create_dept,update_user,update_time,status,is_deleted</destTableFields>-->
<!--            <destTableKey>id</destTableKey>-->
<!--            <destTableUpdate>alarm_record_id,user_id,title,remark,create_time,create_user,create_dept,update_user,update_time,status,is_deleted</destTableUpdate>-->
<!--        </job>-->
<!--        <job>-->
<!--            <name>ja_fw_area_divide_sync</name>-->
<!--            <cron>0/10 * * * * ?</cron>-->
<!--            <srcSql>SELECT * from ja_fw_area_divide</srcSql>-->
<!--            <destTable>ja_fw_area_divide</destTable>-->
<!--            <destTableFields>id,area_name,trigger_condition,response_mechanism,control_level,police_station_id,device_ids,fly_time_start,fly_time_end,fly_date_start,fly_date_end,area_code,create_user,create_dept,create_time,update_user,update_time,status,is_deleted,area_type_keys</destTableFields>-->
<!--            <destTableKey>id</destTableKey>-->
<!--            <destTableUpdate>area_name,trigger_condition,response_mechanism,control_level,police_station_id,device_ids,fly_time_start,fly_time_end,fly_date_start,fly_date_end,area_code,create_user,create_dept,create_time,update_user,update_time,status,is_deleted,area_type_keys</destTableUpdate>-->
<!--        </job>-->
<!--        <job>-->
<!--            <name>ja_fw_area_divide_ext_sync</name>-->
<!--            <cron>0/10 * * * * ?</cron>-->
<!--            <srcSql>SELECT * from ja_fw_area_divide_ext</srcSql>-->
<!--            <destTable>ja_fw_area_divide_ext</destTable>-->
<!--            <destTableFields>id,area_divide_id,area_type_key,area_type_value,geom_json,area_code,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableFields>-->
<!--            <destTableKey>id</destTableKey>-->
<!--            <destTableUpdate>area_divide_id,area_type_key,area_type_value,geom_json,area_code,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableUpdate>-->
<!--        </job>-->
<!--        <job>-->
<!--            <name>ja_fw_defense_scene_sync</name>-->
<!--            <cron>0/10 * * * * ?</cron>-->
<!--            <srcSql>SELECT * from ja_fw_defense_scene</srcSql>-->
<!--            <destTable>ja_fw_defense_scene</destTable>-->
<!--            <destTableFields>id,scene_name,scene_type,device_mode,area_divide_ids,area_code,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableFields>-->
<!--            <destTableKey>id</destTableKey>-->
<!--            <destTableUpdate>scene_name,scene_type,device_mode,area_divide_ids,area_code,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableUpdate>-->
<!--        </job>-->
<!--        <job>-->
<!--            <name>ja_fw_defense_scene_manage_sync</name>-->
<!--            <cron>0/10 * * * * ?</cron>-->
<!--            <srcSql>SELECT * from ja_fw_defense_scene_manage</srcSql>-->
<!--            <destTable>ja_fw_defense_scene_manage</destTable>-->
<!--            <destTableFields>id,defense_scene_id,scene_name,longitude,latitude,defense_leader,leader_phone,effective_date_start,effective_date_end,area_code,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableFields>-->
<!--            <destTableKey>id</destTableKey>-->
<!--            <destTableUpdate>defense_scene_id,scene_name,longitude,latitude,defense_leader,leader_phone,effective_date_start,effective_date_end,area_code,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableUpdate>-->
<!--        </job>-->
<!--        <job>-->
<!--            <name>ja_fw_defense_zone_sync</name>-->
<!--            <cron>0/10 * * * * ?</cron>-->
<!--            <srcSql>SELECT * from ja_fw_defense_zone</srcSql>-->
<!--            <destTable>ja_fw_defense_zone</destTable>-->
<!--            <destTableFields>id,zone_name,zone_area,defense_scene_ids,area_divide_ids,device_ids,geom,area_code,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableFields>-->
<!--            <destTableKey>id</destTableKey>-->
<!--            <destTableUpdate>zone_name,zone_area,defense_scene_ids,area_divide_ids,device_ids,geom,area_code,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableUpdate>-->
<!--        </job>-->
<!--        <job>-->
<!--            <name>ja_fw_device_sync</name>-->
<!--            <cron>0/10 * * * * ?</cron>-->
<!--            <srcSql>SELECT * from ja_fw_device</srcSql>-->
<!--            <destTable>ja_fw_device</destTable>-->
<!--            <destTableFields>id,airport_id,device_sn,device_name,device_type,device_att,device_model,device_specification,manufacturer,source,purpose,belong_dept,charger,contact_phone,remark,battery_pct,azimuth,elevation,detect_target_cnt,effective_range_km,work_mode,latitude,longitude,area_code,track_status,final_outbound_area,final_outbound_area_code,is_enabled,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableFields>-->
<!--            <destTableKey>id</destTableKey>-->
<!--            <destTableUpdate>airport_id,device_sn,device_name,device_type,device_att,device_model,device_specification,manufacturer,source,purpose,belong_dept,charger,contact_phone,remark,battery_pct,azimuth,elevation,detect_target_cnt,effective_range_km,work_mode,latitude,longitude,area_code,track_status,final_outbound_area,final_outbound_area_code,is_enabled,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableUpdate>-->
<!--        </job>-->
<!--        <job>-->
<!--            <name>ja_fw_device_config_sync</name>-->
<!--            <cron>0/10 * * * * ?</cron>-->
<!--            <srcSql>SELECT * from ja_fw_device_config</srcSql>-->
<!--            <destTable>ja_fw_device_config</destTable>-->
<!--            <destTableFields>id,device_id,config_version,is_latest,config_json,area_code,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableFields>-->
<!--            <destTableKey>id</destTableKey>-->
<!--            <destTableUpdate>device_id,config_version,is_latest,config_json,area_code,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableUpdate>-->
<!--        </job>-->
<!--        <job>-->
<!--            <name>ja_fw_device_maintain_plan_sync</name>-->
<!--            <cron>0/10 * * * * ?</cron>-->
<!--            <srcSql>SELECT * from ja_fw_device_maintain_plan</srcSql>-->
<!--            <destTable>ja_fw_device_maintain_plan</destTable>-->
<!--            <destTableFields>id,device_id,plan_cycle_type,plan_cycle_value,maintain_status,last_maintain_time,area_code,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableFields>-->
<!--            <destTableKey>id</destTableKey>-->
<!--            <destTableUpdate>device_id,plan_cycle_type,plan_cycle_value,maintain_status,last_maintain_time,area_code,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableUpdate>-->
<!--        </job>-->
<!--        <job>-->
<!--            <name>ja_fw_device_maintain_record_sync</name>-->
<!--            <cron>0/10 * * * * ?</cron>-->
<!--            <srcSql>SELECT * from ja_fw_device_maintain_record</srcSql>-->
<!--            <destTable>ja_fw_device_maintain_record</destTable>-->
<!--            <destTableFields>id,device_id,plan_id,maintain_time,maintain_content,replace_part,remark,area_code,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableFields>-->
<!--            <destTableKey>id</destTableKey>-->
<!--            <destTableUpdate>device_id,plan_id,maintain_time,maintain_content,replace_part,remark,area_code,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableUpdate>-->
<!--        </job>-->
<!--        <job>-->
<!--            <name>ja_fw_device_per_share_sync</name>-->
<!--            <cron>0/10 * * * * ?</cron>-->
<!--            <srcSql>SELECT * from ja_fw_device_per_share</srcSql>-->
<!--            <destTable>ja_fw_device_per_share</destTable>-->
<!--            <destTableFields>id,device_sn,device_id,loan_from_dept_id,loan_to_dept_id,area_code,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableFields>-->
<!--            <destTableKey>id</destTableKey>-->
<!--            <destTableUpdate>device_sn,device_id,loan_from_dept_id,loan_to_dept_id,area_code,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableUpdate>-->
<!--        </job>-->
<!--        <job>-->
<!--            <name>ja_fw_device_scrap_sync</name>-->
<!--            <cron>0/10 * * * * ?</cron>-->
<!--            <srcSql>SELECT * from ja_fw_device_scrap</srcSql>-->
<!--            <destTable>ja_fw_device_scrap</destTable>-->
<!--            <destTableFields>id,device_id,scrap_time,scrap_reason,dispose_way,area_code,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableFields>-->
<!--            <destTableKey>id</destTableKey>-->
<!--            <destTableUpdate>device_id,scrap_time,scrap_reason,dispose_way,area_code,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableUpdate>-->
<!--        </job>-->
<!--        <job>-->
<!--            <name>ja_fw_device_track_sync</name>-->
<!--            <cron>0/10 * * * * ?</cron>-->
<!--            <srcSql>SELECT * from ja_fw_device_track</srcSql>-->
<!--            <destTable>ja_fw_device_track</destTable>-->
<!--            <destTableFields>id,device_id,out_time,out_target,out_target_code,purpose,charger,contact_phone,area_code,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableFields>-->
<!--            <destTableKey>id</destTableKey>-->
<!--            <destTableUpdate>device_id,out_time,out_target,out_target_code,purpose,charger,contact_phone,area_code,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableUpdate>-->
<!--        </job>-->
<!--        <job>-->
<!--            <name>ja_fw_drone_alarm_record_sync</name>-->
<!--            <cron>0/10 * * * * ?</cron>-->
<!--            <srcSql>SELECT * from ja_fw_drone_alarm_record</srcSql>-->
<!--            <destTable>ja_fw_drone_alarm_record</destTable>-->
<!--            <destTableFields>id,device_id,device_type,drone_name,device_sn,drone_serial_no,drone_type,alarm_type,alarm_time,trigger_reason,flight_status,longitude,latitude,area_name,signal_freq_mhz,flight_height_m,flight_speed_ms,stay_duration,counter_way,area_divide_id,defense_scene_id,area_code,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableFields>-->
<!--            <destTableKey>id</destTableKey>-->
<!--            <destTableUpdate>device_id,device_type,drone_name,device_sn,drone_serial_no,drone_type,alarm_type,alarm_time,trigger_reason,flight_status,longitude,latitude,area_name,signal_freq_mhz,flight_height_m,flight_speed_ms,stay_duration,counter_way,area_divide_id,defense_scene_id,area_code,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableUpdate>-->
<!--        </job>-->
<!--        <job>-->
<!--            <name>ja_fw_drone_flight_record_sync</name>-->
<!--            <cron>0/10 * * * * ?</cron>-->
<!--            <srcSql>SELECT * from ja_fw_drone_flight_record</srcSql>-->
<!--            <destTable>ja_fw_drone_flight_record</destTable>-->
<!--            <destTableFields>id,device_id,area_divide_id,device_type,drone_name,area_name,serial_no,alarm_time,trigger_type,stay_duration,area_code,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableFields>-->
<!--            <destTableKey>id</destTableKey>-->
<!--            <destTableUpdate>device_id,area_divide_id,device_type,drone_name,area_name,serial_no,alarm_time,trigger_type,stay_duration,area_code,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableUpdate>-->
<!--        </job>-->
<!--        <job>-->
<!--            <name>ja_fw_drone_flight_record_detail_sync</name>-->
<!--            <cron>0/10 * * * * ?</cron>-->
<!--            <srcSql>SELECT * from ja_fw_drone_flight_record_detail</srcSql>-->
<!--            <destTable>ja_fw_drone_flight_record_detail</destTable>-->
<!--            <destTableFields>id,flight_record_id,longitude,latitude,point_time,is_alarm,area_code,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableFields>-->
<!--            <destTableKey>id</destTableKey>-->
<!--            <destTableUpdate>flight_record_id,longitude,latitude,point_time,is_alarm,area_code,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableUpdate>-->
<!--        </job>-->
<!--        <job>-->
<!--            <name>ja_fw_effect_eval_sync</name>-->
<!--            <cron>0/10 * * * * ?</cron>-->
<!--            <srcSql>SELECT * from ja_fw_effect_eval</srcSql>-->
<!--            <destTable>ja_fw_effect_eval</destTable>-->
<!--            <destTableFields>id,alarm_record_id,counter_way,device_id,device_sn,device_name,device_model,device_type,drone_name,drone_type,drone_device_code,find_time,counter_effect,deploy_longitude,deploy_latitude,cover_radius_m,work_mode,area_code,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableFields>-->
<!--            <destTableKey>id</destTableKey>-->
<!--            <destTableUpdate>alarm_record_id,counter_way,device_id,device_sn,device_name,device_model,device_type,drone_name,drone_type,drone_device_code,find_time,counter_effect,deploy_longitude,deploy_latitude,cover_radius_m,work_mode,area_code,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableUpdate>-->
<!--        </job>-->
<!--        <job>-->
<!--            <name>ja_fw_police_station_sync</name>-->
<!--            <cron>0/10 * * * * ?</cron>-->
<!--            <srcSql>SELECT * from ja_fw_police_station</srcSql>-->
<!--            <destTable>ja_fw_police_station</destTable>-->
<!--            <destTableFields>id,station_name,address,longitude,latitude,contact_person,contact_phone,area_code,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableFields>-->
<!--            <destTableKey>id</destTableKey>-->
<!--            <destTableUpdate>station_name,address,longitude,latitude,contact_person,contact_phone,area_code,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableUpdate>-->
<!--        </job>-->
<!--        <job>-->
<!--            <name>ja_fw_task_schedule_sync</name>-->
<!--            <cron>0/10 * * * * ?</cron>-->
<!--            <srcSql>SELECT * from ja_fw_task_schedule</srcSql>-->
<!--            <destTable>ja_fw_task_schedule</destTable>-->
<!--            <destTableFields>id,device_id,area_divide_id,defense_scene_id,longitude,latitude,dispatch_user,dispatch_start_time,dispatch_end_time,dispatch_content,dispatch_result,dispose_measure,area_code,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableFields>-->
<!--            <destTableKey>id</destTableKey>-->
<!--            <destTableUpdate>device_id,area_divide_id,defense_scene_id,longitude,latitude,dispatch_user,dispatch_start_time,dispatch_end_time,dispatch_content,dispatch_result,dispose_measure,area_code,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableUpdate>-->
<!--        </job>-->
<!--        <job>-->
<!--            <name>ja_gd_application_innovation_sync</name>-->
<!--            <cron>0/10 * * * * ?</cron>-->
<!--            <srcSql>SELECT * from ja_gd_application_innovation</srcSql>-->
<!--            <destTable>ja_gd_application_innovation</destTable>-->
<!--            <destTableFields>id,case_name,belong_domain,innovation_status,application_scenario_desc,matter_name,resource_name,resource_code,case_desc,area_code,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableFields>-->
<!--            <destTableKey>id</destTableKey>-->
<!--            <destTableUpdate>case_name,belong_domain,innovation_status,application_scenario_desc,matter_name,resource_name,resource_code,case_desc,area_code,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableUpdate>-->
<!--        </job>-->
<!--        <job>-->
<!--            <name>ja_gd_clue_event_sync</name>-->
<!--            <cron>0/10 * * * * ?</cron>-->
<!--            <srcSql>SELECT * from ja_gd_clue_event</srcSql>-->
<!--            <destTable>ja_gd_clue_event</destTable>-->
<!--            <destTableFields>id,result_id,work_order_id,event_num,dispose_user,dispose_dept,longitude,latitude,event_status,area_code,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableFields>-->
<!--            <destTableKey>id</destTableKey>-->
<!--            <destTableUpdate>result_id,work_order_id,event_num,dispose_user,dispose_dept,longitude,latitude,event_status,area_code,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableUpdate>-->
<!--        </job>-->
<!--        <job>-->
<!--            <name>ja_gd_data_evaluation_sync</name>-->
<!--            <cron>0/10 * * * * ?</cron>-->
<!--            <srcSql>SELECT * from ja_gd_data_evaluation</srcSql>-->
<!--            <destTable>ja_gd_data_evaluation</destTable>-->
<!--            <destTableFields>id,title,data_name,propose_dept_id,data_provide_dept_id,score,is_resolved,evaluation_content,area_code,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableFields>-->
<!--            <destTableKey>id</destTableKey>-->
<!--            <destTableUpdate>title,data_name,propose_dept_id,data_provide_dept_id,score,is_resolved,evaluation_content,area_code,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableUpdate>-->
<!--        </job>-->
<!--        <job>-->
<!--            <name>ja_gd_data_objection_sync</name>-->
<!--            <cron>0/10 * * * * ?</cron>-->
<!--            <srcSql>SELECT * from ja_gd_data_objection where is_deleted = 0</srcSql>-->
<!--            <destTable>ja_gd_data_objection</destTable>-->
<!--            <destTableFields>id,title,objection_type,objection_status,catalog_resource_name,submitter,submitter_contact,handle_unit,objection_desc,objection_basis,other_objection_detail,review_opinion,apply_target_dept_id,area_code,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableFields>-->
<!--            <destTableKey>id</destTableKey>-->
<!--            <destTableUpdate>title,objection_type,objection_status,catalog_resource_name,submitter,submitter_contact,handle_unit,objection_desc,objection_basis,other_objection_detail,review_opinion,apply_target_dept_id,area_code,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableUpdate>-->
<!--        </job>-->
<!--        <job>-->
<!--            <name>ja_gd_data_objection_attachment_sync</name>-->
<!--            <cron>0/10 * * * * ?</cron>-->
<!--            <srcSql>SELECT * from ja_gd_data_objection_attachment</srcSql>-->
<!--            <destTable>ja_gd_data_objection_attachment</destTable>-->
<!--            <destTableFields>id,objection_id,attach_id,attach_name,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableFields>-->
<!--            <destTableKey>id</destTableKey>-->
<!--            <destTableUpdate>objection_id,attach_id,attach_name,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableUpdate>-->
<!--        </job>-->
<!--        <job>-->
<!--            <name>ja_gd_flyer_sync</name>-->
<!--            <cron>0/10 * * * * ?</cron>-->
<!--            <srcSql>SELECT * from ja_gd_flyer where is_deleted = 0</srcSql>-->
<!--            <destTable>ja_gd_flyer</destTable>-->
<!--            <destTableFields>id,flyer_id,flyer_name,flyer_phone,region_code,flight_hours,project_experience,technical_strength,skilled_uav_type,skilled_task_type,flyer_address,certification,area_code,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableFields>-->
<!--            <destTableKey>id</destTableKey>-->
<!--            <destTableUpdate>flyer_id,flyer_name,flyer_phone,region_code,flight_hours,project_experience,technical_strength,skilled_uav_type,skilled_task_type,flyer_address,certification,area_code,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableUpdate>-->
<!--        </job>-->
<!--        <job>-->
<!--            <name>ja_gd_implement_list_sync</name>-->
<!--            <cron>0/10 * * * * ?</cron>-->
<!--            <srcSql>SELECT * from ja_gd_implement_list where is_deleted = 0</srcSql>-->
<!--            <destTable>ja_gd_implement_list</destTable>-->
<!--            <destTableFields>id,matter_name,matter_code,area_code,area_name,org_code,org_name,catalog_code,implement_code,implement_name,process_definition_id,process_instance_id,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableFields>-->
<!--            <destTableKey>id</destTableKey>-->
<!--            <destTableUpdate>matter_name,matter_code,area_code,area_name,org_code,org_name,catalog_code,implement_code,implement_name,process_definition_id,process_instance_id,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableUpdate>-->
<!--        </job>-->
        <job>
            <name>ja_gd_manage_device_sync</name>
            <cron>0/10 * * * * ?</cron>
            <srcSql>SELECT id,airport_id,device_sn,child_sn,device_name,longitude,latitude,nickname,device_type,device_payload,ST_GeomFromText(geom) as geom,firmware_version,mode_code,insure_expired_time,traffic_remaining,traffic_expire_time,location,height,is_with_dock,area_code,create_user,create_dept,create_time,update_user,update_time,status,is_deleted from ja_gd_manage_device</srcSql>
            <destTable>ja_gd_manage_device</destTable>
            <destTableFields>id,airport_id,device_sn,child_sn,device_name,longitude,latitude,nickname,device_type,device_payload,geom,firmware_version,mode_code,insure_expired_time,traffic_remaining,traffic_expire_time,location,height,is_with_dock,area_code,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableFields>
            <destTableKey>id</destTableKey>
            <destTableUpdate>airport_id,device_sn,child_sn,device_name,longitude,latitude,nickname,device_type,device_payload,geom,firmware_version,mode_code,insure_expired_time,traffic_remaining,traffic_expire_time,location,height,is_with_dock,area_code,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableUpdate>
        </job>
<!--        <job>-->
<!--            <name>ja_gd_material_sync</name>-->
<!--            <cron>0/10 * * * * ?</cron>-->
<!--            <srcSql>SELECT * from ja_gd_material</srcSql>-->
<!--            <destTable>ja_gd_material</destTable>-->
<!--            <destTableFields>id,material_name,necessity,is_all_scenario,material_desc,area_code,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableFields>-->
<!--            <destTableKey>id</destTableKey>-->
<!--            <destTableUpdate>material_name,necessity,is_all_scenario,material_desc,area_code,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableUpdate>-->
<!--        </job>-->
<!--        <job>-->
<!--            <name>ja_gd_operational_revenue_sync</name>-->
<!--            <cron>0/10 * * * * ?</cron>-->
<!--            <srcSql>SELECT * from ja_gd_operational_revenue</srcSql>-->
<!--            <destTable>ja_gd_operational_revenue</destTable>-->
<!--            <destTableFields>id,operating_income,total_cost,net_profit,financial_irr,market_space,create_time,create_user,create_dept,update_time,update_user,nick_name,is_deleted,earn_forecast</destTableFields>-->
<!--            <destTableKey>id</destTableKey>-->
<!--            <destTableUpdate>operating_income,total_cost,net_profit,financial_irr,market_space,create_time,create_user,create_dept,update_time,update_user,nick_name,is_deleted,earn_forecast</destTableUpdate>-->
<!--        </job>-->
<!--        <job>-->
<!--            <name>ja_gd_patrol_task_sync</name>-->
<!--            <cron>0/10 * * * * ?</cron>-->
<!--            <srcSql>SELECT * from ja_gd_patrol_task</srcSql>-->
<!--            <destTable>ja_gd_patrol_task</destTable>-->
<!--            <destTableFields>id,work_order_id,task_no,patrol_task_name,patrol_task_type,execute_time,airline_id,patrol_route_url,recommend_flyer_name,device_id,task_desc,reject_reason,task_status,area_code,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableFields>-->
<!--            <destTableKey>id</destTableKey>-->
<!--            <destTableUpdate>work_order_id,task_no,patrol_task_name,patrol_task_type,execute_time,airline_id,patrol_route_url,recommend_flyer_name,device_id,task_desc,reject_reason,task_status,area_code,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableUpdate>-->
<!--        </job>-->
<!--        <job>-->
<!--            <name>ja_gd_supply_demand_sync</name>-->
<!--            <cron>0/10 * * * * ?</cron>-->
<!--            <srcSql>SELECT * from ja_gd_supply_demand</srcSql>-->
<!--            <destTable>ja_gd_supply_demand</destTable>-->
<!--            <destTableFields>id,demand_name,demand_type,contact_person,contact_phone,contact_email,demand_status,update_cycle,apply_basis,share_type,application_scene,responsible_dept_id,apply_target_dept_id,data_source,demand_info,area_code,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableFields>-->
<!--            <destTableKey>id</destTableKey>-->
<!--            <destTableUpdate>demand_name,demand_type,contact_person,contact_phone,contact_email,demand_status,update_cycle,apply_basis,share_type,application_scene,responsible_dept_id,apply_target_dept_id,data_source,demand_info,area_code,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableUpdate>-->
<!--        </job>-->
<!--        <job>-->
<!--            <name>ja_gd_supply_demand_audit_sync</name>-->
<!--            <cron>0/10 * * * * ?</cron>-->
<!--            <srcSql>SELECT * from ja_gd_supply_demand_audit</srcSql>-->
<!--            <destTable>ja_gd_supply_demand_audit</destTable>-->
<!--            <destTableFields>id,demand_id,audit_status,audit_opinion,area_code,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableFields>-->
<!--            <destTableKey>id</destTableKey>-->
<!--            <destTableUpdate>demand_id,audit_status,audit_opinion,area_code,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableUpdate>-->
<!--        </job>-->
<!--        <job>-->
<!--            <name>ja_gd_supply_demand_audit_attachment_sync</name>-->
<!--            <cron>0/10 * * * * ?</cron>-->
<!--            <srcSql>SELECT * from ja_gd_supply_demand_audit_attachment</srcSql>-->
<!--            <destTable>ja_gd_supply_demand_audit_attachment</destTable>-->
<!--            <destTableFields>id,demand_id,attach_id,area_code,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableFields>-->
<!--            <destTableKey>id</destTableKey>-->
<!--            <destTableUpdate>demand_id,attach_id,area_code,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableUpdate>-->
<!--        </job>-->
<!--        <job>-->
<!--            <name>ja_gd_task_result_sync</name>-->
<!--            <cron>0/10 * * * * ?</cron>-->
<!--            <srcSql>SELECT * from ja_gd_task_result</srcSql>-->
<!--            <destTable>ja_gd_task_result</destTable>-->
<!--            <destTableFields>id,patrol_task_id,result_code,result_url,shoot_time,photo_data,longitude,latitude,distribute_status,area_code,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableFields>-->
<!--            <destTableKey>id</destTableKey>-->
<!--            <destTableUpdate>patrol_task_id,result_code,result_url,shoot_time,photo_data,longitude,latitude,distribute_status,area_code,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableUpdate>-->
<!--        </job>-->
<!--        <job>-->
<!--            <name>ja_gd_thing_list_material_rel_sync</name>-->
<!--            <cron>0/10 * * * * ?</cron>-->
<!--            <srcSql>SELECT * from ja_gd_thing_list_material_rel</srcSql>-->
<!--            <destTable>ja_gd_thing_list_material_rel</destTable>-->
<!--            <destTableFields>id,implement_list_id,material_id,sort,scenario_config,status,create_user,create_dept,create_time,update_user,update_time,is_deleted</destTableFields>-->
<!--            <destTableKey>id</destTableKey>-->
<!--            <destTableUpdate>implement_list_id,material_id,sort,scenario_config,status,create_user,create_dept,create_time,update_user,update_time,is_deleted</destTableUpdate>-->
<!--        </job>-->
<!--        <job>-->
<!--            <name>ja_gd_work_order_sync</name>-->
<!--            <cron>0/10 * * * * ?</cron>-->
<!--            <srcSql>SELECT id,work_order_name,work_order_code,work_order_type,device_load_demand,recommend_device_ids,work_order_status,execute_start_time,execute_end_time,service_party,ST_AsText(geom) as geom,remark,reject_reason,full_snapshot,area_code,create_user,create_dept,create_time,update_user,update_time,status,is_deleted from ja_gd_work_order</srcSql>-->
<!--            <destTable>ja_gd_work_order</destTable>-->
<!--            <destTableFields>id,work_order_name,work_order_code,work_order_type,device_load_demand,recommend_device_ids,work_order_status,execute_start_time,execute_end_time,service_party,geom,remark,reject_reason,full_snapshot,area_code,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableFields>-->
<!--            <destTableKey>id</destTableKey>-->
<!--            <destTableUpdate>work_order_name,work_order_code,work_order_type,device_load_demand,recommend_device_ids,work_order_status,execute_start_time,execute_end_time,service_party,geom,remark,reject_reason,full_snapshot,area_code,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableUpdate>-->
<!--        </job>-->
<!--        <job>-->
<!--            <name>ja_gd_work_order_flow_sync</name>-->
<!--            <cron>0/10 * * * * ?</cron>-->
<!--            <srcSql>SELECT * from ja_gd_work_order_flow</srcSql>-->
<!--            <destTable>ja_gd_work_order_flow</destTable>-->
<!--            <destTableFields>id,flow_name,flow_status,flow_desc,work_order_id,work_status,operator,type,area_code,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableFields>-->
<!--            <destTableKey>id</destTableKey>-->
<!--            <destTableUpdate>flow_name,flow_status,flow_desc,work_order_id,work_status,operator,type,area_code,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableUpdate>-->
<!--        </job>-->
<!--        <job>-->
<!--            <name>ja_log_operation_log_sync</name>-->
<!--            <cron>0 35 16 * * ?</cron>-->
<!--            <srcSql>SELECT * from ja_log_operation_log</srcSql>-->
<!--            <destTable>ja_log_operation_log</destTable>-->
<!--            <destTableFields>id,tenant_id,service_id,server_host,server_ip,env,type,title,method,request_uri,user_agent,remote_ip,method_class,method_name,params,create_by,create_time</destTableFields>-->
<!--            <destTableKey>id</destTableKey>-->
<!--            <destTableUpdate>tenant_id,service_id,server_host,server_ip,env,type,title,method,request_uri,user_agent,remote_ip,method_class,method_name,params,create_by,create_time</destTableUpdate>-->
<!--        </job>-->
<!--        <job>-->
<!--            <name>manage_device_per_share_sync</name>-->
<!--            <cron>0/10 * * * * ?</cron>-->
<!--            <srcSql>SELECT * from manage_device_per_share</srcSql>-->
<!--            <destTable>manage_device_per_share</destTable>-->
<!--            <destTableFields>id,device_sn,loan_from_dept_id,loan_to_dept_id,device_per_menu_id,create_user,create_time</destTableFields>-->
<!--            <destTableKey>id</destTableKey>-->
<!--            <destTableUpdate>device_sn,loan_from_dept_id,loan_to_dept_id,device_per_menu_id,create_user,create_time</destTableUpdate>-->
<!--        </job>-->
<!--        <job>-->
<!--            <name>sys_config_sync</name>-->
<!--            <cron>0/10 * * * * ?</cron>-->
<!--            <srcSql>SELECT * from sys_config</srcSql>-->
<!--            <destTable>sys_config</destTable>-->
<!--            <destTableFields>id,name,dept_id,create_time,update_time,remark,is_deleted</destTableFields>-->
<!--            <destTableKey>id</destTableKey>-->
<!--            <destTableUpdate>name,dept_id,create_time,update_time,remark,is_deleted</destTableUpdate>-->
<!--        </job>-->
    </jobs>
</root>
jobs20260226.xml
New file
@@ -0,0 +1,351 @@
<?xml version="1.0" encoding="UTF-8"?>
<root>
    <code>4500000001</code>
    <source>
        <url>jdbc:mysql://139.196.74.78:3308/jagzw_test</url>
        <username>root</username>
        <password>jxpskj_2018</password>
        <dbtype>mysql</dbtype>
        <driver>com.mysql.cj.jdbc.Driver</driver>
    </source>
    <dest>
        <url>jdbc:postgresql://139.196.74.78:5433/jagzw_test?currentSchema=jagzw</url>
        <username>gaussdb</username>
        <password>Ztzf@81f4</password>
        <dbtype>postgresql</dbtype>
        <driver>org.postgresql.Driver</driver>
    </dest>
    <jobs>
<!--        <job>-->
<!--            &lt;!&ndash; job的名称,每一个job的名称最好不一样 &ndash;&gt;-->
<!--            <name>blade_attach_sync</name>-->
<!--            &lt;!&ndash; 定时调度cron表达式 &ndash;&gt;-->
<!--            <cron>0/10 * * * * ?</cron>-->
<!--            &lt;!&ndash; 源数据库的查询语句 &ndash;&gt;-->
<!--            <srcSql>SELECT * from blade_attach</srcSql>-->
<!--            &lt;!&ndash; 目标数据库的数据表 &ndash;&gt;-->
<!--            <destTable>blade_attach</destTable>-->
<!--            &lt;!&ndash; 目标数据库数据表的字段,必须和源数据库中查询语句的字段保持一致 &ndash;&gt;-->
<!--            <destTableFields>id,tenant_id,link,domain_url,name,nick_name,original_name,extension,attach_size,patrol_task_id,result_type,device_sn,workspace_id,metadata,drone_data,remark,md5,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableFields>-->
<!--            &lt;!&ndash; 根据此字段判断同步的数据是否在目标数据库总存在 &ndash;&gt;-->
<!--            <destTableKey>id</destTableKey>-->
<!--            &lt;!&ndash; 如果目标数据库中存在destTableKey标签字段相同的数据,则更新此字段 &ndash;&gt;-->
<!--            <destTableUpdate>tenant_id,link,domain_url,name,nick_name,original_name,extension,attach_size,patrol_task_id,result_type,device_sn,workspace_id,metadata,drone_data,remark,md5,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableUpdate>-->
<!--        </job>-->
<!--        <job>-->
<!--            <name>blade_dept_sync</name>-->
<!--            <cron>0/10 * * * * ?</cron>-->
<!--            <srcSql>SELECT * from blade_dept</srcSql>-->
<!--            <destTable>blade_dept</destTable>-->
<!--            <destTableFields>id,dept_code,tenant_id,parent_id,ancestors,dept_category,dept_name,full_name,sort,remark,dept_nature,bing_id,bind_code,deployment_mode,area_code,status,is_deleted,create_time,update_time</destTableFields>-->
<!--            <destTableKey>id</destTableKey>-->
<!--            <destTableUpdate>dept_code,tenant_id,parent_id,ancestors,dept_category,dept_name,full_name,sort,remark,dept_nature,bing_id,bind_code,deployment_mode,area_code,status,is_deleted,create_time,update_time</destTableUpdate>-->
<!--        </job>-->
<!--        <job>-->
<!--            <name>blade_dict_sync</name>-->
<!--            <cron>0/10 * * * * ?</cron>-->
<!--            <srcSql>SELECT * from blade_dict</srcSql>-->
<!--            <destTable>blade_dict</destTable>-->
<!--            <destTableFields>id,parent_id,code,dict_key,dict_value,sort,remark,is_sealed,is_deleted</destTableFields>-->
<!--            <destTableKey>id</destTableKey>-->
<!--            <destTableUpdate>parent_id,code,dict_key,dict_value,sort,remark,is_sealed,is_deleted</destTableUpdate>-->
<!--        </job>-->
<!--        <job>-->
<!--            <name>blade_dict_biz_sync</name>-->
<!--            <cron>0/10 * * * * ?</cron>-->
<!--            <srcSql>SELECT * from blade_dict_biz</srcSql>-->
<!--            <destTable>blade_dict_biz</destTable>-->
<!--            <destTableFields>id,tenant_id,parent_id,code,dict_key,dict_value,sort,remark,is_sealed,is_deleted</destTableFields>-->
<!--            <destTableKey>id</destTableKey>-->
<!--            <destTableUpdate>tenant_id,parent_id,code,dict_key,dict_value,sort,remark,is_sealed,is_deleted</destTableUpdate>-->
<!--        </job>-->
<!--        <job>-->
<!--            <name>blade_job_info_sync</name>-->
<!--            <cron>0/10 * * * * ?</cron>-->
<!--            <srcSql>SELECT * from blade_job_info</srcSql>-->
<!--            <destTable>blade_job_info</destTable>-->
<!--            <destTableFields>id,job_server_id,job_id,job_name,job_description,job_params,time_expression_type,time_expression,execute_type,processor_type,processor_info,max_instance_num,concurrency,instance_time_limit,instance_retry_num,task_retry_num,min_cpu_cores,min_memory_space,min_disk_space,designated_workers,max_worker_count,notify_user_ids,enable,dispatch_strategy,lifecycle,alert_threshold,statistic_window_len,silence_window_len,log_type,log_level,extra,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableFields>-->
<!--            <destTableKey>id</destTableKey>-->
<!--            <destTableUpdate>job_server_id,job_id,job_name,job_description,job_params,time_expression_type,time_expression,execute_type,processor_type,processor_info,max_instance_num,concurrency,instance_time_limit,instance_retry_num,task_retry_num,min_cpu_cores,min_memory_space,min_disk_space,designated_workers,max_worker_count,notify_user_ids,enable,dispatch_strategy,lifecycle,alert_threshold,statistic_window_len,silence_window_len,log_type,log_level,extra,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableUpdate>-->
<!--        </job>-->
<!--        <job>-->
<!--            <name>blade_job_server_sync</name>-->
<!--            <cron>0/10 * * * * ?</cron>-->
<!--            <srcSql>SELECT * from blade_job_server</srcSql>-->
<!--            <destTable>blade_job_server</destTable>-->
<!--            <destTableFields>id,job_server_name,job_server_url,job_app_name,job_app_password,job_remark,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableFields>-->
<!--            <destTableKey>id</destTableKey>-->
<!--            <destTableUpdate>job_server_name,job_server_url,job_app_name,job_app_password,job_remark,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableUpdate>-->
<!--        </job>-->
<!--        <job>-->
<!--            <name>blade_log_api_sync</name>-->
<!--            <cron>0/10 * * * * ?</cron>-->
<!--            <srcSql>SELECT * from blade_log_api</srcSql>-->
<!--            <destTable>blade_log_api</destTable>-->
<!--            <destTableFields>id,tenant_id,service_id,server_host,server_ip,env,type,title,method,request_uri,user_agent,remote_ip,method_class,method_name,params,time,create_by,create_time</destTableFields>-->
<!--            <destTableKey>id</destTableKey>-->
<!--            <destTableUpdate>tenant_id,service_id,server_host,server_ip,env,type,title,method,request_uri,user_agent,remote_ip,method_class,method_name,params,time,create_by,create_time</destTableUpdate>-->
<!--        </job>-->
<!--        <job>-->
<!--            <name>blade_log_error_sync</name>-->
<!--            <cron>0/10 * * * * ?</cron>-->
<!--            <srcSql>SELECT * from blade_log_error</srcSql>-->
<!--            <destTable>blade_log_error</destTable>-->
<!--            <destTableFields>id,tenant_id,service_id,server_host,server_ip,env,method,request_uri,user_agent,stack_trace,exception_name,message,line_number,remote_ip,method_class,file_name,method_name,params,create_by,create_time</destTableFields>-->
<!--            <destTableKey>id</destTableKey>-->
<!--            <destTableUpdate>tenant_id,service_id,server_host,server_ip,env,method,request_uri,user_agent,stack_trace,exception_name,message,line_number,remote_ip,method_class,file_name,method_name,params,create_by,create_time</destTableUpdate>-->
<!--        </job>-->
<!--        <job>-->
<!--            <name>blade_log_usual_sync</name>-->
<!--            <cron>0/10 * * * * ?</cron>-->
<!--            <srcSql>SELECT * from blade_log_usual</srcSql>-->
<!--            <destTable>blade_log_usual</destTable>-->
<!--            <destTableFields>id,tenant_id,service_id,server_host,server_ip,env,log_level,log_id,log_data,method,request_uri,remote_ip,method_class,method_name,user_agent,params,create_by,create_time</destTableFields>-->
<!--            <destTableKey>id</destTableKey>-->
<!--            <destTableUpdate>tenant_id,service_id,server_host,server_ip,env,log_level,log_id,log_data,method,request_uri,remote_ip,method_class,method_name,user_agent,params,create_by,create_time</destTableUpdate>-->
<!--        </job>-->
<!--        <job>-->
<!--            <name>blade_menu_sync</name>-->
<!--            <cron>0/10 * * * * ?</cron>-->
<!--            <srcSql>SELECT * from blade_menu</srcSql>-->
<!--            <destTable>blade_menu</destTable>-->
<!--            <destTableFields>id,parent_id,code,name,alias,path,source,sort,category,sys_type,action,is_open,is_device,component,remark,is_deleted</destTableFields>-->
<!--            <destTableKey>id</destTableKey>-->
<!--            <destTableUpdate>parent_id,code,name,alias,path,source,sort,category,sys_type,action,is_open,is_device,component,remark,is_deleted</destTableUpdate>-->
<!--        </job>-->
<!--        <job>-->
<!--            <name>blade_model_sync</name>-->
<!--            <cron>0/10 * * * * ?</cron>-->
<!--            <srcSql>SELECT * from blade_model</srcSql>-->
<!--            <destTable>blade_model</destTable>-->
<!--            <destTableFields>id,datasource_id,model_name,model_code,model_table,model_class,model_remark,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableFields>-->
<!--            <destTableKey>id</destTableKey>-->
<!--            <destTableUpdate>datasource_id,model_name,model_code,model_table,model_class,model_remark,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableUpdate>-->
<!--        </job>-->
<!--        <job>-->
<!--            <name>blade_model_prototype_sync</name>-->
<!--            <cron>0/10 * * * * ?</cron>-->
<!--            <srcSql>SELECT * from blade_model_prototype</srcSql>-->
<!--            <destTable>blade_model_prototype</destTable>-->
<!--            <destTableFields>id,model_id,jdbc_name,jdbc_type,jdbc_comment,property_type,property_entity,property_name,is_list,is_form,is_row,component_type,dict_code,is_required,is_query,query_type,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableFields>-->
<!--            <destTableKey>id</destTableKey>-->
<!--            <destTableUpdate>model_id,jdbc_name,jdbc_type,jdbc_comment,property_type,property_entity,property_name,is_list,is_form,is_row,component_type,dict_code,is_required,is_query,query_type,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableUpdate>-->
<!--        </job>-->
<!--        <job>-->
<!--            <name>blade_notice_sync</name>-->
<!--            <cron>0/10 * * * * ?</cron>-->
<!--            <srcSql>SELECT * from blade_notice</srcSql>-->
<!--            <destTable>blade_notice</destTable>-->
<!--            <destTableFields>id,tenant_id,title,category,release_time,content,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableFields>-->
<!--            <destTableKey>id</destTableKey>-->
<!--            <destTableUpdate>tenant_id,title,category,release_time,content,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableUpdate>-->
<!--        </job>-->
<!--        <job>-->
<!--            <name>blade_oss_sync</name>-->
<!--            <cron>0/10 * * * * ?</cron>-->
<!--            <srcSql>SELECT * from blade_oss</srcSql>-->
<!--            <destTable>blade_oss</destTable>-->
<!--            <destTableFields>id,tenant_id,category,oss_code,endpoint,transform_endpoint,access_key,secret_key,bucket_name,app_id,region,remark,is_def,expire,object_dir_prefix,name,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableFields>-->
<!--            <destTableKey>id</destTableKey>-->
<!--            <destTableUpdate>tenant_id,category,oss_code,endpoint,transform_endpoint,access_key,secret_key,bucket_name,app_id,region,remark,is_def,expire,object_dir_prefix,name,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableUpdate>-->
<!--        </job>-->
<!--        <job>-->
<!--            <name>blade_param_sync</name>-->
<!--            <cron>0/10 * * * * ?</cron>-->
<!--            <srcSql>SELECT * from blade_param</srcSql>-->
<!--            <destTable>blade_param</destTable>-->
<!--            <destTableFields>id,param_name,param_key,param_value,remark,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableFields>-->
<!--            <destTableKey>id</destTableKey>-->
<!--            <destTableUpdate>param_name,param_key,param_value,remark,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableUpdate>-->
<!--        </job>-->
<!--        <job>-->
<!--            <name>blade_post_sync</name>-->
<!--            <cron>0/10 * * * * ?</cron>-->
<!--            <srcSql>SELECT * from blade_post</srcSql>-->
<!--            <destTable>blade_post</destTable>-->
<!--            <destTableFields>id,tenant_id,category,post_code,post_name,sort,remark,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableFields>-->
<!--            <destTableKey>id</destTableKey>-->
<!--            <destTableUpdate>tenant_id,category,post_code,post_name,sort,remark,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableUpdate>-->
<!--        </job>-->
<!--        <job>-->
<!--            <name>blade_process_leave_sync</name>-->
<!--            <cron>0/10 * * * * ?</cron>-->
<!--            <srcSql>SELECT * from blade_process_leave</srcSql>-->
<!--            <destTable>blade_process_leave</destTable>-->
<!--            <destTableFields>id,process_definition_id,process_instance_id,start_time,end_time,reason,task_user,apply_time,attach_url,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableFields>-->
<!--            <destTableKey>id</destTableKey>-->
<!--            <destTableUpdate>process_definition_id,process_instance_id,start_time,end_time,reason,task_user,apply_time,attach_url,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableUpdate>-->
<!--        </job>-->
<!--        <job>-->
<!--            <name>blade_region_sync</name>-->
<!--            <cron>00 56 15 06 02 ?</cron>-->
<!--            <srcSql>SELECT * from blade_region limit 650000,100000</srcSql>-->
<!--            <destTable>blade_region</destTable>-->
<!--            <destTableFields>id,code,parent_code,ancestors,name,province_code,province_name,city_code,city_name,district_code,district_name,town_code,town_name,village_code,village_name,region_level,type,sort,remark,status,create_time,update_time</destTableFields>-->
<!--            <destTableKey>id</destTableKey>-->
<!--            <destTableUpdate>code,parent_code,ancestors,name,province_code,province_name,city_code,city_name,district_code,district_name,town_code,town_name,village_code,village_name,region_level,type,sort,remark,status,create_time,update_time</destTableUpdate>-->
<!--        </job>-->
<!--        <job>-->
<!--            <name>blade_report_file_sync</name>-->
<!--            <cron>0/10 * * * * ?</cron>-->
<!--            <srcSql>SELECT * from blade_report_file</srcSql>-->
<!--            <destTable>blade_report_file</destTable>-->
<!--            <destTableFields>id,name,content,create_time,update_time,is_deleted</destTableFields>-->
<!--            <destTableKey>id</destTableKey>-->
<!--            <destTableUpdate>name,content,create_time,update_time,is_deleted</destTableUpdate>-->
<!--        </job>-->
<!--        <job>-->
<!--            <name>blade_role_sync</name>-->
<!--            <cron>0/10 * * * * ?</cron>-->
<!--            <srcSql>SELECT * from blade_role</srcSql>-->
<!--            <destTable>blade_role</destTable>-->
<!--            <destTableFields>id,tenant_id,parent_id,role_name,sort,role_alias,is_deleted</destTableFields>-->
<!--            <destTableKey>id</destTableKey>-->
<!--            <destTableUpdate>tenant_id,parent_id,role_name,sort,role_alias,is_deleted</destTableUpdate>-->
<!--        </job>-->
<!--        <job>-->
<!--            <name>blade_role_menu_sync</name>-->
<!--            <cron>0/10 * * * * ?</cron>-->
<!--            <srcSql>SELECT * from blade_role_menu</srcSql>-->
<!--            <destTable>blade_role_menu</destTable>-->
<!--            <destTableFields>id,menu_id,role_id</destTableFields>-->
<!--            <destTableKey>id</destTableKey>-->
<!--            <destTableUpdate>menu_id,role_id</destTableUpdate>-->
<!--        </job>-->
<!--        <job>-->
<!--            <name>blade_role_scope_sync</name>-->
<!--            <cron>0/10 * * * * ?</cron>-->
<!--            <srcSql>SELECT * from blade_role_scope</srcSql>-->
<!--            <destTable>blade_role_scope</destTable>-->
<!--            <destTableFields>id,scope_category,scope_id,role_id</destTableFields>-->
<!--            <destTableKey>id</destTableKey>-->
<!--            <destTableUpdate>scope_category,scope_id,role_id</destTableUpdate>-->
<!--        </job>-->
<!--        <job>-->
<!--            <name>blade_scope_api_sync</name>-->
<!--            <cron>0/10 * * * * ?</cron>-->
<!--            <srcSql>SELECT * from blade_scope_api</srcSql>-->
<!--            <destTable>blade_scope_api</destTable>-->
<!--            <destTableFields>id,menu_id,resource_code,scope_name,scope_path,scope_type,remark,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableFields>-->
<!--            <destTableKey>id</destTableKey>-->
<!--            <destTableUpdate>menu_id,resource_code,scope_name,scope_path,scope_type,remark,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableUpdate>-->
<!--        </job>-->
<!--        <job>-->
<!--            <name>blade_scope_data_sync</name>-->
<!--            <cron>0/10 * * * * ?</cron>-->
<!--            <srcSql>SELECT * from blade_scope_data</srcSql>-->
<!--            <destTable>blade_scope_data</destTable>-->
<!--            <destTableFields>id,menu_id,resource_code,scope_name,scope_field,scope_class,scope_column,scope_type,scope_value,remark,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableFields>-->
<!--            <destTableKey>id</destTableKey>-->
<!--            <destTableUpdate>menu_id,resource_code,scope_name,scope_field,scope_class,scope_column,scope_type,scope_value,remark,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableUpdate>-->
<!--        </job>-->
<!--        <job>-->
<!--            <name>blade_sms_sync</name>-->
<!--            <cron>0/10 * * * * ?</cron>-->
<!--            <srcSql>SELECT * from blade_sms</srcSql>-->
<!--            <destTable>blade_sms</destTable>-->
<!--            <destTableFields>id,tenant_id,category,sms_code,template_id,access_key,secret_key,region_id,sign_name,remark,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableFields>-->
<!--            <destTableKey>id</destTableKey>-->
<!--            <destTableUpdate>tenant_id,category,sms_code,template_id,access_key,secret_key,region_id,sign_name,remark,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableUpdate>-->
<!--        </job>-->
<!--        <job>-->
<!--            <name>blade_tenant_sync</name>-->
<!--            <cron>0/10 * * * * ?</cron>-->
<!--            <srcSql>SELECT * from blade_tenant</srcSql>-->
<!--            <destTable>blade_tenant</destTable>-->
<!--            <destTableFields>id,tenant_id,tenant_name,domain_url,background_url,linkman,contact_number,address,account_number,expire_time,package_id,datasource_id,license_key,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableFields>-->
<!--            <destTableKey>id</destTableKey>-->
<!--            <destTableUpdate>tenant_id,tenant_name,domain_url,background_url,linkman,contact_number,address,account_number,expire_time,package_id,datasource_id,license_key,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableUpdate>-->
<!--        </job>-->
<!--        <job>-->
<!--            <name>blade_tenant_package_sync</name>-->
<!--            <cron>0/10 * * * * ?</cron>-->
<!--            <srcSql>SELECT * from blade_tenant_package</srcSql>-->
<!--            <destTable>blade_tenant_package</destTable>-->
<!--            <destTableFields>id,package_name,menu_id,remark,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableFields>-->
<!--            <destTableKey>id</destTableKey>-->
<!--            <destTableUpdate>package_name,menu_id,remark,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableUpdate>-->
<!--        </job>-->
<!--        <job>-->
<!--            <name>blade_top_menu_sync</name>-->
<!--            <cron>0/10 * * * * ?</cron>-->
<!--            <srcSql>SELECT * from blade_top_menu</srcSql>-->
<!--            <destTable>blade_top_menu</destTable>-->
<!--            <destTableFields>id,tenant_id,code,name,source,sort,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableFields>-->
<!--            <destTableKey>id</destTableKey>-->
<!--            <destTableUpdate>tenant_id,code,name,source,sort,create_user,create_dept,create_time,update_user,update_time,status,is_deleted</destTableUpdate>-->
<!--        </job>-->
<!--        <job>-->
<!--            <name>blade_top_menu_setting_sync</name>-->
<!--            <cron>0/10 * * * * ?</cron>-->
<!--            <srcSql>SELECT * from blade_top_menu_setting</srcSql>-->
<!--            <destTable>blade_top_menu_setting</destTable>-->
<!--            <destTableFields>id,top_menu_id,menu_id</destTableFields>-->
<!--            <destTableKey>id</destTableKey>-->
<!--            <destTableUpdate>top_menu_id,menu_id</destTableUpdate>-->
<!--        </job>-->
<!--        <job>-->
<!--            <name>blade_user_sync</name>-->
<!--            <cron>0/10 * * * * ?</cron>-->
<!--            <srcSql>SELECT * from blade_user</srcSql>-->
<!--            <destTable>blade_user</destTable>-->
<!--            <destTableFields>id,tenant_id,code,user_type,account,password,name,real_name,avatar,email,phone,birthday,sex,role_id,dept_id,post_id,flight_start_time,flight_end_time,max_login_num,expire_time,create_user,create_dept,create_time,update_user,update_time,status,is_deleted,area_code</destTableFields>-->
<!--            <destTableKey>id</destTableKey>-->
<!--            <destTableUpdate>tenant_id,code,user_type,account,password,name,real_name,avatar,email,phone,birthday,sex,role_id,dept_id,post_id,flight_start_time,flight_end_time,max_login_num,expire_time,create_user,create_dept,create_time,update_user,update_time,status,is_deleted,area_code</destTableUpdate>-->
<!--        </job>-->
<!--        <job>-->
<!--            <name>blade_user_app_sync</name>-->
<!--            <cron>0/10 * * * * ?</cron>-->
<!--            <srcSql>SELECT * from blade_user_app</srcSql>-->
<!--            <destTable>blade_user_app</destTable>-->
<!--            <destTableFields>id,user_id,user_ext</destTableFields>-->
<!--            <destTableKey>id</destTableKey>-->
<!--            <destTableUpdate>user_id,user_ext</destTableUpdate>-->
<!--        </job>-->
<!--        <job>-->
<!--            <name>blade_user_dept_sync</name>-->
<!--            <cron>0/10 * * * * ?</cron>-->
<!--            <srcSql>SELECT * from blade_user_dept</srcSql>-->
<!--            <destTable>blade_user_dept</destTable>-->
<!--            <destTableFields>id,user_id,dept_id</destTableFields>-->
<!--            <destTableKey>id</destTableKey>-->
<!--            <destTableUpdate>user_id,dept_id</destTableUpdate>-->
<!--        </job>-->
<!--        <job>-->
<!--            <name>blade_user_oauth_sync</name>-->
<!--            <cron>0/10 * * * * ?</cron>-->
<!--            <srcSql>SELECT * from blade_user_oauth</srcSql>-->
<!--            <destTable>blade_user_oauth</destTable>-->
<!--            <destTableFields>id,tenant_id,uuid,user_id,username,nickname,avatar,blog,company,location,email,remark,gender,source</destTableFields>-->
<!--            <destTableKey>id</destTableKey>-->
<!--            <destTableUpdate>tenant_id,uuid,user_id,username,nickname,avatar,blog,company,location,email,remark,gender,source</destTableUpdate>-->
<!--        </job>-->
<!--        <job>-->
<!--            <name>blade_user_other_sync</name>-->
<!--            <cron>0/10 * * * * ?</cron>-->
<!--            <srcSql>SELECT * from blade_user_other</srcSql>-->
<!--            <destTable>blade_user_other</destTable>-->
<!--            <destTableFields>id,user_id,user_ext</destTableFields>-->
<!--            <destTableKey>id</destTableKey>-->
<!--            <destTableUpdate>user_id,user_ext</destTableUpdate>-->
<!--        </job>-->
<!--        <job>-->
<!--            <name>blade_user_web_sync</name>-->
<!--            <cron>0/10 * * * * ?</cron>-->
<!--            <srcSql>SELECT * from blade_user_web</srcSql>-->
<!--            <destTable>blade_user_web</destTable>-->
<!--            <destTableFields>id,user_id,user_ext</destTableFields>-->
<!--            <destTableKey>id</destTableKey>-->
<!--            <destTableUpdate>user_id,user_ext</destTableUpdate>-->
<!--        </job>-->
<!--        <job>-->
<!--            <name>help_center_sync</name>-->
<!--            <cron>0/10 * * * * ?</cron>-->
<!--            <srcSql>SELECT * from help_center</srcSql>-->
<!--            <destTable>help_center</destTable>-->
<!--            <destTableFields>id,level_one_type,level_two_type,upload_user,create_time,file_path</destTableFields>-->
<!--            <destTableKey>id</destTableKey>-->
<!--            <destTableUpdate>level_one_type,level_two_type,upload_user,create_time,file_path</destTableUpdate>-->
<!--        </job>-->
    </jobs>
</root>
pom.xml
New file
@@ -0,0 +1,120 @@
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>cn.net.communion</groupId>
    <artifactId>dbdatasync</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>
    <name>dbdatasync</name>
    <url>http://maven.apache.org</url>
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>
    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>3.8.1</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>dom4j</groupId>
            <artifactId>dom4j</artifactId>
            <version>1.6.1</version>
        </dependency>
        <!-- MySQL 驱动 -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.33</version>
        </dependency>
        <!-- PostgreSQL 驱动 -->
        <dependency>
            <groupId>org.postgresql</groupId>
            <artifactId>postgresql</artifactId>
            <version>42.6.0</version>
        </dependency>
        <dependency>
            <groupId>org.quartz-scheduler</groupId>
            <artifactId>quartz</artifactId>
            <version>2.1.3</version>
        </dependency>
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.14</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>1.7.5</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-simple</artifactId>
            <version>1.6.4</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>1.7.5</version>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <configuration>
                    <archive>
                        <manifest>
                            <addClasspath>true</addClasspath>
                            <classpathPrefix>lib/</classpathPrefix>
                            <mainClass>cn.net.communion.dbdatasync.App</mainClass>
                        </manifest>
                    </archive>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-dependency-plugin</artifactId>
                <executions>
                    <execution>
                        <id>copy</id>
                        <phase>package</phase>
                        <goals>
                            <goal>copy-dependencies</goal>
                        </goals>
                        <configuration>
                            <outputDirectory>${project.build.directory}/lib</outputDirectory>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.mortbay.jetty</groupId>
                <artifactId>maven-jetty-plugin</artifactId>
                <version>6.1.10</version>
            </plugin>
        </plugins>
        <resources>
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.properties</include>
                    <include>**/*.xml</include>
                </includes>
                <filtering>true</filtering>
            </resource>
        </resources>
    </build>
</project>
src/main/java/cn/net/communion/dbdatasync/App.java
New file
@@ -0,0 +1,115 @@
package cn.net.communion.dbdatasync;
import java.lang.reflect.Field;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.Iterator;
import java.util.List;
import org.apache.log4j.Level;
import org.apache.log4j.LogManager;
import org.apache.log4j.Logger;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import org.quartz.CronTrigger;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.SchedulerFactory;
import org.quartz.impl.StdSchedulerFactory;
import static org.quartz.CronScheduleBuilder.cronSchedule;
import static org.quartz.TriggerBuilder.newTrigger;
import static org.quartz.JobBuilder.newJob;
import cn.net.communion.dbdatasync.dbhelper.Factory;
import cn.net.communion.dbdatasync.entity.DbInfo;
import cn.net.communion.dbdatasync.entity.JobInfo;
/**
 * 读取xml配置文件
 * @author Administrator
 *
 */
public class App
{
    private DbInfo srcDb;
    private DbInfo destDb;
    private List<JobInfo> jobList;
    private String code;
    private static Logger logger = Logger.getLogger(App.class);
    public void init(){
        srcDb = new DbInfo();
        destDb = new DbInfo();
        jobList = new ArrayList<JobInfo>();
        SAXReader reader = new SAXReader();
        try {
            //读取xml的配置文件名,并获取其里面的节点
            Element root = reader.read("jobs.xml").getRootElement();
            Element src = root.element("source");
            Element dest = root.element("dest");
            Element jobs = root.element("jobs");
            //遍历job即同步的表
            for(Iterator it = jobs.elementIterator("job"); it.hasNext();){
                jobList.add((JobInfo) elementInObject((Element)it.next(), new JobInfo()));
            }
            //
            elementInObject(src, srcDb);
            elementInObject(dest, destDb);
            code = root.element("code").getTextTrim();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    public Object elementInObject(Element e, Object o) throws IllegalArgumentException, IllegalAccessException{
        Field[] fields = o.getClass().getDeclaredFields();
        for(int index = 0; index < fields.length; index++){
            fields[index].setAccessible(true);
            fields[index].set(o, e.element(fields[index].getName()).getTextTrim());
        }
        return o;
    }
    public void start(){
        for(int index = 0; index < jobList.size(); index++){
            JobInfo jobInfo = jobList.get(index);
            String logTitle = "[" + code + "]" + jobInfo.getName() + " ";
            try{
                SchedulerFactory sf = new StdSchedulerFactory();
                Scheduler sched = sf.getScheduler();
                JobDetail job = newJob(DataTask.class).withIdentity("job-" + jobInfo.getName(), code).build();
                job.getJobDataMap().put("srcDb", srcDb);
                job.getJobDataMap().put("destDb", destDb);
                job.getJobDataMap().put("jobInfo", jobInfo);
                job.getJobDataMap().put("logTitle", logTitle);
                logger.info(jobInfo.getCron());
                CronTrigger trigger = newTrigger()
                                .withIdentity("trigger-" +  jobInfo.getName(), code)
                                .withSchedule(cronSchedule(jobInfo.getCron())).build();
                sched.scheduleJob(job, trigger);
                sched.start();
            }catch(Exception e){
                logger.info(logTitle + e.getMessage());
                logger.info(logTitle + " run failed");
                continue;
            }
        }
    }
    public static void main(String[] args )
    {
        App app = new App();
        app.init();
        app.start();
    }
}
src/main/java/cn/net/communion/dbdatasync/DataTask.java
New file
@@ -0,0 +1,117 @@
package cn.net.communion.dbdatasync;
import cn.net.communion.dbdatasync.dbhelper.DbHelper;
import cn.net.communion.dbdatasync.dbhelper.Factory;
import cn.net.communion.dbdatasync.entity.DbInfo;
import cn.net.communion.dbdatasync.entity.JobInfo;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Date;
import org.apache.log4j.Logger;
import org.quartz.Job;
import org.quartz.JobDataMap;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
public class DataTask implements Job {
    private Logger logger = Logger.getLogger(DataTask.class);
    @Override
    public void execute(JobExecutionContext context) throws JobExecutionException {
        logger.info("开始任务调度: " + new Date());
        Connection inConn = null;
        Connection outConn = null;
        JobDataMap data = context.getJobDetail().getJobDataMap();
        DbInfo srcDb = (DbInfo) data.get("srcDb");
        DbInfo destDb = (DbInfo) data.get("destDb");
        JobInfo jobInfo = (JobInfo) data.get("jobInfo");
        String logTitle = (String) data.get("logTitle");
        try {
            // 校验任务信息
            if (jobInfo == null || jobInfo.getSrcSql() == null || jobInfo.getSrcSql().isEmpty()) {
                logger.error("任务 SQL 语句为空,请检查配置");
                return;
            }
            // 创建数据库连接
            inConn = createConnection(srcDb);
            outConn = createConnection(destDb);
            if (inConn == null || outConn == null) {
                logger.error("数据库连接失败,请检查配置");
                return;
            }
            // 拼接并执行 SQL
            DbHelper dbHelper = Factory.create(destDb.getDbtype());
            long start = new Date().getTime();
            logger.debug("srcDb: " + srcDb);
            logger.debug("destDb: " + destDb);
            logger.debug("jobInfo: " + jobInfo);
            logger.debug("dbHelper: " + dbHelper);
            if (dbHelper == null) {
                logger.error("无法创建 DbHelper 实例,请检查数据库类型配置");
                return;
            }
            String sql = dbHelper.assembleSQL(jobInfo.getSrcSql(), inConn, jobInfo);
            logger.info("组装SQL耗时: " + (new Date().getTime() - start) + "ms");
            if (sql != null) {
                logger.debug("Generated SQL: " + sql);
                long eStart = new Date().getTime();
                dbHelper.executeSQL(sql, outConn);
                outConn.commit(); // 提交事务
                logger.info("执行SQL语句耗时: " + (new Date().getTime() - eStart) + "ms");
            }
        } catch (SQLException e) {
            logger.error(logTitle + " SQL执行出错: " + e.getMessage());
            try {
                if (outConn != null) outConn.rollback(); // 回滚事务
            } catch (SQLException rollbackEx) {
                logger.error("事务回滚失败: " + rollbackEx.getMessage());
            }
        } finally {
            destoryConnection(inConn); // 关闭源数据库连接
            destoryConnection(outConn); // 关闭目标数据库连接
        }
    }
    /**
     * 创建数据库连接
     *
     * @param db 数据库配置信息
     * @return 数据库连接对象,失败返回 null
     */
    private Connection createConnection(DbInfo db) {
        try {
            Class.forName(db.getDriver());
            Connection conn = DriverManager.getConnection(db.getUrl(), db.getUsername(), db.getPassword());
            conn.setAutoCommit(false);
            return conn;
        } catch (Exception e) {
            logger.error("数据库连接创建失败: " + e.getMessage());
        }
        return null;
    }
    /**
     * 关闭数据库连接
     *
     * @param conn 数据库连接对象
     */
    private void destoryConnection(Connection conn) {
        try {
            if (conn != null) {
                conn.close();
                logger.info("数据库连接已关闭");
            }
        } catch (SQLException e) {
            logger.error("关闭数据库连接失败: " + e.getMessage());
        }
    }
}
src/main/java/cn/net/communion/dbdatasync/Tool.java
New file
@@ -0,0 +1,15 @@
package cn.net.communion.dbdatasync;
public class Tool {
    public static String generateString(int length){
        if(length < 1) length = 6;
        String str = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
        String genStr = "";
        for(int index = 0; index < length; index++)
        {
            genStr = genStr + str.charAt((int) ((Math.random() * 100) % 26));
        }
//        System.out.println(genStr);
        return genStr;
    }
}
src/main/java/cn/net/communion/dbdatasync/dbhelper/DbHelper.java
New file
@@ -0,0 +1,14 @@
package cn.net.communion.dbdatasync.dbhelper;
import java.sql.Connection;
import java.sql.SQLException;
import cn.net.communion.dbdatasync.entity.JobInfo;
public interface DbHelper {
    public String assembleSQL(String paramString, Connection paramConnection, JobInfo paramJobInfo)
            throws SQLException;
    public void executeSQL(String sql, Connection conn)
            throws SQLException;
}
src/main/java/cn/net/communion/dbdatasync/dbhelper/Factory.java
New file
@@ -0,0 +1,18 @@
package cn.net.communion.dbdatasync.dbhelper;
import cn.net.communion.dbdatasync.dbhelper.impl.MySql;
import cn.net.communion.dbdatasync.dbhelper.impl.PostgreSql;
import cn.net.communion.dbdatasync.dbhelper.impl.SqlServer;
public class Factory {
    public static DbHelper create(String dbType) {
        switch (dbType.toLowerCase()) {
            case "mysql":
                return new MySql();
            case "postgresql":
                return new PostgreSql();
            default:
                throw new IllegalArgumentException("Unsupported database type: " + dbType);
        }
    }
}
src/main/java/cn/net/communion/dbdatasync/dbhelper/impl/MySql.java
New file
@@ -0,0 +1,67 @@
package cn.net.communion.dbdatasync.dbhelper.impl;
import cn.net.communion.dbdatasync.Tool;
import cn.net.communion.dbdatasync.dbhelper.DbHelper;
import cn.net.communion.dbdatasync.entity.JobInfo;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import org.apache.log4j.Logger;
public class MySql implements DbHelper {
    private Logger logger = Logger.getLogger(MySql.class);
    public String assembleSQL(String srcSql, Connection conn, JobInfo jobInfo) throws SQLException {
        String uniqueName = Tool.generateString(6) + "_" + jobInfo.getName();
        String[] fields = jobInfo.getDestTableFields().split(",");
        String[] updateFields = jobInfo.getDestTableUpdate().split(",");
        String destTable = jobInfo.getDestTable();
        String destTableKey = jobInfo.getDestTableKey();
        PreparedStatement pst = conn.prepareStatement(srcSql);
        ResultSet rs = pst.executeQuery();
        StringBuffer sql = new StringBuffer();
        sql.append("insert into ").append(jobInfo.getDestTable()).append(" (").append(jobInfo.getDestTableFields()).append(") values ");
        long count = 0;
        while (rs.next()) {
            sql.append("(");
            for (int index = 0; index < fields.length; index++) {
                sql.append("'").append(rs.getString(fields[index])).append(index == (fields.length - 1) ? "'" : "',");
            }
            sql.append("),");
            count++;
        }
        if (rs != null) {
            rs.close();
        }
        if (pst != null) {
            pst.close();
        }
        if (count > 0) {
            sql = sql.deleteCharAt(sql.length() - 1);
            if ((!jobInfo.getDestTableUpdate().equals("")) && (!jobInfo.getDestTableKey().equals(""))) {
                sql.append(" on duplicate key update ");
                for (int index = 0; index < updateFields.length; index++) {
                    sql.append(updateFields[index]).append("= values(").append(updateFields[index]).append(index == (updateFields.length - 1) ? ")" : "),");
                }
                return new StringBuffer("alter table ").append(destTable).append(" add constraint ").append(uniqueName).append(" unique (").append(destTableKey).append(");").append(sql.toString())
                                .append(";alter table ").append(destTable).append(" drop index ").append(uniqueName).toString();
            }
            return sql.toString();
        }
        return null;
    }
    public void executeSQL(String sql, Connection conn) throws SQLException {
        PreparedStatement pst = conn.prepareStatement("");
        String[] sqlList = sql.split(";");
        for (int index = 0; index < sqlList.length; index++) {
            pst.addBatch(sqlList[index]);
        }
        pst.executeBatch();
        conn.commit();
        pst.close();
    }
}
src/main/java/cn/net/communion/dbdatasync/dbhelper/impl/PostgreSql.java
New file
@@ -0,0 +1,84 @@
package cn.net.communion.dbdatasync.dbhelper.impl;
import cn.net.communion.dbdatasync.dbhelper.DbHelper;
import cn.net.communion.dbdatasync.entity.JobInfo;
import org.apache.log4j.Logger;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;
public class PostgreSql implements DbHelper {
    private Logger logger = Logger.getLogger(PostgreSql.class);
    @Override
    public String assembleSQL(String srcSql, Connection conn, JobInfo jobInfo) throws SQLException {
        String[] fields = jobInfo.getDestTableFields().split(",");
        String destTable = jobInfo.getDestTable();
        PreparedStatement pst = conn.prepareStatement(srcSql);
        ResultSet rs = pst.executeQuery();
        StringBuilder sql = new StringBuilder();
        sql.append("INSERT INTO ").append(destTable).append(" (").append(jobInfo.getDestTableFields()).append(") VALUES ");
        long count = 0;
        while (rs.next()) {
            sql.append("(");
            for (int index = 0; index < fields.length; index++) {
                String value = rs.getString(fields[index]);
                if (value == null) {
                    sql.append("NULL"); // 显式处理 NULL 值
                } else {
                    sql.append("'").append(value).append("'"); // 字符串值加引号
                }
                if (index < fields.length - 1) {
                    sql.append(", ");
                }
            }
            sql.append("),");
            count++;
        }
        if (rs != null) {
            rs.close();
        }
        if (pst != null) {
            pst.close();
        }
        if (count > 0) {
            sql = new StringBuilder(sql.substring(0, sql.length() - 1)); // 删除最后一个逗号
            return sql.toString();
        }
        return null;
    }
    @Override
    public void executeSQL(String sql, Connection conn) throws SQLException {
        logger.debug("Executing SQL: " + sql);
        try (PreparedStatement pst = conn.prepareStatement(sql)) {
            pst.execute();
            conn.commit();
        }
    }
    // 辅助方法:设置参数
    private void setParameters(PreparedStatement pst, List<Object> params) throws SQLException {
        for (int i = 0; i < params.size(); i++) {
            pst.setObject(i + 1, params.get(i));
        }
    }
    // 辅助方法:序列化 SQL 和参数
    private String serializeSqlWithParams(List<String> sqlStatements, List<List<Object>> paramLists) {
        StringBuilder result = new StringBuilder();
        for (int i = 0; i < sqlStatements.size(); i++) {
            result.append(sqlStatements.get(i)).append("; ");
        }
        return result.toString();
    }
}
src/main/java/cn/net/communion/dbdatasync/dbhelper/impl/SqlServer.java
New file
@@ -0,0 +1,60 @@
package cn.net.communion.dbdatasync.dbhelper.impl;
import cn.net.communion.dbdatasync.dbhelper.DbHelper;
import cn.net.communion.dbdatasync.entity.JobInfo;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import org.apache.log4j.Logger;
public class SqlServer implements DbHelper {
    private Logger logger = Logger.getLogger(SqlServer.class);
    public String assembleSQL(String srcSql, Connection conn, JobInfo jobInfo) throws SQLException {
        String fieldStr = jobInfo.getDestTableFields();
        String[] fields = jobInfo.getDestTableFields().split(",");
        String[] updateFields = jobInfo.getDestTableUpdate().split(",");
        String destTableKey = jobInfo.getDestTableKey();
        String destTable = jobInfo.getDestTable();
        Statement stat = conn.createStatement();
        ResultSet rs = stat.executeQuery(srcSql);
        StringBuffer sql = new StringBuffer();
        long count = 0;
        while (rs.next()) {
            sql.append("if not exists (select ").append(destTableKey).append(" from ").append(destTable).append(" where ").append(destTableKey).append("='").append(rs.getString(destTableKey))
                            .append("')").append("insert into ").append(destTable).append("(").append(fieldStr).append(") values(");
            for (int index = 0; index < fields.length; index++) {
                sql.append("'").append(rs.getString(fields[index])).append(index == (fields.length - 1) ? "'" : "',");
            }
            sql.append(") else update ").append(destTable).append(" set ");
            for (int index = 0; index < updateFields.length; index++) {
                sql.append(updateFields[index]).append("='").append(rs.getString(updateFields[index])).append(index == (updateFields.length - 1) ? "'" : "',");
            }
            sql.append(" where ").append(destTableKey).append("='").append(rs.getString(destTableKey)).append("';");
            count++;
            // this.logger.info("第" + count + "耗时: " + (new Date().getTime() - oneStart) + "ms");
        }
        this.logger.info("总共查询到 " + count + " 条记录");
        if (rs != null) {
            rs.close();
        }
        if (stat != null) {
            stat.close();
        }
        return count > 0 ? sql.toString() : null;
    }
    public void executeSQL(String sql, Connection conn) throws SQLException {
        PreparedStatement pst = conn.prepareStatement(sql);
        pst.executeUpdate();
        conn.commit();
        pst.close();
    }
}
src/main/java/cn/net/communion/dbdatasync/entity/DbInfo.java
New file
@@ -0,0 +1,40 @@
package cn.net.communion.dbdatasync.entity;
public class DbInfo extends Throwable {
    String url;
    String username;
    String password;
    String dbtype;
    String driver;
    public String getUrl() {
        return url;
    }
    public void setUrl(String url) {
        this.url = url;
    }
    public String getUsername() {
        return username;
    }
    public void setUsername(String username) {
        this.username = username;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
    public String getDbtype() {
        return dbtype;
    }
    public void setDbtype(String dbtype) {
        this.dbtype = dbtype;
    }
    public String getDriver() {
        return driver;
    }
    public void setDriver(String driver) {
        this.driver = driver;
    }
}
src/main/java/cn/net/communion/dbdatasync/entity/JobInfo.java
New file
@@ -0,0 +1,54 @@
package cn.net.communion.dbdatasync.entity;
public class JobInfo extends Throwable {
    String name;
    String cron;
    String srcSql;
    String destTable;
    String destTableFields;
    String destTableKey;
    String destTableUpdate;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getCron() {
        return cron;
    }
    public void setCron(String cron) {
        this.cron = cron;
    }
    public String getSrcSql() {
        return srcSql;
    }
    public void setSrcSql(String srcSql) {
        this.srcSql = srcSql;
    }
    public String getDestTable() {
        return destTable;
    }
    public void setDestTable(String destTable) {
        this.destTable = destTable;
    }
    public String getDestTableFields() {
        return destTableFields;
    }
    public void setDestTableFields(String destTableFields) {
        this.destTableFields = destTableFields;
    }
    public String getDestTableKey() {
        return destTableKey;
    }
    public void setDestTableKey(String destTableKey) {
        this.destTableKey = destTableKey;
    }
    public String getDestTableUpdate() {
        return destTableUpdate;
    }
    public void setDestTableUpdate(String destTableUpdate) {
        this.destTableUpdate = destTableUpdate;
    }
}
src/main/java/log4j.properties
New file
@@ -0,0 +1,20 @@
# ????????? UTF-8
log4j.appender.A1.Encoding=UTF-8
log4j.appender.A2.Encoding=UTF-8
# ??????
log4j.rootCategory=INFO,A1,A2
log4j.logger.cn.net.communion.dbdatasync=DEBUG
# ?????
log4j.appender.A1=org.apache.log4j.ConsoleAppender
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=[%d{ISO8601}] %-5p [%t] %C{1}:%L - %m%n
# ????
log4j.appender.A2=org.apache.log4j.RollingFileAppender
log4j.appender.A2.File=./databaseSync.log
log4j.appender.A2.MaxFileSize=50MB
log4j.appender.A2.MaxBackupIndex=20
log4j.appender.A2.layout=org.apache.log4j.PatternLayout
log4j.appender.A2.layout.ConversionPattern=%d{ISO8601} [%t] %-5p %c - %m%n
src/test/java/cn/net/communion/dbdatasync/AppTest.java
New file
@@ -0,0 +1,38 @@
package cn.net.communion.dbdatasync;
import junit.framework.Test;
import junit.framework.TestCase;
import junit.framework.TestSuite;
/**
 * Unit test for simple App.
 */
public class AppTest
    extends TestCase
{
    /**
     * Create the test case
     *
     * @param testName name of the test case
     */
    public AppTest( String testName )
    {
        super( testName );
    }
    /**
     * @return the suite of tests being tested
     */
    public static Test suite()
    {
        return new TestSuite( AppTest.class );
    }
    /**
     * Rigourous Test :-)
     */
    public void testApp()
    {
        assertTrue( true );
    }
}