mirror of
https://github.com/InsanusMokrassar/docs.git
synced 2025-10-16 21:00:18 +00:00
deploy: f7a2359066
This commit is contained in:
@@ -1284,33 +1284,33 @@
|
||||
See <a href="string-format.html">String format</a> for more info about the crontab-line syntax</p>
|
||||
</div>
|
||||
<p>This way will be very useful for cases when you need to configure something via external configuration (from file on startup or via some parameter from requests, for example):</p>
|
||||
<pre><code class="language-kotlin">val schedule = "5 * * * *"
|
||||
val scheduler = buildSchedule(schedule)
|
||||
|
||||
scheduler.asFlow().onEach {
|
||||
// this block will be called every minute at 5 seconds
|
||||
}.launchIn(someCoroutineScope)
|
||||
</code></pre>
|
||||
<div class="language-kotlin highlight"><pre><span></span><code><span id="__span-0-1"><a id="__codelineno-0-1" name="__codelineno-0-1" href="#__codelineno-0-1"></a><span class="kd">val</span><span class="w"> </span><span class="nv">schedule</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">"5 * * * *"</span>
|
||||
</span><span id="__span-0-2"><a id="__codelineno-0-2" name="__codelineno-0-2" href="#__codelineno-0-2"></a><span class="kd">val</span><span class="w"> </span><span class="nv">scheduler</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">buildSchedule</span><span class="p">(</span><span class="n">schedule</span><span class="p">)</span>
|
||||
</span><span id="__span-0-3"><a id="__codelineno-0-3" name="__codelineno-0-3" href="#__codelineno-0-3"></a>
|
||||
</span><span id="__span-0-4"><a id="__codelineno-0-4" name="__codelineno-0-4" href="#__codelineno-0-4"></a><span class="n">scheduler</span><span class="p">.</span><span class="na">asFlow</span><span class="p">().</span><span class="na">onEach</span><span class="w"> </span><span class="p">{</span>
|
||||
</span><span id="__span-0-5"><a id="__codelineno-0-5" name="__codelineno-0-5" href="#__codelineno-0-5"></a><span class="w"> </span><span class="c1">// this block will be called every minute at 5 seconds</span>
|
||||
</span><span id="__span-0-6"><a id="__codelineno-0-6" name="__codelineno-0-6" href="#__codelineno-0-6"></a><span class="p">}.</span><span class="na">launchIn</span><span class="p">(</span><span class="n">someCoroutineScope</span><span class="p">)</span>
|
||||
</span></code></pre></div>
|
||||
<h4 id="lambda-way">Lambda way<a class="headerlink" href="#lambda-way" title="Permanent link">¶</a></h4>
|
||||
<p>In case of usage builder (lets call it <code>lambda way</code>), you will be able to configure scheduler in more type-safe way:</p>
|
||||
<pre><code class="language-kotlin">val scheduler = buildSchedule {
|
||||
seconds {
|
||||
at(5)
|
||||
}
|
||||
}
|
||||
|
||||
scheduler.asFlow().onEach {
|
||||
// this block will be called every minute at 5 seconds
|
||||
}.launchIn(someCoroutineScope)
|
||||
</code></pre>
|
||||
<div class="language-kotlin highlight"><pre><span></span><code><span id="__span-1-1"><a id="__codelineno-1-1" name="__codelineno-1-1" href="#__codelineno-1-1"></a><span class="kd">val</span><span class="w"> </span><span class="nv">scheduler</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">buildSchedule</span><span class="w"> </span><span class="p">{</span>
|
||||
</span><span id="__span-1-2"><a id="__codelineno-1-2" name="__codelineno-1-2" href="#__codelineno-1-2"></a><span class="w"> </span><span class="n">seconds</span><span class="w"> </span><span class="p">{</span>
|
||||
</span><span id="__span-1-3"><a id="__codelineno-1-3" name="__codelineno-1-3" href="#__codelineno-1-3"></a><span class="w"> </span><span class="n">at</span><span class="p">(</span><span class="m">5</span><span class="p">)</span>
|
||||
</span><span id="__span-1-4"><a id="__codelineno-1-4" name="__codelineno-1-4" href="#__codelineno-1-4"></a><span class="w"> </span><span class="p">}</span>
|
||||
</span><span id="__span-1-5"><a id="__codelineno-1-5" name="__codelineno-1-5" href="#__codelineno-1-5"></a><span class="p">}</span>
|
||||
</span><span id="__span-1-6"><a id="__codelineno-1-6" name="__codelineno-1-6" href="#__codelineno-1-6"></a>
|
||||
</span><span id="__span-1-7"><a id="__codelineno-1-7" name="__codelineno-1-7" href="#__codelineno-1-7"></a><span class="n">scheduler</span><span class="p">.</span><span class="na">asFlow</span><span class="p">().</span><span class="na">onEach</span><span class="w"> </span><span class="p">{</span>
|
||||
</span><span id="__span-1-8"><a id="__codelineno-1-8" name="__codelineno-1-8" href="#__codelineno-1-8"></a><span class="w"> </span><span class="c1">// this block will be called every minute at 5 seconds</span>
|
||||
</span><span id="__span-1-9"><a id="__codelineno-1-9" name="__codelineno-1-9" href="#__codelineno-1-9"></a><span class="p">}.</span><span class="na">launchIn</span><span class="p">(</span><span class="n">someCoroutineScope</span><span class="p">)</span>
|
||||
</span></code></pre></div>
|
||||
<h3 id="custom-scheduler">Custom scheduler<a class="headerlink" href="#custom-scheduler" title="Permanent link">¶</a></h3>
|
||||
<p>You are always able to use your own realisation of scheduler. For example:</p>
|
||||
<pre><code class="language-kotlin">class RandomScheduler : KronScheduler {
|
||||
override suspend fun next(relatively: DateTime): DateTime {
|
||||
return relatively + DateTimeSpan(seconds = Random.nextInt() % 60)
|
||||
}
|
||||
}
|
||||
</code></pre>
|
||||
<div class="language-kotlin highlight"><pre><span></span><code><span id="__span-2-1"><a id="__codelineno-2-1" name="__codelineno-2-1" href="#__codelineno-2-1"></a><span class="kd">class</span><span class="w"> </span><span class="nc">RandomScheduler</span><span class="w"> </span><span class="p">:</span><span class="w"> </span><span class="n">KronScheduler</span><span class="w"> </span><span class="p">{</span>
|
||||
</span><span id="__span-2-2"><a id="__codelineno-2-2" name="__codelineno-2-2" href="#__codelineno-2-2"></a><span class="w"> </span><span class="kd">override</span><span class="w"> </span><span class="kd">suspend</span><span class="w"> </span><span class="kd">fun</span><span class="w"> </span><span class="nf">next</span><span class="p">(</span><span class="n">relatively</span><span class="p">:</span><span class="w"> </span><span class="n">DateTime</span><span class="p">):</span><span class="w"> </span><span class="n">DateTime</span><span class="w"> </span><span class="p">{</span>
|
||||
</span><span id="__span-2-3"><a id="__codelineno-2-3" name="__codelineno-2-3" href="#__codelineno-2-3"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">relatively</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="n">DateTimeSpan</span><span class="p">(</span><span class="n">seconds</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">Random</span><span class="p">.</span><span class="na">nextInt</span><span class="p">()</span><span class="w"> </span><span class="o">%</span><span class="w"> </span><span class="m">60</span><span class="p">)</span>
|
||||
</span><span id="__span-2-4"><a id="__codelineno-2-4" name="__codelineno-2-4" href="#__codelineno-2-4"></a><span class="w"> </span><span class="p">}</span>
|
||||
</span><span id="__span-2-5"><a id="__codelineno-2-5" name="__codelineno-2-5" href="#__codelineno-2-5"></a><span class="p">}</span>
|
||||
</span></code></pre></div>
|
||||
<p>In the example above we have created <code>RandomScheduler</code>, which will return random next time in range <code>0-60</code> seconds since <code>relatively</code> argument.</p>
|
||||
|
||||
|
||||
|
@@ -1403,22 +1403,22 @@
|
||||
</tbody>
|
||||
</table>
|
||||
<p>Example with almost same description:</p>
|
||||
<pre><code>/-------------------- (0-59) ············ Seconds
|
||||
| /------------------ (0-59) ············ Minutes
|
||||
| | /---------------- (0-23) ············ Hours
|
||||
| | | /-------------- (0-30) ············ Days of months
|
||||
| | | | /------------ (0-11) ············ Months
|
||||
| | | | | /---------- (optional, any int) Year
|
||||
| | | | | | /-------- (optional) ········ Timezone offset
|
||||
| | | | | | | /----- (optional, 0-6) ··· Week days
|
||||
| | | | | | | | /-- (optional, 0-999) · Milliseconds (0 by default)
|
||||
* * * * * * 0o *w 0ms
|
||||
</code></pre>
|
||||
<div class="language-text highlight"><pre><span></span><code><span id="__span-0-1"><a id="__codelineno-0-1" name="__codelineno-0-1" href="#__codelineno-0-1"></a>/-------------------- (0-59) ············ Seconds
|
||||
</span><span id="__span-0-2"><a id="__codelineno-0-2" name="__codelineno-0-2" href="#__codelineno-0-2"></a>| /------------------ (0-59) ············ Minutes
|
||||
</span><span id="__span-0-3"><a id="__codelineno-0-3" name="__codelineno-0-3" href="#__codelineno-0-3"></a>| | /---------------- (0-23) ············ Hours
|
||||
</span><span id="__span-0-4"><a id="__codelineno-0-4" name="__codelineno-0-4" href="#__codelineno-0-4"></a>| | | /-------------- (0-30) ············ Days of months
|
||||
</span><span id="__span-0-5"><a id="__codelineno-0-5" name="__codelineno-0-5" href="#__codelineno-0-5"></a>| | | | /------------ (0-11) ············ Months
|
||||
</span><span id="__span-0-6"><a id="__codelineno-0-6" name="__codelineno-0-6" href="#__codelineno-0-6"></a>| | | | | /---------- (optional, any int) Year
|
||||
</span><span id="__span-0-7"><a id="__codelineno-0-7" name="__codelineno-0-7" href="#__codelineno-0-7"></a>| | | | | | /-------- (optional) ········ Timezone offset
|
||||
</span><span id="__span-0-8"><a id="__codelineno-0-8" name="__codelineno-0-8" href="#__codelineno-0-8"></a>| | | | | | | /----- (optional, 0-6) ··· Week days
|
||||
</span><span id="__span-0-9"><a id="__codelineno-0-9" name="__codelineno-0-9" href="#__codelineno-0-9"></a>| | | | | | | | /-- (optional, 0-999) · Milliseconds (0 by default)
|
||||
</span><span id="__span-0-10"><a id="__codelineno-0-10" name="__codelineno-0-10" href="#__codelineno-0-10"></a>* * * * * * 0o *w 0ms
|
||||
</span></code></pre></div>
|
||||
<p>Years, timezone, week days and milliseconds are optional settings. Next snippets are equal:</p>
|
||||
<pre><code>*/15 * * * *
|
||||
*/15 * * * * * // with year
|
||||
*/15 * * * * * 0ms // with year and milliseconds
|
||||
</code></pre>
|
||||
<div class="language-text highlight"><pre><span></span><code><span id="__span-1-1"><a id="__codelineno-1-1" name="__codelineno-1-1" href="#__codelineno-1-1"></a>*/15 * * * *
|
||||
</span><span id="__span-1-2"><a id="__codelineno-1-2" name="__codelineno-1-2" href="#__codelineno-1-2"></a>*/15 * * * * * // with year
|
||||
</span><span id="__span-1-3"><a id="__codelineno-1-3" name="__codelineno-1-3" href="#__codelineno-1-3"></a>*/15 * * * * * 0ms // with year and milliseconds
|
||||
</span></code></pre></div>
|
||||
<h3 id="supported-syntax">Supported syntax<a class="headerlink" href="#supported-syntax" title="Permanent link">¶</a></h3>
|
||||
<p>Currently the library support next syntax for date/time elements:</p>
|
||||
<ul>
|
||||
@@ -1432,31 +1432,31 @@
|
||||
</ul>
|
||||
<h4 id="ranges">Ranges<a class="headerlink" href="#ranges" title="Permanent link">¶</a></h4>
|
||||
<p>Ranges are working like common <code>rangeTo</code> (or <code>..</code>) in kotlin:</p>
|
||||
<pre><code>0-5 * * * *
|
||||
</code></pre>
|
||||
<div class="language-text highlight"><pre><span></span><code><span id="__span-2-1"><a id="__codelineno-2-1" name="__codelineno-2-1" href="#__codelineno-2-1"></a>0-5 * * * *
|
||||
</span></code></pre></div>
|
||||
<p>In the example above scheduler will trigger every second from the beginning of the minute up to fifth second of minute.</p>
|
||||
<h4 id="startstep">Start/Step<a class="headerlink" href="#startstep" title="Permanent link">¶</a></h4>
|
||||
<p>Start/step is a little bit more complicated syntax. It means <code>start from the first element, repeat triggering every second element</code>. Examples:</p>
|
||||
<pre><code>5/15 * * * *
|
||||
</code></pre>
|
||||
<div class="language-text highlight"><pre><span></span><code><span id="__span-3-1"><a id="__codelineno-3-1" name="__codelineno-3-1" href="#__codelineno-3-1"></a>5/15 * * * *
|
||||
</span></code></pre></div>
|
||||
<p>Means that each minute starting from fifth second it will repeat triggering every fifteenth second: <code>5, 20, 35, 50</code>.</p>
|
||||
<h4 id="every">Every<a class="headerlink" href="#every" title="Permanent link">¶</a></h4>
|
||||
<p>Every is more simple syntax and could be explained as a shortcut for <code>0/{int}</code>. Example:</p>
|
||||
<pre><code>*/15 * * * *
|
||||
</code></pre>
|
||||
<div class="language-text highlight"><pre><span></span><code><span id="__span-4-1"><a id="__codelineno-4-1" name="__codelineno-4-1" href="#__codelineno-4-1"></a>*/15 * * * *
|
||||
</span></code></pre></div>
|
||||
<p>Means that each minute it will repeat triggering every fifteenth second: <code>0, 15, 30, 45</code>.</p>
|
||||
<h4 id="just-at-the-time">Just at the time<a class="headerlink" href="#just-at-the-time" title="Permanent link">¶</a></h4>
|
||||
<p>The most simple syntax. It means, that scheduler will call triggering every time when element was reached:</p>
|
||||
<pre><code>15 * * * *
|
||||
</code></pre>
|
||||
<div class="language-text highlight"><pre><span></span><code><span id="__span-5-1"><a id="__codelineno-5-1" name="__codelineno-5-1" href="#__codelineno-5-1"></a>15 * * * *
|
||||
</span></code></pre></div>
|
||||
<p>Means that each minute scheduler will call triggering at the fifteenth second.</p>
|
||||
<h4 id="listing">Listing<a class="headerlink" href="#listing" title="Permanent link">¶</a></h4>
|
||||
<p>All the previous elements can be combined with listing. Lets just see several examples:</p>
|
||||
<pre><code>0,10 * * * *
|
||||
</code></pre>
|
||||
<div class="language-text highlight"><pre><span></span><code><span id="__span-6-1"><a id="__codelineno-6-1" name="__codelineno-6-1" href="#__codelineno-6-1"></a>0,10 * * * *
|
||||
</span></code></pre></div>
|
||||
<p>Will trigger every minute at the <code>0</code> and <code>10</code> seconds (see <a href="#just-at-the-time">Just at the time</a>)</p>
|
||||
<pre><code>0-5,10 * * * *
|
||||
</code></pre>
|
||||
<div class="language-text highlight"><pre><span></span><code><span id="__span-7-1"><a id="__codelineno-7-1" name="__codelineno-7-1" href="#__codelineno-7-1"></a>0-5,10 * * * *
|
||||
</span></code></pre></div>
|
||||
<p>Will trigger every minute from <code>0</code> to <code>5</code> seconds and at the <code>10</code> seconds (see <a href="#ranges">Ranges</a>)</p>
|
||||
<h3 id="examples">Examples<a class="headerlink" href="#examples" title="Permanent link">¶</a></h3>
|
||||
<ul>
|
||||
|
@@ -1249,8 +1249,8 @@
|
||||
<p>First of all, this library will be useful for long uptime applications which have some tasks to do from time to time.</p>
|
||||
<h4 id="how-to-use-crontab-like-syntax">How to use crontab-like syntax?<a class="headerlink" href="#how-to-use-crontab-like-syntax" title="Permanent link">¶</a></h4>
|
||||
<p>In two words, you should call <code>buildSchedule</code> or <code>createSimpleScheduler</code>:</p>
|
||||
<pre><code class="language-kotlin">buildSchedule("5 * * * *").asFlow().collect { /* do something */ }
|
||||
</code></pre>
|
||||
<div class="language-kotlin highlight"><pre><span></span><code><span id="__span-0-1"><a id="__codelineno-0-1" name="__codelineno-0-1" href="#__codelineno-0-1"></a><span class="n">buildSchedule</span><span class="p">(</span><span class="s">"5 * * * *"</span><span class="p">).</span><span class="na">asFlow</span><span class="p">().</span><span class="na">collect</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="cm">/* do something */</span><span class="w"> </span><span class="p">}</span>
|
||||
</span></code></pre></div>
|
||||
<p>You can read more about syntax in <a href="../describing/string-format.html">String format</a> section.</p>
|
||||
|
||||
|
||||
|
@@ -1294,15 +1294,15 @@
|
||||
You always able to create your own scheduler. In this section will be presented different ways and examples around standard <code>CronDateTimeScheduler</code> builders <code>buildSchedule</code>. You can read about schedulers in <a href="../describing/krontabscheduler.html">KrontabScheduler</a></p>
|
||||
</div>
|
||||
<p>Currently, <code>buildSchedule</code> is the recommended start point for every scheduler. Usually, it is look like:</p>
|
||||
<pre><code class="language-kotlin">val scheduler = buildSchedule("5 * * * *")
|
||||
</code></pre>
|
||||
<div class="language-kotlin highlight"><pre><span></span><code><span id="__span-0-1"><a id="__codelineno-0-1" name="__codelineno-0-1" href="#__codelineno-0-1"></a><span class="kd">val</span><span class="w"> </span><span class="nv">scheduler</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">buildSchedule</span><span class="p">(</span><span class="s">"5 * * * *"</span><span class="p">)</span>
|
||||
</span></code></pre></div>
|
||||
<p>Or:</p>
|
||||
<pre><code class="language-kotlin">val scheduler = buildSchedule {
|
||||
seconds {
|
||||
at(5)
|
||||
}
|
||||
}
|
||||
</code></pre>
|
||||
<div class="language-kotlin highlight"><pre><span></span><code><span id="__span-1-1"><a id="__codelineno-1-1" name="__codelineno-1-1" href="#__codelineno-1-1"></a><span class="kd">val</span><span class="w"> </span><span class="nv">scheduler</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">buildSchedule</span><span class="w"> </span><span class="p">{</span>
|
||||
</span><span id="__span-1-2"><a id="__codelineno-1-2" name="__codelineno-1-2" href="#__codelineno-1-2"></a><span class="w"> </span><span class="n">seconds</span><span class="w"> </span><span class="p">{</span>
|
||||
</span><span id="__span-1-3"><a id="__codelineno-1-3" name="__codelineno-1-3" href="#__codelineno-1-3"></a><span class="w"> </span><span class="n">at</span><span class="p">(</span><span class="m">5</span><span class="p">)</span>
|
||||
</span><span id="__span-1-4"><a id="__codelineno-1-4" name="__codelineno-1-4" href="#__codelineno-1-4"></a><span class="w"> </span><span class="p">}</span>
|
||||
</span><span id="__span-1-5"><a id="__codelineno-1-5" name="__codelineno-1-5" href="#__codelineno-1-5"></a><span class="p">}</span>
|
||||
</span></code></pre></div>
|
||||
<p>On the top of any <code>KronScheduler</code> currently there are several groups of extensions:</p>
|
||||
<ul>
|
||||
<li>Executes</li>
|
||||
|
@@ -1300,20 +1300,20 @@
|
||||
<h3 id="notice-about-repository">Notice about repository<a class="headerlink" href="#notice-about-repository" title="Permanent link">¶</a></h3>
|
||||
<p>To use this library, you will need to include <code>MavenCentral</code> repository in you project</p>
|
||||
<h6 id="buildgradle">build.gradle<a class="headerlink" href="#buildgradle" title="Permanent link">¶</a></h6>
|
||||
<pre><code class="language-groovy">mavenCentral()
|
||||
</code></pre>
|
||||
<div class="language-groovy highlight"><pre><span></span><code><span id="__span-0-1"><a id="__codelineno-0-1" name="__codelineno-0-1" href="#__codelineno-0-1"></a><span class="n">mavenCentral</span><span class="o">()</span>
|
||||
</span></code></pre></div>
|
||||
<h3 id="dependencies">Dependencies<a class="headerlink" href="#dependencies" title="Permanent link">¶</a></h3>
|
||||
<p>Next snippets must be placed into your <code>dependencies</code> part of <code>build.gradle</code> (for gradle) or <code>pom.xml</code> (for maven).</p>
|
||||
<h4 id="gradle">Gradle<a class="headerlink" href="#gradle" title="Permanent link">¶</a></h4>
|
||||
<pre><code class="language-groovy">implementation "dev.inmo:krontab:$krontab_version"
|
||||
</code></pre>
|
||||
<div class="language-groovy highlight"><pre><span></span><code><span id="__span-1-1"><a id="__codelineno-1-1" name="__codelineno-1-1" href="#__codelineno-1-1"></a><span class="n">implementation</span><span class="w"> </span><span class="s2">"dev.inmo:krontab:$krontab_version"</span>
|
||||
</span></code></pre></div>
|
||||
<h4 id="maven">Maven<a class="headerlink" href="#maven" title="Permanent link">¶</a></h4>
|
||||
<pre><code class="language-xml"><dependency>
|
||||
<groupId>dev.inmo</groupId>
|
||||
<artifactId>krontab</artifactId>
|
||||
<version>${krontab_version}</version>
|
||||
</dependency>
|
||||
</code></pre>
|
||||
<div class="language-xml highlight"><pre><span></span><code><span id="__span-2-1"><a id="__codelineno-2-1" name="__codelineno-2-1" href="#__codelineno-2-1"></a><span class="nt"><dependency></span>
|
||||
</span><span id="__span-2-2"><a id="__codelineno-2-2" name="__codelineno-2-2" href="#__codelineno-2-2"></a><span class="w"> </span><span class="nt"><groupId></span>dev.inmo<span class="nt"></groupId></span>
|
||||
</span><span id="__span-2-3"><a id="__codelineno-2-3" name="__codelineno-2-3" href="#__codelineno-2-3"></a><span class="w"> </span><span class="nt"><artifactId></span>krontab<span class="nt"></artifactId></span>
|
||||
</span><span id="__span-2-4"><a id="__codelineno-2-4" name="__codelineno-2-4" href="#__codelineno-2-4"></a><span class="w"> </span><span class="nt"><version></span>${krontab_version}<span class="nt"></version></span>
|
||||
</span><span id="__span-2-5"><a id="__codelineno-2-5" name="__codelineno-2-5" href="#__codelineno-2-5"></a><span class="nt"></dependency></span>
|
||||
</span></code></pre></div>
|
||||
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user