diff --git a/README.md b/README.md index 5aac19899fc36d77fc3d7e8d315a29a32498609f..c0c91f5ef93298fb39a363444fc8c70c70a2f035 100644 --- a/README.md +++ b/README.md @@ -27,6 +27,7 @@ SpringBoot应用集合 - [SpringBoot整合netty](https://gitee.com/superbutton/SpringBoot-Components/tree/develop/Springboot-Netty-Parent) - [SpringBoot整合webservice](https://gitee.com/superbutton/SpringBoot-Components/tree/develop/Springboot-Webservice) - [SpringBoot整合ActiveMq](https://gitee.com/superbutton/SpringBoot-Components/tree/develop/Springboot-ActiveMq) -- [SpringBoot整合Knife4j](https://gitee.com/superbutton/SpringBoot-Components/tree/develop/springboot-knife4j) +- [SpringBoot整合Knife4j](https://gitee.com/superbutton/SpringBoot-Components/tree/develop/springboot-knife4j) +- [springboot-pagehelper实现分页查询](https://gitee.com/superbutton/SpringBoot-Components/tree/develop/Springboot-pagehelper) diff --git a/Springboot-pagehelper/README.md b/Springboot-pagehelper/README.md new file mode 100644 index 0000000000000000000000000000000000000000..ae8d8494cabe6d3ba979dbe611f9ad042253ef92 --- /dev/null +++ b/Springboot-pagehelper/README.md @@ -0,0 +1,3 @@ +springboot-pagehelper实现分页查询 +相关讲解:https://www.cnblogs.com/zhengyuanyuan/p/10767408.html +接口文档: http://localhost:8082/doc.html \ No newline at end of file diff --git a/Springboot-pagehelper/pom.xml b/Springboot-pagehelper/pom.xml new file mode 100644 index 0000000000000000000000000000000000000000..d85ec76c25bfa6ef1942213020fbeeb74e7c8269 --- /dev/null +++ b/Springboot-pagehelper/pom.xml @@ -0,0 +1,96 @@ + + + 4.0.0 + + org.springframework.boot + spring-boot-starter-parent + 2.5.1 + + + com.button + Springboot-pagehelper + 0.0.1-SNAPSHOT + Springboot-pagehelper + springboot整合pagehelper + + 1.8 + + + + org.springframework.boot + spring-boot-starter-web + + + + org.springframework.boot + spring-boot-devtools + runtime + true + + + org.projectlombok + lombok + true + + + org.springframework.boot + spring-boot-starter-test + test + + + io.springfox + springfox-boot-starter + 3.0.0 + + + com.github.xiaoymin + knife4j-spring-boot-starter + 2.0.8 + + + com.github.pagehelper + pagehelper-spring-boot-starter + 1.2.5 + + + org.mybatis + mybatis + + + org.mybatis + mybatis-spring + + + + + + com.baomidou + mybatis-plus-boot-starter + 3.3.1.tmp + + + mysql + mysql-connector-java + runtime + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + org.projectlombok + lombok + + + + + + + + diff --git a/Springboot-pagehelper/src/main/java/com/button/SpringbootPagehelperApplication.java b/Springboot-pagehelper/src/main/java/com/button/SpringbootPagehelperApplication.java new file mode 100644 index 0000000000000000000000000000000000000000..bdbb3f444b3615e2cc8278da1fee0a396f6d5a98 --- /dev/null +++ b/Springboot-pagehelper/src/main/java/com/button/SpringbootPagehelperApplication.java @@ -0,0 +1,13 @@ +package com.button; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +public class SpringbootPagehelperApplication { + + public static void main(String[] args) { + SpringApplication.run(SpringbootPagehelperApplication.class, args); + } + +} diff --git a/Springboot-pagehelper/src/main/java/com/button/config/Swagger2Config.java b/Springboot-pagehelper/src/main/java/com/button/config/Swagger2Config.java new file mode 100644 index 0000000000000000000000000000000000000000..a5f928169875cf90e572a0501f63fa01bae3ebc8 --- /dev/null +++ b/Springboot-pagehelper/src/main/java/com/button/config/Swagger2Config.java @@ -0,0 +1,38 @@ +package com.button.config; + +import com.github.xiaoymin.knife4j.spring.annotations.EnableKnife4j; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import springfox.documentation.builders.ApiInfoBuilder; +import springfox.documentation.builders.PathSelectors; +import springfox.documentation.builders.RequestHandlerSelectors; +import springfox.documentation.service.ApiInfo; +import springfox.documentation.spi.DocumentationType; +import springfox.documentation.spring.web.plugins.Docket; +import springfox.documentation.swagger2.annotations.EnableSwagger2; + +@Configuration +@EnableSwagger2 +@EnableKnife4j +public class Swagger2Config { + @Bean + public Docket createRestApi() { + return new Docket(DocumentationType.SWAGGER_2) + .useDefaultResponseMessages(false) + .apiInfo(apiInfo()) + .select() + .apis(RequestHandlerSelectors.basePackage("com.button.controller")) + .paths(PathSelectors.any()) + .build(); + + } + + private ApiInfo apiInfo() { + return new ApiInfoBuilder() + .title("springboot整合Knife4j") + .description("springboot整合Knife4j") + .termsOfServiceUrl("http://localhost:8080/") + .version("1.0") + .build(); + } +} diff --git a/Springboot-pagehelper/src/main/java/com/button/controller/UserController.java b/Springboot-pagehelper/src/main/java/com/button/controller/UserController.java new file mode 100644 index 0000000000000000000000000000000000000000..3b65e06bdf184b9f662b1a892ceb99720e7d174f --- /dev/null +++ b/Springboot-pagehelper/src/main/java/com/button/controller/UserController.java @@ -0,0 +1,33 @@ +package com.button.controller; + +import com.button.domain.entity.User; +import com.button.domain.request.UserRequestVo; +import com.button.domain.vo.PageResult; +import com.button.service.UserService; +import com.github.pagehelper.Page; +import com.github.pagehelper.PageHelper; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +@Slf4j +@RestController +@RequestMapping("/api/user") +@Api(tags = "用户相关接口") +public class UserController { + + @Autowired + private UserService userService; + + @PostMapping(value = "/list") + @ApiOperation(value = "获取用户列表", httpMethod = "POST", response = List.class,notes = "button") + public PageResult listPage(@RequestBody UserRequestVo userRequestVo) { + Page startPage = PageHelper.startPage(userRequestVo.getPage(), userRequestVo.getPageline()); + List list = userService.getListPage(userRequestVo); + return PageResult.getPage(userRequestVo.getPage(),startPage.getPageSize(), startPage.getTotal(), list); + } +} diff --git a/Springboot-pagehelper/src/main/java/com/button/domain/entity/User.java b/Springboot-pagehelper/src/main/java/com/button/domain/entity/User.java new file mode 100644 index 0000000000000000000000000000000000000000..92268171720f660505c893b918f20b964639e757 --- /dev/null +++ b/Springboot-pagehelper/src/main/java/com/button/domain/entity/User.java @@ -0,0 +1,44 @@ +package com.button.domain.entity; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +@TableName("tb_user") +@ApiModel(description = "用户") +public class User { + /** + * 主键id + */ + @ApiModelProperty(value = "主键id") + @TableId(value="id") + @JsonFormat(shape = JsonFormat.Shape.STRING) + private Integer id; + + /** + * 姓名 + */ + @ApiModelProperty(value = "姓名") + @TableField("name") + private String name; + + /** + * 年龄 + */ + @ApiModelProperty(value = "年龄") + @TableField("age") + private Integer age; + + /** + * 地址 + */ + @ApiModelProperty(value = "地址") + @TableField("address") + private String address; + +} diff --git a/Springboot-pagehelper/src/main/java/com/button/domain/request/UserRequestVo.java b/Springboot-pagehelper/src/main/java/com/button/domain/request/UserRequestVo.java new file mode 100644 index 0000000000000000000000000000000000000000..bb985c650c3f8aac1809bb7b64860a352867dc6f --- /dev/null +++ b/Springboot-pagehelper/src/main/java/com/button/domain/request/UserRequestVo.java @@ -0,0 +1,18 @@ +package com.button.domain.request; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +@ApiModel("用户请求实体基础类") +public class UserRequestVo { + + @ApiModelProperty(value = "当前页", required = true, example = "1", position = 0, dataType = "Integer") + private Integer page = 1; + + @ApiModelProperty(value = "每页显示数量", required = true, example = "10", position = 1, dataType = "Integer") + private Integer pageline = 10; +} diff --git a/Springboot-pagehelper/src/main/java/com/button/domain/vo/PageResult.java b/Springboot-pagehelper/src/main/java/com/button/domain/vo/PageResult.java new file mode 100644 index 0000000000000000000000000000000000000000..93fec12dc473a3df84a94e5a2c5c9ad6ecb0ce15 --- /dev/null +++ b/Springboot-pagehelper/src/main/java/com/button/domain/vo/PageResult.java @@ -0,0 +1,39 @@ +package com.button.domain.vo; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +@Data +@ApiModel +public class PageResult { + + public static PageResult getPage(long cur, long line, long total, List records) { + PageInfo pageInfo = new PageInfo(cur, line, total); + PageResult pageResult = new PageResult<>(); + + pageResult.setItems(records); + pageResult.setPage(pageInfo); + + return pageResult; + } + + private List items; + + private PageInfo page; + + @Data + @AllArgsConstructor + @NoArgsConstructor + static class PageInfo { + @ApiModelProperty(value = "当前页", example = "1") + private long cur; + @ApiModelProperty(value = "页面大小", example = "10") + private long line; + @ApiModelProperty(value = "总记录数", example = "20") + private long total; + } +} diff --git a/Springboot-pagehelper/src/main/java/com/button/mapper/UserMapper.java b/Springboot-pagehelper/src/main/java/com/button/mapper/UserMapper.java new file mode 100644 index 0000000000000000000000000000000000000000..ee97934e93f960466355df24eb1bf70f720ef174 --- /dev/null +++ b/Springboot-pagehelper/src/main/java/com/button/mapper/UserMapper.java @@ -0,0 +1,12 @@ +package com.button.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.button.domain.entity.User; +import org.apache.ibatis.annotations.Mapper; +import org.springframework.stereotype.Repository; + +@Mapper +@Repository +public interface UserMapper extends BaseMapper { + +} diff --git a/Springboot-pagehelper/src/main/java/com/button/service/UserService.java b/Springboot-pagehelper/src/main/java/com/button/service/UserService.java new file mode 100644 index 0000000000000000000000000000000000000000..1f0de2e7b8b2f4f7304cff23b27314db49315746 --- /dev/null +++ b/Springboot-pagehelper/src/main/java/com/button/service/UserService.java @@ -0,0 +1,14 @@ +package com.button.service; + +import com.button.domain.request.UserRequestVo; + +import java.util.List; + +/** + * @author ZhangHang + * @Description + * @create 2021/6/18 + */ +public interface UserService { + List getListPage(UserRequestVo userRequestVo); +} diff --git a/Springboot-pagehelper/src/main/java/com/button/service/impl/UserServiceImpl.java b/Springboot-pagehelper/src/main/java/com/button/service/impl/UserServiceImpl.java new file mode 100644 index 0000000000000000000000000000000000000000..c7ca8d90399c9311b1dbfd77cd873d03ec78006a --- /dev/null +++ b/Springboot-pagehelper/src/main/java/com/button/service/impl/UserServiceImpl.java @@ -0,0 +1,27 @@ +package com.button.service.impl; + +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.button.domain.request.UserRequestVo; +import com.button.mapper.UserMapper; +import com.button.service.UserService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * @author ZhangHang + * @Description + * @create 2021/6/18 + */ +@Service +public class UserServiceImpl implements UserService { + + @Autowired + private UserMapper userMapper; + + @Override + public List getListPage(UserRequestVo userRequestVo) { + return userMapper.selectList(Wrappers.emptyWrapper()); + } +} diff --git a/Springboot-pagehelper/src/main/resources/application.yml b/Springboot-pagehelper/src/main/resources/application.yml new file mode 100644 index 0000000000000000000000000000000000000000..0359a7655fda5477e39da12a96013763f8837000 --- /dev/null +++ b/Springboot-pagehelper/src/main/resources/application.yml @@ -0,0 +1,14 @@ +server: + port: 8082 + +spring: + datasource: + type: com.zaxxer.hikari.HikariDataSource + driver-class-name: com.mysql.jdbc.Driver + url: jdbc:mysql://dev.apibutton.top:3306/button-test?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&transformedBitIsBoolean=true&useSSL=false + username: root + password: zhZH940126 + hikari: + maximum-pool-size: 1000 + minimum-idle: 100 + diff --git a/Springboot-pagehelper/src/test/java/com/button/DemoApplicationTests.java b/Springboot-pagehelper/src/test/java/com/button/DemoApplicationTests.java new file mode 100644 index 0000000000000000000000000000000000000000..0e5fa81482560114f32b8873503686584247d7f3 --- /dev/null +++ b/Springboot-pagehelper/src/test/java/com/button/DemoApplicationTests.java @@ -0,0 +1,13 @@ +package com.button; + +import org.junit.jupiter.api.Test; +import org.springframework.boot.test.context.SpringBootTest; + +@SpringBootTest +class DemoApplicationTests { + + @Test + void contextLoads() { + } + +} diff --git a/Springboot-pagehelper/tb_user.sql b/Springboot-pagehelper/tb_user.sql new file mode 100644 index 0000000000000000000000000000000000000000..ee49493d3574823863b7591c51e71e555f73f433 --- /dev/null +++ b/Springboot-pagehelper/tb_user.sql @@ -0,0 +1,47 @@ +/* +Navicat MySQL Data Transfer + +Source Server : local +Source Server Version : 80019 +Source Host : dev.apibutton.top:3306 +Source Database : button-test + +Target Server Type : MYSQL +Target Server Version : 80019 +File Encoding : 65001 + +Date: 2021-06-18 15:25:14 +*/ + +SET FOREIGN_KEY_CHECKS=0; +CREATE SCHEMA `button-test` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_bin ; + +-- ---------------------------- +-- Table structure for tb_user +-- ---------------------------- +DROP TABLE IF EXISTS `tb_user`; +CREATE TABLE `tb_user` ( + `id` int NOT NULL AUTO_INCREMENT, + `name` varchar(45) COLLATE utf8mb4_bin DEFAULT NULL, + `age` int DEFAULT NULL, + `address` varchar(45) COLLATE utf8mb4_bin DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=15 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin; + +-- ---------------------------- +-- Records of tb_user +-- ---------------------------- +INSERT INTO `tb_user` VALUES ('1', 'button', '18', '陕西西安'); +INSERT INTO `tb_user` VALUES ('2', 'radio', '19', '陕西渭南'); +INSERT INTO `tb_user` VALUES ('3', 'button1', '18', '陕西西安'); +INSERT INTO `tb_user` VALUES ('4', 'radio1', '19', '陕西渭南'); +INSERT INTO `tb_user` VALUES ('5', 'button2', '18', '陕西西安'); +INSERT INTO `tb_user` VALUES ('6', 'radio2', '19', '陕西渭南'); +INSERT INTO `tb_user` VALUES ('7', 'button3', '18', '陕西西安'); +INSERT INTO `tb_user` VALUES ('8', 'radio3', '19', '陕西渭南'); +INSERT INTO `tb_user` VALUES ('9', 'button4', '18', '陕西西安'); +INSERT INTO `tb_user` VALUES ('10', 'radio4', '19', '陕西渭南'); +INSERT INTO `tb_user` VALUES ('11', 'button5', '18', '陕西西安'); +INSERT INTO `tb_user` VALUES ('12', 'radio5', '19', '陕西渭南'); +INSERT INTO `tb_user` VALUES ('13', 'button6', '18', '陕西西安'); +INSERT INTO `tb_user` VALUES ('14', 'radio6', '19', '陕西渭南'); diff --git a/springboot-knife4j/src/main/java/com/button/domain/bean/User.java b/springboot-knife4j/src/main/java/com/button/domain/bean/User.java new file mode 100644 index 0000000000000000000000000000000000000000..8e7a1dfd0e967f25c35f92fde7f87f58d0763550 --- /dev/null +++ b/springboot-knife4j/src/main/java/com/button/domain/bean/User.java @@ -0,0 +1,10 @@ +package com.button.domain.bean; + +import lombok.Data; + +@Data +public class User { + + private String userName; + private String password; +} diff --git a/springboot-xxljob/README.md b/springboot-xxljob/README.md new file mode 100644 index 0000000000000000000000000000000000000000..7c3189189ede08f0d06db6a5fa60a3f2667c4f6c --- /dev/null +++ b/springboot-xxljob/README.md @@ -0,0 +1,10 @@ +1、先执行xxl-job.sql(https://github.com/xuxueli/xxl-job或者https://gitee.com/xuxueli0323/xxl-job) +2、修改jar包中的xxl-job-admin-2.2.1-SNAPSHOT.jar相关数据库配置并启动 +3、修改application.yml中的相关配置 + +依赖: + + com.xuxueli + xxl-job-core + 2.2.0 + \ No newline at end of file diff --git a/springboot-xxljob/pom.xml b/springboot-xxljob/pom.xml new file mode 100644 index 0000000000000000000000000000000000000000..626b99eed7468f06a382cad237c97bde292a5cf8 --- /dev/null +++ b/springboot-xxljob/pom.xml @@ -0,0 +1,93 @@ + + + 4.0.0 + + org.springframework.boot + spring-boot-starter-parent + 2.5.0 + + + com.button + springboot-xxljob + 0.0.1-SNAPSHOT + springboot-xxljob + springboot整合xxl-job + + 1.8 + + + + org.springframework.boot + spring-boot-starter-data-redis + + + org.springframework.boot + spring-boot-starter-data-rest + + + org.springframework.boot + spring-boot-starter-jdbc + + + org.springframework.boot + spring-boot-starter-web + + + org.springframework.boot + spring-boot-devtools + runtime + true + + + org.projectlombok + lombok + true + + + org.springframework.boot + spring-boot-starter-test + test + + + com.xuxueli + xxl-job-core + 2.2.0 + + + + org.mybatis.spring.boot + mybatis-spring-boot-starter + 1.1.1 + + + + mysql + mysql-connector-java + + + + com.alibaba + druid + 1.1.10 + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + org.projectlombok + lombok + + + + + + + + diff --git a/springboot-xxljob/src/main/java/com/button/SpringbootXxljobApplication.java b/springboot-xxljob/src/main/java/com/button/SpringbootXxljobApplication.java new file mode 100644 index 0000000000000000000000000000000000000000..8338c5595c78a08dcf165287710225a9f9e9a4a4 --- /dev/null +++ b/springboot-xxljob/src/main/java/com/button/SpringbootXxljobApplication.java @@ -0,0 +1,13 @@ +package com.button; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +public class SpringbootXxljobApplication { + + public static void main(String[] args) { + SpringApplication.run(SpringbootXxljobApplication.class, args); + } + +} diff --git a/springboot-xxljob/src/main/java/com/button/config/XxlJobConfig.java b/springboot-xxljob/src/main/java/com/button/config/XxlJobConfig.java new file mode 100644 index 0000000000000000000000000000000000000000..1e3af152115cd9a1947428286a24a6249e69a19a --- /dev/null +++ b/springboot-xxljob/src/main/java/com/button/config/XxlJobConfig.java @@ -0,0 +1,52 @@ +package com.button.config; + +import com.xxl.job.core.executor.impl.XxlJobSpringExecutor; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +@Configuration +public class XxlJobConfig { + private final Logger logger = LoggerFactory.getLogger(XxlJobConfig.class); + + @Value("${xxl.job.admin.addresses}") + private String adminAddresses; + + @Value("${xxl.job.accessToken}") + private String accessToken; + + @Value("${xxl.job.executor.appname}") + private String appname; + + @Value("${xxl.job.executor.address}") + private String address; + + @Value("${xxl.job.executor.ip}") + private String ip; + + @Value("${xxl.job.executor.port}") + private int port; + + @Value("${xxl.job.executor.logpath}") + private String logPath; + + @Value("${xxl.job.executor.logretentiondays}") + private int logRetentionDays; + + @Bean + public XxlJobSpringExecutor xxlJobExecutor() { + logger.info(">>>>>>>>>>> xxl-job config init >>>>>>>>>>> "); + XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor(); + xxlJobSpringExecutor.setAdminAddresses(adminAddresses); + xxlJobSpringExecutor.setAppname(appname); + xxlJobSpringExecutor.setAddress(address); + xxlJobSpringExecutor.setIp(ip); + xxlJobSpringExecutor.setPort(port); + xxlJobSpringExecutor.setAccessToken(accessToken); + xxlJobSpringExecutor.setLogPath(logPath); + xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays); + return xxlJobSpringExecutor; + } +} diff --git a/springboot-xxljob/src/main/java/com/button/job/TestJobSimple.java b/springboot-xxljob/src/main/java/com/button/job/TestJobSimple.java new file mode 100644 index 0000000000000000000000000000000000000000..3b6428b7ad9194093a0a4a7a0bc0cf032d878cba --- /dev/null +++ b/springboot-xxljob/src/main/java/com/button/job/TestJobSimple.java @@ -0,0 +1,36 @@ +package com.button.job; + +import com.xxl.job.core.biz.model.ReturnT; +import com.xxl.job.core.handler.annotation.XxlJob; +import com.xxl.job.core.log.XxlJobLogger; +import com.xxl.job.core.util.ShardingUtil; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +@Component +@Slf4j +public class TestJobSimple { + + @XxlJob(value = "simpleJobHandler") + public ReturnT simpleJobHandler(String arg) { + log.info("一个简单的job. arg={}", arg); + return ReturnT.SUCCESS; + } + + @XxlJob(value = "shardingJobHandler") + public ReturnT shardingJobHandler(String param) throws Exception{ + log.info("shardingJobHandler -> param={}", param); + // 分片参数 + ShardingUtil.ShardingVO shardingVO = ShardingUtil.getShardingVo(); + log.info("总分片数 -> total={}", shardingVO.getTotal()); + // 业务逻辑 + for (int i = 0; i < shardingVO.getTotal(); i++) { + if (i == shardingVO.getIndex()) { + log.info("第 {} 片, 命中分片开始处理", i); + } else { + log.info("第 {} 片, 忽略", i); + } + } + return ReturnT.SUCCESS; + } +} diff --git a/springboot-xxljob/src/main/resources/application.yml b/springboot-xxljob/src/main/resources/application.yml new file mode 100644 index 0000000000000000000000000000000000000000..55d69a0195088fa925601f8951f0628ff8196269 --- /dev/null +++ b/springboot-xxljob/src/main/resources/application.yml @@ -0,0 +1,31 @@ +server: + port: 8069 + tomcat: + uri-encoding: UTF-8 + accept-count: 1000 + max-connections: 5000 + threads: + max: 1000 + min-spare: 100 + +spring: + datasource: + type: com.alibaba.druid.pool.DruidDataSource + driver-class-name: com.mysql.jdbc.Driver + url: jdbc:mysql://dev.apibutton.top:3306/xxl_job?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&transformedBitIsBoolean=true&useSSL=false + username: root + password: zhZH940126 + +#xxl-job相关配置 +xxl: + job: + accessToken: '' + admin: + addresses: http://dev.apibutton.top:8089/xxl-job-admin + executor: + address: '' + appname: xxl-job-executor-boot-test + ip: '' + logpath: /data/applogs/xxl-job/jobhandler + logretentiondays: -1 + port: 8901 \ No newline at end of file diff --git a/springboot-xxljob/xxl-job-admin-2.2.1-SNAPSHOT.jar b/springboot-xxljob/xxl-job-admin-2.2.1-SNAPSHOT.jar new file mode 100644 index 0000000000000000000000000000000000000000..046044f83bac845ae5604d40ec8e727304611372 Binary files /dev/null and b/springboot-xxljob/xxl-job-admin-2.2.1-SNAPSHOT.jar differ diff --git a/springboot-xxljob/xxl-job.sql b/springboot-xxljob/xxl-job.sql new file mode 100644 index 0000000000000000000000000000000000000000..ab63bf0a0a4e0573cf571c163c64023c77e2184c --- /dev/null +++ b/springboot-xxljob/xxl-job.sql @@ -0,0 +1,117 @@ +CREATE database if NOT EXISTS `xxl_job` default character set utf8mb4 collate utf8mb4_unicode_ci; +use `xxl_job`; + +SET NAMES utf8mb4; + +CREATE TABLE `xxl_job_info` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `job_group` int(11) NOT NULL COMMENT '执行器主键ID', + `job_desc` varchar(255) NOT NULL, + `add_time` datetime DEFAULT NULL, + `update_time` datetime DEFAULT NULL, + `author` varchar(64) DEFAULT NULL COMMENT '作者', + `alarm_email` varchar(255) DEFAULT NULL COMMENT '报警邮件', + `schedule_type` varchar(50) NOT NULL DEFAULT 'NONE' COMMENT '调度类型', + `schedule_conf` varchar(128) DEFAULT NULL COMMENT '调度配置,值含义取决于调度类型', + `misfire_strategy` varchar(50) NOT NULL DEFAULT 'DO_NOTHING' COMMENT '调度过期策略', + `executor_route_strategy` varchar(50) DEFAULT NULL COMMENT '执行器路由策略', + `executor_handler` varchar(255) DEFAULT NULL COMMENT '执行器任务handler', + `executor_param` varchar(512) DEFAULT NULL COMMENT '执行器任务参数', + `executor_block_strategy` varchar(50) DEFAULT NULL COMMENT '阻塞处理策略', + `executor_timeout` int(11) NOT NULL DEFAULT '0' COMMENT '任务执行超时时间,单位秒', + `executor_fail_retry_count` int(11) NOT NULL DEFAULT '0' COMMENT '失败重试次数', + `glue_type` varchar(50) NOT NULL COMMENT 'GLUE类型', + `glue_source` mediumtext COMMENT 'GLUE源代码', + `glue_remark` varchar(128) DEFAULT NULL COMMENT 'GLUE备注', + `glue_updatetime` datetime DEFAULT NULL COMMENT 'GLUE更新时间', + `child_jobid` varchar(255) DEFAULT NULL COMMENT '子任务ID,多个逗号分隔', + `trigger_status` tinyint(4) NOT NULL DEFAULT '0' COMMENT '调度状态:0-停止,1-运行', + `trigger_last_time` bigint(13) NOT NULL DEFAULT '0' COMMENT '上次调度时间', + `trigger_next_time` bigint(13) NOT NULL DEFAULT '0' COMMENT '下次调度时间', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; + +CREATE TABLE `xxl_job_log` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT, + `job_group` int(11) NOT NULL COMMENT '执行器主键ID', + `job_id` int(11) NOT NULL COMMENT '任务,主键ID', + `executor_address` varchar(255) DEFAULT NULL COMMENT '执行器地址,本次执行的地址', + `executor_handler` varchar(255) DEFAULT NULL COMMENT '执行器任务handler', + `executor_param` varchar(512) DEFAULT NULL COMMENT '执行器任务参数', + `executor_sharding_param` varchar(20) DEFAULT NULL COMMENT '执行器任务分片参数,格式如 1/2', + `executor_fail_retry_count` int(11) NOT NULL DEFAULT '0' COMMENT '失败重试次数', + `trigger_time` datetime DEFAULT NULL COMMENT '调度-时间', + `trigger_code` int(11) NOT NULL COMMENT '调度-结果', + `trigger_msg` text COMMENT '调度-日志', + `handle_time` datetime DEFAULT NULL COMMENT '执行-时间', + `handle_code` int(11) NOT NULL COMMENT '执行-状态', + `handle_msg` text COMMENT '执行-日志', + `alarm_status` tinyint(4) NOT NULL DEFAULT '0' COMMENT '告警状态:0-默认、1-无需告警、2-告警成功、3-告警失败', + PRIMARY KEY (`id`), + KEY `I_trigger_time` (`trigger_time`), + KEY `I_handle_code` (`handle_code`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; + +CREATE TABLE `xxl_job_log_report` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `trigger_day` datetime DEFAULT NULL COMMENT '调度-时间', + `running_count` int(11) NOT NULL DEFAULT '0' COMMENT '运行中-日志数量', + `suc_count` int(11) NOT NULL DEFAULT '0' COMMENT '执行成功-日志数量', + `fail_count` int(11) NOT NULL DEFAULT '0' COMMENT '执行失败-日志数量', + `update_time` datetime DEFAULT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `i_trigger_day` (`trigger_day`) USING BTREE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; + +CREATE TABLE `xxl_job_logglue` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `job_id` int(11) NOT NULL COMMENT '任务,主键ID', + `glue_type` varchar(50) DEFAULT NULL COMMENT 'GLUE类型', + `glue_source` mediumtext COMMENT 'GLUE源代码', + `glue_remark` varchar(128) NOT NULL COMMENT 'GLUE备注', + `add_time` datetime DEFAULT NULL, + `update_time` datetime DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; + +CREATE TABLE `xxl_job_registry` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `registry_group` varchar(50) NOT NULL, + `registry_key` varchar(255) NOT NULL, + `registry_value` varchar(255) NOT NULL, + `update_time` datetime DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `i_g_k_v` (`registry_group`,`registry_key`,`registry_value`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; + +CREATE TABLE `xxl_job_group` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `app_name` varchar(64) NOT NULL COMMENT '执行器AppName', + `title` varchar(12) NOT NULL COMMENT '执行器名称', + `address_type` tinyint(4) NOT NULL DEFAULT '0' COMMENT '执行器地址类型:0=自动注册、1=手动录入', + `address_list` text COMMENT '执行器地址列表,多地址逗号分隔', + `update_time` datetime DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; + +CREATE TABLE `xxl_job_user` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `username` varchar(50) NOT NULL COMMENT '账号', + `password` varchar(50) NOT NULL COMMENT '密码', + `role` tinyint(4) NOT NULL COMMENT '角色:0-普通用户、1-管理员', + `permission` varchar(255) DEFAULT NULL COMMENT '权限:执行器ID列表,多个逗号分割', + PRIMARY KEY (`id`), + UNIQUE KEY `i_username` (`username`) USING BTREE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; + +CREATE TABLE `xxl_job_lock` ( + `lock_name` varchar(50) NOT NULL COMMENT '锁名称', + PRIMARY KEY (`lock_name`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; + +INSERT INTO `xxl_job_group`(`id`, `app_name`, `title`, `address_type`, `address_list`, `update_time`) VALUES (1, 'xxl-job-executor-sample', '示例执行器', 0, NULL, '2018-11-03 22:21:31' ); +INSERT INTO `xxl_job_info`(`id`, `job_group`, `job_desc`, `add_time`, `update_time`, `author`, `alarm_email`, `schedule_type`, `schedule_conf`, `misfire_strategy`, `executor_route_strategy`, `executor_handler`, `executor_param`, `executor_block_strategy`, `executor_timeout`, `executor_fail_retry_count`, `glue_type`, `glue_source`, `glue_remark`, `glue_updatetime`, `child_jobid`) VALUES (1, 1, '测试任务1', '2018-11-03 22:21:31', '2018-11-03 22:21:31', 'XXL', '', 'CRON', '0 0 0 * * ? *', 'DO_NOTHING', 'FIRST', 'demoJobHandler', '', 'SERIAL_EXECUTION', 0, 0, 'BEAN', '', 'GLUE代码初始化', '2018-11-03 22:21:31', ''); +INSERT INTO `xxl_job_user`(`id`, `username`, `password`, `role`, `permission`) VALUES (1, 'admin', 'e10adc3949ba59abbe56e057f20f883e', 1, NULL); +INSERT INTO `xxl_job_lock` ( `lock_name`) VALUES ( 'schedule_lock'); + +commit;