CN109254838A - 一种基于JAVA BeanShell的自动化任务 - Google Patents
一种基于JAVA BeanShell的自动化任务 Download PDFInfo
- Publication number
- CN109254838A CN109254838A CN201810951911.0A CN201810951911A CN109254838A CN 109254838 A CN109254838 A CN 109254838A CN 201810951911 A CN201810951911 A CN 201810951911A CN 109254838 A CN109254838 A CN 109254838A
- Authority
- CN
- China
- Prior art keywords
- task
- thread
- beanshell
- scheduling
- script
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
- G06F9/4843—Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2209/00—Indexing scheme relating to G06F9/00
- G06F2209/48—Indexing scheme relating to G06F9/48
- G06F2209/486—Scheduler internals
Abstract
本发明涉及一种基于JAVA BeanShell的自动化任务,首先根据XML配置文件,初始化调度线程和运行线程;接着所述调度线程以预设的频率扫描计划任务表,获取当前时刻是否有计划需要执行;若当前时刻有任务需要运行时,调度线程将需要运行的任务脚本交付给运行线程来运行,若当前时刻没有任务需要运行时,则跳过此次扫描,运行线程接到调度线程的命令后,根据调度线程传入的BeanShell脚本,调用BeanShell动态编译引擎,将BeanShell脚本动态编译为可执行二进制指令;最后执行动态编译后的BeanShell动态脚本,调用提前封装好的原子化接口进行查询与判断,用以确保脚本逻辑在接口数据的基础上正常执行。本发明能够充分利用线程资源,并且便于扩展,便于维护。
Description
技术领域
本发明涉及自动化任务解决方案领域,特别是一种基于JAVA BeanShell的自动化任务。
背景技术
在日趋繁杂的互联网形式下,软件开发的需求是多种多样的,除了直接与用户打交道的前端页面外,还有一类需求,这类需求需要程序在后台默默执行,完成一些复杂的业务逻辑与交互。甚至,有时候为了完成前端页面展示数据的要求,或者说为了系统性能上的因素考虑,本来直接在用户UI上完成的功能,必须由系统在后台为用户去完成一些中间过程的数据处理以及过程量的逻辑判断等。关于这类需求的场景主要有,数据采集与整合、短信的下发与回复、业务催缴、监控系统等等。可见,一个庞大的业务系统,是离不开其后台运行程序的支持的。这里所说的自动化任务,是指能够按照用户或者运维人员的意图,在人为设定的时间频率要求下,运行特定的逻辑并能够进行智能判断,从而进一步进行处理的任务逻辑。
现有的Java自动化任务,一般是通过spring quartz或者Java JDK中自带的Timer定时器来完成的。
其中spring quartz通过配置时间表达式,来实现任务的调度,框架通过解析配置在XML文件中的Cron表达式,来获取任务要运行的时间点,并通过XML文件标注任务的执行逻辑类,执行逻辑类通过实现spring quartz接口,来完成业务逻辑的编写。在springquartz的XML配置文件中配置好任务执行时间的表达式以及任务执行类以后,项目通过装载spring quartz的XML文件来初始化任务并配置到内存中,并且针对一个任务初始化一个线程来运行,以保证每个任务可以并发顺利的运行。
而Java Timer则是Java JDK中原生的定时器实现方法,其实现原理比springquartz简单,通过对Timer类传入任务执行类以及任务运行频率来初始化任务,然后通过Scheduler和cancel方法对任务的启动和停止进行控制。Java Timer相比于springquartz,无法实现复杂的时间调度要求,其只能周期性的重复运行任务逻辑代码,当用户提出复杂的时间点要求时,其显然无法满足。
但是上面这两种实现方法都存在着以下两个问题:
1、一个任务对一个线程进行了完全占用
无论是spring quartz还是Timer,为了保证任务的运行,都采用了多线程的实现方式,即一个任务启动一个线程去运行。这样如果在任务数量较少的情况下,启动的线程数对系统性能的影响尚较小,甚至难以察觉,但是如果任务数量较多的情况下,启动的线程就会对系统的性能产生一定的影响,所以,以上两种方式实现的自动化任务,较不适合大型多任务的自动化系统使用,需要做一定的优化。
2、维护及变更用户需求不便
由于上面两种定时器,他们的业务逻辑都是写在定时器的业务类里的,所以一旦逻辑定下来,通过程序实施人员将代码按照意图实现,然后发布到生产环境后,自动化任务就按照他既定的逻辑一直运行下去了,但是,用户的需求并不是一成不变的,如果用户需求频繁变更,就需要程序员不断对自动化任务的业务类进行修改以实现用户的需求,这样无形中提高了代码维护发布的成本。
发明内容
有鉴于此,本发明的目的是提出一种基于JAVA BeanShell的自动化任务,能够充分利用线程资源,并且便于扩展,便于维护。
本发明采用以下方案实现:一种基于JAVA BeanShell的自动化任务,包括以下步骤:
步骤S1:根据XML配置文件,初始化调度线程和运行线程;
步骤S2:所述调度线程以预设的频率扫描计划任务表,获取当前时刻是否有计划需要执行;
步骤S3:若当前时刻有任务需要运行时,调度线程将需要运行的任务脚本交付给运行线程来运行,并进入步骤S4;若当前时刻没有任务需要运行时,则跳过此次扫描,并返回步骤S2;
步骤S4:运行线程接到调度线程的命令后,根据调度线程传入的BeanShell脚本,调用BeanShell动态编译引擎,将BeanShell脚本动态编译为可执行二进制指令;
步骤S5:执行动态编译后的BeanShell动态脚本,脚本中调用提前封装好的原子化接口进行查询与判断,以确保脚本逻辑在接口数据的基础上正常执行。
进一步地,步骤S3还包括:所述调度线程依据任务执行的频度,相应的增加或减少运行线程的数目,以达到减少系统开销的目的。
本发明将线程分为调度线程与运行线程,在需要运行的时候增加运行线程数量,以满足任务运行需要。在无任务或运行任务数目较少的情况下,减少运行线程数量,节省系统开支。
进一步地,步骤S1具体包括以下步骤:
步骤S11:调度线程初始化时,通过读取dispatchThread.xml配置文件,初始化包括调度线程数量、计划任务开始ID、以及结束ID在内的参数,并根据配置的调度线程数量初始化对应数目的调度线程,并根据计划任务开始ID、结束ID来分配每个调度线程负责调度的计划任务;
步骤S12:运行线程初始化时,根据runThread.xml配置文件,初始化对应数目的运行线程。
进一步地,通过修改dispatchThread.xml和runThread.xml配置文件来拓展任务。本发明自动化任务扩展方便,只需要修改dispatchThread.xml和runThread.xml配置文件,就可以在尽量节省系统开支的情况下,支持更多数量的自动化任务。
进一步地,步骤S2中,每个调度线程均只负责自己管辖的任务。
进一步地,步骤S3中,若当前时刻有任务需要巡行时,调度线程将需要运行的任务脚本交付给空闲的运行线程,其中一个空闲的运行线程同时为多个任务服务,一个任务只能被一个调度线程调度,能够减少因为调度线程管辖任务过多压力过大而导致任务执行缓慢甚至卡死的情况发生。
进一步地,当不存在空闲的运行线程又存在需要运行的任务时,再初始化一定数量的运行线程以满足任务的运行需要。
进一步地,步骤S5中,将原子化接口逻辑封装在与自动化任务不同的一个项目中。
与现有技术相比,本发明有以下有益效果:本发明采用BeanShell动态编译脚本的特性,配合上灵活的线程调度方法,大大提高了自动化任务维护扩展的便利性,同时也降低了研发的人工投入成本。
附图说明
图1为本发明实施例的原理框图。
图2为本发明实施例的方法流程示意图。
具体实施方式
下面结合附图及实施例对本发明做进一步说明。
应该指出,以下详细说明都是示例性的,旨在对本申请提供进一步的说明。除非另有指明,本文使用的所有技术和科学术语具有与本申请所属技术领域的普通技术人员通常理解的相同含义。
需要注意的是,这里所使用的术语仅是为了描述具体实施方式,而非意图限制根据本申请的示例性实施方式。如在这里所使用的,除非上下文另外明确指出,否则单数形式也意图包括复数形式,此外,还应当理解的是,当在本说明书中使用术语“包含”和/或“包括”时,其指明存在特征、步骤、操作、器件、组件和/或它们的组合。
如图1所示,本实施例提供了一种基于JAVA BeanShell的自动化任务,包括以下步骤:
步骤S1:根据XML配置文件,初始化调度线程和运行线程;
步骤S2:所述调度线程以预设的频率扫描计划任务表,获取当前时刻是否有计划需要执行;
步骤S3:若当前时刻有任务需要运行时,调度线程将需要运行的任务脚本交付给运行线程来运行,并进入步骤S4;若当前时刻没有任务需要运行时,则跳过此次扫描,并返回步骤S2;
步骤S4:运行线程接到调度线程的命令后,根据调度线程传入的BeanShell脚本,调用BeanShell动态编译引擎,将BeanShell脚本动态编译为可执行二进制指令;
步骤S5:执行动态编译后的BeanShell动态脚本,脚本中调用提前封装好的原子化接口进行查询与判断,用以确保脚本逻辑在接口数据的基础上正常执行。
在本实施例中,步骤S3还包括:所述调度线程依据任务执行的频度,相应的增加或减少运行线程的数目,以达到减少系统开销的目的。
本实施例将线程分为调度线程与运行线程,在需要运行的时候增加运行线程数量,以满足任务运行需要。在无任务或运行任务数目较少的情况下,减少运行线程数量,节省系统开支。
在本实施例中,步骤S1具体包括以下步骤:
步骤S11:调度线程初始化时,通过读取dispatchThread.xml配置文件,初始化包括调度线程数量、计划任务开始ID、以及结束ID在内的参数,并根据配置的调度线程数量初始化对应数目的调度线程,并根据计划任务开始ID、结束ID来分配每个调度线程负责调度的计划任务;
步骤S12:运行线程初始化时,根据runThread.xml配置文件,初始化对应数目的运行线程。
在本实施例中,通过修改dispatchThread.xml和runThread.xml配置文件来拓展任务。本发明自动化任务扩展方便,只需要修改dispatchThread.xml和runThread.xml配置文件,就可以在尽量节省系统开支的情况下,支持更多数量的自动化任务。
在本实施例中,步骤S2中,每个调度线程均只负责自己管辖的任务。
在本实施例中,步骤S3中,若当前时刻有任务需要巡行时,调度线程将需要运行的任务脚本交付给空闲的运行线程,其中一个空闲的运行线程同时为多个任务服务,一个任务只能被一个调度线程调度,能够减少因为调度线程管辖任务过多压力过大而导致任务执行缓慢甚至卡死的情况发生。
在本实施例中,当不存在空闲的运行线程又存在需要运行的任务时,再初始化一定数量的运行线程以满足任务的运行需要。
在本实施例中,步骤S5中,将原子化接口逻辑封装在与自动化任务不同的一个项目中。
特别的,BeanShell是一个小巧免费的JAVA源码解释器,支持对象式的脚本语言特性,亦可嵌入到JAVA源代码中,能动态执行JAVA源代码并为其扩展了脚本语言的一些特性。利用BeanShell动态编译的特性,再结合线程调度方面的一些优化手段,本实施例具有以下优点:
1、业务逻辑原子化:仔细分析现有的用户业务需求,不难发现,这些需求都存在可以抽象成接口的部分,例如,某一个查询,一个更新操作,或者说一个判断的请求。本实施例可以将用户的整体需求,抽象成若干个粒度较小的片段,本实施例将这个抽象的过程称为原子化,也叫做接口化。当用户自动化任务中,一些可以被提炼的部分被整体封装成若干个接口后,就可以提供给非程序开发人员使用,诸如维护人员,甚至是直接的用户,只要代码研发人员将需求片段封装成接口后,维护以及一些用户就可以不用关心具体的接口实现方式,而只要关心接口的入参和出参,以及随后的一些判断操作就可以了。
2、维护方便:通过上面将用户需求原子化的操作以后,再结合BeanShell动态编译的特性,本实施例完全可以将自动化任务的业务逻辑部分交由维护人员,甚至是直接用户去实现。只要上面业务逻辑原子化的工作足够细致,并提供详细的接口使用说明以及交付文档,能够让维护人员清楚明白的了解相关接口的使用场景及方法,并清楚逻辑部分的编写规则。自动化任务的业务就可以由维护人员对照接口说明和编写规则实现出来,当然,提供清楚明了的用户UI是实现这一意图的前提条件,维护人员及用户,可以直接在UI界面上实现自动化任务的脚本编写工作。
利用BeanShell实现维护及用户自主编写业务逻辑脚本的功能后,带来的另一大便利是,当脚本编写人员编写好脚本后,由于BeanShell是动态编译的,所以,当脚本编写完成后,不需要重新发布代码到生产环境,可以即时生效,减轻了维护发布的成本,并同时做到了需求的及时实现,提高了用户的体验及评价。
3、便于扩展:一个大型系统,后台的自动化任务必然是数量众多的,现有的定时器,诸如前面说的spring quartz和Java Timer,如果要扩展不同的任务及增加任务的数量,就必须重新编写任务的实现类,或者说重新配置一个新的自动化任务配置XML文件,那这样就要求程序员为了新的需求不断的去实现新的自动化任务,维护人员也需要不断的叠加代码到生产环境,无形中也提高了企业的人工成本。本发明通过特有的实现方式(具体实现方式将在下一章中详述),实现了自动化任务的扩展便利性,结合前面BeanShell动态编译特性实现的脚本可编写的特点,新的业务逻辑及代码的部署,可以完全由维护人员介入处理,而不需要程序研发人员参与,这样就节约了代码的研发成本同时使得自动化任务的扩展方便了很多,维护人员只要关注任务的部署及编写就好了。
4、充分利用线程资源:普通定时器为了保证任务的顺利运行,往往是利用单一的线程为某个自动化任务专程服务,这样,当任务不在运行时间内时,线程就处于空置状态,而得不到充分的利用,且当自动化任务数量众多时,及其容易浪费服务器资源。本发明利用“调度线程”和“运行线程”相互配合的方式来实现线程的有效利用,主要宗旨是,调度线程统一调配空闲的运行线程同时为多个任务服务,做到谁闲谁服务,这样就充分利用了线程资源,使得多余的空闲线程不占用CPU时间,同时节约了系统的性能开销。
具体的,本实施例的前提条件,是要将用户的整体需求的若干操作原子化,即将一些模块化的操作进行封装,使得用户不需要关心接口内的具体实现,只需要关心这个操作所需要的输入,以及明白操作输出的含义即可,且业务逻辑原子化的粒度越小,可以提供给维护及用户的可操作性就越大,所以,这一步是决定非代码研发人员,所能做的操作有多灵活的关键。因此,应尽可能的使逻辑原子化的粒度越小越好。
确认业务系统中哪些操作可以被原子化,以及原子化的粒度以后,需要对接口进行封装,本发明将接口逻辑封装在与自动化任务不同的一个项目中,这样做有以下目的:
1、使得自动化任务与原子操作逻辑分离,代码条理清晰。2、自动化任务的代码逻辑一旦开发完成后基本不用修改,增加新的任务及扩展自动化任务的数量时,只需要对新增的代码包做一定的配置即可使用,如果将原子化封装的接口与自动化任务的逻辑写在一起,那么需要对自动化任务做扩展的时候,势必也会影响到接口的运行。3、自动化任务开发完成时需要的改动较少,反而是原子化接口可能需要做一些新增和修改的更新操作,分开编写,有利于接口的单独部署,而不影响到自动化任务逻辑的运行。
本实施例的接口采用XML文件作为入参方式,具体的入参按照协议的规定,顺序填写在XML文件的<C> </C>标签之内,如有多个入参时,类似于以下的形式:
<servername>getName</servername>
<param>
<C>1</C>
<C>true</C>
<C>123456</C>
<C>TB</C>
<C>name</C>
</param>
其中,servername标签中为所要调用的接口名称,接口收到如上的参数格式后,通过从数据库预先加载的接口配置信息,读取到此接口的具体实现类,并通过Java反射进行传参调用,返回的出参格式大致如下:
<C>张三</C>
<C>false</C>
自动化任务同样按照协议规定的顺序解析处理,并进行下一步的操作。
在本实施例中,针对线程调度,一般的自动化任务,进行配置后,基本上是以一个线程来服务于一个任务,即一对一的模式,这样在此任务不在运行时间内时,线程处于空置状态,极大的浪费了服务器资源。为了解决这个问题,本实施例将线程分为调度线程与运行线程。调度线程主要负责处理任务的调度,判断任务何时运行,并将要运行的任务交付给运行线程进行运行,并及时对运行线程的状态进行处理调度等。出于对自动化任务可扩展性的考虑,在自动化任务的项目包中增加dispatchThread.xml配置文件,配置文件主要内容部分如下:
<ThreadCount>10</ThreadCount >
<startJobId>1</startJobId>
<endJobId>50</endJobId>
其中,ThreadCount为本项目包内初始化时,需要初始化的调度线程数量,startJobId为开始任务id,endJobId为结束任务id。
自动化任务的war包初始化时,会读取dispatchThread.xml配置文件初始化本war内的调度线程,startJobId、endJobId分别代表了本war包内,调度线程将要调度的任务的开始及结束id号,同时,在数据库的任务表job_info中,也存在着1-50这50个任务,id按顺序为1开始,50结束。ThreadCount标签则告诉war包,初始化时需要初始化10个调度线程,由于要调度的任务为1-50id的任务,所以,初始化的10个调度线程,每个线程需要调度的任务数量为5个。同理,需要扩展时,在同样的另一个war包中,可以修改dispatchThread.xml配置文件中的startJobId及endJobId,以支持更多数量的任务调度需求,同时,亦可以根据任务调度压力,做相应的调整,增加或减少调度线程所调度的任务数量。
调度线程初始化完成后,每个调度线程按照每分钟一次的频率扫描任务配置表job_config,当分配给自己的任务,当前时间内有需要运行的,根据job_config表中配置的任务脚本(BeanShell实现)及运行任务统一实现类,将任务交付给运行线程执行,若当前时间内没有需要执行的任务,则不做任务操作。
以上是调度线程的大致实现原理,但是,初始化调度线程时,由于可能会存在配置错误的原因,即同一个任务,由于配置错误的原因,被交给多个调度线程调度,这里做一个处理,在调度线程初始化分配要调度的任务id时,已经被分配的任务,需要更新job_info表中的status字段为1,表明此任务已被分配,这样,其他的调度线程即使被分配到此任务,由于status字段为1,也不会被实际分配到此任务的运行调度上去。
运行线程的作用为,运行调度线程交付的BeanShell脚本及相关代码逻辑。运行线程通过读取runThread.xml配置文件来初始化自身,配置文件中主要是ThreadCount标签,其代表了war包初始化时所初始化的运行线程数量,但是,初始化的运行线程数量并不代表永远存在着如此数量的运行线程,前面说过,调度线程会根据自己分配到的任务来扫描任务表,以确定当前时刻是否有任务需要运行,扫描多次之后,如果连续的时刻内都无任务需要运行,调度线程会根据一定的比例,将一定数量的运行线程设置为休眠状态以节省服务器系统资源。如果调度线程扫描到当前时刻有需要运行的任务,则先判断运行线程的运行状态,如果存在空闲运行线程,则交付空闲运行线程运行脚本,如果不存在空闲运行线程,但是又有需要运行的任务时,则再初始化一定数量的运行线程以满足任务的运行需要。
这样,通过调度线程与运行线程的紧密配合,实现了线程资源的最大化利用,达到了无任务运行时减少系统开销,有任务运行时再相应的增加线程数量以满足任务运行的需要。
在本实施例中,针对BeanShell任务脚本,运行线程开始运行任务,即开始了执行BeanShell脚本的过程。为了实现动态编译BeanShell脚本,以达到业务逻辑可实时编写实时生效的要求,需要先封装接口调用逻辑,通过封装好的接口调用逻辑,直接在BeanShell脚本中进行调用,以达到调用原子化接口进行判断的要求。在本实施例中,封装了接口调用类:HttpServer,具体调用方法的声明如下:
Public List HttpServer.call(String serverName,List paramList);
其中,serverName为需要调用的接口名称,paramList为参数列表。
运行线程需要运行任务时,将会收到由调度线程传入的一段BeanShell脚本,运行线程通过BeanShell解释器,动态编译传入的BSH脚本为可执行代码,之后按照脚本的内容来运行对应的业务逻辑。同时,提供以下UI界面,以供用户或者维护人员,自行编写业务逻辑执行脚本。
在本实施例中,基于BeanShell的自动化任务的核心及前提是,需要把要单一操作及一系列操作,模块化的封装到接口中,以供BeanShell脚本进行调用,写BeanShell脚本的前提是,需要提前封装好要调用的接口,如果未提前封装对应的接口,而又在脚本中进行了调用,那么脚本运行将会产生报错,并有对应的提示。
以上所述仅为本发明的较佳实施例,凡依本发明申请专利范围所做的均等变化与修饰,皆应属本发明的涵盖范围。
Claims (8)
1.一种基于JAVA BeanShell的自动化任务,其特征在于:包括以下步骤:
步骤S1:根据XML配置文件,初始化调度线程和运行线程;
步骤S2:所述调度线程以预设的频率扫描计划任务表,获取当前时刻是否有计划需要执行;
步骤S3:若当前时刻有任务需要运行时,调度线程将需要运行的任务脚本交付给运行线程来运行,并进入步骤S4;若当前时刻没有任务需要运行时,则跳过此次扫描,并返回步骤S2;
步骤S4:运行线程接到调度线程的命令后,根据调度线程传入的BeanShell脚本,调用BeanShell动态编译引擎,将BeanShell脚本动态编译为可执行二进制指令;
步骤S5:执行动态编译后的BeanShell动态脚本,脚本中调用提前封装好的原子化接口进行查询与判断,以确保脚本逻辑在接口数据的基础上正常执行。
2.根据权利要求1所述的一种基于JAVA BeanShell的自动化任务,其特征在于:步骤S3还包括:所述调度线程依据任务执行的频度,相应的增加或减少运行线程的数目,以达到减少系统开销的目的。
3.根据权利要求1所述的一种基于JAVA BeanShell的自动化任务,其特征在于:步骤S1具体包括以下步骤:
步骤S11:调度线程初始化时,通过读取dispatchThread.xml配置文件,初始化包括调度线程数量、计划任务开始ID、以及结束ID在内的参数,并根据配置的调度线程数量初始化对应数目的调度线程,并根据计划任务开始ID、结束ID来分配每个调度线程负责调度的计划任务;
步骤S12:运行线程初始化时,根据runThread.xml配置文件,初始化对应数目的运行线程。
4.根据权利要求3所述的一种基于JAVA BeanShell的自动化任务,其特征在于:通过修改dispatchThread.xml和runThread.xml配置文件来拓展任务。
5.根据权利要求1所述的一种基于JAVA BeanShell的自动化任务,其特征在于:步骤S2中,每个调度线程均只负责自己管辖的任务。
6.根据权利要求1所述的一种基于JAVA BeanShell的自动化任务,其特征在于:步骤S3中,若当前时刻有任务需要巡行时,调度线程将需要运行的任务脚本交付给空闲的运行线程,其中一个空闲的运行线程同时为多个任务服务,一个任务只能被一个调度线程调度。
7.根据权利要求6所述的一种基于JAVA BeanShell的自动化任务,其特征在于:当不存在空闲的运行线程又存在需要运行的任务时,再初始化一定数量的运行线程以满足任务的运行需要。
8.根据权利要求1所述的一种基于JAVA BeanShell的自动化任务,其特征在于:步骤S5中,将原子化接口逻辑封装在与自动化任务不同的一个项目中。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810951911.0A CN109254838B (zh) | 2018-08-21 | 2018-08-21 | 一种基于JAVA BeanShell的自动化任务 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810951911.0A CN109254838B (zh) | 2018-08-21 | 2018-08-21 | 一种基于JAVA BeanShell的自动化任务 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109254838A true CN109254838A (zh) | 2019-01-22 |
CN109254838B CN109254838B (zh) | 2021-11-23 |
Family
ID=65049519
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810951911.0A Active CN109254838B (zh) | 2018-08-21 | 2018-08-21 | 一种基于JAVA BeanShell的自动化任务 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109254838B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111935307A (zh) * | 2020-09-16 | 2020-11-13 | 湖南新云网科技有限公司 | 硬件设备远程控制方法及装置、存储介质、透明计算系统 |
Citations (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6886024B1 (en) * | 1999-10-26 | 2005-04-26 | Nec Corporation | Distributed application control system, control method and a program |
CN101667147A (zh) * | 2009-07-27 | 2010-03-10 | 浪潮电子信息产业股份有限公司 | 一种多任务的可控自动快照方法 |
US20120079448A1 (en) * | 2005-11-02 | 2012-03-29 | Openlogic, Inc. | Stack or Project Extensibility and Certification for Staking Tool |
CN104750482A (zh) * | 2015-03-13 | 2015-07-01 | 合一信息技术(北京)有限公司 | 一种构建基于MapReduce的动态脚本执行引擎的方法 |
CN105204892A (zh) * | 2015-08-26 | 2015-12-30 | 上海斐讯数据通信技术有限公司 | war包配置修改系统及方法 |
CN106156353A (zh) * | 2016-07-26 | 2016-11-23 | 北京北森云计算股份有限公司 | 一种为数据库增加多语言动态编译执行引擎的方法和系统 |
CN106959895A (zh) * | 2016-01-12 | 2017-07-18 | 阿里巴巴集团控股有限公司 | 快速释放线程的资源调度方法和系统 |
CN107291493A (zh) * | 2017-05-27 | 2017-10-24 | 北京思特奇信息技术股份有限公司 | 一种后台业务处理框架的搭建方法和系统 |
CN107608772A (zh) * | 2017-08-23 | 2018-01-19 | 山东中创软件工程股份有限公司 | 一种批处理任务配置调度的方法和系统 |
CN107621975A (zh) * | 2017-09-11 | 2018-01-23 | 中邮科通信技术股份有限公司 | 基于java timer高可用性的定时器逻辑实现方法 |
CN107621978A (zh) * | 2017-09-29 | 2018-01-23 | 郑州云海信息技术有限公司 | 一种并行计算环境下的高可用任务处理控制模型 |
CN107943574A (zh) * | 2017-12-04 | 2018-04-20 | 山东中创软件工程股份有限公司 | 一种任务管理方法及装置 |
-
2018
- 2018-08-21 CN CN201810951911.0A patent/CN109254838B/zh active Active
Patent Citations (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6886024B1 (en) * | 1999-10-26 | 2005-04-26 | Nec Corporation | Distributed application control system, control method and a program |
US20120079448A1 (en) * | 2005-11-02 | 2012-03-29 | Openlogic, Inc. | Stack or Project Extensibility and Certification for Staking Tool |
CN101667147A (zh) * | 2009-07-27 | 2010-03-10 | 浪潮电子信息产业股份有限公司 | 一种多任务的可控自动快照方法 |
CN104750482A (zh) * | 2015-03-13 | 2015-07-01 | 合一信息技术(北京)有限公司 | 一种构建基于MapReduce的动态脚本执行引擎的方法 |
CN105204892A (zh) * | 2015-08-26 | 2015-12-30 | 上海斐讯数据通信技术有限公司 | war包配置修改系统及方法 |
CN106959895A (zh) * | 2016-01-12 | 2017-07-18 | 阿里巴巴集团控股有限公司 | 快速释放线程的资源调度方法和系统 |
CN106156353A (zh) * | 2016-07-26 | 2016-11-23 | 北京北森云计算股份有限公司 | 一种为数据库增加多语言动态编译执行引擎的方法和系统 |
CN107291493A (zh) * | 2017-05-27 | 2017-10-24 | 北京思特奇信息技术股份有限公司 | 一种后台业务处理框架的搭建方法和系统 |
CN107608772A (zh) * | 2017-08-23 | 2018-01-19 | 山东中创软件工程股份有限公司 | 一种批处理任务配置调度的方法和系统 |
CN107621975A (zh) * | 2017-09-11 | 2018-01-23 | 中邮科通信技术股份有限公司 | 基于java timer高可用性的定时器逻辑实现方法 |
CN107621978A (zh) * | 2017-09-29 | 2018-01-23 | 郑州云海信息技术有限公司 | 一种并行计算环境下的高可用任务处理控制模型 |
CN107943574A (zh) * | 2017-12-04 | 2018-04-20 | 山东中创软件工程股份有限公司 | 一种任务管理方法及装置 |
Non-Patent Citations (2)
Title |
---|
WENGUANG YU 等: "Process-based running mechanism for Agent-based warfare simulation", 《2010 INTERNATIONAL CONFERENCE ON COMPUTER APPLICATION AND SYSTEM MODELING (ICCASM 2010)》 * |
张永超 等: "一种新的自动化测试的多任务调度模型", 《铁路计算机应用》 * |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111935307A (zh) * | 2020-09-16 | 2020-11-13 | 湖南新云网科技有限公司 | 硬件设备远程控制方法及装置、存储介质、透明计算系统 |
Also Published As
Publication number | Publication date |
---|---|
CN109254838B (zh) | 2021-11-23 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Dubey et al. | A component model for hard real‐time systems: CCM with ARINC‐653 | |
US6434594B1 (en) | Virtual processing network enabler | |
Saksena et al. | Design and implementation of Maruti-II | |
CN101751288A (zh) | 应用进程调度的方法、设备及系统 | |
CN115858083A (zh) | 容器cpu资源调度与隔离方法和装置、存储介质及电子设备 | |
Johnsen et al. | Dynamic resource reallocation between deployment components | |
CN109254838A (zh) | 一种基于JAVA BeanShell的自动化任务 | |
Gill et al. | Applying adaptive real-time middleware to address grand challenges of COTS-based mission-critical real-time systems | |
Sandström et al. | Introducing a component technology for safety critical embedded real-time systems | |
Colman et al. | Coordination systems in role-based adaptive software | |
CN100547967C (zh) | 网格作业管理器与网格作业管理方法 | |
Subramonian et al. | The design and performance of configurable component middleware for distributed real-time and embedded systems | |
Richardson et al. | An admission control protocol for real-time OSGi | |
Brandenburg | The case for an opinionated, theory-oriented real-time operating system | |
CN109450913A (zh) | 一种基于策略的多节点注册调度方法 | |
Tejera et al. | RMI-HRT: remote method invocation-hard real time | |
Sun et al. | VxBPEL_ODE: A variability enhanced service composition engine | |
Nord | Meeting the product line goals for an embedded real-time system | |
Baker et al. | Eternal cloud computation application development | |
Sprinkle et al. | Time-triggered buffers for event-based middleware systems | |
Broch Johnsen et al. | Fault in the future | |
Kravtsov et al. | Service-based Resource Brokering for Grid-Based Data Mining. | |
Drießen | Modularity by design for safety-critical software systems | |
Adán et al. | A scheduling strategy for a distributed hard real-time programming environment | |
Hauser | The ATLAS level 2 reference software |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |