1.初始化项目结构
1.1 工程依赖关系
1.2 根pom.xml
<?xml version="1.0" encoding="UTF-8"?><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>com.swsm</groupId><artifactId>dttask</artifactId><packaging>pom</packaging><version>1.0-SNAPSHOT</version><modules><module>dttask-common</module><module>dttask-server</module></modules><name>dttask</name><properties><maven.compiler.source>1.8</maven.compiler.source><maven.compiler.target>1.8</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><java.version>1.8</java.version><platform.version>2.0</platform.version><spring-boot.version>2.6.5</spring-boot.version><spring-boot-klock-starter.version>1.4-RELEASE</spring-boot-klock-starter.version><fastjson.version>1.2.72</fastjson.version><lombok.version>1.18.12</lombok.version><swagger2.version>2.8.0</swagger2.version><mybatis-plus.version>3.5.1</mybatis-plus.version><guava.version>31.1-jre</guava.version><easypoi.version>4.1.0</easypoi.version><easyexcel.version>2.2.6</easyexcel.version><common-compress.version>1.19</common-compress.version><httpclient.version>4.5.10</httpclient.version><common-collections.version>4.4</common-collections.version><common-lang3.version>3.9</common-lang3.version><common-fileupload.version>1.4</common-fileupload.version><commons-codec.version>1.13</commons-codec.version><commons-beanutils.version>1.9.4</commons-beanutils.version><commons-io.version>2.6</commons-io.version><reactor-core.version>3.3.9.RELEASE</reactor-core.version><validation-api.version>2.0.1.Final</validation-api.version><poi.version>3.17</poi.version><knife4j-spring-boot-starter.version>2.0.9</knife4j-spring-boot-starter.version><knife4j-spring-ui.version>2.0.9</knife4j-spring-ui.version><jackson-databind.version>2.11.1</jackson-databind.version><spring-boot-klock-starter.version>1.4-RELEASE</spring-boot-klock-starter.version><gson.version>2.6.2</gson.version><mysql-connector.version>8.0.22</mysql-connector.version><postgresql.version>42.2.5</postgresql.version><oracle.version>19.3.0.0</oracle.version><spring-kafka.version>2.3.12.RELEASE</spring-kafka.version><spring-email.version>2.2.11.RELEASE</spring-email.version><spring-boot-starter-jdbc.version>2.1.11.RELEASE</spring-boot-starter-jdbc.version><spring-cloud-alibaba-nacos-discovery.version>2.2.0.RELEASE</spring-cloud-alibaba-nacos-discovery.version><spring-cloud-starter-openfeign.version>3.1.1</spring-cloud-starter-openfeign.version><jsch.version>RELEASE</jsch.version><hutool-all.version>5.8.4</hutool-all.version><itextpdf.version>5.5.11</itextpdf.version><itext-asian.version>5.2.0</itext-asian.version><flying-saucer-pdf-itext5.version>9.1.16</flying-saucer-pdf-itext5.version><jtidy.version>r938</jtidy.version><velocity.version>1.7</velocity.version><velocity-tools.version>2.0</velocity-tools.version><druid.version>1.2.9</druid.version><javax.servlet-api.version>4.0.1</javax.servlet-api.version><kafka.version>2.0.0</kafka.version></properties><dependencyManagement><dependencies><dependency><groupId>com.kymatrix</groupId><artifactId>crawler-protocol-sdk</artifactId><version>1.0-SNAPSHOT</version></dependency><dependency><groupId>com.kymatrix</groupId><artifactId>crawler-common</artifactId><version>1.0-SNAPSHOT</version></dependency><!--springBoot的启动器的包管理器--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-dependencies</artifactId><version>${spring-boot.version}</version><type>pom</type><scope>import</scope><exclusions><exclusion><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-slf4j-impl</artifactId></exclusion><exclusion><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-bom</artifactId></exclusion></exclusions></dependency><!-- spring end --><dependency><groupId>io.netty</groupId><artifactId>netty-all</artifactId><version>4.1.22.Final</version></dependency><!-- swagger begin --><dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger2</artifactId><version>${swagger2.version}</version></dependency><dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger-ui</artifactId><version>${swagger2.version}</version></dependency><dependency><groupId>com.github.xiaoymin</groupId><artifactId>knife4j-spring-ui</artifactId><version>${knife4j-spring-ui.version}</version></dependency><!-- swagger end --><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>${mybatis-plus.version}</version><exclusions><exclusion><groupId>org.apache.tomcat</groupId><artifactId>tomcat-jdbc</artifactId></exclusion></exclusions></dependency><!-- drivers begin --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>${mysql-connector.version}</version></dependency><!-- drivers end --><!-- tools begin --><dependency><groupId>com.google.guava</groupId><artifactId>guava</artifactId><version>${guava.version}</version></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>${lombok.version}</version></dependency><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>${fastjson.version}</version></dependency><dependency><groupId>org.apache.commons</groupId><artifactId>commons-collections4</artifactId><version>${common-collections.version}</version></dependency><dependency><groupId>org.apache.commons</groupId><artifactId>commons-lang3</artifactId><version>${common-lang3.version}</version></dependency><dependency><groupId>commons-codec</groupId><artifactId>commons-codec</artifactId><version>${commons-codec.version}</version></dependency><dependency><groupId>commons-beanutils</groupId><artifactId>commons-beanutils</artifactId><version>${commons-beanutils.version}</version></dependency><dependency><groupId>commons-io</groupId><artifactId>commons-io</artifactId><version>${commons-io.version}</version></dependency><dependency><groupId>io.projectreactor</groupId><artifactId>reactor-core</artifactId><version>${reactor-core.version}</version></dependency><dependency><groupId>javax.validation</groupId><artifactId>validation-api</artifactId><version>${validation-api.version}</version></dependency><dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>${javax.servlet-api.version}</version></dependency><dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>${hutool-all.version}</version></dependency><!-- tools end --></dependencies></dependencyManagement><build><resources><resource><directory>src/main/resources</directory><filtering>false</filtering></resource><resource><directory>src/main/java/</directory><includes><include>**/*.xml</include></includes></resource></resources><pluginManagement><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.1</version><configuration><source>${maven.compiler.source}</source><target>${maven.compiler.target}</target><encoding>${project.build.sourceEncoding}</encoding><skip>false</skip></configuration></plugin><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><version>2.3.4.RELEASE</version><configuration><includeSystemScope>true</includeSystemScope></configuration><executions><execution><goals><goal>repackage</goal></goals></execution></executions></plugin></plugins></pluginManagement><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><configuration><source>${maven.compiler.source}</source><target>${maven.compiler.target}</target><encoding>${project.build.sourceEncoding}</encoding><skip>false</skip></configuration></plugin></plugins></build></project>
2.初始dttask-common工程
dttask-common就是一个普通的java jar应用
2.1 pom.xml
<?xml version="1.0" encoding="UTF-8"?><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"><parent><artifactId>dttask</artifactId><groupId>com.swsm</groupId><version>1.0-SNAPSHOT</version></parent><modelVersion>4.0.0</modelVersion><artifactId>dttask-common</artifactId><packaging>jar</packaging><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><maven.compiler.source>1.8</maven.compiler.source><maven.compiler.target>1.8</maven.compiler.target></properties><dependencies><!-- spring begin --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><exclusions><exclusion><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-tomcat</artifactId></exclusion></exclusions></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-webflux</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-undertow</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId></dependency><!-- spring end --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId></dependency><!-- tools begin --><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency><dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpclient</artifactId></dependency><dependency><groupId>org.apache.commons</groupId><artifactId>commons-collections4</artifactId></dependency><dependency><groupId>org.apache.commons</groupId><artifactId>commons-lang3</artifactId></dependency><dependency><groupId>commons-codec</groupId><artifactId>commons-codec</artifactId></dependency><dependency><groupId>commons-beanutils</groupId><artifactId>commons-beanutils</artifactId></dependency><dependency><groupId>commons-io</groupId><artifactId>commons-io</artifactId></dependency><dependency><groupId>io.projectreactor</groupId><artifactId>reactor-core</artifactId></dependency><dependency><groupId>javax.validation</groupId><artifactId>validation-api</artifactId></dependency><dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><scope>provided</scope></dependency><dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger2</artifactId></dependency><dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger-ui</artifactId></dependency><dependency><groupId>com.github.xiaoymin</groupId><artifactId>knife4j-spring-ui</artifactId></dependency><dependency><groupId>com.google.guava</groupId><artifactId>guava</artifactId></dependency><dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId></dependency><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><exclusions><exclusion><groupId>org.apache.tomcat</groupId><artifactId>tomcat-jdbc</artifactId></exclusion></exclusions></dependency></dependencies></project>
2.2 初始化数据库相关类,为mybatis-plus做准备
这里Job类、DttaskJob类、DeviceLink类中使用了对象字段,数据库使用了mysql的json字段格式,使用了FastjsonTypeHandler类,具体代码如下:
@Data
@TableName(value = "t_job", autoResultMap = true)
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class Job extends BaseEntity implements Serializable {@TableField("device_id")private Long deviceId;@TableField("device_link_id")private Long deviceLinkId;@TableField("link_type")private Integer linkType;@TableField(value = "link_spec", typeHandler = FastjsonTypeHandler.class)private LinkSpec linkSpec;@TableField(value = "job_spec", typeHandler = FastjsonTypeHandler.class)private JobSpec jobSpec;
}
3.初始化dttask-server工程
3.1 pom.xml
<?xml version="1.0" encoding="UTF-8"?><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"><parent><artifactId>dttask</artifactId><groupId>com.swsm</groupId><version>1.0-SNAPSHOT</version></parent><modelVersion>4.0.0</modelVersion><artifactId>dttask-server</artifactId><packaging>jar</packaging><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties><dependencies><dependency><groupId>com.kymatrix</groupId><artifactId>crawler-protocol-sdk</artifactId></dependency><dependency><groupId>com.kymatrix</groupId><artifactId>crawler-common</artifactId></dependency><dependency><groupId>io.netty</groupId><artifactId>netty-all</artifactId></dependency><dependency><groupId>org.apache.kafka</groupId><artifactId>kafka-clients</artifactId></dependency><dependency><groupId>com.ghgande</groupId><artifactId>j2mod</artifactId><version>2.3.5</version> <!-- 使用最新版本 --></dependency><dependency><groupId>org.eclipse.paho</groupId><artifactId>org.eclipse.paho.client.mqttv3</artifactId><version>1.2.4</version></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>
3.2 服务启动类及mybatis、swagger配置类
3.3 验证
启动dttask-server,访问 http://127.0.0.1:9088/doc.html#/home,可看到如下 swagger界面
4. 工程加入git版本控制
工程加入git版本控制,就不在这里截图了,几步操作,不会的人可以网上搜搜,此时代码作为我们的0.1版本
5.数据库脚本
/*Navicat Premium Data TransferSource Server : mysqlSource Server Type : MySQLSource Server Version : 50726Source Host : 127.0.0.1:3306Source Schema : dttask-serverTarget Server Type : MySQLTarget Server Version : 50726File Encoding : 65001Date: 14/12/2023 16:47:25
*/SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;-- ----------------------------
-- Table structure for t_device
-- ----------------------------
DROP TABLE IF EXISTS `t_device`;
CREATE TABLE `t_device` (`id` bigint(20) NOT NULL,`name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,`code` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,`remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,`delete_flag` int(1) NOT NULL DEFAULT 0,`created_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,`updated_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;-- ----------------------------
-- Table structure for t_device_link
-- ----------------------------
DROP TABLE IF EXISTS `t_device_link`;
CREATE TABLE `t_device_link` (`id` bigint(20) NOT NULL,`device_id` bigint(20) NOT NULL,`link_type` int(2) NOT NULL COMMENT '0:modbus rtu; 1:modbus tcp; 2:mqtt',`link_spec` json NOT NULL,`remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,`delete_flag` int(1) NOT NULL DEFAULT 0,`created_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,`updated_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;-- ----------------------------
-- Table structure for t_dttask
-- ----------------------------
DROP TABLE IF EXISTS `t_dttask`;
CREATE TABLE `t_dttask` (`id` bigint(20) NOT NULL,`name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,`code` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,`ip_address` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,`port` int(8) NOT NULL,`status` int(1) NOT NULL COMMENT '0: 下线 1:上线 ',`remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,`delete_flag` int(1) NOT NULL DEFAULT 0,`created_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,`updated_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;-- ----------------------------
-- Table structure for t_dttask_job
-- ----------------------------
DROP TABLE IF EXISTS `t_dttask_job`;
CREATE TABLE `t_dttask_job` (`id` bigint(20) NOT NULL,`dttask_id` bigint(20) NOT NULL,`device_id` bigint(20) NOT NULL,`device_link_id` bigint(20) NOT NULL,`job_id` bigint(20) NOT NULL,`link_type` int(2) NOT NULL COMMENT '0:modbus rtu; 1:modbus tcp; 2:mqtt',`link_spec` json NOT NULL,`job_spec` json NOT NULL,`status` int(1) NOT NULL COMMENT '0: 创建 1:运行 2:暂停 3:异常',`remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,`delete_flag` int(1) NOT NULL DEFAULT 0,`created_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,`updated_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;-- ----------------------------
-- Table structure for t_dttask_job_history
-- ----------------------------
DROP TABLE IF EXISTS `t_dttask_job_history`;
CREATE TABLE `t_dttask_job_history` (`id` bigint(20) NOT NULL,`dttask_id` bigint(20) NOT NULL,`device_id` bigint(20) NOT NULL,`device_link_id` bigint(20) NOT NULL,`job_id` bigint(20) NOT NULL,`link_type` int(2) NOT NULL COMMENT '0:modbus rtu; 1:modbus tcp; 2:mqtt',`link_spec` json NOT NULL,`job_spec` json NOT NULL,`status` int(1) NOT NULL COMMENT '0: 创建 1:运行 2:暂停 3:异常',`remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,`delete_flag` int(1) NOT NULL DEFAULT 0,`created_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,`updated_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;-- ----------------------------
-- Table structure for t_job
-- ----------------------------
DROP TABLE IF EXISTS `t_job`;
CREATE TABLE `t_job` (`id` bigint(20) NOT NULL,`device_id` bigint(20) NOT NULL,`device_link_id` bigint(20) NOT NULL,`link_type` int(2) NOT NULL COMMENT '0:modbus rtu; 1:modbus tcp; 2:mqtt',`link_spec` json NOT NULL,`job_spec` json NOT NULL,`remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,`delete_flag` int(1) NOT NULL DEFAULT 0,`created_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,`updated_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;SET FOREIGN_KEY_CHECKS = 1;