From 58af580f84e12b2f29e2abe8dffaeb87c0c551dc Mon Sep 17 00:00:00 2001 From: huzekang <1040080742@qq.com> Date: Thu, 9 May 2019 00:35:17 +0800 Subject: [PATCH] add: 1.mybatis and swagger init --- README.md | 12 +++--- core/pom.xml | 5 +++ .../java/com/alibaba/datax/core/Engine.java | 4 +- datax-web/pom.xml | 31 ++++++++++++++ .../wugui/dataxweb/DataxWebApplication.java | 2 + .../config/MybatisMetaObjectHandler.java | 34 +++++++++++++++ .../dataxweb/config/MybatisPlusConfig.java | 39 ++++++++++++++++++ ...tentController.java => JobController.java} | 7 +++- .../wugui/dataxweb/dao/JobConfigMapper.java | 7 ++++ .../dataxweb/dao/mapping/JobConfigMapper.xml | 22 ++++++++++ .../com/wugui/dataxweb/entity/JobConfig.java | 37 +++++++++++++++++ .../dataxweb/service/JobConfigService.java | 10 +++++ .../src/main/resources/application.properties | 1 - datax-web/src/main/resources/application.yml | 41 +++++++++++++++++++ .../dataxweb/DataxWebApplicationTests.java | 9 ++++ 15 files changed, 251 insertions(+), 10 deletions(-) create mode 100644 datax-web/src/main/java/com/wugui/dataxweb/config/MybatisMetaObjectHandler.java create mode 100644 datax-web/src/main/java/com/wugui/dataxweb/config/MybatisPlusConfig.java rename datax-web/src/main/java/com/wugui/dataxweb/controller/{JobContentController.java => JobController.java} (95%) create mode 100644 datax-web/src/main/java/com/wugui/dataxweb/dao/JobConfigMapper.java create mode 100644 datax-web/src/main/java/com/wugui/dataxweb/dao/mapping/JobConfigMapper.xml create mode 100644 datax-web/src/main/java/com/wugui/dataxweb/entity/JobConfig.java create mode 100644 datax-web/src/main/java/com/wugui/dataxweb/service/JobConfigService.java delete mode 100644 datax-web/src/main/resources/application.properties create mode 100644 datax-web/src/main/resources/application.yml diff --git a/README.md b/README.md index 0df4dff0..80cbc345 100644 --- a/README.md +++ b/README.md @@ -10,13 +10,13 @@ jdk1.8 * [x] springboot重构项目 * [x] 通过restful接口调度datax完成抽取数据作业 * [x] 通过restful接口传入job配置json生成临时文件,根据文件配置调度datax执行该作业 -* [ ] 集成swagger,方便调试 -* [ ] 实现datax分布式作业 -* [ ] 网页端修改job配置的json -* [ ] 网页端实时查看抽取日志 -* [ ] 网页端各种插件模板生成 -* [ ] job配置持久化到db +* [x] 集成swagger,方便调试 +* [x] 集成mybatis plus和h2数据库存放应用数据 +* [ ] 网页端修改并持久化job配置的json到数据库 +* [ ] 网页端实时查看抽取日志,类似Jenkins的日志控制台输出功能 +* [ ] 网页端各种读写插件模板生成,可以在页面组装使用 * [ ] 精简assembly打包结构 +* [ ] 实现datax分布式作业 ## how to run diff --git a/core/pom.xml b/core/pom.xml index abab6fac..bc0d1c9b 100755 --- a/core/pom.xml +++ b/core/pom.xml @@ -33,6 +33,11 @@ commons-configuration ${commons-configuration-version} + + com.h2database + h2 + LATEST + commons-cli commons-cli diff --git a/core/src/main/java/com/alibaba/datax/core/Engine.java b/core/src/main/java/com/alibaba/datax/core/Engine.java index 4e2a4b5b..f6d8d24f 100755 --- a/core/src/main/java/com/alibaba/datax/core/Engine.java +++ b/core/src/main/java/com/alibaba/datax/core/Engine.java @@ -251,7 +251,8 @@ public class Engine { } } - //todo 都是用同一个文件,是否需要考虑线程安全问题 + // todo 都是用同一个文件,是否需要考虑线程安全问题 + // 需要做成异步的,否则前端会一直loading等待完成作业 public static void startJobByJsonStr(String jobJson) { String tmpFilePath = "jobTmp.conf-"+ System.currentTimeMillis(); // 根据json写入到临时本地文件 @@ -285,7 +286,6 @@ public class Engine { } } - //删除临时文件 FileUtil.del(new File("jobTmp.conf")); } diff --git a/datax-web/pom.xml b/datax-web/pom.xml index b6247785..c0253f1b 100644 --- a/datax-web/pom.xml +++ b/datax-web/pom.xml @@ -16,9 +16,40 @@ 1.8 + 3.0.7.1 + 2.9.2 + + + + com.baomidou + mybatis-plus-boot-starter + ${mybatisplus.version} + + + com.baomidou + mybatis-plus-generator + + + + + com.baomidou + mybatis-plus + ${mybatisplus.version} + + + + io.springfox + springfox-swagger2 + ${swagger.version} + + + io.springfox + springfox-swagger-ui + ${swagger.version} + org.springframework.boot spring-boot-starter-web diff --git a/datax-web/src/main/java/com/wugui/dataxweb/DataxWebApplication.java b/datax-web/src/main/java/com/wugui/dataxweb/DataxWebApplication.java index a0650703..74eb2558 100644 --- a/datax-web/src/main/java/com/wugui/dataxweb/DataxWebApplication.java +++ b/datax-web/src/main/java/com/wugui/dataxweb/DataxWebApplication.java @@ -2,7 +2,9 @@ package com.wugui.dataxweb; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; +import springfox.documentation.swagger2.annotations.EnableSwagger2; +@EnableSwagger2 @SpringBootApplication public class DataxWebApplication{ diff --git a/datax-web/src/main/java/com/wugui/dataxweb/config/MybatisMetaObjectHandler.java b/datax-web/src/main/java/com/wugui/dataxweb/config/MybatisMetaObjectHandler.java new file mode 100644 index 00000000..e87438c2 --- /dev/null +++ b/datax-web/src/main/java/com/wugui/dataxweb/config/MybatisMetaObjectHandler.java @@ -0,0 +1,34 @@ +package com.wugui.dataxweb.config; + +import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler; +import lombok.extern.slf4j.Slf4j; +import org.apache.ibatis.reflection.MetaObject; +import org.springframework.stereotype.Component; + +import java.util.Date; + +/** + * 通用的字段填充,如createBy createDate这些字段的自动填充 + * @author huzekang + */ +@Component +@Slf4j +public class MybatisMetaObjectHandler implements MetaObjectHandler { + + @Override + public void insertFill(MetaObject metaObject) { + log.debug("start insert fill ...."); + //todo createBy + Date date = new Date(); + this.setInsertFieldValByName("createDate", date, metaObject); + this.setInsertFieldValByName("updateDate", date, metaObject); + } + + @Override + public void updateFill(MetaObject metaObject) { + //todo updateBY + log.debug("start update fill ...."); + Date date = new Date(); + this.setUpdateFieldValByName("updateDate", date, metaObject); + } +} \ No newline at end of file diff --git a/datax-web/src/main/java/com/wugui/dataxweb/config/MybatisPlusConfig.java b/datax-web/src/main/java/com/wugui/dataxweb/config/MybatisPlusConfig.java new file mode 100644 index 00000000..c4289273 --- /dev/null +++ b/datax-web/src/main/java/com/wugui/dataxweb/config/MybatisPlusConfig.java @@ -0,0 +1,39 @@ +package com.wugui.dataxweb.config; + +import com.baomidou.mybatisplus.core.injector.ISqlInjector; +import com.baomidou.mybatisplus.extension.injector.LogicSqlInjector; +import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor; +import org.mybatis.spring.annotation.MapperScan; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.transaction.annotation.EnableTransactionManagement; + +/** + * MybatisPlus配置类 Spring boot方式 + * @author huzekang + */ +@EnableTransactionManagement +@Configuration +@MapperScan("com.wugui.dataxweb.dao") +public class MybatisPlusConfig { + + /** + * 分页插件 + */ + @Bean + public PaginationInterceptor paginationInterceptor() { + + PaginationInterceptor paginationInterceptor = new PaginationInterceptor(); + return paginationInterceptor.setOverflow(true); + } + + /** + * MyBatisPlus逻辑删除 ,需要在 yml 中配置开启 + * + * @return + */ + @Bean + public ISqlInjector sqlInjector() { + return new LogicSqlInjector(); + } +} diff --git a/datax-web/src/main/java/com/wugui/dataxweb/controller/JobContentController.java b/datax-web/src/main/java/com/wugui/dataxweb/controller/JobController.java similarity index 95% rename from datax-web/src/main/java/com/wugui/dataxweb/controller/JobContentController.java rename to datax-web/src/main/java/com/wugui/dataxweb/controller/JobController.java index 2fa69379..e86f3fce 100644 --- a/datax-web/src/main/java/com/wugui/dataxweb/controller/JobContentController.java +++ b/datax-web/src/main/java/com/wugui/dataxweb/controller/JobController.java @@ -1,6 +1,8 @@ package com.wugui.dataxweb.controller; import com.alibaba.datax.core.Engine; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; @@ -13,7 +15,8 @@ import org.springframework.web.bind.annotation.RestController; * @create: 2019-05-05 14:21 **/ @RestController -public class JobContentController { +@Api(tags = "datax作业接口") +public class JobController { @GetMapping("/testStartJob") public void testStartJob() { @@ -77,6 +80,7 @@ public class JobContentController { } @GetMapping("/mock_stream2stream") + @ApiOperation("提供stream2stream的配置") public String mock2() { return "{\n" + " \"job\": {\n" + @@ -121,6 +125,7 @@ public class JobContentController { * @param jobJson * @return */ + @ApiOperation("通过传入json配置启动一个datax作业") @PostMapping("/runJob") public String runJob(@RequestBody String jobJson) { Engine.startJobByJsonStr(jobJson); diff --git a/datax-web/src/main/java/com/wugui/dataxweb/dao/JobConfigMapper.java b/datax-web/src/main/java/com/wugui/dataxweb/dao/JobConfigMapper.java new file mode 100644 index 00000000..3cc0aab9 --- /dev/null +++ b/datax-web/src/main/java/com/wugui/dataxweb/dao/JobConfigMapper.java @@ -0,0 +1,7 @@ +package com.wugui.dataxweb.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.wugui.dataxweb.entity.JobConfig; + +public interface JobConfigMapper extends BaseMapper { +} \ No newline at end of file diff --git a/datax-web/src/main/java/com/wugui/dataxweb/dao/mapping/JobConfigMapper.xml b/datax-web/src/main/java/com/wugui/dataxweb/dao/mapping/JobConfigMapper.xml new file mode 100644 index 00000000..98ea1d01 --- /dev/null +++ b/datax-web/src/main/java/com/wugui/dataxweb/dao/mapping/JobConfigMapper.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + ID, CONFIG, CREATE_DATE, CREATE_BY, UPDATE_BY, UPDATE_DATE, "STATUS" + + \ No newline at end of file diff --git a/datax-web/src/main/java/com/wugui/dataxweb/entity/JobConfig.java b/datax-web/src/main/java/com/wugui/dataxweb/entity/JobConfig.java new file mode 100644 index 00000000..a4dc0693 --- /dev/null +++ b/datax-web/src/main/java/com/wugui/dataxweb/entity/JobConfig.java @@ -0,0 +1,37 @@ +package com.wugui.dataxweb.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import java.util.Date; +import lombok.Data; + +@Data +@TableName(value = "JOB_CONFIG") +public class JobConfig { + @TableId(value = "ID", type = IdType.AUTO) + private Integer id; + + @TableField(value = "CONFIG") + private String config; + + @TableField(value = "CREATE_DATE") + private Date createDate; + + @TableField(value = "CREATE_BY") + private Integer createBy; + + @TableField(value = "UPDATE_BY") + private Integer updateBy; + + @TableField(value = "UPDATE_DATE") + private Date updateDate; + + @TableField(value = "STATUS") + private Integer status; + + @TableField(value = "USER_ID") + private Integer userID; +} + diff --git a/datax-web/src/main/java/com/wugui/dataxweb/service/JobConfigService.java b/datax-web/src/main/java/com/wugui/dataxweb/service/JobConfigService.java new file mode 100644 index 00000000..7bd5ac14 --- /dev/null +++ b/datax-web/src/main/java/com/wugui/dataxweb/service/JobConfigService.java @@ -0,0 +1,10 @@ +package com.wugui.dataxweb.service; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.wugui.dataxweb.dao.JobConfigMapper; +import com.wugui.dataxweb.entity.JobConfig; +import org.springframework.stereotype.Service; +@Service +public class JobConfigService extends ServiceImpl{ + +} diff --git a/datax-web/src/main/resources/application.properties b/datax-web/src/main/resources/application.properties deleted file mode 100644 index 8b137891..00000000 --- a/datax-web/src/main/resources/application.properties +++ /dev/null @@ -1 +0,0 @@ - diff --git a/datax-web/src/main/resources/application.yml b/datax-web/src/main/resources/application.yml new file mode 100644 index 00000000..baafccbb --- /dev/null +++ b/datax-web/src/main/resources/application.yml @@ -0,0 +1,41 @@ +spring: + #数据源 + datasource: + username: root + password: root + url: jdbc:h2:file:~/H2Data/datax-web;AUTO_SERVER=TRUE;DB_CLOSE_ON_EXIT=FALSE + driver-class-name: org.h2.Driver + h2: + console: + enabled: true + path: /h2-console + settings: + web-allow-others: true + + +mybatis-plus: + # mapper.xml文件扫描 + mapper-locations: classpath*:com/wugui/**/dao/mapping/*.xml + # 实体扫描,多个package用逗号或者分号分隔 + #typeAliasesPackage: com.yibo.essyncclient.*.entity + global-config: + # 数据库相关配置 + db-config: + # 主键类型 AUTO:"数据库ID自增", INPUT:"用户输入ID", ID_WORKER:"全局唯一ID (数字类型唯一ID)", UUID:"全局唯一ID UUID"; + id-type: AUTO + # 字段策略 IGNORED:"忽略判断",NOT_NULL:"非 NULL 判断"),NOT_EMPTY:"非空判断" + field-strategy: NOT_NULL + # 驼峰下划线转换 + column-underline: true + # 逻辑删除 + logic-delete-value: 0 + logic-not-delete-value: 1 + # 数据库类型 + db-type: h2 + banner: false + # mybatis原生配置 + configuration: + map-underscore-to-camel-case: true + cache-enabled: false + call-setters-on-nulls: true + jdbc-type-for-null: 'null' diff --git a/datax-web/src/test/java/com/wugui/dataxweb/DataxWebApplicationTests.java b/datax-web/src/test/java/com/wugui/dataxweb/DataxWebApplicationTests.java index 9fca373f..6756040a 100644 --- a/datax-web/src/test/java/com/wugui/dataxweb/DataxWebApplicationTests.java +++ b/datax-web/src/test/java/com/wugui/dataxweb/DataxWebApplicationTests.java @@ -1,7 +1,10 @@ package com.wugui.dataxweb; +import com.wugui.dataxweb.dao.JobConfigMapper; +import com.wugui.dataxweb.entity.JobConfig; import org.junit.Test; import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.junit4.SpringRunner; @@ -9,8 +12,14 @@ import org.springframework.test.context.junit4.SpringRunner; @SpringBootTest public class DataxWebApplicationTests { + @Autowired + JobConfigMapper jobConfigMapper; + @Test public void contextLoads() { + JobConfig jobConfig = new JobConfig(); + jobConfig.setConfig("{}"); + jobConfigMapper.insert(jobConfig); } }