diff --git a/jero-boot/README.md b/jero-boot/README.md
index c37ba6b44..ebc110e0b 100644
--- a/jero-boot/README.md
+++ b/jero-boot/README.md
@@ -29,7 +29,7 @@ jero-boot 低代码开发平台
- 依赖管理:Maven
-- 数据库:MySQL5.7+ & Oracle 11g
+- 数据库:MySQL5.7+
- 缓存:Redis
diff --git a/jero-boot/jero-cloud-module/docker-compose.yml b/jero-boot/jero-cloud-module/docker-compose.yml
deleted file mode 100644
index 6bbc5bd2b..000000000
--- a/jero-boot/jero-cloud-module/docker-compose.yml
+++ /dev/null
@@ -1,92 +0,0 @@
-version: '2'
-services:
- jero-boot-mysql:
- build:
- context: ../db
- environment:
- MYSQL_ROOT_PASSWORD: root
- MYSQL_ROOT_HOST: '%'
- TZ: Asia/Shanghai
- restart: always
- container_name: jero-boot-mysql
- command:
- --character-set-server=utf8mb4
- --collation-server=utf8mb4_general_ci
- --explicit_defaults_for_timestamp=true
- --lower_case_table_names=1
- --max_allowed_packet=128M
- --default-authentication-plugin=caching_sha2_password
- ports:
- - 3306:3306
-
- jero-boot-redis:
- image: redis:5.0
- ports:
- - 6379:6379
- restart: always
- container_name: jero-boot-redis
- hostname: jero-boot-redis
-
- jero-boot-nacos:
- restart: always
- image: nacos/nacos-server:1.4.0
- container_name: jero-boot-nacos
- hostname: jero-boot-nacos
- ports:
- - 8848:8848
- depends_on:
- - jero-boot-mysql
-# volumes:
-# - ./init/docker-startup.sh:/home/nacos/bin/docker-startup.sh
-# - ./init/application.properties:/home/nacos/conf/application.properties
- environment:
- MODE: standalone
- PREFER_HOST_MODE: hostname
- SPRING_DATASOURCE_PLATFORM: mysql
- MYSQL_SERVICE_HOST: jero-boot-mysql
- MYSQL_SERVICE_PORT: 3306
- MYSQL_SERVICE_USER: root
- MYSQL_SERVICE_PASSWORD: root
- MYSQL_SERVICE_DB_NAME: nacos
-
- jero-boot-gateway:
- build:
- context: ./jero-cloud-gateway
- ports:
- - 9999:9999
- depends_on:
- - jero-boot-nacos
- - jero-boot-redis
- container_name: jero-boot-gateway
- hostname: jero-boot-gateway
-
- jero-boot-system:
- depends_on:
- - jero-boot-mysql
- - jero-boot-redis
- - jero-boot-nacos
- build:
- context: ./jero-cloud-system-start
- container_name: jero-boot-system
- hostname: jero-boot-system
- restart: on-failure
- environment:
- - TZ=Asia/Shanghai
-
- jero-boot-xxljob:
- build:
- context: ./jero-cloud-xxljob
- ports:
- - 9080:9080
- container_name: jero-boot-xxljob
- hostname: jero-boot-xxljob
-
-# jero-boot-rabbitmq:
-# # image: rabbitmq:3-management
-# image: rabbitmq:3
-# ports:
-# - 5672:5672
-# # - 15672:15672
-# restart: always
-# container_name: jero-boot-rabbitmq
-# hostname: jero-boot-rabbitmq
diff --git a/jero-boot/jero-cloud-module/jero-cloud-feign-config/nacos/jero-dev.yaml b/jero-boot/jero-cloud-module/jero-cloud-feign-config/nacos/jero-dev.yaml
deleted file mode 100644
index 07e86623c..000000000
--- a/jero-boot/jero-cloud-module/jero-cloud-feign-config/nacos/jero-dev.yaml
+++ /dev/null
@@ -1,184 +0,0 @@
-spring:
- datasource:
- druid:
- stat-view-servlet:
- enabled: true
- loginUsername: admin
- loginPassword: 123456
- allow:
- web-stat-filter:
- enabled: true
- dynamic:
- druid: # 全局druid参数,绝大部分值和默认保持一致。(现已支持的参数如下,不清楚含义不要乱设置)
- # 连接池的配置信息
- # 初始化大小,最小,最大
- initial-size: 5
- min-idle: 5
- maxActive: 20
- # 配置获取连接等待超时的时间
- maxWait: 60000
- # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
- timeBetweenEvictionRunsMillis: 60000
- # 配置一个连接在池中最小生存的时间,单位是毫秒
- minEvictableIdleTimeMillis: 300000
- validationQuery: SELECT 1 FROM DUAL
- testWhileIdle: true
- testOnBorrow: false
- testOnReturn: false
- # 打开PSCache,并且指定每个连接上PSCache的大小
- poolPreparedStatements: true
- maxPoolPreparedStatementPerConnectionSize: 20
- # 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙
- filters: stat,wall,slf4j
- # 通过connectProperties属性来打开mergeSql功能;慢SQL记录
- connectionProperties: druid.stat.mergeSql\=true;druid.stat.slowSqlMillis\=5000
-
- datasource:
- master:
- url: jdbc:mysql://127.0.0.1:3306/jero-boot?characterEncoding=UTF-8&useUnicode=true&useSSL=false&tinyInt1isBit=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai
- username: root
- password: root
- driver-class-name: com.mysql.cj.jdbc.Driver
- # 多数据源配置
- #multi-datasource1:
- #url: jdbc:mysql://localhost:3306/jero-boot2?useUnicode=true&characterEncoding=utf8&autoReconnect=true&zeroDateTimeBehavior=convertToNull&transformedBitIsBoolean=true&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai
- #username: root
- #password: root
- #driver-class-name: com.mysql.cj.jdbc.Driver
- #redis 配置
- redis:
- database: 0
- host: 127.0.0.1
- lettuce:
- pool:
- max-active: 8 #最大连接数据库连接数,设 0 为没有限制
- max-idle: 8 #最大等待连接中的数量,设 0 为没有限制
- max-wait: -1ms #最大建立连接等待时间。如果超过此时间将接到异常。设为-1表示无限制。
- min-idle: 0 #最小等待连接中的数量,设 0 为没有限制
- shutdown-timeout: 100ms
- password:
- port: 4780
- #rabbitmq配置
- rabbitmq:
- host: 127.0.0.1
- username: guest
- password: guest
- port: 5672
- publisher-confirms: true
- publisher-returns: true
- virtual-host: /
- listener:
- simple:
- acknowledge-mode: manual
- #消费者的最小数量
- concurrency: 1
- #消费者的最大数量
- max-concurrency: 1
- #是否支持重试
- retry:
- enabled: true
-#jero专用配置
-jero :
- # 本地:local\Minio:minio\阿里云:alioss
- uploadType: local
- path :
- #文件上传根目录 设置
- upload: D://opt//upFiles
- #webapp文件路径
- webapp: D://opt//webapp
- shiro:
- excludeUrls: /test/jeroDemo/demo3,/test/jeroDemo/redisDemo/**,/category/**,/visual/**,/map/**,/jmreport/bigscreen2/**
- #阿里云oss存储配置
- oss:
- endpoint: oss-cn-beijing.aliyuncs.com
- accessKey: ??
- secretKey: ??
- bucketName: jeroos
- staticDomain: ??
- # ElasticSearch 6设置
- elasticsearch:
- cluster-name: jero-ES
- cluster-nodes: 127.0.0.1:9200
- check-enabled: false
- # 表单设计器配置
- desform:
- # 主题颜色(仅支持 16进制颜色代码)
- theme-color: "#1890ff"
- # 文件、图片上传方式,可选项:qiniu(七牛云)、system(跟随系统配置)
- upload-type: system
- # 在线预览文件服务器地址配置
- file-view-domain: 127.0.0.1:8012
- # minio文件上传
- minio:
- minio_url: http://minio.jero.com
- minio_name: ??
- minio_pass: ??
- bucketName: otatest
- #大屏报表参数设置
- jmreport:
- mode: dev
- #是否需要校验token
- is_verify_token: false
- #必须校验方法
- verify_methods: remove,delete,save,add,update
- #Wps在线文档
- wps:
- domain: https://wwo.wps.cn/office/
- appid: ??
- appsecret: ??
- #xxl-job配置
- xxljob:
- enabled: false
- adminAddresses: http://127.0.0.1:9080/xxl-job-admin
- appname: ${spring.application.name}
- accessToken: ''
- logPath: logs/jero/job/jobhandler/
- logRetentionDays: 30
- #自定义路由配置 yml nacos database
- route:
- config:
- data-id: jero-gateway-router
- group: DEFAULT_GROUP
- data-type: yml
- #分布式锁配置
- redisson:
- address: 127.0.0.1:4780
- password:
- type: STANDALONE
- enabled: true
-#Mybatis输出sql日志
-logging:
- level:
- com.jero.modules.system.mapper : info
-#cas单点登录
-cas:
- prefixUrl: http://localhost:8888/cas
-#swagger
-knife4j:
- production: false
- basic:
- enable: false
- username: jero
- password: jero1314
-
-#第三方登录
-justauth:
- enabled: true
- type:
- GITHUB:
- client-id: ??
- client-secret: ??
- redirect-uri: http://sso.test.com:8080/jero-boot/thirdLogin/github/callback
- WECHAT_ENTERPRISE:
- client-id: ??
- client-secret: ??
- redirect-uri: http://sso.test.com:8080/jero-boot/thirdLogin/wechat_enterprise/callback
- agent-id: 1000002
- DINGTALK:
- client-id: ??
- client-secret: ??
- redirect-uri: http://sso.test.com:8080/jero-boot/thirdLogin/dingtalk/callback
- cache:
- type: default
- prefix: 'demo::'
- timeout: 1h
diff --git a/jero-boot/jero-cloud-module/jero-cloud-feign-config/nacos/jero-gateway-router.json b/jero-boot/jero-cloud-module/jero-cloud-feign-config/nacos/jero-gateway-router.json
deleted file mode 100644
index 223233303..000000000
--- a/jero-boot/jero-cloud-module/jero-cloud-feign-config/nacos/jero-gateway-router.json
+++ /dev/null
@@ -1,60 +0,0 @@
-[{
- "id": "jero-system",
- "order": 0,
- "predicates": [{
- "name": "Path",
- "args": {
- "_genkey_0": "/sys/**",
- "_genkey_1": "/eoa/**",
- "_genkey_2": "/joa/**",
- "_genkey_3": "/jmreport/**",
- "_genkey_4": "/bigscreen/**",
- "_genkey_5": "/desform/**",
- "_genkey_6": "/online/**",
- "_genkey_8": "/act/**",
- "_genkey_9": "/plug-in/**",
- "_genkey_10": "/generic/**",
- "_genkey_11": "/v1/**"
- }
- }],
- "filters": [],
- "uri": "lb://jero-system"
-}, {
- "id": "jero-demo",
- "order": 1,
- "predicates": [{
- "name": "Path",
- "args": {
- "_genkey_0": "/mock/**",
- "_genkey_1": "/test/**",
- "_genkey_2": "/bigscreen/template1/**",
- "_genkey_3": "/bigscreen/template2/**"
- }
- }],
- "filters": [],
- "uri": "lb://jero-demo"
-}, {
- "id": "jero-system-websocket",
- "order": 2,
- "predicates": [{
- "name": "Path",
- "args": {
- "_genkey_0": "/websocket/**",
- "_genkey_1": "/eoaSocket/**",
- "_genkey_2": "/newsWebsocket/**"
- }
- }],
- "filters": [],
- "uri": "lb:ws://jero-system"
-}, {
- "id": "jero-demo-websocket",
- "order": 3,
- "predicates": [{
- "name": "Path",
- "args": {
- "_genkey_0": "/vxeSocket/**"
- }
- }],
- "filters": [],
- "uri": "lb:ws://jero-demo"
-}]
\ No newline at end of file
diff --git a/jero-boot/jero-cloud-module/jero-cloud-feign-config/nacos/jero.yaml b/jero-boot/jero-cloud-module/jero-cloud-feign-config/nacos/jero.yaml
deleted file mode 100644
index 7018e6b7d..000000000
--- a/jero-boot/jero-cloud-module/jero-cloud-feign-config/nacos/jero.yaml
+++ /dev/null
@@ -1,117 +0,0 @@
-server:
- tomcat:
- max-swallow-size: -1
- error:
- include-exception: true
- include-stacktrace: ALWAYS
- include-message: ALWAYS
- compression:
- enabled: true
- min-response-size: 1024
- mime-types: application/javascript,application/json,application/xml,text/html,text/xml,text/plain,text/css,image/*
-management:
- health:
- mail:
- enabled: false
- endpoints:
- web:
- exposure:
- include: "*" #暴露所有节点
- health:
- sensitive: true #关闭过滤敏感信息
- endpoint:
- health:
- show-details: ALWAYS #显示详细信息
-spring:
- servlet:
- multipart:
- max-file-size: 10MB
- max-request-size: 10MB
- mail:
- host: smtp.163.com
- username: test@163.com
- password: ??
- properties:
- mail:
- smtp:
- auth: true
- starttls:
- enable: true
- required: true
- ## quartz定时任务,采用数据库方式
- quartz:
- job-store-type: jdbc
- initialize-schema: embedded
- #设置自动启动,默认为 true
- auto-startup: true
- #启动时更新己存在的Job
- overwrite-existing-jobs: true
- properties:
- org:
- quartz:
- scheduler:
- instanceName: MyScheduler
- instanceId: AUTO
- jobStore:
- class: org.quartz.impl.jdbcjobstore.JobStoreTX
- driverDelegateClass: org.quartz.impl.jdbcjobstore.StdJDBCDelegate
- tablePrefix: QRTZ_
- isClustered: true
- misfireThreshold: 60000
- clusterCheckinInterval: 10000
- threadPool:
- class: org.quartz.simpl.SimpleThreadPool
- threadCount: 10
- threadPriority: 5
- threadsInheritContextClassLoaderOfInitializingThread: true
- #json 时间戳统一转换
- jackson:
- date-format: yyyy-MM-dd HH:mm:ss
- time-zone: GMT+8
- aop:
- proxy-target-class: true
- activiti:
- check-process-definitions: false
- #启用作业执行器
- async-executor-activate: false
- #启用异步执行器
- job-executor-activate: false
- jpa:
- open-in-view: false
- #配置freemarker
- freemarker:
- # 设置模板后缀名
- suffix: .ftl
- # 设置文档类型
- content-type: text/html
- # 设置页面编码格式
- charset: UTF-8
- # 设置页面缓存
- cache: false
- prefer-file-system-access: false
- # 设置ftl文件路径
- template-loader-path:
- - classpath:/templates
- # 设置静态文件路径,js,css等
- mvc:
- static-path-pattern: /**
- resource:
- static-locations: classpath:/static/,classpath:/public/
- autoconfigure:
- exclude: com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure
-#mybatis plus 设置
-mybatis-plus:
- mapper-locations: classpath*:com/jero/modules/**/xml/*Mapper.xml
- global-config:
- # 关闭MP3.0自带的banner
- banner: false
- db-config:
- #主键类型 0:"数据库ID自增",1:"该类型为未设置主键类型", 2:"用户输入ID",3:"全局唯一ID (数字类型唯一ID)", 4:"全局唯一ID UUID",5:"字符串全局唯一ID (idWorker 的字符串表示)";
- id-type: ASSIGN_ID
- # 默认数据库表下划线命名
- table-underline: true
- configuration:
- # 这个配置会将执行的sql打印出来,在开发或测试的时候可以用
- #log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
- # 返回类型为Map,显示null对应的字段
- call-setters-on-nulls: true
\ No newline at end of file
diff --git a/jero-boot/jero-cloud-module/jero-cloud-feign-config/pom.xml b/jero-boot/jero-cloud-module/jero-cloud-feign-config/pom.xml
deleted file mode 100644
index 55f6d8a0a..000000000
--- a/jero-boot/jero-cloud-module/jero-cloud-feign-config/pom.xml
+++ /dev/null
@@ -1,41 +0,0 @@
-
-
-
- jero-cloud-module
- com.jero.boot
- 2.4.2
-
- 4.0.0
-
- jero-cloud-feign-config
-
-
-
- com.jero.boot
- jero-system-cloud-api
-
-
-
- com.alibaba.cloud
- spring-cloud-starter-alibaba-nacos-discovery
-
-
-
- com.alibaba.cloud
- spring-cloud-starter-alibaba-nacos-config
-
-
-
- org.springframework.cloud
- spring-cloud-starter-openfeign
-
-
-
- com.alibaba.cloud
- spring-cloud-starter-alibaba-sentinel
-
-
-
-
\ No newline at end of file
diff --git a/jero-boot/jero-cloud-module/jero-cloud-feign-config/src/main/java/com/jero/config/FeignConfig.java b/jero-boot/jero-cloud-module/jero-cloud-feign-config/src/main/java/com/jero/config/FeignConfig.java
deleted file mode 100644
index e005ae379..000000000
--- a/jero-boot/jero-cloud-module/jero-cloud-feign-config/src/main/java/com/jero/config/FeignConfig.java
+++ /dev/null
@@ -1,76 +0,0 @@
-package com.jero.config;
-
-import feign.Feign;
-import feign.Logger;
-import feign.RequestInterceptor;
-import feign.codec.Encoder;
-import feign.form.spring.SpringFormEncoder;
-import lombok.extern.slf4j.Slf4j;
-import com.jero.common.constant.CommonConstant;
-import org.springframework.beans.factory.ObjectFactory;
-import org.springframework.boot.autoconfigure.AutoConfigureBefore;
-import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
-import org.springframework.boot.autoconfigure.http.HttpMessageConverters;
-import org.springframework.cloud.openfeign.FeignAutoConfiguration;
-import org.springframework.cloud.openfeign.support.SpringEncoder;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.context.annotation.Primary;
-import org.springframework.context.annotation.Scope;
-import org.springframework.web.context.request.RequestContextHolder;
-import org.springframework.web.context.request.ServletRequestAttributes;
-
-import javax.servlet.http.HttpServletRequest;
-
-
-@ConditionalOnClass(Feign.class)
-@AutoConfigureBefore(FeignAutoConfiguration.class)
-@Slf4j
-@Configuration
-public class FeignConfig {
-
- @Bean
- public RequestInterceptor requestInterceptor() {
- return requestTemplate -> {
- ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
- if (null != attributes) {
- HttpServletRequest request = attributes.getRequest();
- log.info("Feign request: {}", request.getRequestURI());
- // 将token信息放入header中
- String token = request.getHeader(CommonConstant.X_ACCESS_TOKEN);
- if(token==null){
- token = request.getParameter("token");
- }
- log.info("Feign request token: {}", token);
- requestTemplate.header(CommonConstant.X_ACCESS_TOKEN, token);
- }
- };
- }
-
-
-
- /**
- * Feign 客户端的日志记录,默认级别为NONE
- * Logger.Level 的具体级别如下:
- * NONE:不记录任何信息
- * BASIC:仅记录请求方法、URL以及响应状态码和执行时间
- * HEADERS:除了记录 BASIC级别的信息外,还会记录请求和响应的头信息
- * FULL:记录所有请求与响应的明细,包括头信息、请求体、元数据
- */
- @Bean
- Logger.Level feignLoggerLevel() {
- return Logger.Level.FULL;
- }
-
- /**
- * Feign支持文件上传
- * @param messageConverters
- * @return
- */
- @Bean
- @Primary
- @Scope("prototype")
- public Encoder multipartFormEncoder(ObjectFactory messageConverters) {
- return new SpringFormEncoder(new SpringEncoder(messageConverters));
- }
-}
diff --git a/jero-boot/jero-cloud-module/jero-cloud-feign-config/src/main/java/com/jero/starter/cloud/config/PersonBeanConfiguration.java b/jero-boot/jero-cloud-module/jero-cloud-feign-config/src/main/java/com/jero/starter/cloud/config/PersonBeanConfiguration.java
deleted file mode 100644
index d12412c15..000000000
--- a/jero-boot/jero-cloud-module/jero-cloud-feign-config/src/main/java/com/jero/starter/cloud/config/PersonBeanConfiguration.java
+++ /dev/null
@@ -1,24 +0,0 @@
-package com.jero.starter.cloud.config;
-
-import feign.Client;
-import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
-import org.springframework.cloud.netflix.ribbon.SpringClientFactory;
-import org.springframework.cloud.openfeign.ribbon.CachingSpringLoadBalancerFactory;
-import org.springframework.cloud.openfeign.ribbon.LoadBalancerFeignClient;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-
-@Configuration
-public class PersonBeanConfiguration {
-
- /**
- * 创建FeignClient
- */
- @Bean
- @ConditionalOnMissingBean
- public Client feignClient(CachingSpringLoadBalancerFactory cachingFactory,
- SpringClientFactory clientFactory) {
- return new LoadBalancerFeignClient(new Client.Default(null, null),
- cachingFactory, clientFactory);
- }
-}
diff --git a/jero-boot/jero-cloud-module/jero-cloud-feign-config/src/main/java/com/jero/starter/cloud/feign/IJeroFeignService.java b/jero-boot/jero-cloud-module/jero-cloud-feign-config/src/main/java/com/jero/starter/cloud/feign/IJeroFeignService.java
deleted file mode 100644
index e24947ed7..000000000
--- a/jero-boot/jero-cloud-module/jero-cloud-feign-config/src/main/java/com/jero/starter/cloud/feign/IJeroFeignService.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package com.jero.starter.cloud. feign;
-
-public interface IJeroFeignService {
-
- T newInstance(Class apiType, String name);
-}
diff --git a/jero-boot/jero-cloud-module/jero-cloud-feign-config/src/main/java/com/jero/starter/cloud/feign/impl/JeroFeignService.java b/jero-boot/jero-cloud-module/jero-cloud-feign-config/src/main/java/com/jero/starter/cloud/feign/impl/JeroFeignService.java
deleted file mode 100644
index 741a3dd08..000000000
--- a/jero-boot/jero-cloud-module/jero-cloud-feign-config/src/main/java/com/jero/starter/cloud/feign/impl/JeroFeignService.java
+++ /dev/null
@@ -1,60 +0,0 @@
-package com.jero.starter.cloud.feign.impl;
-
-import feign.*;
-import feign.codec.Decoder;
-import feign.codec.Encoder;
-import lombok.extern.slf4j.Slf4j;
-import com.jero.common.constant.CommonConstant;
-import com.jero.starter.cloud.feign.IJeroFeignService;
-import org.springframework.boot.autoconfigure.AutoConfigureBefore;
-import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
-import org.springframework.cloud.openfeign.FeignAutoConfiguration;
-import org.springframework.cloud.openfeign.FeignClientsConfiguration;
-import org.springframework.context.annotation.Import;
-import org.springframework.stereotype.Service;
-import org.springframework.web.context.request.RequestContextHolder;
-import org.springframework.web.context.request.ServletRequestAttributes;
-
-import javax.servlet.http.HttpServletRequest;
-
-@Service
-@Slf4j
-@ConditionalOnClass(Feign.class)
-@AutoConfigureBefore(FeignAutoConfiguration.class)
-@Import(FeignClientsConfiguration.class)
-public class JeroFeignService implements IJeroFeignService {
-
-
- //Feign 原生构造器
- Feign.Builder builder;
-
- //创建构造器
- public JeroFeignService(Decoder decoder, Encoder encoder, Client client, Contract contract) {
- this.builder = Feign.builder()
- .client(client)
- .encoder(encoder)
- .decoder(decoder)
- .contract(contract);
-
- builder.requestInterceptor(requestTemplate -> {
- ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
- if (null != attributes) {
- HttpServletRequest request = attributes.getRequest();
- log.info("Feign request: {}", request.getRequestURI());
- // 将token信息放入header中
- String token = request.getHeader(CommonConstant.X_ACCESS_TOKEN);
- if(token==null){
- token = request.getParameter("token");
- }
- log.info("Feign request token: {}", token);
- requestTemplate.header(CommonConstant.X_ACCESS_TOKEN, token);
- }
- });
- }
-
-
- @Override
- public T newInstance(Class clientClass, String serviceName) {
- return builder.target(clientClass, String.format("http://%s/", serviceName));
- }
-}
\ No newline at end of file
diff --git a/jero-boot/jero-cloud-module/jero-cloud-feign-config/src/main/resources/bootstrap.yml b/jero-boot/jero-cloud-module/jero-cloud-feign-config/src/main/resources/bootstrap.yml
deleted file mode 100644
index 5d1b0d671..000000000
--- a/jero-boot/jero-cloud-module/jero-cloud-feign-config/src/main/resources/bootstrap.yml
+++ /dev/null
@@ -1,33 +0,0 @@
-spring:
- profiles:
- # 当前激活环境
- active: @profile.name@
- cloud:
- #配置Bus id(远程推送事件)
- bus:
- id: ${spring.application.name}:${server.port}
- nacos:
- config:
- # Nacos 认证用户
- username: nacos
- # Nacos 认证密码
- password: nacos
- # 命名空间 常用场景之一是不同环境的配置的区分隔离,例如开发测试环境和生产环境的资源(如配置、服务)隔离等
- namespace: @config.namespace@
- # 配置中心地址
- server-addr: @config.server-addr@
- # 配置对应的分组
- group: @config.group@
- # 配置文件后缀
- file-extension: yaml
- prefix: @prefix.name@
- # 支持多个共享 Data Id 的配置,优先级小于extension-configs,自定义 Data Id 配置 属性是个集合,内部由 Config POJO 组成。Config 有 3 个属性,分别是 dataId, group 以及 refresh
- #shared-configs[0]:
- #data-id: ${prefix.name}-common.yaml # 配置文件名-Data Id
- #group: ${config.group} # 默认为DEFAULT_GROUP
- #refresh: false # 是否动态刷新,默认为false
- discovery:
- namespace: @config.namespace@
- server-addr: @config.server-addr@
- watch:
- enabled: false
diff --git a/jero-boot/jero-cloud-module/jero-cloud-gateway/Dockerfile b/jero-boot/jero-cloud-module/jero-cloud-gateway/Dockerfile
deleted file mode 100644
index b13e66a0e..000000000
--- a/jero-boot/jero-cloud-module/jero-cloud-gateway/Dockerfile
+++ /dev/null
@@ -1,15 +0,0 @@
-FROM anapsix/alpine-java:8_server-jre_unlimited
-
-MAINTAINER test@163.com
-
-RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
-
-RUN mkdir -p /jero-cloud-gateway
-
-WORKDIR /jero-cloud-gateway
-
-EXPOSE 9999
-
-ADD ./target/jero-cloud-gateway-2.4.2.jar ./
-
-CMD java -Dfile.encoding=utf-8 -Djava.security.egd=file:/dev/./urandom -jar jero-cloud-gateway-2.4.2.jar
\ No newline at end of file
diff --git a/jero-boot/jero-cloud-module/jero-cloud-gateway/pom.xml b/jero-boot/jero-cloud-module/jero-cloud-gateway/pom.xml
deleted file mode 100644
index 55a155ff2..000000000
--- a/jero-boot/jero-cloud-module/jero-cloud-gateway/pom.xml
+++ /dev/null
@@ -1,97 +0,0 @@
-
-
-
- jero-cloud-module
- com.jero.boot
- 2.4.2
-
- 4.0.0
-
- jero-cloud-gateway
-
-
-
- com.jero.boot
- jero-cloud-feign-config
-
-
- com.jero.boot
- jero-system-cloud-api
-
-
-
-
-
- com.jero.boot
- jero-boot-starter-redis
-
-
-
- org.springframework.cloud
- spring-cloud-starter-gateway
-
-
-
- org.springframework.boot
- spring-boot-starter-webflux
-
-
-
- org.springframework.cloud
- spring-cloud-starter-netflix-hystrix
-
-
- com.alibaba.cloud
- spring-cloud-starter-alibaba-nacos-discovery
-
-
-
- org.springframework.boot
- spring-boot-starter-actuator
-
-
-
-
- org.springframework.boot
- spring-boot-starter-data-redis-reactive
-
-
-
- org.apache.commons
- commons-pool2
-
-
-
- javax.servlet
- javax.servlet-api
-
-
-
-
- com.github.xiaoymin
- knife4j-spring-ui
- ${knife4j-spring-ui.version}
-
-
- com.github.xiaoymin
- knife4j-spring-boot-starter
- ${knife4j-spring-boot-starter.version}
-
-
-
-
-
- org.springframework.boot
- spring-boot-maven-plugin
-
-
-
-
- src/main/resources
- true
-
-
-
-
\ No newline at end of file
diff --git a/jero-boot/jero-cloud-module/jero-cloud-gateway/src/main/java/com/jero/JeroGatewayApplication.java b/jero-boot/jero-cloud-module/jero-cloud-gateway/src/main/java/com/jero/JeroGatewayApplication.java
deleted file mode 100644
index 836e54e28..000000000
--- a/jero-boot/jero-cloud-module/jero-cloud-gateway/src/main/java/com/jero/JeroGatewayApplication.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package com.jero;
-
-import org.springframework.boot.SpringApplication;
-import org.springframework.boot.autoconfigure.SpringBootApplication;
-import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
-import org.springframework.cloud.openfeign.EnableFeignClients;
-import org.springframework.context.ConfigurableApplicationContext;
-
-@EnableFeignClients
-@EnableDiscoveryClient
-@SpringBootApplication
-public class JeroGatewayApplication {
- public static void main(String[] args) {
- ConfigurableApplicationContext applicationContext = SpringApplication.run(JeroGatewayApplication.class, args);
- String userName = applicationContext.getEnvironment().getProperty("jero.test");
- System.err.println("user name :" +userName);
- }
-}
diff --git a/jero-boot/jero-cloud-module/jero-cloud-gateway/src/main/java/com/jero/config/GatewayRoutersConfiguration.java b/jero-boot/jero-cloud-module/jero-cloud-gateway/src/main/java/com/jero/config/GatewayRoutersConfiguration.java
deleted file mode 100644
index 31d78e5cb..000000000
--- a/jero-boot/jero-cloud-module/jero-cloud-gateway/src/main/java/com/jero/config/GatewayRoutersConfiguration.java
+++ /dev/null
@@ -1,89 +0,0 @@
-package com.jero.config;
-
-import lombok.extern.slf4j.Slf4j;
-import com.jero.handler.HystrixFallbackHandler;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.http.MediaType;
-import org.springframework.web.reactive.function.server.RequestPredicates;
-import org.springframework.web.reactive.function.server.RouterFunction;
-import org.springframework.web.reactive.function.server.RouterFunctions;
-import org.springframework.web.reactive.function.server.ServerResponse;
-
-import javax.annotation.Resource;
-
-import static org.springframework.web.reactive.function.server.RequestPredicates.GET;
-import static org.springframework.web.reactive.function.server.RouterFunctions.route;
-import static org.springframework.web.reactive.function.server.ServerResponse.ok;
-
-/**
- * @author scott
- * @date 2020/05/26
- * 路由配置信息
- */
-@Slf4j
-@Configuration
-public class GatewayRoutersConfiguration {
-
- public static final long DEFAULT_TIMEOUT = 30000;
-
- public static String SERVER_ADDR;
-
- public static String NAMESPACE;
-
- public static String DATA_ID;
-
- public static String ROUTE_GROUP;
-
- /**
- * 路由配置文件数据获取方式yml,nacos,database
- */
- public static String DATA_TYPE;
-
- @Value("${spring.cloud.nacos.discovery.server-addr}")
- public void setServerAddr(String serverAddr) {
- SERVER_ADDR = serverAddr;
- }
-
- @Value("${spring.cloud.nacos.discovery.namespace}")
- public void setNamespace(String namespace) {
- NAMESPACE = namespace;
- }
-
- @Value("${jero.route.config.data-id:#{null}}")
- public void setRouteDataId(String dataId) {
- DATA_ID = dataId + ".json";
- }
-
- @Value("${jero.route.config.group:DEFAULT_GROUP:#{null}}")
- public void setRouteGroup(String routeGroup) {
- ROUTE_GROUP = routeGroup;
- }
-
- @Value("${jero.route.config.data-type}")
- public void setDataType(String dataType) {
- DATA_TYPE = dataType;
- }
-
-
- /**
- * 路由断言
- * @return
- */
- @Bean
- public RouterFunction routerFunction() {
- return RouterFunctions.route(
- RequestPredicates.path("/globalFallback").and(RequestPredicates.accept(MediaType.TEXT_PLAIN)), hystrixFallbackHandler);
-
- }
-
- @Bean
- public RouterFunction indexRouter(@Value("classpath:/META-INF/resources/doc.html") final org.springframework.core.io.Resource indexHtml) {
- return route(GET("/"), request -> ok().contentType(MediaType.TEXT_HTML).syncBody(indexHtml));
- }
-
- @Resource
- private HystrixFallbackHandler hystrixFallbackHandler;
-
-}
diff --git a/jero-boot/jero-cloud-module/jero-cloud-gateway/src/main/java/com/jero/config/RateLimiterConfiguration.java b/jero-boot/jero-cloud-module/jero-cloud-gateway/src/main/java/com/jero/config/RateLimiterConfiguration.java
deleted file mode 100644
index 796943c7a..000000000
--- a/jero-boot/jero-cloud-module/jero-cloud-gateway/src/main/java/com/jero/config/RateLimiterConfiguration.java
+++ /dev/null
@@ -1,43 +0,0 @@
-package com.jero.config;
-
-import com.jero.filter.GlobalAccessTokenFilter;
-import org.springframework.cloud.gateway.filter.ratelimit.KeyResolver;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.context.annotation.Primary;
-import reactor.core.publisher.Mono;
-
-/**
- * @author scott
- * @date 2020/5/26
- * 路由限流配置
- */
-@Configuration
-public class RateLimiterConfiguration {
- /**
- * IP限流 (通过exchange对象可以获取到请求信息,这边用了HostName)
- */
- @Bean
- @Primary
- public KeyResolver ipKeyResolver() {
- return exchange -> Mono.just(exchange.getRequest().getRemoteAddress().getAddress().getHostAddress());
- }
-
- /**
- * 用户限流 (通过exchange对象可以获取到请求信息,获取当前请求的用户 TOKEN)
- */
- @Bean
- public KeyResolver userKeyResolver() {
- //使用这种方式限流,请求Header中必须携带X-Access-Token参数
- return exchange -> Mono.just(exchange.getRequest().getHeaders().getFirst(GlobalAccessTokenFilter.X_ACCESS_TOKEN));
- }
-
- /**
- * 接口限流 (获取请求地址的uri作为限流key)
- */
- @Bean
- public KeyResolver apiKeyResolver() {
- return exchange -> Mono.just(exchange.getRequest().getPath().value());
- }
-
-}
diff --git a/jero-boot/jero-cloud-module/jero-cloud-gateway/src/main/java/com/jero/config/RouterDataType.java b/jero-boot/jero-cloud-module/jero-cloud-gateway/src/main/java/com/jero/config/RouterDataType.java
deleted file mode 100644
index 47d7597cb..000000000
--- a/jero-boot/jero-cloud-module/jero-cloud-gateway/src/main/java/com/jero/config/RouterDataType.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package com.jero.config;
-
-/**
- * nocos配置方式枚举
- */
-public enum RouterDataType {
- /**
- * 数据库加载路由配置
- */
- database,
- /**
- * 本地yml加载路由配置
- */
- yml,
- /**
- * nacos加载路由配置
- */
- nacos
-}
diff --git a/jero-boot/jero-cloud-module/jero-cloud-gateway/src/main/java/com/jero/fallback/FallbackController.java b/jero-boot/jero-cloud-module/jero-cloud-gateway/src/main/java/com/jero/fallback/FallbackController.java
deleted file mode 100644
index ac784527e..000000000
--- a/jero-boot/jero-cloud-module/jero-cloud-gateway/src/main/java/com/jero/fallback/FallbackController.java
+++ /dev/null
@@ -1,32 +0,0 @@
-package com.jero.fallback;
-
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-import reactor.core.publisher.Mono;
-
-/**
- * 响应超时熔断处理器
- *
- * @author zyf
- */
-@RestController
-public class FallbackController {
-
- /**
- * 全局熔断处理
- * @return
- */
- @RequestMapping("/fallback")
- public Mono fallback() {
- return Mono.just("访问超时,请稍后再试!");
- }
-
- /**
- * demo熔断处理
- * @return
- */
- @RequestMapping("/demo/fallback")
- public Mono fallback2() {
- return Mono.just("访问超时,请稍后再试!");
- }
-}
diff --git a/jero-boot/jero-cloud-module/jero-cloud-gateway/src/main/java/com/jero/filter/GlobalAccessTokenFilter.java b/jero-boot/jero-cloud-module/jero-cloud-gateway/src/main/java/com/jero/filter/GlobalAccessTokenFilter.java
deleted file mode 100644
index 5d0c68222..000000000
--- a/jero-boot/jero-cloud-module/jero-cloud-gateway/src/main/java/com/jero/filter/GlobalAccessTokenFilter.java
+++ /dev/null
@@ -1,55 +0,0 @@
-package com.jero.filter;
-
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.cloud.gateway.filter.GatewayFilterChain;
-import org.springframework.cloud.gateway.filter.GlobalFilter;
-import org.springframework.core.Ordered;
-import org.springframework.http.server.reactive.ServerHttpRequest;
-import org.springframework.stereotype.Component;
-import org.springframework.util.StringUtils;
-import org.springframework.web.server.ServerWebExchange;
-import reactor.core.publisher.Mono;
-import java.util.Arrays;
-import java.util.stream.Collectors;
-import static org.springframework.cloud.gateway.support.ServerWebExchangeUtils.GATEWAY_REQUEST_URL_ATTR;
-import static org.springframework.cloud.gateway.support.ServerWebExchangeUtils.addOriginalRequestUrl;
-
-/**
- *
- */
-@Slf4j
-@Component
-public class GlobalAccessTokenFilter implements GlobalFilter, Ordered {
- public final static String X_ACCESS_TOKEN = "X-Access-Token";
- public final static String X_GATEWAY_BASE_PATH = "X_GATEWAY_BASE_PATH";
-
- @Override
- public Mono filter(ServerWebExchange exchange, GatewayFilterChain chain) {
- String url = exchange.getRequest().getURI().getPath();
-// log.info(" access url : "+ url);
-
- String scheme = exchange.getRequest().getURI().getScheme();
- String host = exchange.getRequest().getURI().getHost();
- int port = exchange.getRequest().getURI().getPort();
- String basePath = scheme + "://" + host + ":" + port;
-// log.info(" base path : "+ basePath);
-
- // 1. 重写StripPrefix(获取真实的URL)
- addOriginalRequestUrl(exchange, exchange.getRequest().getURI());
- String rawPath = exchange.getRequest().getURI().getRawPath();
- String newPath = "/" + Arrays.stream(StringUtils.tokenizeToStringArray(rawPath, "/")).skip(1L).collect(Collectors.joining("/"));
- ServerHttpRequest newRequest = exchange.getRequest().mutate().path(newPath).build();
- exchange.getAttributes().put(GATEWAY_REQUEST_URL_ATTR, newRequest.getURI());
-
- //将现在的request,添加当前身份
- ServerHttpRequest mutableReq = exchange.getRequest().mutate().header("Authorization-UserName", "").header(X_GATEWAY_BASE_PATH,basePath).build();
- ServerWebExchange mutableExchange = exchange.mutate().request(mutableReq).build();
- return chain.filter(mutableExchange);
- }
-
- @Override
- public int getOrder() {
- return 0;
- }
-
-}
diff --git a/jero-boot/jero-cloud-module/jero-cloud-gateway/src/main/java/com/jero/handler/HystrixFallbackHandler.java b/jero-boot/jero-cloud-module/jero-cloud-gateway/src/main/java/com/jero/handler/HystrixFallbackHandler.java
deleted file mode 100644
index b6dda8572..000000000
--- a/jero-boot/jero-cloud-module/jero-cloud-gateway/src/main/java/com/jero/handler/HystrixFallbackHandler.java
+++ /dev/null
@@ -1,34 +0,0 @@
-package com.jero.handler;
-
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.http.HttpStatus;
-import org.springframework.http.MediaType;
-import org.springframework.stereotype.Component;
-import org.springframework.web.reactive.function.BodyInserters;
-import org.springframework.web.reactive.function.server.HandlerFunction;
-import org.springframework.web.reactive.function.server.ServerRequest;
-import org.springframework.web.reactive.function.server.ServerResponse;
-import reactor.core.publisher.Mono;
-
-import java.util.Optional;
-
-import static org.springframework.cloud.gateway.support.ServerWebExchangeUtils.GATEWAY_ORIGINAL_REQUEST_URL_ATTR;
-
-/**
- * @author scott
- * @date 2020/05/26
- * Hystrix 降级处理
- */
-@Slf4j
-@Component
-public class HystrixFallbackHandler implements HandlerFunction {
- @Override
- public Mono handle(ServerRequest serverRequest) {
- Optional
- *
- *
- * @author Sharada Jambula, James House
- * @author Contributions from Mads Henderson
- * @author Refactoring from CronTrigger to CronExpression by Aaron Craven
- *
- * Borrowed from quartz v2.3.1
- *
- */
-public final class CronExpression implements Serializable, Cloneable {
-
- private static final long serialVersionUID = 12423409423L;
-
- protected static final int SECOND = 0;
- protected static final int MINUTE = 1;
- protected static final int HOUR = 2;
- protected static final int DAY_OF_MONTH = 3;
- protected static final int MONTH = 4;
- protected static final int DAY_OF_WEEK = 5;
- protected static final int YEAR = 6;
- protected static final int ALL_SPEC_INT = 99; // '*'
- protected static final int NO_SPEC_INT = 98; // '?'
- protected static final Integer ALL_SPEC = ALL_SPEC_INT;
- protected static final Integer NO_SPEC = NO_SPEC_INT;
-
- protected static final Map monthMap = new HashMap(20);
- protected static final Map dayMap = new HashMap(60);
- static {
- monthMap.put("JAN", 0);
- monthMap.put("FEB", 1);
- monthMap.put("MAR", 2);
- monthMap.put("APR", 3);
- monthMap.put("MAY", 4);
- monthMap.put("JUN", 5);
- monthMap.put("JUL", 6);
- monthMap.put("AUG", 7);
- monthMap.put("SEP", 8);
- monthMap.put("OCT", 9);
- monthMap.put("NOV", 10);
- monthMap.put("DEC", 11);
-
- dayMap.put("SUN", 1);
- dayMap.put("MON", 2);
- dayMap.put("TUE", 3);
- dayMap.put("WED", 4);
- dayMap.put("THU", 5);
- dayMap.put("FRI", 6);
- dayMap.put("SAT", 7);
- }
-
- private final String cronExpression;
- private TimeZone timeZone = null;
- protected transient TreeSet seconds;
- protected transient TreeSet minutes;
- protected transient TreeSet hours;
- protected transient TreeSet daysOfMonth;
- protected transient TreeSet months;
- protected transient TreeSet daysOfWeek;
- protected transient TreeSet years;
-
- protected transient boolean lastdayOfWeek = false;
- protected transient int nthdayOfWeek = 0;
- protected transient boolean lastdayOfMonth = false;
- protected transient boolean nearestWeekday = false;
- protected transient int lastdayOffset = 0;
- protected transient boolean expressionParsed = false;
-
- public static final int MAX_YEAR = Calendar.getInstance().get(Calendar.YEAR) + 100;
-
- /**
- * Constructs a new CronExpression based on the specified
- * parameter.
- *
- * @param cronExpression String representation of the cron expression the
- * new object should represent
- * @throws java.text.ParseException
- * if the string expression cannot be parsed into a valid
- * CronExpression
- */
- public CronExpression(String cronExpression) throws ParseException {
- if (cronExpression == null) {
- throw new IllegalArgumentException("cronExpression cannot be null");
- }
-
- this.cronExpression = cronExpression.toUpperCase(Locale.US);
-
- buildExpression(this.cronExpression);
- }
-
- /**
- * Constructs a new {@code CronExpression} as a copy of an existing
- * instance.
- *
- * @param expression
- * The existing cron expression to be copied
- */
- public CronExpression(CronExpression expression) {
- /*
- * We don't call the other constructor here since we need to swallow the
- * ParseException. We also elide some of the sanity checking as it is
- * not logically trippable.
- */
- this.cronExpression = expression.getCronExpression();
- try {
- buildExpression(cronExpression);
- } catch (ParseException ex) {
- throw new AssertionError();
- }
- if (expression.getTimeZone() != null) {
- setTimeZone((TimeZone) expression.getTimeZone().clone());
- }
- }
-
- /**
- * Indicates whether the given date satisfies the cron expression. Note that
- * milliseconds are ignored, so two Dates falling on different milliseconds
- * of the same second will always have the same result here.
- *
- * @param date the date to evaluate
- * @return a boolean indicating whether the given date satisfies the cron
- * expression
- */
- public boolean isSatisfiedBy(Date date) {
- Calendar testDateCal = Calendar.getInstance(getTimeZone());
- testDateCal.setTime(date);
- testDateCal.set(Calendar.MILLISECOND, 0);
- Date originalDate = testDateCal.getTime();
-
- testDateCal.add(Calendar.SECOND, -1);
-
- Date timeAfter = getTimeAfter(testDateCal.getTime());
-
- return ((timeAfter != null) && (timeAfter.equals(originalDate)));
- }
-
- /**
- * Returns the next date/time after the given date/time which
- * satisfies the cron expression.
- *
- * @param date the date/time at which to begin the search for the next valid
- * date/time
- * @return the next valid date/time
- */
- public Date getNextValidTimeAfter(Date date) {
- return getTimeAfter(date);
- }
-
- /**
- * Returns the next date/time after the given date/time which does
- * not satisfy the expression
- *
- * @param date the date/time at which to begin the search for the next
- * invalid date/time
- * @return the next valid date/time
- */
- public Date getNextInvalidTimeAfter(Date date) {
- long difference = 1000;
-
- //move back to the nearest second so differences will be accurate
- Calendar adjustCal = Calendar.getInstance(getTimeZone());
- adjustCal.setTime(date);
- adjustCal.set(Calendar.MILLISECOND, 0);
- Date lastDate = adjustCal.getTime();
-
- Date newDate;
-
- //FUTURE_TODO: (QUARTZ-481) IMPROVE THIS! The following is a BAD solution to this problem. Performance will be very bad here, depending on the cron expression. It is, however A solution.
-
- //keep getting the next included time until it's farther than one second
- // apart. At that point, lastDate is the last valid fire time. We return
- // the second immediately following it.
- while (difference == 1000) {
- newDate = getTimeAfter(lastDate);
- if(newDate == null)
- break;
-
- difference = newDate.getTime() - lastDate.getTime();
-
- if (difference == 1000) {
- lastDate = newDate;
- }
- }
-
- return new Date(lastDate.getTime() + 1000);
- }
-
- /**
- * Returns the time zone for which this CronExpression
- * will be resolved.
- */
- public TimeZone getTimeZone() {
- if (timeZone == null) {
- timeZone = TimeZone.getDefault();
- }
-
- return timeZone;
- }
-
- /**
- * Sets the time zone for which this CronExpression
- * will be resolved.
- */
- public void setTimeZone(TimeZone timeZone) {
- this.timeZone = timeZone;
- }
-
- /**
- * Returns the string representation of the CronExpression
- *
- * @return a string representation of the CronExpression
- */
- @Override
- public String toString() {
- return cronExpression;
- }
-
- /**
- * Indicates whether the specified cron expression can be parsed into a
- * valid cron expression
- *
- * @param cronExpression the expression to evaluate
- * @return a boolean indicating whether the given expression is a valid cron
- * expression
- */
- public static boolean isValidExpression(String cronExpression) {
-
- try {
- new CronExpression(cronExpression);
- } catch (ParseException pe) {
- return false;
- }
-
- return true;
- }
-
- public static void validateExpression(String cronExpression) throws ParseException {
-
- new CronExpression(cronExpression);
- }
-
-
- ////////////////////////////////////////////////////////////////////////////
- //
- // Expression Parsing Functions
- //
- ////////////////////////////////////////////////////////////////////////////
-
- protected void buildExpression(String expression) throws ParseException {
- expressionParsed = true;
-
- try {
-
- if (seconds == null) {
- seconds = new TreeSet();
- }
- if (minutes == null) {
- minutes = new TreeSet();
- }
- if (hours == null) {
- hours = new TreeSet();
- }
- if (daysOfMonth == null) {
- daysOfMonth = new TreeSet();
- }
- if (months == null) {
- months = new TreeSet();
- }
- if (daysOfWeek == null) {
- daysOfWeek = new TreeSet();
- }
- if (years == null) {
- years = new TreeSet();
- }
-
- int exprOn = SECOND;
-
- StringTokenizer exprsTok = new StringTokenizer(expression, " \t",
- false);
-
- while (exprsTok.hasMoreTokens() && exprOn <= YEAR) {
- String expr = exprsTok.nextToken().trim();
-
- // throw an exception if L is used with other days of the month
- if(exprOn == DAY_OF_MONTH && expr.indexOf('L') != -1 && expr.length() > 1 && expr.contains(",")) {
- throw new ParseException("Support for specifying 'L' and 'LW' with other days of the month is not implemented", -1);
- }
- // throw an exception if L is used with other days of the week
- if(exprOn == DAY_OF_WEEK && expr.indexOf('L') != -1 && expr.length() > 1 && expr.contains(",")) {
- throw new ParseException("Support for specifying 'L' with other days of the week is not implemented", -1);
- }
- if(exprOn == DAY_OF_WEEK && expr.indexOf('#') != -1 && expr.indexOf('#', expr.indexOf('#') +1) != -1) {
- throw new ParseException("Support for specifying multiple \"nth\" days is not implemented.", -1);
- }
-
- StringTokenizer vTok = new StringTokenizer(expr, ",");
- while (vTok.hasMoreTokens()) {
- String v = vTok.nextToken();
- storeExpressionVals(0, v, exprOn);
- }
-
- exprOn++;
- }
-
- if (exprOn <= DAY_OF_WEEK) {
- throw new ParseException("Unexpected end of expression.",
- expression.length());
- }
-
- if (exprOn <= YEAR) {
- storeExpressionVals(0, "*", YEAR);
- }
-
- TreeSet dow = getSet(DAY_OF_WEEK);
- TreeSet dom = getSet(DAY_OF_MONTH);
-
- // Copying the logic from the UnsupportedOperationException below
- boolean dayOfMSpec = !dom.contains(NO_SPEC);
- boolean dayOfWSpec = !dow.contains(NO_SPEC);
-
- if (!dayOfMSpec || dayOfWSpec) {
- if (!dayOfWSpec || dayOfMSpec) {
- throw new ParseException(
- "Support for specifying both a day-of-week AND a day-of-month parameter is not implemented.", 0);
- }
- }
- } catch (ParseException pe) {
- throw pe;
- } catch (Exception e) {
- throw new ParseException("Illegal cron expression format ("
- + e.toString() + ")", 0);
- }
- }
-
- protected int storeExpressionVals(int pos, String s, int type)
- throws ParseException {
-
- int incr = 0;
- int i = skipWhiteSpace(pos, s);
- if (i >= s.length()) {
- return i;
- }
- char c = s.charAt(i);
- if ((c >= 'A') && (c <= 'Z') && (!s.equals("L")) && (!s.equals("LW")) && (!s.matches("^L-[0-9]*[W]?"))) {
- String sub = s.substring(i, i + 3);
- int sval = -1;
- int eval = -1;
- if (type == MONTH) {
- sval = getMonthNumber(sub) + 1;
- if (sval <= 0) {
- throw new ParseException("Invalid Month value: '" + sub + "'", i);
- }
- if (s.length() > i + 3) {
- c = s.charAt(i + 3);
- if (c == '-') {
- i += 4;
- sub = s.substring(i, i + 3);
- eval = getMonthNumber(sub) + 1;
- if (eval <= 0) {
- throw new ParseException("Invalid Month value: '" + sub + "'", i);
- }
- }
- }
- } else if (type == DAY_OF_WEEK) {
- sval = getDayOfWeekNumber(sub);
- if (sval < 0) {
- throw new ParseException("Invalid Day-of-Week value: '"
- + sub + "'", i);
- }
- if (s.length() > i + 3) {
- c = s.charAt(i + 3);
- if (c == '-') {
- i += 4;
- sub = s.substring(i, i + 3);
- eval = getDayOfWeekNumber(sub);
- if (eval < 0) {
- throw new ParseException(
- "Invalid Day-of-Week value: '" + sub
- + "'", i);
- }
- } else if (c == '#') {
- try {
- i += 4;
- nthdayOfWeek = Integer.parseInt(s.substring(i));
- if (nthdayOfWeek < 1 || nthdayOfWeek > 5) {
- throw new Exception();
- }
- } catch (Exception e) {
- throw new ParseException(
- "A numeric value between 1 and 5 must follow the '#' option",
- i);
- }
- } else if (c == 'L') {
- lastdayOfWeek = true;
- i++;
- }
- }
-
- } else {
- throw new ParseException(
- "Illegal characters for this position: '" + sub + "'",
- i);
- }
- if (eval != -1) {
- incr = 1;
- }
- addToSet(sval, eval, incr, type);
- return (i + 3);
- }
-
- if (c == '?') {
- i++;
- if ((i + 1) < s.length()
- && (s.charAt(i) != ' ' && s.charAt(i + 1) != '\t')) {
- throw new ParseException("Illegal character after '?': "
- + s.charAt(i), i);
- }
- if (type != DAY_OF_WEEK && type != DAY_OF_MONTH) {
- throw new ParseException(
- "'?' can only be specified for Day-of-Month or Day-of-Week.",
- i);
- }
- if (type == DAY_OF_WEEK && !lastdayOfMonth) {
- int val = daysOfMonth.last();
- if (val == NO_SPEC_INT) {
- throw new ParseException(
- "'?' can only be specified for Day-of-Month -OR- Day-of-Week.",
- i);
- }
- }
-
- addToSet(NO_SPEC_INT, -1, 0, type);
- return i;
- }
-
- if (c == '*' || c == '/') {
- if (c == '*' && (i + 1) >= s.length()) {
- addToSet(ALL_SPEC_INT, -1, incr, type);
- return i + 1;
- } else if (c == '/'
- && ((i + 1) >= s.length() || s.charAt(i + 1) == ' ' || s
- .charAt(i + 1) == '\t')) {
- throw new ParseException("'/' must be followed by an integer.", i);
- } else if (c == '*') {
- i++;
- }
- c = s.charAt(i);
- if (c == '/') { // is an increment specified?
- i++;
- if (i >= s.length()) {
- throw new ParseException("Unexpected end of string.", i);
- }
-
- incr = getNumericValue(s, i);
-
- i++;
- if (incr > 10) {
- i++;
- }
- checkIncrementRange(incr, type, i);
- } else {
- incr = 1;
- }
-
- addToSet(ALL_SPEC_INT, -1, incr, type);
- return i;
- } else if (c == 'L') {
- i++;
- if (type == DAY_OF_MONTH) {
- lastdayOfMonth = true;
- }
- if (type == DAY_OF_WEEK) {
- addToSet(7, 7, 0, type);
- }
- if(type == DAY_OF_MONTH && s.length() > i) {
- c = s.charAt(i);
- if(c == '-') {
- ValueSet vs = getValue(0, s, i+1);
- lastdayOffset = vs.value;
- if(lastdayOffset > 30)
- throw new ParseException("Offset from last day must be <= 30", i+1);
- i = vs.pos;
- }
- if(s.length() > i) {
- c = s.charAt(i);
- if(c == 'W') {
- nearestWeekday = true;
- i++;
- }
- }
- }
- return i;
- } else if (c >= '0' && c <= '9') {
- int val = Integer.parseInt(String.valueOf(c));
- i++;
- if (i >= s.length()) {
- addToSet(val, -1, -1, type);
- } else {
- c = s.charAt(i);
- if (c >= '0' && c <= '9') {
- ValueSet vs = getValue(val, s, i);
- val = vs.value;
- i = vs.pos;
- }
- i = checkNext(i, s, val, type);
- return i;
- }
- } else {
- throw new ParseException("Unexpected character: " + c, i);
- }
-
- return i;
- }
-
- private void checkIncrementRange(int incr, int type, int idxPos) throws ParseException {
- if (incr > 59 && (type == SECOND || type == MINUTE)) {
- throw new ParseException("Increment > 60 : " + incr, idxPos);
- } else if (incr > 23 && (type == HOUR)) {
- throw new ParseException("Increment > 24 : " + incr, idxPos);
- } else if (incr > 31 && (type == DAY_OF_MONTH)) {
- throw new ParseException("Increment > 31 : " + incr, idxPos);
- } else if (incr > 7 && (type == DAY_OF_WEEK)) {
- throw new ParseException("Increment > 7 : " + incr, idxPos);
- } else if (incr > 12 && (type == MONTH)) {
- throw new ParseException("Increment > 12 : " + incr, idxPos);
- }
- }
-
- protected int checkNext(int pos, String s, int val, int type)
- throws ParseException {
-
- int end = -1;
- int i = pos;
-
- if (i >= s.length()) {
- addToSet(val, end, -1, type);
- return i;
- }
-
- char c = s.charAt(pos);
-
- if (c == 'L') {
- if (type == DAY_OF_WEEK) {
- if(val < 1 || val > 7)
- throw new ParseException("Day-of-Week values must be between 1 and 7", -1);
- lastdayOfWeek = true;
- } else {
- throw new ParseException("'L' option is not valid here. (pos=" + i + ")", i);
- }
- TreeSet set = getSet(type);
- set.add(val);
- i++;
- return i;
- }
-
- if (c == 'W') {
- if (type == DAY_OF_MONTH) {
- nearestWeekday = true;
- } else {
- throw new ParseException("'W' option is not valid here. (pos=" + i + ")", i);
- }
- if(val > 31)
- throw new ParseException("The 'W' option does not make sense with values larger than 31 (max number of days in a month)", i);
- TreeSet set = getSet(type);
- set.add(val);
- i++;
- return i;
- }
-
- if (c == '#') {
- if (type != DAY_OF_WEEK) {
- throw new ParseException("'#' option is not valid here. (pos=" + i + ")", i);
- }
- i++;
- try {
- nthdayOfWeek = Integer.parseInt(s.substring(i));
- if (nthdayOfWeek < 1 || nthdayOfWeek > 5) {
- throw new Exception();
- }
- } catch (Exception e) {
- throw new ParseException(
- "A numeric value between 1 and 5 must follow the '#' option",
- i);
- }
-
- TreeSet set = getSet(type);
- set.add(val);
- i++;
- return i;
- }
-
- if (c == '-') {
- i++;
- c = s.charAt(i);
- int v = Integer.parseInt(String.valueOf(c));
- end = v;
- i++;
- if (i >= s.length()) {
- addToSet(val, end, 1, type);
- return i;
- }
- c = s.charAt(i);
- if (c >= '0' && c <= '9') {
- ValueSet vs = getValue(v, s, i);
- end = vs.value;
- i = vs.pos;
- }
- if (i < s.length() && ((c = s.charAt(i)) == '/')) {
- i++;
- c = s.charAt(i);
- int v2 = Integer.parseInt(String.valueOf(c));
- i++;
- if (i >= s.length()) {
- addToSet(val, end, v2, type);
- return i;
- }
- c = s.charAt(i);
- if (c >= '0' && c <= '9') {
- ValueSet vs = getValue(v2, s, i);
- int v3 = vs.value;
- addToSet(val, end, v3, type);
- i = vs.pos;
- return i;
- } else {
- addToSet(val, end, v2, type);
- return i;
- }
- } else {
- addToSet(val, end, 1, type);
- return i;
- }
- }
-
- if (c == '/') {
- if ((i + 1) >= s.length() || s.charAt(i + 1) == ' ' || s.charAt(i + 1) == '\t') {
- throw new ParseException("'/' must be followed by an integer.", i);
- }
-
- i++;
- c = s.charAt(i);
- int v2 = Integer.parseInt(String.valueOf(c));
- i++;
- if (i >= s.length()) {
- checkIncrementRange(v2, type, i);
- addToSet(val, end, v2, type);
- return i;
- }
- c = s.charAt(i);
- if (c >= '0' && c <= '9') {
- ValueSet vs = getValue(v2, s, i);
- int v3 = vs.value;
- checkIncrementRange(v3, type, i);
- addToSet(val, end, v3, type);
- i = vs.pos;
- return i;
- } else {
- throw new ParseException("Unexpected character '" + c + "' after '/'", i);
- }
- }
-
- addToSet(val, end, 0, type);
- i++;
- return i;
- }
-
- public String getCronExpression() {
- return cronExpression;
- }
-
- public String getExpressionSummary() {
- StringBuilder buf = new StringBuilder();
-
- buf.append("seconds: ");
- buf.append(getExpressionSetSummary(seconds));
- buf.append("\n");
- buf.append("minutes: ");
- buf.append(getExpressionSetSummary(minutes));
- buf.append("\n");
- buf.append("hours: ");
- buf.append(getExpressionSetSummary(hours));
- buf.append("\n");
- buf.append("daysOfMonth: ");
- buf.append(getExpressionSetSummary(daysOfMonth));
- buf.append("\n");
- buf.append("months: ");
- buf.append(getExpressionSetSummary(months));
- buf.append("\n");
- buf.append("daysOfWeek: ");
- buf.append(getExpressionSetSummary(daysOfWeek));
- buf.append("\n");
- buf.append("lastdayOfWeek: ");
- buf.append(lastdayOfWeek);
- buf.append("\n");
- buf.append("nearestWeekday: ");
- buf.append(nearestWeekday);
- buf.append("\n");
- buf.append("NthDayOfWeek: ");
- buf.append(nthdayOfWeek);
- buf.append("\n");
- buf.append("lastdayOfMonth: ");
- buf.append(lastdayOfMonth);
- buf.append("\n");
- buf.append("years: ");
- buf.append(getExpressionSetSummary(years));
- buf.append("\n");
-
- return buf.toString();
- }
-
- protected String getExpressionSetSummary(java.util.Set set) {
-
- if (set.contains(NO_SPEC)) {
- return "?";
- }
- if (set.contains(ALL_SPEC)) {
- return "*";
- }
-
- StringBuilder buf = new StringBuilder();
-
- Iterator itr = set.iterator();
- boolean first = true;
- while (itr.hasNext()) {
- Integer iVal = itr.next();
- String val = iVal.toString();
- if (!first) {
- buf.append(",");
- }
- buf.append(val);
- first = false;
- }
-
- return buf.toString();
- }
-
- protected String getExpressionSetSummary(java.util.ArrayList list) {
-
- if (list.contains(NO_SPEC)) {
- return "?";
- }
- if (list.contains(ALL_SPEC)) {
- return "*";
- }
-
- StringBuilder buf = new StringBuilder();
-
- Iterator itr = list.iterator();
- boolean first = true;
- while (itr.hasNext()) {
- Integer iVal = itr.next();
- String val = iVal.toString();
- if (!first) {
- buf.append(",");
- }
- buf.append(val);
- first = false;
- }
-
- return buf.toString();
- }
-
- protected int skipWhiteSpace(int i, String s) {
- for (; i < s.length() && (s.charAt(i) == ' ' || s.charAt(i) == '\t'); i++) {
- }
-
- return i;
- }
-
- protected int findNextWhiteSpace(int i, String s) {
- for (; i < s.length() && (s.charAt(i) != ' ' || s.charAt(i) != '\t'); i++) {
- }
-
- return i;
- }
-
- protected void addToSet(int val, int end, int incr, int type)
- throws ParseException {
-
- TreeSet set = getSet(type);
-
- if (type == SECOND || type == MINUTE) {
- if ((val < 0 || val > 59 || end > 59) && (val != ALL_SPEC_INT)) {
- throw new ParseException(
- "Minute and Second values must be between 0 and 59",
- -1);
- }
- } else if (type == HOUR) {
- if ((val < 0 || val > 23 || end > 23) && (val != ALL_SPEC_INT)) {
- throw new ParseException(
- "Hour values must be between 0 and 23", -1);
- }
- } else if (type == DAY_OF_MONTH) {
- if ((val < 1 || val > 31 || end > 31) && (val != ALL_SPEC_INT)
- && (val != NO_SPEC_INT)) {
- throw new ParseException(
- "Day of month values must be between 1 and 31", -1);
- }
- } else if (type == MONTH) {
- if ((val < 1 || val > 12 || end > 12) && (val != ALL_SPEC_INT)) {
- throw new ParseException(
- "Month values must be between 1 and 12", -1);
- }
- } else if (type == DAY_OF_WEEK) {
- if ((val == 0 || val > 7 || end > 7) && (val != ALL_SPEC_INT)
- && (val != NO_SPEC_INT)) {
- throw new ParseException(
- "Day-of-Week values must be between 1 and 7", -1);
- }
- }
-
- if ((incr == 0 || incr == -1) && val != ALL_SPEC_INT) {
- if (val != -1) {
- set.add(val);
- } else {
- set.add(NO_SPEC);
- }
-
- return;
- }
-
- int startAt = val;
- int stopAt = end;
-
- if (val == ALL_SPEC_INT && incr <= 0) {
- incr = 1;
- set.add(ALL_SPEC); // put in a marker, but also fill values
- }
-
- if (type == SECOND || type == MINUTE) {
- if (stopAt == -1) {
- stopAt = 59;
- }
- if (startAt == -1 || startAt == ALL_SPEC_INT) {
- startAt = 0;
- }
- } else if (type == HOUR) {
- if (stopAt == -1) {
- stopAt = 23;
- }
- if (startAt == -1 || startAt == ALL_SPEC_INT) {
- startAt = 0;
- }
- } else if (type == DAY_OF_MONTH) {
- if (stopAt == -1) {
- stopAt = 31;
- }
- if (startAt == -1 || startAt == ALL_SPEC_INT) {
- startAt = 1;
- }
- } else if (type == MONTH) {
- if (stopAt == -1) {
- stopAt = 12;
- }
- if (startAt == -1 || startAt == ALL_SPEC_INT) {
- startAt = 1;
- }
- } else if (type == DAY_OF_WEEK) {
- if (stopAt == -1) {
- stopAt = 7;
- }
- if (startAt == -1 || startAt == ALL_SPEC_INT) {
- startAt = 1;
- }
- } else if (type == YEAR) {
- if (stopAt == -1) {
- stopAt = MAX_YEAR;
- }
- if (startAt == -1 || startAt == ALL_SPEC_INT) {
- startAt = 1970;
- }
- }
-
- // if the end of the range is before the start, then we need to overflow into
- // the next day, month etc. This is done by adding the maximum amount for that
- // type, and using modulus max to determine the value being added.
- int max = -1;
- if (stopAt < startAt) {
- switch (type) {
- case SECOND : max = 60; break;
- case MINUTE : max = 60; break;
- case HOUR : max = 24; break;
- case MONTH : max = 12; break;
- case DAY_OF_WEEK : max = 7; break;
- case DAY_OF_MONTH : max = 31; break;
- case YEAR : throw new IllegalArgumentException("Start year must be less than stop year");
- default : throw new IllegalArgumentException("Unexpected type encountered");
- }
- stopAt += max;
- }
-
- for (int i = startAt; i <= stopAt; i += incr) {
- if (max == -1) {
- // ie: there's no max to overflow over
- set.add(i);
- } else {
- // take the modulus to get the real value
- int i2 = i % max;
-
- // 1-indexed ranges should not include 0, and should include their max
- if (i2 == 0 && (type == MONTH || type == DAY_OF_WEEK || type == DAY_OF_MONTH) ) {
- i2 = max;
- }
-
- set.add(i2);
- }
- }
- }
-
- TreeSet getSet(int type) {
- switch (type) {
- case SECOND:
- return seconds;
- case MINUTE:
- return minutes;
- case HOUR:
- return hours;
- case DAY_OF_MONTH:
- return daysOfMonth;
- case MONTH:
- return months;
- case DAY_OF_WEEK:
- return daysOfWeek;
- case YEAR:
- return years;
- default:
- return null;
- }
- }
-
- protected ValueSet getValue(int v, String s, int i) {
- char c = s.charAt(i);
- StringBuilder s1 = new StringBuilder(String.valueOf(v));
- while (c >= '0' && c <= '9') {
- s1.append(c);
- i++;
- if (i >= s.length()) {
- break;
- }
- c = s.charAt(i);
- }
- ValueSet val = new ValueSet();
-
- val.pos = (i < s.length()) ? i : i + 1;
- val.value = Integer.parseInt(s1.toString());
- return val;
- }
-
- protected int getNumericValue(String s, int i) {
- int endOfVal = findNextWhiteSpace(i, s);
- String val = s.substring(i, endOfVal);
- return Integer.parseInt(val);
- }
-
- protected int getMonthNumber(String s) {
- Integer integer = monthMap.get(s);
-
- if (integer == null) {
- return -1;
- }
-
- return integer;
- }
-
- protected int getDayOfWeekNumber(String s) {
- Integer integer = dayMap.get(s);
-
- if (integer == null) {
- return -1;
- }
-
- return integer;
- }
-
- ////////////////////////////////////////////////////////////////////////////
- //
- // Computation Functions
- //
- ////////////////////////////////////////////////////////////////////////////
-
- public Date getTimeAfter(Date afterTime) {
-
- // Computation is based on Gregorian year only.
- Calendar cl = new java.util.GregorianCalendar(getTimeZone());
-
- // move ahead one second, since we're computing the time *after* the
- // given time
- afterTime = new Date(afterTime.getTime() + 1000);
- // CronTrigger does not deal with milliseconds
- cl.setTime(afterTime);
- cl.set(Calendar.MILLISECOND, 0);
-
- boolean gotOne = false;
- // loop until we've computed the next time, or we've past the endTime
- while (!gotOne) {
-
- //if (endTime != null && cl.getTime().after(endTime)) return null;
- if(cl.get(Calendar.YEAR) > 2999) { // prevent endless loop...
- return null;
- }
-
- SortedSet st = null;
- int t = 0;
-
- int sec = cl.get(Calendar.SECOND);
- int min = cl.get(Calendar.MINUTE);
-
- // get second.................................................
- st = seconds.tailSet(sec);
- if (st != null && st.size() != 0) {
- sec = st.first();
- } else {
- sec = seconds.first();
- min++;
- cl.set(Calendar.MINUTE, min);
- }
- cl.set(Calendar.SECOND, sec);
-
- min = cl.get(Calendar.MINUTE);
- int hr = cl.get(Calendar.HOUR_OF_DAY);
- t = -1;
-
- // get minute.................................................
- st = minutes.tailSet(min);
- if (st != null && st.size() != 0) {
- t = min;
- min = st.first();
- } else {
- min = minutes.first();
- hr++;
- }
- if (min != t) {
- cl.set(Calendar.SECOND, 0);
- cl.set(Calendar.MINUTE, min);
- setCalendarHour(cl, hr);
- continue;
- }
- cl.set(Calendar.MINUTE, min);
-
- hr = cl.get(Calendar.HOUR_OF_DAY);
- int day = cl.get(Calendar.DAY_OF_MONTH);
- t = -1;
-
- // get hour...................................................
- st = hours.tailSet(hr);
- if (st != null && st.size() != 0) {
- t = hr;
- hr = st.first();
- } else {
- hr = hours.first();
- day++;
- }
- if (hr != t) {
- cl.set(Calendar.SECOND, 0);
- cl.set(Calendar.MINUTE, 0);
- cl.set(Calendar.DAY_OF_MONTH, day);
- setCalendarHour(cl, hr);
- continue;
- }
- cl.set(Calendar.HOUR_OF_DAY, hr);
-
- day = cl.get(Calendar.DAY_OF_MONTH);
- int mon = cl.get(Calendar.MONTH) + 1;
- // '+ 1' because calendar is 0-based for this field, and we are
- // 1-based
- t = -1;
- int tmon = mon;
-
- // get day...................................................
- boolean dayOfMSpec = !daysOfMonth.contains(NO_SPEC);
- boolean dayOfWSpec = !daysOfWeek.contains(NO_SPEC);
- if (dayOfMSpec && !dayOfWSpec) { // get day by day of month rule
- st = daysOfMonth.tailSet(day);
- if (lastdayOfMonth) {
- if(!nearestWeekday) {
- t = day;
- day = getLastDayOfMonth(mon, cl.get(Calendar.YEAR));
- day -= lastdayOffset;
- if(t > day) {
- mon++;
- if(mon > 12) {
- mon = 1;
- tmon = 3333; // ensure test of mon != tmon further below fails
- cl.add(Calendar.YEAR, 1);
- }
- day = 1;
- }
- } else {
- t = day;
- day = getLastDayOfMonth(mon, cl.get(Calendar.YEAR));
- day -= lastdayOffset;
-
- java.util.Calendar tcal = java.util.Calendar.getInstance(getTimeZone());
- tcal.set(Calendar.SECOND, 0);
- tcal.set(Calendar.MINUTE, 0);
- tcal.set(Calendar.HOUR_OF_DAY, 0);
- tcal.set(Calendar.DAY_OF_MONTH, day);
- tcal.set(Calendar.MONTH, mon - 1);
- tcal.set(Calendar.YEAR, cl.get(Calendar.YEAR));
-
- int ldom = getLastDayOfMonth(mon, cl.get(Calendar.YEAR));
- int dow = tcal.get(Calendar.DAY_OF_WEEK);
-
- if(dow == Calendar.SATURDAY && day == 1) {
- day += 2;
- } else if(dow == Calendar.SATURDAY) {
- day -= 1;
- } else if(dow == Calendar.SUNDAY && day == ldom) {
- day -= 2;
- } else if(dow == Calendar.SUNDAY) {
- day += 1;
- }
-
- tcal.set(Calendar.SECOND, sec);
- tcal.set(Calendar.MINUTE, min);
- tcal.set(Calendar.HOUR_OF_DAY, hr);
- tcal.set(Calendar.DAY_OF_MONTH, day);
- tcal.set(Calendar.MONTH, mon - 1);
- Date nTime = tcal.getTime();
- if(nTime.before(afterTime)) {
- day = 1;
- mon++;
- }
- }
- } else if(nearestWeekday) {
- t = day;
- day = daysOfMonth.first();
-
- java.util.Calendar tcal = java.util.Calendar.getInstance(getTimeZone());
- tcal.set(Calendar.SECOND, 0);
- tcal.set(Calendar.MINUTE, 0);
- tcal.set(Calendar.HOUR_OF_DAY, 0);
- tcal.set(Calendar.DAY_OF_MONTH, day);
- tcal.set(Calendar.MONTH, mon - 1);
- tcal.set(Calendar.YEAR, cl.get(Calendar.YEAR));
-
- int ldom = getLastDayOfMonth(mon, cl.get(Calendar.YEAR));
- int dow = tcal.get(Calendar.DAY_OF_WEEK);
-
- if(dow == Calendar.SATURDAY && day == 1) {
- day += 2;
- } else if(dow == Calendar.SATURDAY) {
- day -= 1;
- } else if(dow == Calendar.SUNDAY && day == ldom) {
- day -= 2;
- } else if(dow == Calendar.SUNDAY) {
- day += 1;
- }
-
-
- tcal.set(Calendar.SECOND, sec);
- tcal.set(Calendar.MINUTE, min);
- tcal.set(Calendar.HOUR_OF_DAY, hr);
- tcal.set(Calendar.DAY_OF_MONTH, day);
- tcal.set(Calendar.MONTH, mon - 1);
- Date nTime = tcal.getTime();
- if(nTime.before(afterTime)) {
- day = daysOfMonth.first();
- mon++;
- }
- } else if (st != null && st.size() != 0) {
- t = day;
- day = st.first();
- // make sure we don't over-run a short month, such as february
- int lastDay = getLastDayOfMonth(mon, cl.get(Calendar.YEAR));
- if (day > lastDay) {
- day = daysOfMonth.first();
- mon++;
- }
- } else {
- day = daysOfMonth.first();
- mon++;
- }
-
- if (day != t || mon != tmon) {
- cl.set(Calendar.SECOND, 0);
- cl.set(Calendar.MINUTE, 0);
- cl.set(Calendar.HOUR_OF_DAY, 0);
- cl.set(Calendar.DAY_OF_MONTH, day);
- cl.set(Calendar.MONTH, mon - 1);
- // '- 1' because calendar is 0-based for this field, and we
- // are 1-based
- continue;
- }
- } else if (dayOfWSpec && !dayOfMSpec) { // get day by day of week rule
- if (lastdayOfWeek) { // are we looking for the last XXX day of
- // the month?
- int dow = daysOfWeek.first(); // desired
- // d-o-w
- int cDow = cl.get(Calendar.DAY_OF_WEEK); // current d-o-w
- int daysToAdd = 0;
- if (cDow < dow) {
- daysToAdd = dow - cDow;
- }
- if (cDow > dow) {
- daysToAdd = dow + (7 - cDow);
- }
-
- int lDay = getLastDayOfMonth(mon, cl.get(Calendar.YEAR));
-
- if (day + daysToAdd > lDay) { // did we already miss the
- // last one?
- cl.set(Calendar.SECOND, 0);
- cl.set(Calendar.MINUTE, 0);
- cl.set(Calendar.HOUR_OF_DAY, 0);
- cl.set(Calendar.DAY_OF_MONTH, 1);
- cl.set(Calendar.MONTH, mon);
- // no '- 1' here because we are promoting the month
- continue;
- }
-
- // find date of last occurrence of this day in this month...
- while ((day + daysToAdd + 7) <= lDay) {
- daysToAdd += 7;
- }
-
- day += daysToAdd;
-
- if (daysToAdd > 0) {
- cl.set(Calendar.SECOND, 0);
- cl.set(Calendar.MINUTE, 0);
- cl.set(Calendar.HOUR_OF_DAY, 0);
- cl.set(Calendar.DAY_OF_MONTH, day);
- cl.set(Calendar.MONTH, mon - 1);
- // '- 1' here because we are not promoting the month
- continue;
- }
-
- } else if (nthdayOfWeek != 0) {
- // are we looking for the Nth XXX day in the month?
- int dow = daysOfWeek.first(); // desired
- // d-o-w
- int cDow = cl.get(Calendar.DAY_OF_WEEK); // current d-o-w
- int daysToAdd = 0;
- if (cDow < dow) {
- daysToAdd = dow - cDow;
- } else if (cDow > dow) {
- daysToAdd = dow + (7 - cDow);
- }
-
- boolean dayShifted = false;
- if (daysToAdd > 0) {
- dayShifted = true;
- }
-
- day += daysToAdd;
- int weekOfMonth = day / 7;
- if (day % 7 > 0) {
- weekOfMonth++;
- }
-
- daysToAdd = (nthdayOfWeek - weekOfMonth) * 7;
- day += daysToAdd;
- if (daysToAdd < 0
- || day > getLastDayOfMonth(mon, cl
- .get(Calendar.YEAR))) {
- cl.set(Calendar.SECOND, 0);
- cl.set(Calendar.MINUTE, 0);
- cl.set(Calendar.HOUR_OF_DAY, 0);
- cl.set(Calendar.DAY_OF_MONTH, 1);
- cl.set(Calendar.MONTH, mon);
- // no '- 1' here because we are promoting the month
- continue;
- } else if (daysToAdd > 0 || dayShifted) {
- cl.set(Calendar.SECOND, 0);
- cl.set(Calendar.MINUTE, 0);
- cl.set(Calendar.HOUR_OF_DAY, 0);
- cl.set(Calendar.DAY_OF_MONTH, day);
- cl.set(Calendar.MONTH, mon - 1);
- // '- 1' here because we are NOT promoting the month
- continue;
- }
- } else {
- int cDow = cl.get(Calendar.DAY_OF_WEEK); // current d-o-w
- int dow = daysOfWeek.first(); // desired
- // d-o-w
- st = daysOfWeek.tailSet(cDow);
- if (st != null && st.size() > 0) {
- dow = st.first();
- }
-
- int daysToAdd = 0;
- if (cDow < dow) {
- daysToAdd = dow - cDow;
- }
- if (cDow > dow) {
- daysToAdd = dow + (7 - cDow);
- }
-
- int lDay = getLastDayOfMonth(mon, cl.get(Calendar.YEAR));
-
- if (day + daysToAdd > lDay) { // will we pass the end of
- // the month?
- cl.set(Calendar.SECOND, 0);
- cl.set(Calendar.MINUTE, 0);
- cl.set(Calendar.HOUR_OF_DAY, 0);
- cl.set(Calendar.DAY_OF_MONTH, 1);
- cl.set(Calendar.MONTH, mon);
- // no '- 1' here because we are promoting the month
- continue;
- } else if (daysToAdd > 0) { // are we swithing days?
- cl.set(Calendar.SECOND, 0);
- cl.set(Calendar.MINUTE, 0);
- cl.set(Calendar.HOUR_OF_DAY, 0);
- cl.set(Calendar.DAY_OF_MONTH, day + daysToAdd);
- cl.set(Calendar.MONTH, mon - 1);
- // '- 1' because calendar is 0-based for this field,
- // and we are 1-based
- continue;
- }
- }
- } else { // dayOfWSpec && !dayOfMSpec
- throw new UnsupportedOperationException(
- "Support for specifying both a day-of-week AND a day-of-month parameter is not implemented.");
- }
- cl.set(Calendar.DAY_OF_MONTH, day);
-
- mon = cl.get(Calendar.MONTH) + 1;
- // '+ 1' because calendar is 0-based for this field, and we are
- // 1-based
- int year = cl.get(Calendar.YEAR);
- t = -1;
-
- // test for expressions that never generate a valid fire date,
- // but keep looping...
- if (year > MAX_YEAR) {
- return null;
- }
-
- // get month...................................................
- st = months.tailSet(mon);
- if (st != null && st.size() != 0) {
- t = mon;
- mon = st.first();
- } else {
- mon = months.first();
- year++;
- }
- if (mon != t) {
- cl.set(Calendar.SECOND, 0);
- cl.set(Calendar.MINUTE, 0);
- cl.set(Calendar.HOUR_OF_DAY, 0);
- cl.set(Calendar.DAY_OF_MONTH, 1);
- cl.set(Calendar.MONTH, mon - 1);
- // '- 1' because calendar is 0-based for this field, and we are
- // 1-based
- cl.set(Calendar.YEAR, year);
- continue;
- }
- cl.set(Calendar.MONTH, mon - 1);
- // '- 1' because calendar is 0-based for this field, and we are
- // 1-based
-
- year = cl.get(Calendar.YEAR);
- t = -1;
-
- // get year...................................................
- st = years.tailSet(year);
- if (st != null && st.size() != 0) {
- t = year;
- year = st.first();
- } else {
- return null; // ran out of years...
- }
-
- if (year != t) {
- cl.set(Calendar.SECOND, 0);
- cl.set(Calendar.MINUTE, 0);
- cl.set(Calendar.HOUR_OF_DAY, 0);
- cl.set(Calendar.DAY_OF_MONTH, 1);
- cl.set(Calendar.MONTH, 0);
- // '- 1' because calendar is 0-based for this field, and we are
- // 1-based
- cl.set(Calendar.YEAR, year);
- continue;
- }
- cl.set(Calendar.YEAR, year);
-
- gotOne = true;
- } // while( !done )
-
- return cl.getTime();
- }
-
- /**
- * Advance the calendar to the particular hour paying particular attention
- * to daylight saving problems.
- *
- * @param cal the calendar to operate on
- * @param hour the hour to set
- */
- protected void setCalendarHour(Calendar cal, int hour) {
- cal.set(java.util.Calendar.HOUR_OF_DAY, hour);
- if (cal.get(java.util.Calendar.HOUR_OF_DAY) != hour && hour != 24) {
- cal.set(java.util.Calendar.HOUR_OF_DAY, hour + 1);
- }
- }
-
- /**
- * NOT YET IMPLEMENTED: Returns the time before the given time
- * that the CronExpression matches.
- */
- public Date getTimeBefore(Date endTime) {
- // FUTURE_TODO: implement QUARTZ-423
- return null;
- }
-
- /**
- * NOT YET IMPLEMENTED: Returns the final time that the
- * CronExpression will match.
- */
- public Date getFinalFireTime() {
- // FUTURE_TODO: implement QUARTZ-423
- return null;
- }
-
- protected boolean isLeapYear(int year) {
- return ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0));
- }
-
- protected int getLastDayOfMonth(int monthNum, int year) {
-
- switch (monthNum) {
- case 1:
- return 31;
- case 2:
- return (isLeapYear(year)) ? 29 : 28;
- case 3:
- return 31;
- case 4:
- return 30;
- case 5:
- return 31;
- case 6:
- return 30;
- case 7:
- return 31;
- case 8:
- return 31;
- case 9:
- return 30;
- case 10:
- return 31;
- case 11:
- return 30;
- case 12:
- return 31;
- default:
- throw new IllegalArgumentException("Illegal month number: "
- + monthNum);
- }
- }
-
-
- private void readObject(java.io.ObjectInputStream stream)
- throws java.io.IOException, ClassNotFoundException {
-
- stream.defaultReadObject();
- try {
- buildExpression(cronExpression);
- } catch (Exception ignore) {
- } // never happens
- }
-
- @Override
- @Deprecated
- public Object clone() {
- return new CronExpression(this);
- }
-}
-
-class ValueSet {
- public int value;
-
- public int pos;
-}
diff --git a/jero-boot/jero-cloud-module/jero-cloud-xxljob/src/main/java/com/xxl/job/admin/core/exception/XxlJobException.java b/jero-boot/jero-cloud-module/jero-cloud-xxljob/src/main/java/com/xxl/job/admin/core/exception/XxlJobException.java
deleted file mode 100644
index faa6063c4..000000000
--- a/jero-boot/jero-cloud-module/jero-cloud-xxljob/src/main/java/com/xxl/job/admin/core/exception/XxlJobException.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package com.xxl.job.admin.core.exception;
-
-/**
- * @author xuxueli 2019-05-04 23:19:29
- */
-public class XxlJobException extends RuntimeException {
-
- public XxlJobException() {
- }
- public XxlJobException(String message) {
- super(message);
- }
-
-}
diff --git a/jero-boot/jero-cloud-module/jero-cloud-xxljob/src/main/java/com/xxl/job/admin/core/model/XxlJobGroup.java b/jero-boot/jero-cloud-module/jero-cloud-xxljob/src/main/java/com/xxl/job/admin/core/model/XxlJobGroup.java
deleted file mode 100644
index f87a7a68e..000000000
--- a/jero-boot/jero-cloud-module/jero-cloud-xxljob/src/main/java/com/xxl/job/admin/core/model/XxlJobGroup.java
+++ /dev/null
@@ -1,67 +0,0 @@
-package com.xxl.job.admin.core.model;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-
-/**
- * Created by xuxueli on 16/9/30.
- */
-public class XxlJobGroup {
-
- private int id;
- private String appname;
- private String title;
- private int addressType; // 执行器地址类型:0=自动注册、1=手动录入
- private String addressList; // 执行器地址列表,多地址逗号分隔(手动录入)
-
- // registry list
- private List registryList; // 执行器地址列表(系统注册)
- public List getRegistryList() {
- if (addressList!=null && addressList.trim().length()>0) {
- registryList = new ArrayList(Arrays.asList(addressList.split(",")));
- }
- return registryList;
- }
-
- public int getId() {
- return id;
- }
-
- public void setId(int id) {
- this.id = id;
- }
-
- public String getAppname() {
- return appname;
- }
-
- public void setAppname(String appname) {
- this.appname = appname;
- }
-
- public String getTitle() {
- return title;
- }
-
- public void setTitle(String title) {
- this.title = title;
- }
-
- public int getAddressType() {
- return addressType;
- }
-
- public void setAddressType(int addressType) {
- this.addressType = addressType;
- }
-
- public String getAddressList() {
- return addressList;
- }
-
- public void setAddressList(String addressList) {
- this.addressList = addressList;
- }
-
-}
diff --git a/jero-boot/jero-cloud-module/jero-cloud-xxljob/src/main/java/com/xxl/job/admin/core/model/XxlJobInfo.java b/jero-boot/jero-cloud-module/jero-cloud-xxljob/src/main/java/com/xxl/job/admin/core/model/XxlJobInfo.java
deleted file mode 100644
index 1e4a74b19..000000000
--- a/jero-boot/jero-cloud-module/jero-cloud-xxljob/src/main/java/com/xxl/job/admin/core/model/XxlJobInfo.java
+++ /dev/null
@@ -1,218 +0,0 @@
-package com.xxl.job.admin.core.model;
-
-import java.util.Date;
-
-/**
- * xxl-job info
- *
- * @author xuxueli 2016-1-12 18:25:49
- */
-public class XxlJobInfo {
-
- private int id; // 主键ID
-
- private int jobGroup; // 执行器主键ID
- private String jobCron; // 任务执行CRON表达式
- private String jobDesc;
-
- private Date addTime;
- private Date updateTime;
-
- private String author; // 负责人
- private String alarmEmail; // 报警邮件
-
- private String executorRouteStrategy; // 执行器路由策略
- private String executorHandler; // 执行器,任务Handler名称
- private String executorParam; // 执行器,任务参数
- private String executorBlockStrategy; // 阻塞处理策略
- private int executorTimeout; // 任务执行超时时间,单位秒
- private int executorFailRetryCount; // 失败重试次数
-
- private String glueType; // GLUE类型 #com.xxl.job.core.glue.GlueTypeEnum
- private String glueSource; // GLUE源代码
- private String glueRemark; // GLUE备注
- private Date glueUpdatetime; // GLUE更新时间
-
- private String childJobId; // 子任务ID,多个逗号分隔
-
- private int triggerStatus; // 调度状态:0-停止,1-运行
- private long triggerLastTime; // 上次调度时间
- private long triggerNextTime; // 下次调度时间
-
-
- public int getId() {
- return id;
- }
-
- public void setId(int id) {
- this.id = id;
- }
-
- public int getJobGroup() {
- return jobGroup;
- }
-
- public void setJobGroup(int jobGroup) {
- this.jobGroup = jobGroup;
- }
-
- public String getJobCron() {
- return jobCron;
- }
-
- public void setJobCron(String jobCron) {
- this.jobCron = jobCron;
- }
-
- public String getJobDesc() {
- return jobDesc;
- }
-
- public void setJobDesc(String jobDesc) {
- this.jobDesc = jobDesc;
- }
-
- public Date getAddTime() {
- return addTime;
- }
-
- public void setAddTime(Date addTime) {
- this.addTime = addTime;
- }
-
- public Date getUpdateTime() {
- return updateTime;
- }
-
- public void setUpdateTime(Date updateTime) {
- this.updateTime = updateTime;
- }
-
- public String getAuthor() {
- return author;
- }
-
- public void setAuthor(String author) {
- this.author = author;
- }
-
- public String getAlarmEmail() {
- return alarmEmail;
- }
-
- public void setAlarmEmail(String alarmEmail) {
- this.alarmEmail = alarmEmail;
- }
-
- public String getExecutorRouteStrategy() {
- return executorRouteStrategy;
- }
-
- public void setExecutorRouteStrategy(String executorRouteStrategy) {
- this.executorRouteStrategy = executorRouteStrategy;
- }
-
- public String getExecutorHandler() {
- return executorHandler;
- }
-
- public void setExecutorHandler(String executorHandler) {
- this.executorHandler = executorHandler;
- }
-
- public String getExecutorParam() {
- return executorParam;
- }
-
- public void setExecutorParam(String executorParam) {
- this.executorParam = executorParam;
- }
-
- public String getExecutorBlockStrategy() {
- return executorBlockStrategy;
- }
-
- public void setExecutorBlockStrategy(String executorBlockStrategy) {
- this.executorBlockStrategy = executorBlockStrategy;
- }
-
- public int getExecutorTimeout() {
- return executorTimeout;
- }
-
- public void setExecutorTimeout(int executorTimeout) {
- this.executorTimeout = executorTimeout;
- }
-
- public int getExecutorFailRetryCount() {
- return executorFailRetryCount;
- }
-
- public void setExecutorFailRetryCount(int executorFailRetryCount) {
- this.executorFailRetryCount = executorFailRetryCount;
- }
-
- public String getGlueType() {
- return glueType;
- }
-
- public void setGlueType(String glueType) {
- this.glueType = glueType;
- }
-
- public String getGlueSource() {
- return glueSource;
- }
-
- public void setGlueSource(String glueSource) {
- this.glueSource = glueSource;
- }
-
- public String getGlueRemark() {
- return glueRemark;
- }
-
- public void setGlueRemark(String glueRemark) {
- this.glueRemark = glueRemark;
- }
-
- public Date getGlueUpdatetime() {
- return glueUpdatetime;
- }
-
- public void setGlueUpdatetime(Date glueUpdatetime) {
- this.glueUpdatetime = glueUpdatetime;
- }
-
- public String getChildJobId() {
- return childJobId;
- }
-
- public void setChildJobId(String childJobId) {
- this.childJobId = childJobId;
- }
-
- public int getTriggerStatus() {
- return triggerStatus;
- }
-
- public void setTriggerStatus(int triggerStatus) {
- this.triggerStatus = triggerStatus;
- }
-
- public long getTriggerLastTime() {
- return triggerLastTime;
- }
-
- public void setTriggerLastTime(long triggerLastTime) {
- this.triggerLastTime = triggerLastTime;
- }
-
- public long getTriggerNextTime() {
- return triggerNextTime;
- }
-
- public void setTriggerNextTime(long triggerNextTime) {
- this.triggerNextTime = triggerNextTime;
- }
-}
diff --git a/jero-boot/jero-cloud-module/jero-cloud-xxljob/src/main/java/com/xxl/job/admin/core/model/XxlJobLog.java b/jero-boot/jero-cloud-module/jero-cloud-xxljob/src/main/java/com/xxl/job/admin/core/model/XxlJobLog.java
deleted file mode 100644
index 7d3072aa6..000000000
--- a/jero-boot/jero-cloud-module/jero-cloud-xxljob/src/main/java/com/xxl/job/admin/core/model/XxlJobLog.java
+++ /dev/null
@@ -1,157 +0,0 @@
-package com.xxl.job.admin.core.model;
-
-import java.util.Date;
-
-/**
- * xxl-job log, used to track trigger process
- * @author xuxueli 2015-12-19 23:19:09
- */
-public class XxlJobLog {
-
- private long id;
-
- // job info
- private int jobGroup;
- private int jobId;
-
- // execute info
- private String executorAddress;
- private String executorHandler;
- private String executorParam;
- private String executorShardingParam;
- private int executorFailRetryCount;
-
- // trigger info
- private Date triggerTime;
- private int triggerCode;
- private String triggerMsg;
-
- // handle info
- private Date handleTime;
- private int handleCode;
- private String handleMsg;
-
- // alarm info
- private int alarmStatus;
-
- public long getId() {
- return id;
- }
-
- public void setId(long id) {
- this.id = id;
- }
-
- public int getJobGroup() {
- return jobGroup;
- }
-
- public void setJobGroup(int jobGroup) {
- this.jobGroup = jobGroup;
- }
-
- public int getJobId() {
- return jobId;
- }
-
- public void setJobId(int jobId) {
- this.jobId = jobId;
- }
-
- public String getExecutorAddress() {
- return executorAddress;
- }
-
- public void setExecutorAddress(String executorAddress) {
- this.executorAddress = executorAddress;
- }
-
- public String getExecutorHandler() {
- return executorHandler;
- }
-
- public void setExecutorHandler(String executorHandler) {
- this.executorHandler = executorHandler;
- }
-
- public String getExecutorParam() {
- return executorParam;
- }
-
- public void setExecutorParam(String executorParam) {
- this.executorParam = executorParam;
- }
-
- public String getExecutorShardingParam() {
- return executorShardingParam;
- }
-
- public void setExecutorShardingParam(String executorShardingParam) {
- this.executorShardingParam = executorShardingParam;
- }
-
- public int getExecutorFailRetryCount() {
- return executorFailRetryCount;
- }
-
- public void setExecutorFailRetryCount(int executorFailRetryCount) {
- this.executorFailRetryCount = executorFailRetryCount;
- }
-
- public Date getTriggerTime() {
- return triggerTime;
- }
-
- public void setTriggerTime(Date triggerTime) {
- this.triggerTime = triggerTime;
- }
-
- public int getTriggerCode() {
- return triggerCode;
- }
-
- public void setTriggerCode(int triggerCode) {
- this.triggerCode = triggerCode;
- }
-
- public String getTriggerMsg() {
- return triggerMsg;
- }
-
- public void setTriggerMsg(String triggerMsg) {
- this.triggerMsg = triggerMsg;
- }
-
- public Date getHandleTime() {
- return handleTime;
- }
-
- public void setHandleTime(Date handleTime) {
- this.handleTime = handleTime;
- }
-
- public int getHandleCode() {
- return handleCode;
- }
-
- public void setHandleCode(int handleCode) {
- this.handleCode = handleCode;
- }
-
- public String getHandleMsg() {
- return handleMsg;
- }
-
- public void setHandleMsg(String handleMsg) {
- this.handleMsg = handleMsg;
- }
-
- public int getAlarmStatus() {
- return alarmStatus;
- }
-
- public void setAlarmStatus(int alarmStatus) {
- this.alarmStatus = alarmStatus;
- }
-
-}
diff --git a/jero-boot/jero-cloud-module/jero-cloud-xxljob/src/main/java/com/xxl/job/admin/core/model/XxlJobLogGlue.java b/jero-boot/jero-cloud-module/jero-cloud-xxljob/src/main/java/com/xxl/job/admin/core/model/XxlJobLogGlue.java
deleted file mode 100644
index 2f59ffa84..000000000
--- a/jero-boot/jero-cloud-module/jero-cloud-xxljob/src/main/java/com/xxl/job/admin/core/model/XxlJobLogGlue.java
+++ /dev/null
@@ -1,75 +0,0 @@
-package com.xxl.job.admin.core.model;
-
-import java.util.Date;
-
-/**
- * xxl-job log for glue, used to track job code process
- * @author xuxueli 2016-5-19 17:57:46
- */
-public class XxlJobLogGlue {
-
- private int id;
- private int jobId; // 任务主键ID
- private String glueType; // GLUE类型 #com.xxl.job.core.glue.GlueTypeEnum
- private String glueSource;
- private String glueRemark;
- private Date addTime;
- private Date updateTime;
-
- public int getId() {
- return id;
- }
-
- public void setId(int id) {
- this.id = id;
- }
-
- public int getJobId() {
- return jobId;
- }
-
- public void setJobId(int jobId) {
- this.jobId = jobId;
- }
-
- public String getGlueType() {
- return glueType;
- }
-
- public void setGlueType(String glueType) {
- this.glueType = glueType;
- }
-
- public String getGlueSource() {
- return glueSource;
- }
-
- public void setGlueSource(String glueSource) {
- this.glueSource = glueSource;
- }
-
- public String getGlueRemark() {
- return glueRemark;
- }
-
- public void setGlueRemark(String glueRemark) {
- this.glueRemark = glueRemark;
- }
-
- public Date getAddTime() {
- return addTime;
- }
-
- public void setAddTime(Date addTime) {
- this.addTime = addTime;
- }
-
- public Date getUpdateTime() {
- return updateTime;
- }
-
- public void setUpdateTime(Date updateTime) {
- this.updateTime = updateTime;
- }
-
-}
diff --git a/jero-boot/jero-cloud-module/jero-cloud-xxljob/src/main/java/com/xxl/job/admin/core/model/XxlJobLogReport.java b/jero-boot/jero-cloud-module/jero-cloud-xxljob/src/main/java/com/xxl/job/admin/core/model/XxlJobLogReport.java
deleted file mode 100644
index e58ff1a9e..000000000
--- a/jero-boot/jero-cloud-module/jero-cloud-xxljob/src/main/java/com/xxl/job/admin/core/model/XxlJobLogReport.java
+++ /dev/null
@@ -1,54 +0,0 @@
-package com.xxl.job.admin.core.model;
-
-import java.util.Date;
-
-public class XxlJobLogReport {
-
- private int id;
-
- private Date triggerDay;
-
- private int runningCount;
- private int sucCount;
- private int failCount;
-
- public int getId() {
- return id;
- }
-
- public void setId(int id) {
- this.id = id;
- }
-
- public Date getTriggerDay() {
- return triggerDay;
- }
-
- public void setTriggerDay(Date triggerDay) {
- this.triggerDay = triggerDay;
- }
-
- public int getRunningCount() {
- return runningCount;
- }
-
- public void setRunningCount(int runningCount) {
- this.runningCount = runningCount;
- }
-
- public int getSucCount() {
- return sucCount;
- }
-
- public void setSucCount(int sucCount) {
- this.sucCount = sucCount;
- }
-
- public int getFailCount() {
- return failCount;
- }
-
- public void setFailCount(int failCount) {
- this.failCount = failCount;
- }
-}
diff --git a/jero-boot/jero-cloud-module/jero-cloud-xxljob/src/main/java/com/xxl/job/admin/core/model/XxlJobRegistry.java b/jero-boot/jero-cloud-module/jero-cloud-xxljob/src/main/java/com/xxl/job/admin/core/model/XxlJobRegistry.java
deleted file mode 100644
index 924d6d336..000000000
--- a/jero-boot/jero-cloud-module/jero-cloud-xxljob/src/main/java/com/xxl/job/admin/core/model/XxlJobRegistry.java
+++ /dev/null
@@ -1,55 +0,0 @@
-package com.xxl.job.admin.core.model;
-
-import java.util.Date;
-
-/**
- * Created by xuxueli on 16/9/30.
- */
-public class XxlJobRegistry {
-
- private int id;
- private String registryGroup;
- private String registryKey;
- private String registryValue;
- private Date updateTime;
-
- public int getId() {
- return id;
- }
-
- public void setId(int id) {
- this.id = id;
- }
-
- public String getRegistryGroup() {
- return registryGroup;
- }
-
- public void setRegistryGroup(String registryGroup) {
- this.registryGroup = registryGroup;
- }
-
- public String getRegistryKey() {
- return registryKey;
- }
-
- public void setRegistryKey(String registryKey) {
- this.registryKey = registryKey;
- }
-
- public String getRegistryValue() {
- return registryValue;
- }
-
- public void setRegistryValue(String registryValue) {
- this.registryValue = registryValue;
- }
-
- public Date getUpdateTime() {
- return updateTime;
- }
-
- public void setUpdateTime(Date updateTime) {
- this.updateTime = updateTime;
- }
-}
diff --git a/jero-boot/jero-cloud-module/jero-cloud-xxljob/src/main/java/com/xxl/job/admin/core/model/XxlJobUser.java b/jero-boot/jero-cloud-module/jero-cloud-xxljob/src/main/java/com/xxl/job/admin/core/model/XxlJobUser.java
deleted file mode 100644
index db17327a8..000000000
--- a/jero-boot/jero-cloud-module/jero-cloud-xxljob/src/main/java/com/xxl/job/admin/core/model/XxlJobUser.java
+++ /dev/null
@@ -1,73 +0,0 @@
-package com.xxl.job.admin.core.model;
-
-import org.springframework.util.StringUtils;
-
-/**
- * @author xuxueli 2019-05-04 16:43:12
- */
-public class XxlJobUser {
-
- private int id;
- private String username; // 账号
- private String password; // 密码
- private int role; // 角色:0-普通用户、1-管理员
- private String permission; // 权限:执行器ID列表,多个逗号分割
-
- public int getId() {
- return id;
- }
-
- public void setId(int id) {
- this.id = id;
- }
-
- 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 int getRole() {
- return role;
- }
-
- public void setRole(int role) {
- this.role = role;
- }
-
- public String getPermission() {
- return permission;
- }
-
- public void setPermission(String permission) {
- this.permission = permission;
- }
-
- // plugin
- public boolean validPermission(int jobGroup){
- if (this.role == 1) {
- return true;
- } else {
- if (StringUtils.hasText(this.permission)) {
- for (String permissionItem : this.permission.split(",")) {
- if (String.valueOf(jobGroup).equals(permissionItem)) {
- return true;
- }
- }
- }
- return false;
- }
-
- }
-
-}
diff --git a/jero-boot/jero-cloud-module/jero-cloud-xxljob/src/main/java/com/xxl/job/admin/core/old/RemoteHttpJobBean.java b/jero-boot/jero-cloud-module/jero-cloud-xxljob/src/main/java/com/xxl/job/admin/core/old/RemoteHttpJobBean.java
deleted file mode 100644
index b2dd15155..000000000
--- a/jero-boot/jero-cloud-module/jero-cloud-xxljob/src/main/java/com/xxl/job/admin/core/old/RemoteHttpJobBean.java
+++ /dev/null
@@ -1,32 +0,0 @@
-//package com.xxl.job.admin.core.jobbean;
-//
-//import com.xxl.job.admin.core.thread.JobTriggerPoolHelper;
-//import com.xxl.job.admin.core.trigger.TriggerTypeEnum;
-//import org.quartz.JobExecutionContext;
-//import org.quartz.JobExecutionException;
-//import org.quartz.JobKey;
-//import org.slf4j.Logger;
-//import org.slf4j.LoggerFactory;
-//import org.springframework.scheduling.quartz.QuartzJobBean;
-//
-///**
-// * http job bean
-// * “@DisallowConcurrentExecution” disable concurrent, thread size can not be only one, better given more
-// * @author xuxueli 2015-12-17 18:20:34
-// */
-////@DisallowConcurrentExecution
-//public class RemoteHttpJobBean extends QuartzJobBean {
-// private static Logger logger = LoggerFactory.getLogger(RemoteHttpJobBean.class);
-//
-// @Override
-// protected void executeInternal(JobExecutionContext context)
-// throws JobExecutionException {
-//
-// // load jobId
-// JobKey jobKey = context.getTrigger().getJobKey();
-// Integer jobId = Integer.valueOf(jobKey.getName());
-//
-//
-// }
-//
-//}
\ No newline at end of file
diff --git a/jero-boot/jero-cloud-module/jero-cloud-xxljob/src/main/java/com/xxl/job/admin/core/old/XxlJobDynamicScheduler.java b/jero-boot/jero-cloud-module/jero-cloud-xxljob/src/main/java/com/xxl/job/admin/core/old/XxlJobDynamicScheduler.java
deleted file mode 100644
index 1e62aa190..000000000
--- a/jero-boot/jero-cloud-module/jero-cloud-xxljob/src/main/java/com/xxl/job/admin/core/old/XxlJobDynamicScheduler.java
+++ /dev/null
@@ -1,413 +0,0 @@
-//package com.xxl.job.admin.core.schedule;
-//
-//import com.xxl.job.admin.core.conf.XxlJobAdminConfig;
-//import com.xxl.job.admin.core.jobbean.RemoteHttpJobBean;
-//import com.xxl.job.admin.core.model.XxlJobInfo;
-//import com.xxl.job.admin.core.thread.JobFailMonitorHelper;
-//import com.xxl.job.admin.core.thread.JobRegistryMonitorHelper;
-//import com.xxl.job.admin.core.thread.JobTriggerPoolHelper;
-//import com.xxl.job.admin.core.util.I18nUtil;
-//import com.xxl.job.core.biz.AdminBiz;
-//import com.xxl.job.core.biz.ExecutorBiz;
-//import com.xxl.job.core.enums.ExecutorBlockStrategyEnum;
-//import com.xxl.rpc.remoting.invoker.XxlRpcInvokerFactory;
-//import com.xxl.rpc.remoting.invoker.call.CallType;
-//import com.xxl.rpc.remoting.invoker.reference.XxlRpcReferenceBean;
-//import com.xxl.rpc.remoting.invoker.route.LoadBalance;
-//import com.xxl.rpc.remoting.net.NetEnum;
-//import com.xxl.rpc.remoting.net.impl.servlet.server.ServletServerHandler;
-//import com.xxl.rpc.remoting.provider.XxlRpcProviderFactory;
-//import com.xxl.rpc.serialize.Serializer;
-//import org.quartz.*;
-//import org.quartz.Trigger.TriggerState;
-//import org.quartz.impl.triggers.CronTriggerImpl;
-//import org.slf4j.Logger;
-//import org.slf4j.LoggerFactory;
-//import org.springframework.util.Assert;
-//
-//import javax.servlet.ServletException;
-//import javax.servlet.http.HttpServletRequest;
-//import javax.servlet.http.HttpServletResponse;
-//import java.io.IOException;
-//import java.util.Date;
-//import java.util.concurrent.ConcurrentHashMap;
-//
-///**
-// * base quartz scheduler util
-// * @author xuxueli 2015-12-19 16:13:53
-// */
-//public final class XxlJobDynamicScheduler {
-// private static final Logger logger = LoggerFactory.getLogger(XxlJobDynamicScheduler_old.class);
-//
-// // ---------------------- param ----------------------
-//
-// // scheduler
-// private static Scheduler scheduler;
-// public void setScheduler(Scheduler scheduler) {
-// XxlJobDynamicScheduler_old.scheduler = scheduler;
-// }
-//
-//
-// // ---------------------- init + destroy ----------------------
-// public void start() throws Exception {
-// // valid
-// Assert.notNull(scheduler, "quartz scheduler is null");
-//
-// // init i18n
-// initI18n();
-//
-// // admin registry monitor run
-// JobRegistryMonitorHelper.getInstance().start();
-//
-// // admin monitor run
-// JobFailMonitorHelper.getInstance().start();
-//
-// // admin-server
-// initRpcProvider();
-//
-// logger.info(">>>>>>>>> init xxl-job admin success.");
-// }
-//
-//
-// public void destroy() throws Exception {
-// // admin trigger pool stop
-// JobTriggerPoolHelper.toStop();
-//
-// // admin registry stop
-// JobRegistryMonitorHelper.getInstance().toStop();
-//
-// // admin monitor stop
-// JobFailMonitorHelper.getInstance().toStop();
-//
-// // admin-server
-// stopRpcProvider();
-// }
-//
-//
-// // ---------------------- I18n ----------------------
-//
-// private void initI18n(){
-// for (ExecutorBlockStrategyEnum item:ExecutorBlockStrategyEnum.values()) {
-// item.setTitle(I18nUtil.getString("jobconf_block_".concat(item.name())));
-// }
-// }
-//
-//
-// // ---------------------- admin rpc provider (no server version) ----------------------
-// private static ServletServerHandler servletServerHandler;
-// private void initRpcProvider(){
-// // init
-// XxlRpcProviderFactory xxlRpcProviderFactory = new XxlRpcProviderFactory();
-// xxlRpcProviderFactory.initConfig(
-// NetEnum.NETTY_HTTP,
-// Serializer.SerializeEnum.HESSIAN.getSerializer(),
-// null,
-// 0,
-// XxlJobAdminConfig.getAdminConfig().getAccessToken(),
-// null,
-// null);
-//
-// // add services
-// xxlRpcProviderFactory.addService(AdminBiz.class.getName(), null, XxlJobAdminConfig.getAdminConfig().getAdminBiz());
-//
-// // servlet handler
-// servletServerHandler = new ServletServerHandler(xxlRpcProviderFactory);
-// }
-// private void stopRpcProvider() throws Exception {
-// XxlRpcInvokerFactory.getInstance().stop();
-// }
-// public static void invokeAdminService(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
-// servletServerHandler.handle(null, request, response);
-// }
-//
-//
-// // ---------------------- executor-client ----------------------
-// private static ConcurrentHashMap executorBizRepository = new ConcurrentHashMap();
-// public static ExecutorBiz getExecutorBiz(String address) throws Exception {
-// // valid
-// if (address==null || address.trim().length()==0) {
-// return null;
-// }
-//
-// // load-cache
-// address = address.trim();
-// ExecutorBiz executorBiz = executorBizRepository.get(address);
-// if (executorBiz != null) {
-// return executorBiz;
-// }
-//
-// // set-cache
-// executorBiz = (ExecutorBiz) new XxlRpcReferenceBean(
-// NetEnum.NETTY_HTTP,
-// Serializer.SerializeEnum.HESSIAN.getSerializer(),
-// CallType.SYNC,
-// LoadBalance.ROUND,
-// ExecutorBiz.class,
-// null,
-// 5000,
-// address,
-// XxlJobAdminConfig.getAdminConfig().getAccessToken(),
-// null,
-// null).getObject();
-//
-// executorBizRepository.put(address, executorBiz);
-// return executorBiz;
-// }
-//
-//
-// // ---------------------- schedule util ----------------------
-//
-// /**
-// * fill job info
-// *
-// * @param jobInfo
-// */
-// public static void fillJobInfo(XxlJobInfo jobInfo) {
-//
-// String name = String.valueOf(jobInfo.getId());
-//
-// // trigger key
-// TriggerKey triggerKey = TriggerKey.triggerKey(name);
-// try {
-//
-// // trigger cron
-// Trigger trigger = scheduler.getTrigger(triggerKey);
-// if (trigger!=null && trigger instanceof CronTriggerImpl) {
-// String cronExpression = ((CronTriggerImpl) trigger).getCronExpression();
-// jobInfo.setJobCron(cronExpression);
-// }
-//
-// // trigger state
-// TriggerState triggerState = scheduler.getTriggerState(triggerKey);
-// if (triggerState!=null) {
-// jobInfo.setJobStatus(triggerState.name());
-// }
-//
-// //JobKey jobKey = new JobKey(jobInfo.getJobName(), String.valueOf(jobInfo.getJobGroup()));
-// //JobDetail jobDetail = scheduler.getJobDetail(jobKey);
-// //String jobClass = jobDetail.getJobClass().getName();
-//
-// } catch (SchedulerException e) {
-// logger.error(e.getMessage(), e);
-// }
-// }
-//
-//
-// /**
-// * add trigger + job
-// *
-// * @param jobName
-// * @param cronExpression
-// * @return
-// * @throws SchedulerException
-// */
-// public static boolean addJob(String jobName, String cronExpression) throws SchedulerException {
-// // 1、job key
-// TriggerKey triggerKey = TriggerKey.triggerKey(jobName);
-// JobKey jobKey = new JobKey(jobName);
-//
-// // 2、valid
-// if (scheduler.checkExists(triggerKey)) {
-// return true; // PASS
-// }
-//
-// // 3、corn trigger
-// CronScheduleBuilder cronScheduleBuilder = CronScheduleBuilder.cronSchedule(cronExpression).withMisfireHandlingInstructionDoNothing(); // withMisfireHandlingInstructionDoNothing 忽略掉调度终止过程中忽略的调度
-// CronTrigger cronTrigger = TriggerBuilder.newTrigger().withIdentity(triggerKey).withSchedule(cronScheduleBuilder).build();
-//
-// // 4、job detail
-// Class extends Job> jobClass_ = RemoteHttpJobBean.class; // Class.forName(jobInfo.getJobClass());
-// JobDetail jobDetail = JobBuilder.newJob(jobClass_).withIdentity(jobKey).build();
-//
-// /*if (jobInfo.getJobData()!=null) {
-// JobDataMap jobDataMap = jobDetail.getJobDataMap();
-// jobDataMap.putAll(JacksonUtil.readValue(jobInfo.getJobData(), Map.class));
-// // JobExecutionContext context.getMergedJobDataMap().get("mailGuid");
-// }*/
-//
-// // 5、schedule job
-// Date date = scheduler.scheduleJob(jobDetail, cronTrigger);
-//
-// logger.info(">>>>>>>>>>> addJob success(quartz), jobDetail:{}, cronTrigger:{}, date:{}", jobDetail, cronTrigger, date);
-// return true;
-// }
-//
-//
-// /**
-// * remove trigger + job
-// *
-// * @param jobName
-// * @return
-// * @throws SchedulerException
-// */
-// public static boolean removeJob(String jobName) throws SchedulerException {
-//
-// JobKey jobKey = new JobKey(jobName);
-// scheduler.deleteJob(jobKey);
-//
-// /*TriggerKey triggerKey = TriggerKey.triggerKey(jobName);
-// if (scheduler.checkExists(triggerKey)) {
-// scheduler.unscheduleJob(triggerKey); // trigger + job
-// }*/
-//
-// logger.info(">>>>>>>>>>> removeJob success(quartz), jobKey:{}", jobKey);
-// return true;
-// }
-//
-//
-// /**
-// * updateJobCron
-// *
-// * @param jobName
-// * @param cronExpression
-// * @return
-// * @throws SchedulerException
-// */
-// public static boolean updateJobCron(String jobName, String cronExpression) throws SchedulerException {
-//
-// // 1、job key
-// TriggerKey triggerKey = TriggerKey.triggerKey(jobName);
-//
-// // 2、valid
-// if (!scheduler.checkExists(triggerKey)) {
-// return true; // PASS
-// }
-//
-// CronTrigger oldTrigger = (CronTrigger) scheduler.getTrigger(triggerKey);
-//
-// // 3、avoid repeat cron
-// String oldCron = oldTrigger.getCronExpression();
-// if (oldCron.equals(cronExpression)){
-// return true; // PASS
-// }
-//
-// // 4、new cron trigger
-// CronScheduleBuilder cronScheduleBuilder = CronScheduleBuilder.cronSchedule(cronExpression).withMisfireHandlingInstructionDoNothing();
-// oldTrigger = oldTrigger.getTriggerBuilder().withIdentity(triggerKey).withSchedule(cronScheduleBuilder).build();
-//
-// // 5、rescheduleJob
-// scheduler.rescheduleJob(triggerKey, oldTrigger);
-//
-// /*
-// JobKey jobKey = new JobKey(jobName);
-//
-// // old job detail
-// JobDetail jobDetail = scheduler.getJobDetail(jobKey);
-//
-// // new trigger
-// HashSet triggerSet = new HashSet();
-// triggerSet.add(cronTrigger);
-// // cover trigger of job detail
-// scheduler.scheduleJob(jobDetail, triggerSet, true);*/
-//
-// logger.info(">>>>>>>>>>> resumeJob success, JobName:{}", jobName);
-// return true;
-// }
-//
-//
-// /**
-// * pause
-// *
-// * @param jobName
-// * @return
-// * @throws SchedulerException
-// */
-// /*public static boolean pauseJob(String jobName) throws SchedulerException {
-//
-// TriggerKey triggerKey = TriggerKey.triggerKey(jobName);
-//
-// boolean result = false;
-// if (scheduler.checkExists(triggerKey)) {
-// scheduler.pauseTrigger(triggerKey);
-// result = true;
-// }
-//
-// logger.info(">>>>>>>>>>> pauseJob {}, triggerKey:{}", (result?"success":"fail"),triggerKey);
-// return result;
-// }*/
-//
-//
-// /**
-// * resume
-// *
-// * @param jobName
-// * @return
-// * @throws SchedulerException
-// */
-// /*public static boolean resumeJob(String jobName) throws SchedulerException {
-//
-// TriggerKey triggerKey = TriggerKey.triggerKey(jobName);
-//
-// boolean result = false;
-// if (scheduler.checkExists(triggerKey)) {
-// scheduler.resumeTrigger(triggerKey);
-// result = true;
-// }
-//
-// logger.info(">>>>>>>>>>> resumeJob {}, triggerKey:{}", (result?"success":"fail"), triggerKey);
-// return result;
-// }*/
-//
-//
-// /**
-// * run
-// *
-// * @param jobName
-// * @return
-// * @throws SchedulerException
-// */
-// /*public static boolean triggerJob(String jobName) throws SchedulerException {
-// // TriggerKey : name + group
-// JobKey jobKey = new JobKey(jobName);
-// TriggerKey triggerKey = TriggerKey.triggerKey(jobName);
-//
-// boolean result = false;
-// if (scheduler.checkExists(triggerKey)) {
-// scheduler.triggerJob(jobKey);
-// result = true;
-// logger.info(">>>>>>>>>>> runJob success, jobKey:{}", jobKey);
-// } else {
-// logger.info(">>>>>>>>>>> runJob fail, jobKey:{}", jobKey);
-// }
-// return result;
-// }*/
-//
-//
-// /**
-// * finaAllJobList
-// *
-// * @return
-// *//*
-// @Deprecated
-// public static List