Giter Site home page Giter Site logo

sia-task's Introduction

关于我们

微服务任务调度平台

使用指南
开发指南
部署指南
Demo

背景

无论是互联网应用或者企业级应用,都充斥着大量的批处理任务。我们常常需要一些任务调度系统帮助我们解决问题。随着微服务化架构的逐步演进,单体架构逐渐演变为分布式、微服务架构。在此的背景下,很多原先的任务调度平台已经不能满足业务系统的需求。于是出现了一些基于分布式的任务调度平台。这些平台各有其特点,但各有不足之处,比如不支持任务编排、与业务高耦合、不支持跨平台等问题。不是非常符合公司的需求,因此我们开发了微服务任务调度平台(SIA-TASK)。

SIA是我们公司基础开发平台Simple is Awesome的简称,SIA-TASK(微服务任务调度平台)是其中的一项重要产品,SIA-TASK契合当前微服务架构模式,具有跨平台,可编排,高可用,无侵入,一致性,异步并行,动态扩展,实时监控等特点。

Introduction

A lot of batch tasks need to be processed by task scheduling systems. The single architectures are evolving towards distributed ones. We often need distributed task scheduling platforms to handle the needs of business systems. But such platforms may not support task scheduling across OS or are coupled with business features. We therefore decided to develop SIA-TASK.

SIA (Simple is Awesome) is our basic development platform. SIA-TASK is one of the key products of SIA and can work across OS. Its features include task scheduling, high availability, non-invasiveness, consistency, asynchronous concurrent processing, dynamic scale-out and real-time monitoring, etc.

项目简介

SIA-TASK是任务调度的一体式解决方案。对任务进行元数据采集,然后进行任务可视化编排,最终进行任务调度,并且对任务采取全流程监控,简单易用。对业务完全无侵入,通过简单灵活的配置即可生成符合预期的任务调度模型。

SIA-TASK借鉴微服务的设计**,获取分布在每个任务执行器上的任务元数据,上传到任务注册中心。利用在线方式进行任务编排,可动态修改任务时钟,采用HTTP作为任务调度协议,统一使用JSON数据格式,由调度中心进行时钟解析,执行任务流程,进行任务通知。

Overview

SIA-TASK is an integrated non-invasive task scheduling solution. It collects task metadata and then visualizes and schedules the tasks. The scheduled tasks are monitored throughout the whole process. An ideal task scheduling model can be generated after simple and flexible configuration.

SIA-TASK collects task metadata on all executers and upload the data to the registry. The tasks are scheduled online using JSON with HTTP as the protocol. The scheduling center parses the clock, executes tasks and sends task notifications.

关键术语

  • 任务(Task): 基本执行单元,执行器对外暴露的一个HTTP调用接口;
  • 作业(Job): 由一个或者多个存在相互逻辑关系(串行/并行)的任务组成,任务调度中心调度的最小单位;
  • 计划(Plan): 由若干个顺序执行的作业组成,每个作业都有自己的执行周期,计划没有执行周期;
  • 任务调度中心(Scheduler): 根据每个的作业的执行周期进行调度,即按照计划、作业、任务的逻辑进行HTTP请求;
  • 任务编排中心(Config): 编排中心使用任务来创建计划和作业;
  • 任务执行器(Executer): 接收HTTP请求进行业务逻辑的执行;
  • Hunter:Spring项目扩展包,负责执行器中的任务抓取,上传注册中心,业务可依赖该组件进行Task编写。

Terms

  • Task: the basic execution unit and the HTTP call interface
  • Job: the minimum scheduled unit that is composed of one or more (serial/concurrent) tasks
  • Plan: the composition of several serial jobs with no execution cycle
  • Scheduler: sends HTTP requests based on the logic of the plans, jobs and tasks
  • Config: creates plans and jobs with tasks
  • Executer: receives HTTP requests and executes the business logic
  • Hunter: fetches tasks, uploads metadata and scripts business tasks

微服务任务调度平台的特性

  • 基于注解自动抓取任务,在暴露成HTTP服务的方法上加入@OnlineTask注解,@OnlineTask会自动抓取方法所在的IP地址,端口,请求路径,请求方法,请求参数格式等信息上传到任务注册中心(zookeeper),并同步写入持久化存储中,此方法即任务;
  • 基于注解无侵入多线程控制,单一任务实例必须保持单线程运行,任务调度框架自动拦截@OnlineTask注解进行单线程运行控制,保持在一个任务运行时不会被再次调度。而且整个控制过程对开发者完全无感知。
  • 调度器自适应任务分配,任务执行过程中出现失败,异常时。可以根据任务定制的策略进行多点重新唤醒任务,保证任务的不间断执行。
  • 高度灵活任务编排模式,SIA-TASK的设计**是以任务为原子,把多个任务按照执行的关系组合起来形成一个作业。同时运行时分为任务调度中心和任务编排中心,使得作业的调度和作业的编排分隔开来,互不影响。在我们需要调整作业的流程时,只需要在编排中心进行处理即可。同时编排中心支持任务按照串行,并行,分支等方式组织关系。在相同任务不同任务实例时,也支持多种调度方式进行处理。

Features

  • Annotation-based automatic task fetching. Add @OnlineTask to the HTTP method. @OnlineTask would fetch and upload the IP address, port, request path, and request parameter format to the registry (Zookeeper) while writing the information into the persistent storage.
  • Annotation-based non-invasive multi-threading control. The scheduler automatically intercepts @OnlineTask for single-threading control and ensures that the running task would not be scheduled again. The whole process is non-invasive.
  • Self-adaptive task scheduling. Tasks can be woken up based on the custom strategies when execution failure happens.
  • Flexible task configuration. SIA-TASK is designed to group several logically related tasks into a job. The Scheduler and the Config schedules and configures jobs independently. The Config allows tasks to be organized in series, concurrently or as branches. Instances of the same task can be scheduled differently.

微服务任务调度平台设计

SIA-TASK主要分为五个部分:

  • 任务执行器
  • 任务调度中心
  • 任务编排中心
  • 任务注册中心(zookeeper)
  • 持久存储(Mysql)

SIA-TASK includes the following components:

  • Executer
  • Scheduler
  • Config
  • Registry (Zookeeper)
  • Persistent storage (MySQL)

逻辑架构图

SIA-TASK的主要运行逻辑:

  1. 通过注解抓取任务执行器中的任务上报到任务注册中心
  2. 任务编排中心从任务注册中心获取数据进行编排保存入持久化存储
  3. 任务调度中心从持久化存储获取调度信息
  4. 任务调度中心按照调度逻辑访问任务执行器

SIA-TASK的主要运行逻辑:

  1. Fetch and upload annotated tasks to the registry
  2. The Config obtains data from the registry for scheduling and persistent storage
  3. The Scheduler acquires data from the persistent storage
  4. The Scheduler accesses the task scheduler following the scheduling logic

逻辑架构图

UI预览

首页提供多维度监控

  • 调度器信息:展示调度器信息(负载能力,预警值),以及作业分布情况。
  • 调度信息:展示调度中心触发的调度次数,作业、任务多维度调度统计。
  • 对接项目统计:对使用项目的系统进行统计,作业个数,任务个数等等。

Homepage

  • Scheduler: loading capacity, alarm value and job distribution
  • Scheduling: scheduling frequency, job metrics and task metrics
  • Active users: job count and task count of active users

首页


调度监控提供对已提交的作业进行实时监控展示
  • 作业状态实时监控:以项目组为单位面板,展示作业运行时状态。
  • 实时日志关联:可以通过涂色状态图标进行日志实时关联展示。

Scheduling Monitor: real-time monitoring over submitted jobs

  • Real-time job monitoring: runtime metrics of jobs by project group
  • Real-time log correlation: 可以通过涂色状态图标进行日志实时关联展示。

调度监控


任务管理:提供任务元数据的相关操作
  • 任务元数据录入:手动模式的任务,可在此进行录入。
  • 任务连通性测试:提供任务连通性功能测试。
  • 任务元数据其他操作:修改,删除。

Task Manager: task metadata operation

  • Metadata entry: enter the metadata of manual tasks
  • Connectivity test: test the connectivity of tasks
  • Modification and deletion

Task管理 Task管理


Job管理:提供作业相关操作
  • 任务编排:进行作业的编排。
  • 发布作业: 作业的创建,修改,以及发布。
  • 级联设置:提供存在时间依赖的作业设置。

Job Manager: job operations

  • Task configuration: configure jobs
  • Job release: create, modify and release jobs
  • Cascading setting: set time-dependent jobs

Job管理


日志管理

Log Manager

Job管理

开源地址

其他说明

关于编译代码

  • 建议使用Jdk1.8以上,JDK 1.8 or later version is recommended.

版本说明

  • 建议版本1.0.0,SIA-TASK 1.0.0 is recommended.

版权说明

  • 自身使用 Apache v2.0 协议,SIA-TASK uses Apache 2.0.

其他相关资料

SIA相关开源产品链接:

(待补充)

sia-task's People

Contributors

arugal avatar beliefyou8 avatar li-jh avatar lijun006788 avatar maozw avatar shafi-1 avatar teddiwolf avatar yuhuiyong88 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

sia-task's Issues

HTTP处理长时间调用

请问,如果客户端业务逻辑处理长达几个小时,这种情况使用HTTP进行交互会不会占用系统大量资源呢?

编译bug

[WARNING] For this reason, future Maven versions might no longer support building such malformed projects.
[WARNING]
[ERROR] [ERROR] Project 'com.sia:sia-task-config:1.0.0' is duplicated in the reactor @
[ERROR] Project 'com.sia:sia-task-config:1.0.0' is duplicated in the reactor -> [Help 1]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/DuplicateProjectException

o.o.2版本打包出错

在sia-task-build-component下执行mvn clean install命令时报以下错误:
[ERROR] Failed to execute goal on project sia-task-admin: Could not resolve dependencies for project com.sia:sia-task-admin:jar:0.0.2: Failed to collect dependencies at com.sia:sia-task-mapper-mybatis:jar:0.0.2: Failed to read artifact descriptor for com.sia:sia-task-mapper-mybatis:jar:0.0.2: Could not transfer artifact com.sia:sia-task-mapper-mybatis:pom:0.0.2 from/to spring-releases (https://repo.spring.io/libs-release): Transfer failed for https://repo.spring.io/libs-release/com/sia/sia-task-mapper-mybatis/0.0.2/sia-task-mapper-mybatis-0.0.2.pom: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target -> [Help 1]

web node 编译失败

安装依赖包时提示如下错误
请问如何在windows 或者 centos下正确编译
Error making request.
Error: read ECONNRESET
at TLSWrap.onStreamRead (internal/stream_base_commons.js:111:27)

Please report this full log at https://github.com/Medium/phantomjs
npm WARN The package eslint-config-standard is included as both a dev and production dependency.
npm WARN The package eslint-plugin-html is included as both a dev and production dependency.
npm WARN The package eslint-plugin-promise is included as both a dev and production dependency.
npm WARN The package eslint-plugin-standard is included as both a dev and production dependency.
npm WARN optional SKIPPING OPTIONAL DEPENDENCY: [email protected] (node_modules/quill-image-resize-module/node_modules/fsevents):
npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for [email protected]: wanted {"os":"darwin","arch":"any"} (current: {"os":"linux","arch":"x64"})
npm WARN optional SKIPPING OPTIONAL DEPENDENCY: [email protected] (node_modules/fsevents):
npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for [email protected]: wanted {"os":"darwin","arch":"any"} (current: {"os":"linux","arch":"x64"})

npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! [email protected] install: node install.js
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the [email protected] install script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.

作业为什么总是不执行

试抢占JOB IS SUCCESS , 开始启动JOB; JobGroupName is network JobKey is network_test-noParam
2019-09-11 09:41:39.570 INFO 2733 --- [ main] c.s.s.q.impl.OnlineSchedulerFactory : >>>>>>>>>>****************************** init OnlineScheduler ******************************
2019-09-11 09:41:39.615 INFO 2733 --- [ main] org.quartz.impl.StdSchedulerFactory : Using default implementation for ThreadExecutor
2019-09-11 09:41:39.620 INFO 2733 --- [ main] org.quartz.simpl.SimpleThreadPool : Job execution threads will use class loader of thread: main
2019-09-11 09:41:39.669 INFO 2733 --- [ main] org.quartz.core.SchedulerSignalerImpl : Initialized Scheduler Signaller of type: class org.quartz.core.SchedulerSignalerImpl
2019-09-11 09:41:39.670 INFO 2733 --- [ main] org.quartz.core.QuartzScheduler : Quartz Scheduler v.2.3.0 created.
2019-09-11 09:41:39.671 INFO 2733 --- [ main] c.s.s.q.l.MultiSerialJobListener : this is method MultiSerialJobListener initialize DefaultQuartzScheduler
2019-09-11 09:41:39.671 INFO 2733 --- [ main] org.quartz.simpl.RAMJobStore : RAMJobStore initialized.
2019-09-11 09:41:39.672 INFO 2733 --- [ main] org.quartz.core.QuartzScheduler : Scheduler meta-data: Quartz Scheduler (v2.3.0) 'DefaultQuartzScheduler' with instanceId 'NON_CLUSTERED'
Scheduler class: 'org.quartz.core.QuartzScheduler' - running locally.
NOT STARTED.
Currently in standby mode.
Number of jobs executed: 0
Using thread pool 'org.quartz.simpl.SimpleThreadPool' - with 60 threads.
Using job-store 'org.quartz.simpl.RAMJobStore' - which does not support persistence. and is not clustered.

2019-09-11 09:41:39.673 INFO 2733 --- [ main] org.quartz.impl.StdSchedulerFactory : Quartz scheduler 'DefaultQuartzScheduler' initialized from default resource file in Quartz package: 'quartz.properties'
2019-09-11 09:41:39.673 INFO 2733 --- [ main] org.quartz.impl.StdSchedulerFactory : Quartz scheduler version: 2.3.0
2019-09-11 09:41:39.677 INFO 2733 --- [ main] utoConfigurationReportLoggingInitializer :

Error starting ApplicationContext. To display the auto-configuration report re-run your application with 'debug' enabled.
2019-09-11 09:41:39.685 ERROR 2733 --- [ main] o.s.boot.SpringApplication : Application startup failed

java.lang.IllegalStateException: Failed to execute CommandLineRunner
at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:735)
at org.springframework.boot.SpringApplication.callRunners(SpringApplication.java:716)
at org.springframework.boot.SpringApplication.afterRefresh(SpringApplication.java:703)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:304)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1118)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1107)
at com.sia.scheduler.SchedulerApplication.main(SchedulerApplication.java:52)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:48)
at org.springframework.boot.loader.Launcher.launch(Launcher.java:87)
at org.springframework.boot.loader.Launcher.launch(Launcher.java:50)
at org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:51)
Caused by: java.lang.NullPointerException: null
at com.sia.scheduler.service.common.CommonService.runJob(CommonService.java:325)
at com.sia.scheduler.zk.monitor.JobMonitor.acquireJob(JobMonitor.java:289)
at com.sia.scheduler.zk.monitor.JobMonitor.handleJobKey(JobMonitor.java:250)
at com.sia.scheduler.zk.monitor.JobMonitor.handleJobKey(JobMonitor.java:237)
at com.sia.scheduler.zk.monitor.JobMonitor.initJobZookeeper(JobMonitor.java:155)
at com.sia.scheduler.zk.monitor.JobMonitor.run(JobMonitor.java:177)
at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:732)
... 14 common frames omitted

2019-09-11 09:41:39.687 INFO 2733 --- [ main] ationConfigEmbeddedWebApplicationContext : Closing org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@b7dd107: startup date [Wed Sep 11 09:41:25 CST 2019]; parent: org.springfram
ework.context.annotation.AnnotationConfigApplicationContext@1d251891
2019-09-11 09:41:39.691 INFO 2733 --- [ main] o.s.j.e.a.AnnotationMBeanExporter : Unregistering JMX-exposed beans on shutdown
2019-09-11 09:41:39.691 INFO 2733 --- [ main] o.s.j.e.a.AnnotationMBeanExporter : Unregistering JMX-exposed beans
2019-09-11 09:41:39.697 INFO 2733 --- [tor-Framework-0] o.a.c.f.imps.CuratorFrameworkImpl : backgroundOperationsLoop exiting
2019-09-11 09:41:39.702 INFO 2733 --- [ main] org.apache.zookeeper.ZooKeeper : Session: 0x46cdd016a0e6142 closed
2019-09-11 09:41:39.704 INFO 2733 --- [ main] c.s.hunter.register.OnlineTaskRegister : OnlineTask->close zookeeper connection
2019-09-11 09:41:39.709 INFO 2733 --- [ain-EventThread] org.apache.zookeeper.ClientCnxn : EventThread shut down for session: 0x46cdd016a0e6142

多级任务

这个可以支持多级任务管理吗?例如 A->B-C->D 类似这样子

执行函数报错

Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'set @fail := 0;
select DATE_FORMAT(last_time,'%Y-%m-%d %H:%i:%s') as ti' at line 2
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)

When failover is not configure

类:com.sia.scheduler.http.impl.OnlineListenableFutureCallback 代码126 行 .

 private boolean onFailure(JobMTask onlineTask, Throwable throwable) {
        boolean isCountDown;
        switch (FailoverEnum.getByValue(onlineTask.getFailover().toLowerCase())) {
            case IGNORE:

onlineTask.getFailover() 为null 的时候转小写出 NPE 了.

调度器故障转移

调度器故障转移貌似没有这部分的实现哦。
当前调度器开始调度,执行一半的任务,调度器挂掉了之后,其他调度器抢占任务,但是没有继续执行后续的任务哦。
目前没看到这块代码,是我看漏了吗??方便指出在哪一块吗?

OnlineTaskAspect这个类里面很多地方都有空指针异常情况。

  1. 这个方法里面从runningTaskMap读取不到数据的时候会空指针异常
    @before(value = "serviceStatistics(onlineTask)")
    public void deBefore(JoinPoint joinPoint, OnlineTask onlineTask) throws Throwable

    if (runningTaskMap.containsKey(task) && runningTaskMap.get(task).equals(TaskStatus.RUNNING)) {
    throw new OnlineTaskException("This task is running");
    }

2.下面这个方法同样的问题。
@AfterReturning(returning = "result", pointcut = "serviceStatistics(onlineTask)")
public void afterReturning(JoinPoint joinPoint, OnlineTask onlineTask, Object result)
if (runningTaskMap.get(task).equals(TaskStatus.RUNNING))

3.同样的问题。
@before(value = "serviceStatistics(onlineTask)")
public void deBefore(JoinPoint joinPoint, OnlineTask onlineTask) throws Throwable {
if (runningTaskMap.containsKey(task) && runningTaskMap.get(task).equals(TaskStatus.RUNNING)) {
throw new OnlineTaskException("This task is running");
}
4. 下面这个方法既然后面用横线截取字符串,那就是要求application name必须带中划线(-)记得文档里面写清楚啊,这里会报字符串数组越界异常的,如果application name里面没有中划线。
/**
* @param request
* @return
*/
public Map<String, String> builtMqMessage(HttpServletRequest request) {

    Map<String, String> jsonObject = new HashMap<String, String>(8);
    jsonObject.put("GroupName", onlineTaskAppProperty.getApplicationName().substring(0,
            onlineTaskAppProperty.getApplicationName().indexOf("-")));
    jsonObject.put("ApplicationName", onlineTaskAppProperty.getApplicationName());
    jsonObject.put("TaskName", onlineTaskAppProperty.getApplicationName() + ":" + request.getServletPath());
    jsonObject.put("Host", onlineTaskAppProperty.getIPAddress() + ":" + onlineTaskAppProperty.getServerPort());
    jsonObject.put("RequestURL", request.getRequestURL().toString());
    jsonObject.put("Date", DateFormatHelper.format(new Date()));
    return jsonObject;
}

下面这个什么异常?这个真的在你们生产上跑着?

2019-05-30 17:48:09.804 INFO 217792 --- [Zookeeper-TreeCacheListener-2] org.quartz.core.QuartzScheduler : Scheduler meta-data: Quartz Scheduler (v2.3.0) 'DefaultQuartzScheduler' with instanceId 'NON_CLUSTERED'
Scheduler class: 'org.quartz.core.QuartzScheduler' - running locally.
NOT STARTED.
Currently in standby mode.
Number of jobs executed: 0
Using thread pool 'org.quartz.simpl.SimpleThreadPool' - with 60 threads.
Using job-store 'org.quartz.simpl.RAMJobStore' - which does not support persistence. and is not clustered.

2019-05-30 17:48:09.804 INFO 217792 --- [Zookeeper-TreeCacheListener-2] org.quartz.impl.StdSchedulerFactory : Quartz scheduler 'DefaultQuartzScheduler' initialized from default resource file in Quartz package: 'quartz.properties'
2019-05-30 17:48:09.805 INFO 217792 --- [Zookeeper-TreeCacheListener-2] org.quartz.impl.StdSchedulerFactory : Quartz scheduler version: 2.3.0
2019-05-30 17:48:09.807 ERROR 217792 --- [Zookeeper-TreeCacheListener-2] o.a.c.framework.recipes.cache.TreeCache :

java.lang.NullPointerException: null
at com.sia.scheduler.service.common.CommonService.runJob(CommonService.java:325)
at com.sia.scheduler.zk.monitor.JobMonitor.acquireJob(JobMonitor.java:289)
at com.sia.scheduler.zk.monitor.JobMonitor.access$200(JobMonitor.java:60)
at com.sia.scheduler.zk.monitor.JobMonitor$1.process(JobMonitor.java:372)
at com.sia.core.curator.CuratorClient$4.childEvent(CuratorClient.java:562)
at org.apache.curator.framework.recipes.cache.TreeCache$2.apply(TreeCache.java:749)
at org.apache.curator.framework.recipes.cache.TreeCache$2.apply(TreeCache.java:743)
at org.apache.curator.framework.listen.ListenerContainer$1.run(ListenerContainer.java:93)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)

部署包config目录中的sia-task-config和sia-task-schedule没办法覆盖默认配置

修改了部署包config目录下的zooKeeperHosts为192.168.2.18:2181,192.168.2.18:2182,192.168.2.18:2183,然后执行start_task_config_open.sh 脚本,发现此配置并没有覆盖jar包中的默认配置,zk'客户端还是去连的127.0.0.1:2181,task_config_open.start 日志:
2019-09-21 16:27:46.709 INFO 22348 --- [ main] org.apache.zookeeper.ZooKeeper : Initiating client connection, connectString=127.0.0.1:2181 sessionTimeout=60000 watcher=org.apache.curator.ConnectionState@2631f68c
2019-09-21 16:27:46.730 INFO 22348 --- [localhost:2181)] org.apache.zookeeper.ClientCnxn : Opening socket connection to server localhost/127.0.0.1:2181. Will not attempt to authenticate using SASL (unknown error)
2019-09-21 16:27:46.732 INFO 22348 --- [ main] com.sia.core.curator.CuratorClient : success connect to Zookeeper: 127.0.0.1:2181
2019-09-21 16:27:46.732 INFO 22348 --- [ main] com.sia.core.curator.CuratorClient : addShutdownHook for CuratorClient
2019-09-21 16:27:46.737 INFO 22348 --- [localhost:2181)] org.apache.zookeeper.ClientCnxn : Socket error occurred: localhost/127.0.0.1:2181: 拒绝连接
2019-09-21 16:27:46.743 INFO 22348 --- [ main] com.sia.core.curator.CuratorClient : addAllAuth success
2019-09-21 16:27:47.841 INFO 22348 --- [localhost:2181)] org.apache.zookeeper.ClientCnxn : Opening socket connection to server localhost/127.0.0.1:2181. Will not attempt to authenticate using SASL (unknown error)
2019-09-21 16:27:47.842 INFO 22348 --- [localhost:2181)] org.apache.zookeeper.ClientCnxn : Socket error occurred: localhost/127.0.0.1:2181: 拒绝连接
2019-09-21 16:27:48.943 INFO 22348 --- [localhost:2181)] org.apache.zookeeper.ClientCnxn : Opening socket connection to server localhost/127.0.0.1:2181. Will not attempt to authenticate using SASL (unknown error)

在job和task都是空的时候会报数据库group by 语法错误

Error querying database. Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'skyworld_task.bt.task_group_name' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by

The error may exist in class path resource [mappers/BasicJobMapper.xml]

The error may involve com.sia.core.mapper.BasicJobMapper.selectAuth-Inline

The error occurred while setting parameters

SQL: SELECT bt.task_group_name as job_group ,bj.job_key FROM skyworld_basic_job bj right JOIN skyworld_basic_task bt on bt.task_group_name = bj.job_group where 1=1 group by job_key

Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'skyworld_task.bt.task_group_name' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by

; bad SQL grammar []; nested exception is com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'skyworld_task.bt.task_group_name' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
at org.springframework.jdbc.support.SQLExceptionSubclassTranslator.doTranslate(SQLExceptionSubclassTranslator.java:91)
at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:73)
at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:82)
at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:75)
at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:447)
at com.sun.proxy.$Proxy62.selectList(Unknown Source)
at org.mybatis.spring.SqlSessionTemplate.selectList(SqlSessionTemplate.java:231)
at org.apache.ibatis.binding.MapperMethod.executeForMany(MapperMethod.java:137)
at org.apache.ibatis.binding.MapperMethod.execute(MapperMethod.java:75)
at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:53)
at com.sun.proxy.$Proxy63.selectAuth(Unknown Source)
at com.sia.config.web.service.BasicJobService.selectAuth(BasicJobService.java:163)
at com.sia.config.web.service.BasicJobService$$FastClassBySpringCGLIB$$7d04b977.invoke()
at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204)
at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:669)
at com.sia.config.web.service.BasicJobService$$EnhancerBySpringCGLIB$$a1351280.selectAuth()
at com.sia.config.web.controller.JobController.selectAuth(JobController.java:194)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205)
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:133)
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:97)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:827)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:738)
at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:967)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:901)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970)
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:861)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:635)
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:742)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)

docker部署方式不能用

首先是jarPackage的sia-task-config的jar包跟docker-build.sh的版本不一致。
然后启动后访问8081没有服务,容器里面也没有nginx。

查询语句groups在mysql8.0为关键字

2019-05-31 16:45:02.911 ERROR 9500 --- [http-nio-10615-exec-6] c.s.c.web.controller.MonitorController : >>>>>>>>>> getJobGroupDetails Error

org.springframework.jdbc.BadSqlGrammarException:

Error querying database. Cause: java.sql.SQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'groups,

    COUNT(DISTINCT sbk.task_id) AS task_count ,
    COUNT(DISTIN' at line 2

The error may exist in class path resource [mappers/JobMTaskMapper.xml]

The error may involve com.sia.core.mapper.JobMTaskMapper.selectJobGroupDetails-Inline

The error occurred while setting parameters

SQL: SELECT sbk.task_group_name AS groups, COUNT(DISTINCT sbk.task_id) AS task_count , COUNT(DISTINCT sbj.job_id) job_count, GROUP_CONCAT(DISTINCT(sbj.job_alarm_email)) AS Emails FROM skyworld_basic_job sbj RIGHT JOIN skyworld_basic_task sbk ON sbk.task_group_name = sbj.job_group WHERE 1=1 and sbj.job_group IN ( ? ) GROUP BY groups;

Cause: java.sql.SQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'groups,

    COUNT(DISTINCT sbk.task_id) AS task_count ,
    COUNT(DISTIN' at line 2

; bad SQL grammar []; nested exception is java.sql.SQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'groups,
COUNT(DISTINCT sbk.task_id) AS task_count ,
COUNT(DISTIN' at line 2
at org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator.doTranslate(SQLErrorCodeSQLExceptionTranslator.java:231)
at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:73)
at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:75)
at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:447)
at com.sun.proxy.$Proxy64.selectList(Unknown Source)
at org.mybatis.spring.SqlSessionTemplate.selectList(SqlSessionTemplate.java:231)
at org.apache.ibatis.binding.MapperMethod.executeForMany(MapperMethod.java:137)
at org.apache.ibatis.binding.MapperMethod.execute(MapperMethod.java:75)
at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:53)
at com.sun.proxy.$Proxy68.selectJobGroupDetails(Unknown Source)
at com.sia.config.web.service.JobMTaskService.selectJobGroupDetails(JobMTaskService.java:222)
at com.sia.config.web.service.JobMTaskService$$FastClassBySpringCGLIB$$290e8d91.invoke()
at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204)
at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:669)
at com.sia.config.web.service.JobMTaskService$$EnhancerBySpringCGLIB$$3a3a8662.selectJobGroupDetails()
at com.sia.config.web.controller.MonitorController.getJobGroupDetails(MonitorController.java:192)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205)
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:133)
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:97)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:827)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:738)
at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:967)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:901)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970)
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:861)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:635)
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:742)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at com.sia.config.web.filter.SimpleCorsFilter.doFilter(SimpleCorsFilter.java:73)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at com.alibaba.druid.support.http.WebStatFilter.doFilter(WebStatFilter.java:123)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:99)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.springframework.web.filter.HttpPutFormContentFilter.doFilterInternal(HttpPutFormContentFilter.java:109)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:81)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:197)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:198)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:496)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:140)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:81)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:342)
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:803)
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:790)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1459)
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:745)
Caused by: java.sql.SQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'groups,
COUNT(DISTINCT sbk.task_id) AS task_count ,
COUNT(DISTIN' at line 2
at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:118)
at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:95)
at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122)
at com.mysql.cj.jdbc.ClientPreparedStatement.executeInternal(ClientPreparedStatement.java:960)
at com.mysql.cj.jdbc.ClientPreparedStatement.execute(ClientPreparedStatement.java:388)
at com.alibaba.druid.filter.FilterChainImpl.preparedStatement_execute(FilterChainImpl.java:3005)
at com.alibaba.druid.filter.FilterEventAdapter.preparedStatement_execute(FilterEventAdapter.java:440)
at com.alibaba.druid.filter.FilterChainImpl.preparedStatement_execute(FilterChainImpl.java:3003)
at com.alibaba.druid.proxy.jdbc.PreparedStatementProxyImpl.execute(PreparedStatementProxyImpl.java:136)
at com.alibaba.druid.pool.DruidPooledPreparedStatement.execute(DruidPooledPreparedStatement.java:493)
at org.apache.ibatis.executor.statement.PreparedStatementHandler.query(PreparedStatementHandler.java:63)
at org.apache.ibatis.executor.statement.RoutingStatementHandler.query(RoutingStatementHandler.java:79)
at org.apache.ibatis.executor.SimpleExecutor.doQuery(SimpleExecutor.java:63)
at org.apache.ibatis.executor.BaseExecutor.queryFromDatabase(BaseExecutor.java:324)
at org.apache.ibatis.executor.BaseExecutor.query(BaseExecutor.java:156)
at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:109)
at com.github.pagehelper.PageInterceptor.intercept(PageInterceptor.java:142)
at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:61)
at com.sun.proxy.$Proxy80.query(Unknown Source)
at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:148)
at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:141)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:434)
... 72 common frames omitted

"调度日志"初始化页面报错,master分支

org.springframework.jdbc.BadSqlGrammarException:

Error querying database. Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'skyworld_task.bt.task_group_name' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by

The error may exist in class path resource [mappers/BasicJobMapper.xml]

The error may involve com.sia.core.mapper.BasicJobMapper.selectAuth-Inline

The error occurred while setting parameters

SQL: SELECT bt.task_group_name as job_group ,bj.job_key FROM skyworld_basic_job bj right JOIN skyworld_basic_task bt on bt.task_group_name = bj.job_group where 1=1 group by job_key

Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'skyworld_task.bt.task_group_name' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by

; bad SQL grammar []; nested exception is com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'skyworld_task.bt.task_group_name' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
at org.springframework.jdbc.support.SQLExceptionSubclassTranslator.doTranslate(SQLExceptionSubclassTranslator.java:91)
at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:73)
at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:82)
at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:75)
at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:447)
at com.sun.proxy.$Proxy64.selectList(Unknown Source)
at org.mybatis.spring.SqlSessionTemplate.selectList(SqlSessionTemplate.java:231)
at org.apache.ibatis.binding.MapperMethod.executeForMany(MapperMethod.java:137)
at org.apache.ibatis.binding.MapperMethod.execute(MapperMethod.java:75)
at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:53)
at com.sun.proxy.$Proxy65.selectAuth(Unknown Source)
at com.sia.config.web.service.BasicJobService.selectAuth(BasicJobService.java:163)
at com.sia.config.web.service.BasicJobService$$FastClassBySpringCGLIB$$7d04b977.invoke()
at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204)
at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:669)
at com.sia.config.web.service.BasicJobService$$EnhancerBySpringCGLIB$$64e41629.selectAuth()
at com.sia.config.web.controller.JobController.selectAuth(JobController.java:202)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205)
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:133)
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:97)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:827)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:738)
at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:967)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:901)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970)
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:861)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:635)
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:742)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at com.sia.config.web.filter.SimpleCorsFilter.doFilter(SimpleCorsFilter.java:73)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at com.alibaba.druid.support.http.WebStatFilter.doFilter(WebStatFilter.java:123)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:99)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.springframework.web.filter.HttpPutFormContentFilter.doFilterInternal(HttpPutFormContentFilter.java:109)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:81)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:197)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:198)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:496)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:140)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:81)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:342)
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:803)
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:790)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1459)
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:748)
Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'skyworld_task.bt.task_group_name' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:425)
at com.mysql.jdbc.Util.getInstance(Util.java:408)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:944)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3978)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3914)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2530)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2683)
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2495)
at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1903)
at com.mysql.jdbc.PreparedStatement.execute(PreparedStatement.java:1242)
at com.alibaba.druid.filter.FilterChainImpl.preparedStatement_execute(FilterChainImpl.java:3005)
at com.alibaba.druid.filter.FilterEventAdapter.preparedStatement_execute(FilterEventAdapter.java:440)
at com.alibaba.druid.filter.FilterChainImpl.preparedStatement_execute(FilterChainImpl.java:3003)
at com.alibaba.druid.proxy.jdbc.PreparedStatementProxyImpl.execute(PreparedStatementProxyImpl.java:136)
at com.alibaba.druid.pool.DruidPooledPreparedStatement.execute(DruidPooledPreparedStatement.java:493)
at org.apache.ibatis.executor.statement.PreparedStatementHandler.query(PreparedStatementHandler.java:63)
at org.apache.ibatis.executor.statement.RoutingStatementHandler.query(RoutingStatementHandler.java:79)
at org.apache.ibatis.executor.SimpleExecutor.doQuery(SimpleExecutor.java:63)
at org.apache.ibatis.executor.BaseExecutor.queryFromDatabase(BaseExecutor.java:324)
at org.apache.ibatis.executor.BaseExecutor.query(BaseExecutor.java:156)
at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:109)
at com.github.pagehelper.PageInterceptor.intercept(PageInterceptor.java:142)
at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:61)
at com.sun.proxy.$Proxy80.query(Unknown Source)
at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:148)
at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:141)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:434)
... 72 common frames omitted

测试job联通的时候居然报这种不支持post的错误?有点low啊

{"timestamp":1559104769109,"status":405,"error":"Method Not Allowed","exception":"org.springframework.web.HttpRequestMethodNotSupportedException","message":"Request method 'POST' not supported","path":"/taskapi/connextest"}

/**
* front-end calls the API
* Task connectivity test
* For tasks that use the sia-task-hunter component and achieve automatic fetching
* through standard annotations,sia-task-hunter adds permission control.
* IP that is not within this permission cannot call the task.
* If it is necessary to test whether the task can work normally (POST only)
* @param request
* @return
*/
@RequestMapping(value = "/connextest", produces = "application/json;charset=UTF-8",method = RequestMethod.GET)
@responsebody
public String connexTest(@requestbody Map<String,String> request) {
if(request == null) {
LOGGER.info(Constants.LOG_PREFIX +"connextest by user:"+ userService.getCurrentUser());
return ResultBody.failed();
}
String param = request.get("param");
String result;
try {
String url = request.get("url");
LOGGER.info(Constants.LOG_PREFIX +"connextest by user:"+ userService.getCurrentUser());
LOGGER.info(Constants.LOG_PREFIX + "url:"+ url);
LOGGER.info(Constants.LOG_PREFIX +"param: "+param);
result = basicTaskService.testTask(url,param);
} catch (Exception e) {
LOGGER.error(Constants.LOG_PREFIX + " connexTest Error :", e);
return ResultBody.error();
}
return ResultBody.success((Object) result);
}

最后再说多说一句:不愿意不想做开源,不要放出来好么?

nginx配置

麻烦部署文档修改一下。

一会是配置nginx在8080端口访问;一会又是直接localhost:10615。

统一一下标准化配置。

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.