A Light-weight Job Scheduling Framework

Overview

Sundial Sundial

A Lightweight Job Scheduling Framework for Java.

In a Nutshell

Sundial makes adding scheduled jobs to your Java application a walk in the park. Simply define jobs, define triggers, and start the Sundial scheduler.

Long Description

Sundial is a lightweight Java job scheduling framework forked from Quartz (http://www.quartz-scheduler.org/) stripped down to the bare essentials. Sundial also hides the nitty-gritty configuration details of Quartz, reducing the time needed to get a simple RAM job scheduler up and running. Sundial uses a ThreadLocal wrapper for each job containing a HashMap for job key-value pairs. Convenience methods allow easy access to these parameters. JobActions are reusable components that also have access to the context parameters. If you are looking for a hassle-free 100% Java job scheduling framework that is easy to integrate into your applications, look no further.

Features

  • Apache 2.0 license
  • ~150 KB Jar
  • In-memory multi-threaded jobs
  • Define jobs and triggers in jobs.xml
  • or define jobs and triggers via annotations
  • or define jobs and triggers programmatically
  • Cron Triggers
  • Simple Triggers
  • Java 6 and up
  • Depends only on slf4j

Create a Job Class

public class SampleJob extends org.knowm.sundial.Job {

  @Override
  public void doRun() throws JobInterruptException {
    // Do something interesting...
  }
}

...with CronTrigger or SimpleTrigger Annotation

@CronTrigger(cron = "0/5 * * * * ?")
@SimpleTrigger(repeatInterval = 30, timeUnit = TimeUnit.SECONDS)

Start Sundial Job Scheduler

public static void main(String[] args) {

  SundialJobScheduler.startScheduler("org.knowm.sundial.jobs"); // package with annotated Jobs
}

If you need a bigger thread pool (default size is 10) use startScheduler(int threadPoolSize, String annotatedJobsPackageName) instead.

Alternatively, Put an XML File Called jobs.xml on Classpath

<?xml version='1.0' encoding='utf-8'?>
<job-scheduling-data>

	<schedule>

		<!-- job with cron trigger -->
		<job>
			<name>SampleJob3</name>
			<job-class>com.foo.bar.jobs.SampleJob3</job-class>
			<concurrency-allowed>true</concurrency-allowed>
		</job>
		<trigger>
			<cron>
				<name>SampleJob3-Trigger</name>
				<job-name>SampleJob3</job-name>
				<cron-expression>*/15 * * * * ?</cron-expression>
			</cron>
		</trigger>

		<!-- job with simple trigger -->
		<job>
			<name>SampleJob2</name>
			<job-class>com.foo.bar.jobs.SampleJob2</job-class>
			<job-data-map>
				<entry>
					<key>MyParam</key>
					<value>42</value>
				</entry>
			</job-data-map>
		</job>
		<trigger>
			<simple>
				<name>SampleJob2-Trigger</name>
				<job-name>SampleJob2</job-name>
				<repeat-count>5</repeat-count>
				<repeat-interval>5000</repeat-interval>
			</simple>
		</trigger>

	</schedule>

</job-scheduling-data>

Or, Define Jobs and Triggers Manually

SundialJobScheduler.addJob("SampleJob", "org.knowm.sundial.jobs.SampleJob");
SundialJobScheduler.addCronTrigger("SampleJob-Cron-Trigger", "SampleJob", "0/10 * * * * ?");
SundialJobScheduler.addSimpleTrigger("SampleJob-Simple-Trigger", "SampleJob", -1, TimeUnit.SECONDS.toMillis(3));

More Functions

// asynchronously start a job by name
SundialJobScheduler.startJob("SampleJob");

// interrupt a running job
SundialJobScheduler.stopJob("SampleJob");

// remove a job from the scheduler
SundialJobScheduler.removeJob("SampleJob");

// remove a trigger from the scheduler
SundialJobScheduler.removeTrigger("SampleJob-Trigger");

// lock scheduler
SundialJobScheduler.lockScheduler();

// unlock scheduler
SundialJobScheduler.unlockScheduler();

// check if job a running
SundialJobScheduler.isJobRunning("SampleJob");

And many more useful functions. See all here: https://github.com/knowm/Sundial/blob/develop/src/main/java/org/knowm/sundial/SundialJobScheduler.java

Job Data Map

// asynchronously start a job by name with data map
Map<String, Object> params = new HashMap<>();
params.put("MY_KEY", new Integer(660));
SundialJobScheduler.startJob("SampleJob1", params);
// annotate CronTrigger with data map (separate key/values with ":" )
@CronTrigger(cron = "0/5 * * * * ?", jobDataMap = { "KEY_1:VALUE_1", "KEY_2:1000" })
public class SampleJob extends Job {
}
<!-- configure data map in jobs.xml -->
<job>
  <name>SampleJob</name>
  <job-class>org.knowm.sundial.jobs.SampleJob</job-class>
  <job-data-map>
    <entry>
      <key>MyParam</key>
      <value>42</value>
    </entry>
  </job-data-map>
</job>
// access data inside Job
String value1 = getJobContext().get("KEY_1");
logger.info("value1 = " + value1);

Get Organized with Job Actions!

With JobActions, you can encapsule logic that can be shared by different Jobs.

public class SampleJobAction extends JobAction {

  @Override
  public void doRun() {

    Integer myValue = getJobContext().get("MyValue");

    // Do something interesting...
  }
}
// Call the JobAction from inside a Job
getJobContext().put("MyValue", new Integer(123));
new SampleJobAction().run();

Job Termination

To terminate a Job asynchronously, you can call the SundialJobScheduler.stopJob(String jobName) method. The Job termination mechanism works by setting a flag that the Job should be terminated, but it is up to the logic in the Job to decide at what point termination should occur. Therefore, in any long-running job that you anticipate the need to terminate, put the method call checkTerminated() at an appropriate location.

For an example see SampleJob9.java. In a loop within the Job you should just add a call to checkTerminated();.

If you try to shutdown the SundialScheduler and it just hangs, it's probably because you have a Job defined with an infinite loop with no checkTerminated(); call. You may see a log message like: Waiting for Job to shutdown: SampleJob9 : SampleJob9-trigger.

Concurrent Job Execution

By default jobs are not set to concurrently execute. This means if a job is currently running and a trigger is fired for that job, it will skip running the job. In some cases concurrent job execution is desired and there are a few ways to configure it.

  1. You can add <concurrency-allowed>true</concurrency-allowed> in jobs.xml.
  2. You can add it to the Sundial annotations like this: @SimpleTrigger(repeatInterval = 30, timeUnit = TimeUnit.SECONDS, isConcurrencyAllowed = true) Same idea for cron annotation too.

Now go ahead and study some more examples, download the thing and provide feedback.

Getting the Goods

Non-Maven

Download Jar: http://knowm.org/open-source/sundial/sundial-change-log/

Dependencies

  • org.slf4j.slf4j-api-1.7.26

Maven

The Sundial release artifacts are hosted on Maven Central.

Add the Sundial library as a dependency to your pom.xml file:

<dependency>
    <groupId>org.knowm</groupId>
    <artifactId>sundial</artifactId>
    <version>2.2.1</version>
</dependency>

For snapshots, add the following to your pom.xml file:

<repository>
  <id>sonatype-oss-snapshot</id>
  <snapshots/>
  <url>https://oss.sonatype.org/content/repositories/snapshots</url>
</repository>

<dependency>
    <groupId>org.knowm</groupId>
    <artifactId>sundial</artifactId>
    <version>2.2.2-SNAPSHOT</version>
</dependency>

Building

mvn clean package  
mvn javadoc:javadoc  

Dependency Updates

mvn versions:display-dependency-updates

Cron Expressions in jobs.xml

See the Cron Trigger tutorial over at quartz-scheduler.org. Here are a few examples:

Expression Meaning
0 0 12 * * ? Fire at 12pm (noon) every day
0 15 10 * * ? Fire at 10:15am every day
0 15 10 ? * MON-FRI Fire at 10:15am every Monday, Tuesday, Wednesday, Thursday and Friday
0 0/10 * * * ? Fire every 10 mintes starting at 12 am (midnight) every day

Bugs

Please report any bugs or submit feature requests to Sundial's Github issue tracker.

Continuous Integration

Build Status
Build History

Comments
  • package annotated jobs does not work with tomcat war versioning

    package annotated jobs does not work with tomcat war versioning

    If you use tomcat war versioning (e.g. war name: eDHTReporter##20180201-01.war / for more details please see https://objectpartners.com/2012/04/17/tomcat-v7-parallel-deployment/), package annotated jobs does not work because the directory encoding is wrong:

    2018-02-01T09:02:34,452 [] [] INFO  org.quartz.core.SchedulerSignalerImpl <init>:49 - Initialized Scheduler Signaler of type: class org.quartz.core.SchedulerSignalerImpl
    2018-02-01T09:02:34,463 [] [] INFO  org.quartz.core.RAMJobStore initialize:112 - RAMJobStore initialized.
    2018-02-01T09:02:34,463 [] [] INFO  org.quartz.plugins.xml.XMLSchedulingDataProcessorPlugin initialize:124 - Initializing XMLSchedulingDataProcessorPlugin Plug-in.
    2018-02-01T09:02:34,463 [] [] INFO  org.quartz.plugins.management.ShutdownHookPlugin initialize:99 - Registering Quartz shutdown hook.
    2018-02-01T09:02:34,464 [] [] INFO  org.knowm.sundial.plugins.AnnotationJobTriggerPlugin initialize:76 - Initializing AnnotationJobTriggerPlugin Plug-in.
    2018-02-01T09:02:34,468 [] [] WARN  org.quartz.plugins.xml.XMLSchedulingDataProcessor processFile:233 - File named 'jobs.xml' does not exist. This is OK if you don't want to use an XML job config file.
    2018-02-01T09:02:34,469 [] [] INFO  org.quartz.plugins.xml.XMLSchedulingDataProcessor scheduleJobs:490 - Adding 0 jobs, 0 triggers.
    2018-02-01T09:02:34,471 [] [] INFO  org.knowm.sundial.plugins.AnnotationJobTriggerPlugin start:86 - Loading annotated jobs from de.guhsoft.edhtreporter.server.tools.jobs.
    2018-02-01T09:02:34,471 [] [] INFO  org.quartz.classloading.CascadingClassLoadHelper getJobClasses:229 - Package: 'de.guhsoft.edhtreporter.server.tools.jobs' becomes Resource: 'jar:file:/usr/local/tomcat/eDHTReporter/webapps/eDHTReporter%23%2320180201-01/WEB-INF/lib/eDHRServerScheduling.jar!/de/guhsoft/edhtreporter/server/tools/jobs/'
    2018-02-01T09:02:34,472 [] [] ERROR de.guhsoft.edhtreporter.server.tools.SchedulerInitializer contextInitialized:21 - Exception while scheduling jobs.
    java.lang.RuntimeException: Unexpected IOException reading JAR File '/usr/local/tomcat/eDHTReporter/webapps/eDHTReporter%23%2320180201-01/WEB-INF/lib/eDHRServerScheduling.jar'
            at org.quartz.classloading.CascadingClassLoadHelper.processJarfile(CascadingClassLoadHelper.java:276) ~[sundial-2.1.3.jar:?]
            at org.quartz.classloading.CascadingClassLoadHelper.getJobClasses(CascadingClassLoadHelper.java:232) ~[sundial-2.1.3.jar:?]
            at org.knowm.sundial.plugins.AnnotationJobTriggerPlugin.start(AnnotationJobTriggerPlugin.java:88) ~[sundial-2.1.3.jar:?]
            at org.quartz.QuartzScheduler.startPlugins(QuartzScheduler.java:1113) ~[sundial-2.1.3.jar:?]
            at org.quartz.QuartzScheduler.start(QuartzScheduler.java:211) ~[sundial-2.1.3.jar:?]
            at org.knowm.sundial.SundialJobScheduler.startScheduler(SundialJobScheduler.java:106) ~[sundial-2.1.3.jar:?]
            at org.knowm.sundial.SundialJobScheduler.startScheduler(SundialJobScheduler.java:93) ~[sundial-2.1.3.jar:?]
            at de.guhsoft.edhtreporter.server.tools.SchedulerInitializer.contextInitialized(SchedulerInitializer.java:19) [eDHRServerScheduling.jar:?]
            at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4745) [catalina.jar:8.5.27]
            at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5207) [catalina.jar:8.5.27]
            at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) [catalina.jar:8.5.27]
            at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:752) [catalina.jar:8.5.27]
            at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:728) [catalina.jar:8.5.27]
            at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:734) [catalina.jar:8.5.27]
            at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:986) [catalina.jar:8.5.27]
            at org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1857) [catalina.jar:8.5.27]
            at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) [?:1.8.0_162]
            at java.util.concurrent.FutureTask.run(FutureTask.java:266) [?:1.8.0_162]
            at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [?:1.8.0_162]
            at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [?:1.8.0_162]
            at java.lang.Thread.run(Thread.java:748) [?:1.8.0_162]
    Caused by: java.io.FileNotFoundException: /usr/local/tomcat/eDHTReporter/webapps/eDHTReporter%23%2320180201-01/WEB-INF/lib/eDHRServerScheduling.jar (No such file or directory)
            at java.util.zip.ZipFile.open(Native Method) ~[?:1.8.0_162]
            at java.util.zip.ZipFile.<init>(ZipFile.java:225) ~[?:1.8.0_162]
            at java.util.zip.ZipFile.<init>(ZipFile.java:155) ~[?:1.8.0_162]
            at java.util.jar.JarFile.<init>(JarFile.java:166) ~[?:1.8.0_162]
            at java.util.jar.JarFile.<init>(JarFile.java:103) ~[?:1.8.0_162]
            at org.quartz.classloading.CascadingClassLoadHelper.processJarfile(CascadingClassLoadHelper.java:274) ~[sundial-2.1.3.jar:?]
            ... 20 more
    
    

    The file is there, but under

    /usr/local/tomcat/eDHTReporter/webapps/eDHTReporter##20180201-01/WEB-INF/lib/eDHRServerScheduling.jar
    

    not under

    /usr/local/tomcat/eDHTReporter/webapps/eDHTReporter%23%2320180201-01/WEB-INF/lib/eDHRServerScheduling.jar
    
    opened by mseele 7
  • Run a single job explicitly / stay alive until finished

    Run a single job explicitly / stay alive until finished

    Hello,

    I've successfully used Sundial to run my cron jobs. Now I'm trying to add a CLI switch to my application to run a single job and then exit. I struggle with this.

    How can I get the scheduler up and running and just submit a single job without it executing my jobs.xml? I tried to

    SundialJobScheduler.createScheduler(1);
    SundialJobScheduler.addJob("whatever", MyJob.class);
    SundialJobScheduler.startJob("whatever");
    

    but that doesn't seem to do anything. So I came up with this:

    SundialJobScheduler.startScheduler(1, "my.jobs.package");
    SundialJobScheduler.addJob("whatever", MyJob.class);
    SundialJobScheduler.startJob("whatever");
    

    which hopefully just runs the job I told it to run. But I then have issues to keep the application alive until the job is finished.

    I deadlock the app for my cron jobs with:

            try {
                Object lock = new Object();
                synchronized (lock) {
                    while (true) {
                        lock.wait();
                    }
                }
            }
            catch (InterruptedException ex) {
                LOGGER.info("Caught ^c, shutting down.");
            }
    

    but that's not a solution for the new use case. I thus tried to wait for the job to finish via

                try {
                    while (SundialJobScheduler.isJobRunning("whatever")) {
                        LOGGER.debug("job still running");
                        Thread.sleep(2000);
                    }
                    LOGGER.debug("job finished");
                }
                catch (InterruptedException | SundialSchedulerException e) {
                    LOGGER.error("Error in job?", e);
                }
    

    but this, too, exits before the job is actually finished.

    Is there a simple solution that I missed?

    opened by black-snow 6
  • CascadingClassLoadHelper cannot load when there is a space in the file path

    CascadingClassLoadHelper cannot load when there is a space in the file path

    If you put the jar file into a path with a space (like c:\program files (x86)\etc) it will fail to find the file path to the jar file and throws java.io.FileNotFoundException: C:\Program%20Files%20(x86).....\etc.jar (The system cannot find the file specified).

    opened by Franknozly 6
  • Scheduler cannot load all annotated job classes from multiple locations

    Scheduler cannot load all annotated job classes from multiple locations

    Hi, This issue is related or a duplicate of https://github.com/knowm/Sundial/issues/36 When the package to scan for annotated classes exists in multiple locations (e.g. two source roots: main and test going to separate output directories but both ending up on the classpath or a main and additional jar) then only one of those locations will be picked up and scanned.

    The solution would seem to be to either modify existing method https://github.com/knowm/Sundial/blob/develop/src/main/java/org/quartz/classloading/ClassLoadHelper.java -> URL getResource(String name); or add a new one that would allow multiple resource locations URL[] getResource(String name); and use it for finding package locations to iterate over in: https://github.com/knowm/Sundial/blob/develop/src/main/java/org/knowm/sundial/plugins/AnnotationJobTriggerPlugin.java -> public Set<Class<? extends Job>> getJobClasses(String pkgname)

    Please let me know if you would have some time to look into that in near future and if not then I can try to submit a PR.

    opened by ligasgr 4
  • Jobs.xml not parsing

    Jobs.xml not parsing

    I got a sundial scheduler job which should run with the help of jobs.xml. When I start dropwizard application the jobs.xml file get detected but getting some error while parsing the file.

    I am trying to use simple trigger and only one job is there in Class: com.listener.Listener. Kindly help me to solve this issue.

    I am attaching job.xml and error which was thrown.

    jobs.txt error.txt

    opened by vishnudivakar31 4
  • SundialJobScheduler.stopJob does not actually interrupt threads

    SundialJobScheduler.stopJob does not actually interrupt threads

    The documentation for SundialJobScheduler.stopJob states:

    Triggers a Job interrupt on all Jobs matching the given Job Name

    However, is a job is running and is blocked in e.g. a call to Object.wait, then the job just sits there. It does not appear that Thread.interrupt is called on the thread hosting the job.

    If this is intentional, then the documentation should be updated to reflect this, though I would very much prefer to have a way of interrupting jobs.

    Feature Request 
    opened by reftel 2
  • Support for custom implementation of JobFactory

    Support for custom implementation of JobFactory

    It would be nice to be able to implement a custom JobFactory to be used instead of SimpleJobFactory. The SimpleJobFactory is insansiated in QuartzScheduler and quite hard to override. What about:

    1. adding a new constructor in QuartzScheduler with a JobFactory
    2. adding JobFactory as a parameter to SchedulerFactory.instantiate()
    3. and to SchedulerFactory.getScheduler()
    4. and finally to SundialJobScheduler.createScheduler() Or is there an easier way?
    opened by lind 2
  • SundialJobScheduler throws exception back to consumer

    SundialJobScheduler throws exception back to consumer

    SundialJobScheduler throws exception back to consumer to know what happened.

    If you feel Sundial custom exception will be good let me know I will update

    opened by jkandasa 2
  • It appears that we cannot a delete a job from the scheduler

    It appears that we cannot a delete a job from the scheduler

    Hi, First of all this is a great project very helpful. Thanks for putting this together.

    I have a bug to report. It appears that once we add a job to the scheduler we cannot delete the same. I see that there are API's in quartz to delete a job from the scheduler.

    Thanks, Mahesh

    opened by maheshnagaraj 2
  • Bump slf4j-simple from 1.7.32 to 2.0.5

    Bump slf4j-simple from 1.7.32 to 2.0.5

    Bumps slf4j-simple from 1.7.32 to 2.0.5.

    Commits
    • 7e62e1e prepare release 2.0.5
    • d250ad7 in jcl-over-slf4j rename LICENSE.TXT as LICENSE, add LICENSE file to log4j-ov...
    • 3bc58f3 add SecurityManager support
    • 207bb29 start work on 2.0.5-SNAPSHOT
    • 35dd7ff removed unused META-INF/services entry
    • 440c2f3 prepare release 2.0.4
    • 43a3630 use the class loader that loaded LoggerFactory (instead of the threadContextC...
    • 557bf7c [SLF4J-548] Fix ServiceLoader usage in servlet environment
    • 6324105 enhance manifest with capabilities
    • e540299 edit blurb on release championing
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies 
    opened by dependabot[bot] 1
  • Bump slf4j-api from 1.7.32 to 2.0.5

    Bump slf4j-api from 1.7.32 to 2.0.5

    Bumps slf4j-api from 1.7.32 to 2.0.5.

    Commits
    • 7e62e1e prepare release 2.0.5
    • d250ad7 in jcl-over-slf4j rename LICENSE.TXT as LICENSE, add LICENSE file to log4j-ov...
    • 3bc58f3 add SecurityManager support
    • 207bb29 start work on 2.0.5-SNAPSHOT
    • 35dd7ff removed unused META-INF/services entry
    • 440c2f3 prepare release 2.0.4
    • 43a3630 use the class loader that loaded LoggerFactory (instead of the threadContextC...
    • 557bf7c [SLF4J-548] Fix ServiceLoader usage in servlet environment
    • 6324105 enhance manifest with capabilities
    • e540299 edit blurb on release championing
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies 
    opened by dependabot[bot] 1
  • Bump slf4j-api from 1.7.32 to 2.0.6

    Bump slf4j-api from 1.7.32 to 2.0.6

    Bumps slf4j-api from 1.7.32 to 2.0.6.

    Commits
    • 5ff6f2c prepare for release 2.0.6
    • 2f4aa75 fix SLF4J-575
    • 363f0a5 remove unused parts
    • 171679b SLF4J-574: Add full OSGi headers, especially "uses" clauses
    • 921b5b3 fix FUNDING file
    • e02244c fix FUNDING file
    • 441d458 fix FUNDING file
    • f5e741b add FUNDING file
    • 2e71327 remove unused log4j dependency in the version definition section of pom.xml
    • 3ff2a30 start work on 2.0.6-SNAPSHOT
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies 
    opened by dependabot[bot] 0
  • Bump slf4j-simple from 1.7.32 to 2.0.6

    Bump slf4j-simple from 1.7.32 to 2.0.6

    Bumps slf4j-simple from 1.7.32 to 2.0.6.

    Commits
    • 5ff6f2c prepare for release 2.0.6
    • 2f4aa75 fix SLF4J-575
    • 363f0a5 remove unused parts
    • 171679b SLF4J-574: Add full OSGi headers, especially "uses" clauses
    • 921b5b3 fix FUNDING file
    • e02244c fix FUNDING file
    • 441d458 fix FUNDING file
    • f5e741b add FUNDING file
    • 2e71327 remove unused log4j dependency in the version definition section of pom.xml
    • 3ff2a30 start work on 2.0.6-SNAPSHOT
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies 
    opened by dependabot[bot] 0
  • Bump maven-javadoc-plugin from 3.3.1 to 3.4.1

    Bump maven-javadoc-plugin from 3.3.1 to 3.4.1

    Bumps maven-javadoc-plugin from 3.3.1 to 3.4.1.

    Release notes

    Sourced from maven-javadoc-plugin's releases.

    3.4.1

    📦 Dependency updates

    3.4.0

    What's Changed

    Full Changelog: https://github.com/apache/maven-javadoc-plugin/compare/maven-javadoc-plugin-3.3.2...maven-javadoc-plugin-3.4.0

    3.3.2

    What's Changed

    ... (truncated)

    Commits
    • a5db96e [maven-release-plugin] prepare release maven-javadoc-plugin-3.4.1
    • a10f0b1 [MJAVADOC-723] Upgrade Maven Reporting API to 3.1.1/Complete with Maven Repor...
    • c19dba2 Skip Java 9-14 in reproducible test
    • 26d84b2 Add notimestamp for reproducible builds test
    • 92ce668 Ignore Maven Core updates
    • bacc078 Add Integration Test for reproducible builds
    • 497f80f [MJAVADOC-719] - Update Maven Archiver to 3.6.0
    • 34b501d Bump assertj-core from 3.21.0 to 3.23.1
    • b928970 Bump spring-webmvc in /src/it/projects/MJAVADOC-434_fixcompile
    • 4306c92 Bump mockito-core from 4.1.0 to 4.4.0
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies 
    opened by dependabot[bot] 0
  • Bump maven-bundle-plugin from 5.1.2 to 5.1.8

    Bump maven-bundle-plugin from 5.1.2 to 5.1.8

    Bumps maven-bundle-plugin from 5.1.2 to 5.1.8.

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies 
    opened by dependabot[bot] 0
  • Bump maven-compiler-plugin from 3.8.1 to 3.10.1

    Bump maven-compiler-plugin from 3.8.1 to 3.10.1

    Bumps maven-compiler-plugin from 3.8.1 to 3.10.1.

    Release notes

    Sourced from maven-compiler-plugin's releases.

    3.10.1

    🚀 New features and improvements

    🐛 Bug Fixes

    📦 Dependency updates

    Other contributions

    3.10.0

    🚨 Removed

    🚀 New features and improvements

    🐛 Bug Fixes

    📦 Dependency updates

    📝 Documentation updates

    🔧 Build

    ... (truncated)

    Commits
    • 4e08e2b [maven-release-plugin] prepare release maven-compiler-plugin-3.10.1
    • 6795b0f [MCOMPILER-426] add flag to enable-preview java compiler feature (#98)
    • 1de8c91 MCOMPILER 346 workaround to jdk bug: assertion error from javaxcompiler javax...
    • 96ed94f use shared release drafter
    • fa80028 [MCOMPILER-485] Fixes internal string format in generated package-info.class ...
    • f605c0f Merge pull request #94 from apache/dependabot/maven/org.apache.maven.plugins-...
    • 4a54a9a Bump maven-javadoc-plugin from 3.3.1 to 3.3.2
    • 87b5a7f [maven-release-plugin] prepare for next development iteration
    • f4239a4 [maven-release-plugin] prepare release maven-compiler-plugin-3.10.0
    • fda9729 fix typo gtrhhhrhr
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies 
    opened by dependabot[bot] 0
  • Bump fmt-maven-plugin from 2.9.1 to 2.13

    Bump fmt-maven-plugin from 2.9.1 to 2.13

    Bumps fmt-maven-plugin from 2.9.1 to 2.13.

    Commits
    • 8171b5a Release version 2.13
    • 1eab711 Correcting a typo in exception message (#111)
    • c21b097 fix: upgrade org.apache.maven:maven-plugin-api from 3.8.1 to 3.8.3 (#113)
    • 571cd52 Upgrade Google Java Format 1.11.0 -> 1.13.0 (#114)
    • 0c5f8dc Version 2.12
    • a844430 Update the formatter version in the tests.
    • 8861d69 Disable Java 16 in tests again for now.
    • 34aa471 Add Java 16 to CI tests
    • 1138112 Update URLs to point to the coveooss organization (#107)
    • 855f277 Upgrade Google Java Format 1.10.0 -> 1.11.0 (#108)
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies 
    opened by dependabot[bot] 0
Owner
Knowm
Neuromemristive Artificial Intelligence
Knowm
Linked List - a part of the Collection framework present in java.util package

Linked List is a part of the Collection framework present in java.util package. This class is an implementation of the LinkedList data structure which is a linear data structure where the elements are not stored in contiguous locations and every element is a separate object with a data part and address part

Muhammad Rizki 2 Mar 6, 2022
A Light-weight Job Scheduling Framework

Sundial A Lightweight Job Scheduling Framework for Java. In a Nutshell Sundial makes adding scheduled jobs to your Java application a walk in the park

Knowm 262 Dec 9, 2022
A light-weight and dynamic dependency injection framework

⚠️ This project is now part of the EE4J initiative. This repository has been archived as all activities are now happening in the corresponding Eclipse

Java EE 105 Dec 23, 2022
XChart is a light-weight Java library for plotting data.

XChart XChart is a light weight Java library for plotting data. Description XChart is a light-weight and convenient library for plotting data designed

Knowm 1.3k Dec 26, 2022
A fast, light and cloud native OAuth 2.0 authorization microservices based on light-4j

A fast, light weight and cloud native OAuth 2.0 Server based on microservices architecture built on top of light-4j and light-rest-4j frameworks. Stac

null 291 Dec 17, 2022
Distributed scheduled job framework

ElasticJob - distributed scheduled job solution Official website: https://shardingsphere.apache.org/elasticjob/ ElasticJob is a distributed scheduling

The Apache Software Foundation 7.8k Jan 5, 2023
A distributed task scheduling framework

XXL-JOB XXL-JOB, a distributed task scheduling framework. -- Home Page -- Introduction XXL-JOB is a distributed task scheduling framework. It's core d

许雪里 23.3k Jan 9, 2023
Publish Jenkins performances metrics to an OpenTelemetry endpoint, including distributed traces of job executions and health metrics of the controller.

OpenTelemetry Introduction Architecture Features Getting Started Examples Configuration as Code Contributing Introduction Collect Jenkins monitoring d

Jenkins 73 Dec 26, 2022
蓝鲸作业平台(Job)是一套运维基础操作管理系统,具备海量任务并发处理能力。除了支持脚本执行、文件分发、定时任务等一系列基础运维场景以外,还支持通过流程调度能力将零碎的单个任务组装成一个自动化作业流程;而每个作业都可做为一个原子节点,提供给上层或周边系统/平台使用,实现调度自动化。

重要提示: master 分支在开发过程中可能处于 不稳定或者不可用状态 。 请通过releases 而非 master 去获取稳定的二进制文件。 蓝鲸作业平台(Job)是一套运维脚本管理系统,具备海量任务并发处理能力。除了支持脚本执行、文件分发、定时任务等一系列基础运维场景以外,还支持通过流程调度

Tencent 676 Dec 30, 2022
Table-Computing (Simplified as TC) is a distributed light weighted, high performance and low latency stream processing and data analysis framework. Milliseconds latency and 10+ times faster than Flink for complicated use cases.

Table-Computing Welcome to the Table-Computing GitHub. Table-Computing (Simplified as TC) is a distributed light weighted, high performance and low la

Alibaba 34 Oct 14, 2022
An android application to make students life easier by reducing their backpack weight.

Smart-Schooling An android application to make students life easier by reducing their backpack weight. Dont forget to ⭐ the repo Overview Almost every

Thamizh Kaniyan 3 Jan 31, 2022
Java Constraint Solver to solve vehicle routing, employee rostering, task assignment, conference scheduling and other planning problems.

OptaPlanner www.optaplanner.org Looking for Quickstarts? OptaPlanner’s quickstarts have moved to optaplanner-quickstarts repository. Quick development

KIE (Drools, OptaPlanner and jBPM) 2.8k Jan 2, 2023
Lightweight threads for Java, with message passing, nio, http and scheduling support.

Kilim: Continuations, Fibers, Actors and message passing for the JVM

Sriram Srinivasan 1.7k Jan 3, 2023
A suite of software tools and services created to support activity planning and sequencing needs of missions with modeling, simulation, scheduling and validation capabilities

Aerie A suite of software tools and services created to support activity planning and sequencing needs of missions with modeling, simulation, scheduli

NASA Advanced Multi-Mission Operations System 31 Jan 3, 2023
Implementation of Greedy Particle Swarm Optimization, HSGA and Hybrid(GA+PSO) for the purpose of Task Scheduling in cloud computing environment using CloudSim

Implementation of Greedy Particle Swarm Optimization, HSGA and Hybrid(GA+PSO) for the purpose of Task Scheduling in cloud computing environment using CloudSim

Yash Jain 5 Dec 18, 2022
ClockMonster is a self-hosted service for scheduling one-time or repeating jobs within your system

ClockMonster ClockMonster is a self-hosted service for scheduling one-time or repeating jobs within your system. Jobs for now are HTTP POST requests,

Scott Hiett 17 Dec 15, 2022
Critter Chronologer a Software as a Service application that provides a scheduling interface for a small business that takes care of animals

Critter Chronologer a Software as a Service application that provides a scheduling interface for a small business that takes care of animals. This Spring Boot project will allow users to create pets, owners, and employees, and then schedule events for employees to provide services for pets.

Rasha Omran 1 Jan 28, 2022
Tasks Planner : A minimalist collaborative app for scheduling and managing your tasks with the team and getting notifications through discord.

Tasks Planner ✨ Overview Tasks planner is a minimalist collaborative app for planning and managing your tasks with the team and get notifications thro

MILIARI Adnane 7 Dec 1, 2022