Free tools Windows power users keep installed
One-click scans. No signup required.
Cronflower is an open-source scheduler for Spring Boot. Its author, Fred Feng, pitches it as a way to get a stateful, clustered scheduler with a web console, without adding an external database, broker or coordinator. His framing: “@Scheduled is fine until it isn’t. It runs in one JVM, so the moment you scale to two instances the job fires twice.” That is the author’s argument for the project, not a rule for every Spring scheduling setup.
Everything below comes from the author’s usage article on DEV Community, which was also republished on WPS. We have not inspected the repository or run the software. Treat the capabilities as the project’s claims and check them against the release you plan to use.
As an Amazon Associate I earn from qualifying purchases.
The core idea: schedulers and executors
Cronflower splits the work into two process roles:
- Scheduler: owns the schedules and task state, works out what is due, and dispatches it. The author calls the scheduling engine Cronsmith.
- Executor: your Spring Boot application. It declares
@Taskmethods, registers them with the scheduler, and runs them when dispatched.
Several scheduler nodes can form a cluster with an elected leader. The aim is that your business code lives in the executor app, while “when and whether to run” lives in the scheduler tier.
What’s actually slowing this PC down?
Pick the symptom - the matching free tool is one click away.
Declaring tasks
A task is a bean method annotated with @Task. The article shows several schedule forms:
#1 Best Overall
| Schedule form | Example in the article |
|---|---|
| Cron expression | Every five seconds |
| Fixed interval | Every ten seconds |
| ISO-8601 duration | Ninety minutes |
Alternate ycron parser |
Day-of-year scheduling |
A task method can take an optional String parameter, filled from the task’s initialParameter. That value can be a SpEL template, which the article says is evaluated on the executor.
Two kinds of task
Bean tasks
These are the @Task methods above. The scheduler dispatches them to an executor, which runs the code.
Rank #2
HTTP tasks
An operator defines a URL and HTTP method in the console or through the REST API. The scheduler nodes make the request themselves, so no executor bean is needed. This suits triggering existing endpoints, but it means the scheduler tier needs network access to those targets.
Windows Errors? Fix Them Before They Spread
Repair common Windows errors and clear accumulated junk for a smoother, more stable PC - no reinstall needed.Free scan · no reinstallOutdated Drivers Are Slowing You Down
One free scan finds every outdated or missing driver and matches the right update for your exact hardware.Free scan · exact hardware matchReliability controls
The usage tour demonstrates these per-task settings. They are the author’s description, not verified behavior.
Rank #3
| Setting | Purpose |
|---|---|
maxRetryCount, retryInterval |
Retry a failed run, with a delay between attempts |
timeout |
Per-run time limit |
Misfire policy: SKIP, FIRE_ONCE_NOW, FIRE_ALL |
What to do with runs missed while the system was down or busy: drop them, run once, or run every missed one |
repeatCount, stopAt |
Bound a job by number of runs or by an end date |
Misfire choice matters most for jobs that are not idempotent. FIRE_ALL after a long outage can replay many runs at once, so test it before relying on it.
Operator console and observability
The console and API are described as supporting run-now, pause, resume, cancel and execution history. The author also says the starter exposes health and Prometheus endpoints. In the local demo the console is on port 7200.
Rank #4
Clustering and persistence
According to the article, scheduler nodes elect a leader by gossip, and executors send heartbeats so the scheduler knows which are alive. Executor routing is configurable. The storage options differ in what they allow:
Quick wins for a faster PC:
Clear out junk files and repair common Windows errorsFree Scan →Fix the driver behind crashes, sound loss and screen glitchesFind Drivers →| Store | What the article says |
|---|---|
| In-memory | Supported; state is not kept across restarts, which is the usual meaning of in-memory |
| Node-local H2 or SQLite | Each node has its own store; scheduling stays leader-only |
| Shared MySQL or PostgreSQL | Enables group sharding across scheduler nodes |
The “no external database” pitch therefore applies to the simpler modes. If you want sharding, the article ties it to a shared MySQL or PostgreSQL database.
Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Trying it locally
- The article provides a
run-local.shscript that starts a scheduler, the console and an example executor. - Open the console on port 7200 and watch the example tasks run.
- For a multi-node setup, the article mentions a multi-node configuration and a
run-docker.shscript.
Treat the demo ports and any demo credentials as example settings, not production defaults. Change them and put the console behind proper authentication before exposing it.
Adding it to a project
The article’s dependency example lists two starter artifacts, one for the scheduler and one for the executor, both at 1.0.0-SNAPSHOT. A snapshot is a development build, not a stable release. We could not establish current artifact availability or which Java and Spring Boot versions are supported, so check the project’s repository and Maven listings before depending on it.
What to verify before relying on it
- Scale: the article speaks qualitatively of “hundreds of thousands of tasks” and fast startup but gives no benchmark, test conditions or measured result. Load-test your own workload.
- Duplicate prevention: test what happens during leader failover, executor loss and network partitions. Confirm whether delivery is at-most-once or at-least-once, and make tasks idempotent either way.
- Release state: check the license, release tags, supported Java and Spring Boot versions, and recent maintenance activity.
- Security: review authentication on the console and REST API, and on executor-to-scheduler communication.
- Storage choice: confirm in the release you use that node-local stores really stay leader-only and that sharding needs a shared database.
- Independence: the quote that Cronflower is “that whole stack, open source: a distributed, stateful scheduler for Spring Boot with a web console, that forms its own cluster and needs no external database, broker or coordinator” is the author’s own promotion. The WPS copy is a republication, not a separate validation.
The Bottom Line
Cronflower is worth a local trial if single-JVM @Scheduled no longer fits and you want a scheduler with a console and no required external coordinator. The evidence so far is one author’s usage tour of a snapshot build. Run it, break it with failover tests, and read the code before it takes over production jobs.
Do these 3 things before closing this tab:
1Clear out junk files and repair common Windows errors2Scan for outdated or missing drivers - takes under a minute3Repair Windows errors before they cause bigger problemsQuick Recap
Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.




