一. 均衡组织机构抽取
1. pom文件
<dependencyManagement>
<dependencies>
<!-- 导入duceap 2.1 POM定义-->
<dependency>
<groupId>com.dragonsoft</groupId>
<artifactId>duceap-parent</artifactId>
<version>2.1.0-SNAPSHOT</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<!--web开发基础包-->
<dependency>
<groupId>com.dragonsoft</groupId>
<artifactId>duceap-boot-starter-web</artifactId>
</dependency>
<!--flyway模块-->
<dependency>
<groupId>com.dragonsoft</groupId>
<artifactId>duceap-boot-starter-flyway</artifactId>
</dependency>
<dependency>
<groupId>com.dragonsoft</groupId>
<artifactId>duceap-support-license</artifactId>
</dependency>
<!--数据源-->
<dependency>
<groupId>com.dragonsoft</groupId>
<artifactId>duceap-boot-starter-metadata</artifactId>
</dependency>
<dependency>
<groupId>com.dragonsoft</groupId>
<artifactId>duceap-boot-starter-job</artifactId>
</dependency>
<!--根据数据库类型选择相应的依赖-->
<dependency>
<groupId>com.oracle</groupId>
<artifactId>ojdbc6</artifactId>
</dependency>
</dependencies>
2. application.properties
spring.datasource.url=jdbc:oracle:thin:@20.20.30.112:1521:ORCL
#spring.datasource.url=jdbc:mysql://127.0.0.1:3306/DUCEAP_20?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC
spring.datasource.username=STANDARD_ORG
spring.datasource.password=dragon
#spring.datasource.max-idle=10
#spring.datasource.max-wait=10000
#spring.datasource.min-idle=5
#spring.datasource.initial-size=5
server.port=8086
server.servlet.context-path=/zzjgdmgl
#开启系统参数配置,用于读取系统参数表【T_SYS_PARAMETER】参数到环境变量
duceap.sysparameter.enabled=true
#License认证开关,默认开启
duceap.license.enabled=false
is_deleted=0
duceap.datasource.dynamic.kjdb.datasourceId=SystemDs
当配置duceap.sysparameter.enabled=true
后flyway自动生成T_SYS_PARAMETER
3. flyway.properties
#flyway
duceap.flyway.enabled=true
#数据表空间
duceap.flyway.placeholders.TABLESPACE_DATA=USERS
##索引表空间
duceap.flyway.placeholders.TABLESPACE_INDEX=USERS
##大字段表空间
duceap.flyway.placeholders.TABLESPACE_LOB=USERS
#
##默认根据驱动名进行自动匹配
flyway.dbtype=oracle
#
##当没有配置flyway脚本扫描器类,默认加载此目录下flyway脚本
duceap.flyway.locations=classpath:/sql/zzjgdmgl
duceap.flyway.placeholderPrefix=#{
duceap.flyway.placeholderSuffix=}
duceap.flyway.outOfOrder=true
duceap.flyway.initOnMigrate=true
duceap.flyway.initVersion=0.5.0
duceap.flyway.ignoreFailedFutureMigration=false
4. job.properties
#job调度
#是否开启elasticJob计划,默认为true
duceap.elastic.job.enabled=true
#连接Zookeeper服务器的列表包括IP地址和端口号多个地址用逗号分隔如: host1:2181,host2:2181
duceap.elastic.job.zk.serverLists=20.20.30.151:2181
#Zookeeper的命名空间
duceap.elastic.job.zk.namespace=job_test1
#duceap.elastic.job.zk.digest=root
#cron表达式,用于控制作业触发时间
duceap.elastic.job.MySimpleJob.cron=0/5 * * * * ?
#本地配置是否可覆盖注册中心配置 如果可覆盖,每次启动作业都以本地配置为准
duceap.elastic.job.MySimpleJob.overwrite=true
#作业分片总数
duceap.elastic.job.MySimpleJob.shardingTotalCount=3
#分片序列号和参数用等号分隔,多个键值对用逗号分隔 分片序列号从0开始,不可大于或等于作业分片总数
#如:0=a,1=b,2=c
duceap.elastic.job.MySimpleJob.shardingItemParameters=0=A,1=B,2=C
#作业自定义参数
duceap.elastic.job.MySimpleJob.jobParameter=test
#是否开启任务执行失效转移,默认false
duceap.elastic.job.MySimpleJob.failover=true
#是否开启错过任务重新执行,默认true
duceap.elastic.job.MySimpleJob.misfire=true
duceap.elastic.job.MySimpleJob.description=simple job
#监控作业运行时状态,默认false
duceap.elastic.job.MySimpleJob.monitorExecution=false
#前置后置任务监听实现类
#duceap.elastic.job.MySimpleJob.listener=com.dragonsoft.duceap.elasticjob.handler.MessageElasticJobListener
#扩展异常处理类
#duceap.elastic.job.MySimpleJob.jobExceptionHandler=com.dragonsoft.duceap.elasticjob.handler.CustomJobExceptionHandler
#是否启用JOB
duceap.elastic.job.MySimpleJob.disabled=false
#作业事件追踪的数据源Bean引用
duceap.elastic.job.MySimpleJob.eventTraceRdbDataSource=dataSource
#是否启用Mq作业事件追踪,默认false,当eventTraceRdbDataSource有配置则此优先
#duceap.elastic.job.MySimpleJob.eventTraceMQEnabled=true
#当启用Mq作业事件追踪采用的消息主题,默认90000001主题
#duceap.elastic.job.MySimpleJob.eventTraceMQTopic=90000001
5. 主启动类上加上注解
@EnableScheduling
6. 表结构设计
7. 定时调度表配置
INSERT INTO "T_SCHEDULE_JOB" ("JOB_NAME", "JOB_CLASS", "JOB_TYPE", "CRON", "CRON_DETAIL", "SHARDING_TOTAL_COUNT", "SHARDING_ITEM_PARAMETERS", "JOB_PARAMETER", "FAILOVER", "MISFIRE", "MONITOREXECUTION", "DESCRIPTION", "JOB_PROPERTIES", "OTHER_CONFIG", "APP_CODE", "DISABLED", "CREATE_TIME", "CREATE_USER", "UPDATE_TIME", "STREAMING_PROCESS", "SCRIPT_COMMAND_LINE") VALUES ('StandardJob', 'StandardOrgExtractionJob', 'Simple', '0/5 * * * * ?', NULL, '3', '0=A,1=B,2=C', 'test', '1', '1', '0', 'simple job', NULL, NULL, NULL, '0', NULL, NULL, NULL, NULL, NULL);
@ElasticJobConf
中name属性与表对应,类名就是数据表项JOB_CLASS
@ElasticJobConf(name = "StandardJob",configProvider = ConfigProvider.database )
public class StandardOrgExtractionJob extends AbstractSimpleJob {
@Override
public void execute(ShardingContextWapper shardingContextWapper) {
String shardParamter = shardingContextWapper.getShardingParameter();
System.out.println(shardingContextWapper.getJobName()+"MySimpleJob分片参数:"+shardParamter);
}
}
8. 业务代码
- 从系统参数表中获取配置的数据值进行http请求
- 根据
jobName
查询出对应的业务表名称 - 根据表名称去数据项表查对应的字段名称
- 把返回的数据根据数据项表中的
MAP_NAME
进行解析 - 拼接成为
insert
语句插入业务表
@ElasticJobConf(name = "StandardJob",configProvider = ConfigProvider.database )
public class StandardOrgExtractionJob extends AbstractSimpleJob {
@Override
public void execute(ShardingContextWapper shardingContextWapper) {
int version = Integer.parseInt(SysParameterUtils.getSysParameter("version"));
String appCode = SysParameterUtils.getSysParameter("appCode");
String passWord= SysParameterUtils.getSysParameter("passWord");
String name= SysParameterUtils.getSysParameter("name");
String url= SysParameterUtils.getSysParameter("url");
String needSvs = SysParameterUtils.getSysParameter("needSvs");
String svrIP = SysParameterUtils.getSysParameter("svrIP");
String nPort = SysParameterUtils.getSysParameter("nPort");
ClientForOrg test = new ClientForOrg();
if(needSvs.equals("1")){
test.setNeedSvs(true);
test.initSvs(svrIP,Integer.parseInt(nPort));
}
//test.initHttp(version, appCode, name, passWord, url);
//通过更新时间获取增量机构数据
try {
// Date date = new SimpleDateFormat("yyyy-MM-dd").parse("2010-10-20");
// ReturnDataBean<List<Map<String, Object>>> orgData = test.getOrgByIndate(date, null);
ReturnDataBean<List<Map<String, Object>>> orgData = new ReturnDataBean<>();
List<Map<String, Object>> lMap= new ArrayList<>();
Map<String,Object> mm = new HashMap<>();
mm.put("ORG_CODE01","00000000");
lMap.add(mm);
Map<String,Object> m2 = new HashMap<>();
mm.put("FULL_CODE01","1111111");
lMap.add(m2);
orgData.setData(lMap);
if(orgData.getData().size() != 0){
List<Map<String, Object>> mapTable = PersistentFactory.getJdbcDao().queryForList("select * from T_ORG_DATATABLE where id = '"+jobName+"'");
for(Map<String,Object> table : mapTable){
int i = 0;
String tableName = (String)table.get("TABLE_NAME");
List<Map<String, Object>> mapItem = PersistentFactory.getJdbcDao().queryForList("select * from T_ORG_DATAITEM where TABLE_NAME = '"+tableName+"'");
StringBuilder sql = new StringBuilder("insert into "+tableName+" (");
sql.append(" id, ");
for (Map<String,Object> item : mapItem){
String itemName = (String)item.get("ITEM_NAME");
sql.append(itemName);
if(i<mapItem.size()-1){
sql.append(",");
}
i++;
}
i = 0;
sql.append(") VALUES ( '"+ UUID.randomUUID().toString().replaceAll("-","")+"',");
for (Map<String,Object> item : mapItem){
String mapName = (String)item.get("MAP_NAME");
String mapData = (String) orgData.getData().get(0).get(mapName);
sql.append("'"+mapData+"'");
if(i<mapItem.size()-1){
sql.append(",");
}
i++;
}
sql.append(" )");
PersistentFactory.getJdbcDao().execute(sql.toString());
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
二. java如何生成32位的UUID
String类型去掉某个字符
UUID.randomUUID().toString().replaceAll("-","")
网友评论