New toggle implementation
I made a new implementation of the XML/Java toggle (and added a third choice for having both available). Changes to make a dynamic ToC work with content selection toggles Various asciidoc and JavaScript changes to make the dynamic ToC (tocbot) work with the content toggle (XML or Java in this case but also more options in other projects).
This commit is contained in:
committed by
Michael Minella
parent
54f3a5c837
commit
0d9f4ce6f1
@@ -629,6 +629,7 @@ asciidoctor {
|
||||
from(sourceDir) {
|
||||
include 'images/**'
|
||||
include 'jsfiles/**'
|
||||
include 'tocbot-3.0.2/**'
|
||||
}
|
||||
}
|
||||
logDocuments = true
|
||||
@@ -637,7 +638,7 @@ asciidoctor {
|
||||
attributes 'icons': 'font',
|
||||
'idprefix': '',
|
||||
'idseparator': '-',
|
||||
docinfo: '',
|
||||
docinfo: 'shared',
|
||||
revnumber: project.version,
|
||||
sectanchors: '',
|
||||
sectnums: '',
|
||||
|
||||
@@ -6,7 +6,10 @@
|
||||
|
||||
== Common Batch Patterns
|
||||
|
||||
ifndef::onlyonetoggle[]
|
||||
include::toggle.adoc[]
|
||||
endif::onlyonetoggle[]
|
||||
|
||||
|
||||
Some batch jobs can be assembled purely from off-the-shelf components in Spring Batch.
|
||||
For instance, the `ItemReader` and `ItemWriter` implementations can be configured to
|
||||
|
||||
39
spring-batch-docs/asciidoc/docinfo-footer.html
Normal file
39
spring-batch-docs/asciidoc/docinfo-footer.html
Normal file
@@ -0,0 +1,39 @@
|
||||
<script type="text/javascript" src="tocbot-3.0.2/tocbot.js"></script>
|
||||
<script type="text/javascript" >
|
||||
|
||||
// Tocbot dynamic TOC, works with tocbot 3.0.2
|
||||
// Source: https://github.com/asciidoctor/asciidoctor/issues/699#issuecomment-321066006
|
||||
|
||||
var oldtoc = document.getElementById('toctitle').nextElementSibling;
|
||||
var newtoc = document.createElement('div');
|
||||
newtoc.setAttribute('id', 'tocbot');
|
||||
newtoc.setAttribute('class', 'js-toc');
|
||||
oldtoc.parentNode.replaceChild(newtoc, oldtoc);
|
||||
tocbot.init({ contentSelector: '#content',
|
||||
headingSelector: 'h1, h2, h3, h4, h5',
|
||||
smoothScroll: false });
|
||||
var handleTocRefresh = function() {
|
||||
tocbot.refresh();
|
||||
}
|
||||
var handleTocOnResize = function() {
|
||||
var width = window.innerWidth
|
||||
|| document.documentElement.clientWidth
|
||||
|| document.body.clientWidth;
|
||||
if (width < 768) {
|
||||
tocbot.refresh({ contentSelector: '#content',
|
||||
headingSelector: 'h1, h2, h3, h4, h5',
|
||||
collapseDepth: 6,
|
||||
activeLinkClass: 'ignoreactive',
|
||||
throttleTimeout: 1000,
|
||||
smoothScroll: false });
|
||||
}
|
||||
else {
|
||||
tocbot.refresh({ contentSelector: '#content',
|
||||
headingSelector: 'h1, h2, h3, h4, h5',
|
||||
smoothScroll: false });
|
||||
}
|
||||
};
|
||||
window.addEventListener('resize', handleTocOnResize);
|
||||
window.addEventListener('tocRefresh', handleTocRefresh);
|
||||
handleTocOnResize();
|
||||
</script>
|
||||
15
spring-batch-docs/asciidoc/docinfo.html
Normal file
15
spring-batch-docs/asciidoc/docinfo.html
Normal file
@@ -0,0 +1,15 @@
|
||||
<style>
|
||||
#tocbot a.toc-link.node-name--H1{ font-style: italic }
|
||||
@media screen{
|
||||
#tocbot > ul.toc-list{ margin-bottom: 0.5em; margin-left: 0.125em }
|
||||
#tocbot ul.sectlevel0, #tocbot a.toc-link.node-name--H1 + ul{
|
||||
padding-left: 0 }
|
||||
#tocbot a.toc-link{ height:100% }
|
||||
.is-collapsible{ max-height:3000px; overflow:hidden; }
|
||||
.is-collapsed{ max-height:0 }
|
||||
.is-active-link{ font-weight:700 }
|
||||
}
|
||||
@media print{
|
||||
#tocbot a.toc-link.node-name--H4{ display:none }
|
||||
}
|
||||
</style>
|
||||
@@ -6,7 +6,9 @@
|
||||
|
||||
== The Domain Language of Batch
|
||||
|
||||
ifndef::onlyonetoggle[]
|
||||
include::toggle.adoc[]
|
||||
endif::onlyonetoggle[]
|
||||
|
||||
To any experienced batch architect, the overall concepts of batch processing used in
|
||||
Spring Batch should be familiar and comfortable. There are "Jobs" and "Steps" and
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
:doctype: book
|
||||
:toc: left
|
||||
:toclevels: 4
|
||||
:onlyonetoggle: true
|
||||
|
||||
include::header/index-header.adoc[]
|
||||
|
||||
@@ -36,4 +37,4 @@ include::schema-appendix.adoc[]
|
||||
|
||||
include::transaction-appendix.adoc[]
|
||||
|
||||
include::glossary.adoc[]
|
||||
include::glossary.adoc[]
|
||||
|
||||
@@ -6,7 +6,9 @@
|
||||
|
||||
== Configuring and Running a Job
|
||||
|
||||
ifndef::onlyonetoggle[]
|
||||
include::toggle.adoc[]
|
||||
endif::onlyonetoggle[]
|
||||
|
||||
In the <<domain.adoc#domainLanguageOfBatch,domain section>> , the overall
|
||||
architecture design was discussed, using the following diagram as a
|
||||
@@ -425,7 +427,7 @@ The `@EnableBatchProcessing` works similarly to the other
|
||||
building batch jobs. Within this base configuration, an instance of
|
||||
`StepScope` is created in addition to a number of beans made
|
||||
available to be autowired:
|
||||
|
||||
|
||||
|
||||
|
||||
* `JobRepository` - bean name "jobRepository"
|
||||
@@ -449,7 +451,7 @@ The core interface for this configuration is the `BatchConfigurer`.
|
||||
The default implementation provides the beans mentioned above and requires a
|
||||
`DataSource` as a bean within the context to be provided. This data
|
||||
source will be used by the JobRepository.
|
||||
|
||||
|
||||
|
||||
|
||||
[NOTE]
|
||||
@@ -1761,4 +1763,3 @@ If the process died (`"kill -9"` or server
|
||||
status to `FAILED` if it is not restartable, or if
|
||||
you know the restart data is valid. There is a utility in Spring Batch
|
||||
Admin `JobService` to abort a job execution.
|
||||
|
||||
|
||||
61
spring-batch-docs/asciidoc/jsfiles/DocumentToggle.js
Normal file
61
spring-batch-docs/asciidoc/jsfiles/DocumentToggle.js
Normal file
@@ -0,0 +1,61 @@
|
||||
$(document).ready(function(){
|
||||
|
||||
setJava();
|
||||
|
||||
// Initial cookie handler. This part remembers the reader's choice and sets the toggle
|
||||
// accordingly.
|
||||
var docToggleCookieString = Cookies.get("docToggle");
|
||||
if (docToggleCookieString != null) {
|
||||
if (docToggleCookieString === "xml") {
|
||||
$("#xmlButton").prop("checked", true);
|
||||
setXml();
|
||||
} else if (docToggleCookieString === "java") {
|
||||
$("#javaButton").prop("checked", true);
|
||||
setJava();
|
||||
} else if (docToggleCookieString === "both") {
|
||||
$("#bothButton").prop("checked", true);
|
||||
setBoth();
|
||||
}
|
||||
}
|
||||
|
||||
// Click handlers
|
||||
$("#xmlButton").on("click", function() {
|
||||
setXml();
|
||||
});
|
||||
$("#javaButton").on("click", function() {
|
||||
setJava();
|
||||
});
|
||||
$("#bothButton").on("click", function() {
|
||||
setBoth();
|
||||
});
|
||||
|
||||
// Functions to do the work of handling the reader's choice, whether through a click
|
||||
// or through a cookie. 3652 days is 10 years, give or take a leap day.
|
||||
function setXml() {
|
||||
$("*.xmlContent").show();
|
||||
$("*.javaContent").hide();
|
||||
$("*.javaContent > *").addClass("js-toc-ignore");
|
||||
$("*.xmlContent > *").removeClass("js-toc-ignore");
|
||||
window.dispatchEvent(new Event("tocRefresh"));
|
||||
Cookies.set('docToggle', 'xml', { expires: 3652 });
|
||||
};
|
||||
|
||||
function setJava() {
|
||||
$("*.javaContent").show();
|
||||
$("*.xmlContent").hide();
|
||||
$("*.xmlContent > *").addClass("js-toc-ignore");
|
||||
$("*.javaContent > *").removeClass("js-toc-ignore");
|
||||
window.dispatchEvent(new Event("tocRefresh"));
|
||||
Cookies.set('docToggle', 'java', { expires: 3652 });
|
||||
};
|
||||
|
||||
function setBoth() {
|
||||
$("*.javaContent").show();
|
||||
$("*.xmlContent").show();
|
||||
$("*.javaContent > *").removeClass("js-toc-ignore");
|
||||
$("*.xmlContent > *").removeClass("js-toc-ignore");
|
||||
window.dispatchEvent(new Event("tocRefresh"));
|
||||
Cookies.set('docToggle', 'both', { expires: 3652 });
|
||||
};
|
||||
|
||||
});
|
||||
4
spring-batch-docs/asciidoc/jsfiles/jquery-3.2.1.min.js
vendored
Normal file
4
spring-batch-docs/asciidoc/jsfiles/jquery-3.2.1.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
@@ -6,7 +6,9 @@
|
||||
|
||||
== JSR-352 Support
|
||||
|
||||
ifndef::onlyonetoggle[]
|
||||
include::toggle.adoc[]
|
||||
endif::onlyonetoggle[]
|
||||
|
||||
As of Spring Batch 3.0 support for JSR-352 has been fully implemented. This section is not a replacement for
|
||||
the spec itself and instead, intends to explain how the JSR-352 specific concepts apply to Spring Batch.
|
||||
@@ -66,7 +68,7 @@ The base context is not processed by the JSR-352 processors for things like prop
|
||||
|
||||
JSR-352 requires a very simple path to executing a batch job. The following code is all that is needed to
|
||||
execute your first batch job:
|
||||
|
||||
|
||||
|
||||
|
||||
[source, java]
|
||||
@@ -78,7 +80,7 @@ jobOperator.start("myJob", new Properties());
|
||||
While that is convenient for developers, the devil is in the details. Spring Batch bootstraps a bit of
|
||||
infrastructure behind the scenes that a developer may want to override. The following is bootstrapped the
|
||||
first time `BatchRuntime.getJobOperator()` is called:
|
||||
|
||||
|
||||
|===============
|
||||
|__Bean Name__|__Default Configuration__|__Notes__
|
||||
|
|
||||
@@ -87,10 +89,10 @@ While that is convenient for developers, the devil is in the details. Spring Ba
|
||||
Apache DBCP BasicDataSource with configured values.
|
||||
|
|
||||
By default, HSQLDB is bootstrapped.
|
||||
|
||||
|
||||
|`transactionManager`|`org.springframework.jdbc.datasource.DataSourceTransactionManager`|
|
||||
References the dataSource bean defined above.
|
||||
|
||||
|
||||
|
|
||||
A Datasource initializer
|
||||
||
|
||||
@@ -98,7 +100,7 @@ While that is convenient for developers, the devil is in the details. Spring Ba
|
||||
`batch.drop.script` and `batch.schema.script` properties. By
|
||||
default, the schema scripts for HSQLDB are executed. This behavior can be disabled via
|
||||
`batch.data.source.init` property.
|
||||
|
||||
|
||||
|
|
||||
jobRepository
|
||||
|
|
||||
@@ -107,32 +109,32 @@ While that is convenient for developers, the devil is in the details. Spring Ba
|
||||
This `JobRepository` uses the previously mentioned data source and transaction
|
||||
manager. The schema's table prefix is configurable (defaults to BATCH_) via the
|
||||
`batch.table.prefix` property.
|
||||
|
||||
|
||||
|
|
||||
jobLauncher
|
||||
|`org.springframework.batch.core.launch.support.SimpleJobLauncher`|
|
||||
Used to launch jobs.
|
||||
|
||||
|
||||
|
|
||||
batchJobOperator
|
||||
|`org.springframework.batch.core.launch.support.SimpleJobOperator`|
|
||||
The `JsrJobOperator` wraps this to provide most of it's functionality.
|
||||
|
||||
|
||||
|
|
||||
jobExplorer
|
||||
|`org.springframework.batch.core.explore.support.JobExplorerFactoryBean`|
|
||||
Used to address lookup functionality provided by the `JsrJobOperator`.
|
||||
|
||||
|
||||
|
|
||||
jobParametersConverter
|
||||
|`org.springframework.batch.core.jsr.JsrJobParametersConverter`|
|
||||
JSR-352 specific implementation of the `JobParametersConverter`.
|
||||
|
||||
|
||||
|
|
||||
jobRegistry
|
||||
|`org.springframework.batch.core.configuration.support.MapJobRegistry`|
|
||||
Used by the `SimpleJobOperator`.
|
||||
|
||||
|
||||
|
|
||||
placeholderProperties
|
||||
|`org.springframework.beans.factory.config.PropertyPlaceholderConfigure`|
|
||||
@@ -140,13 +142,13 @@ While that is convenient for developers, the devil is in the details. Spring Ba
|
||||
the properties mentioned above. ENVIRONMENT is a System property (defaults to hsql)
|
||||
that can be used to specify any of the supported databases Spring Batch currently
|
||||
supports.
|
||||
|
||||
|
||||
|
||||
|===============
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
[NOTE]
|
||||
@@ -249,7 +251,7 @@ To use the thread context class loader approach, all you need to do is provide t
|
||||
<batchlet ref="io.spring.FooBatchlet" />
|
||||
</step>
|
||||
</job>
|
||||
|
||||
|
||||
----
|
||||
|
||||
[[jsrJobProperties]]
|
||||
@@ -335,7 +337,7 @@ this example, the result will resolve to a value of the system property file.sep
|
||||
#{jobParameters['unresolving.prop']} is assumed to not be resolvable. If neither expressions can be
|
||||
resolved, an empty String will be returned. Multiple conditions can be used, which are separated by a
|
||||
';'.
|
||||
|
||||
|
||||
|
||||
[[jsrProcessingModels]]
|
||||
|
||||
@@ -345,7 +347,7 @@ resolved, an empty String will be returned. Multiple conditions can be used, whi
|
||||
JSR-352 provides the same two basic processing models that Spring Batch does:
|
||||
|
||||
|
||||
|
||||
|
||||
* Item based processing - Using an `javax.batch.api.chunk.ItemReader`, an
|
||||
optional `javax.batch.api.chunk.ItemProcessor`, and an
|
||||
`javax.batch.api.chunk.ItemWriter`.
|
||||
@@ -357,7 +359,7 @@ JSR-352 provides the same two basic processing models that Spring Batch does:
|
||||
currently available.
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -367,7 +369,7 @@ Item based processing in this context is a chunk size being set by the number of
|
||||
`ItemReader`. To configure a step this way, specify the
|
||||
`item-count` (which defaults to 10) and optionally configure the
|
||||
`checkpoint-policy` as item (this is the default).
|
||||
|
||||
|
||||
|
||||
|
||||
[source, xml]
|
||||
@@ -388,7 +390,7 @@ If item based checkpointing is chosen, an additional attribute `time-limit` is
|
||||
supported. This sets a time limit for how long the number of items specified has to be processed. If
|
||||
the timeout is reached, the chunk will complete with however many items have been read by then
|
||||
regardless of what the `item-count` is configured to be.
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -402,7 +404,7 @@ JSR-352 calls the process around the commit interval within a step "checkpointin
|
||||
implementation of `CheckpointAlgorithm`, configure your step with the custom
|
||||
`checkpoint-policy` as shown below where fooCheckpointer refers to an
|
||||
implementation of `CheckpointAlgorithm`.
|
||||
|
||||
|
||||
|
||||
|
||||
[source, xml]
|
||||
@@ -436,18 +438,18 @@ The entrance to executing a JSR-352 based job is through the
|
||||
|
||||
JobOperator jobOperator = BatchRuntime.getJobOperator();
|
||||
long jobExecutionId = jobOperator.start("fooJob", new Properties());
|
||||
|
||||
|
||||
----
|
||||
|
||||
The above code does the following:
|
||||
|
||||
|
||||
|
||||
|
||||
* Bootstraps a base `ApplicationContext` - In order to provide batch functionality, the framework
|
||||
needs some infrastructure bootstrapped. This occurs once per JVM. The components that are
|
||||
bootstrapped are similar to those provided by `@EnableBatchProcessing`.
|
||||
Specific details can be found in the javadoc for the `JsrJobOperator`.
|
||||
|
||||
|
||||
|
||||
|
||||
* Loads an `ApplicationContext` for the job requested - In the example
|
||||
@@ -459,7 +461,7 @@ The above code does the following:
|
||||
`JobExecution's` id will be returned.
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
[NOTE]
|
||||
@@ -474,7 +476,7 @@ When `JobOperator#start` is called using `SimpleJobOperator`,
|
||||
framework will always create a new JobInstance (JSR-352 job parameters are
|
||||
non-identifying). In order to restart a job, a call to
|
||||
`JobOperator#restart(long executionId, Properties restartParameters)` is required.
|
||||
|
||||
|
||||
|
||||
[[jsrContexts]]
|
||||
|
||||
@@ -496,7 +498,7 @@ To obtain a reference to the `JobContext` or `StepContext`
|
||||
----
|
||||
@Inject
|
||||
JobContext jobContext;
|
||||
|
||||
|
||||
----
|
||||
|
||||
|
||||
@@ -522,7 +524,7 @@ Within a JSR-352 based job, the flow of steps works similarly as it does within
|
||||
However, there are a few subtle differences:
|
||||
|
||||
|
||||
|
||||
|
||||
* Decision's are steps - In a regular Spring Batch job, a decision is a state that does not
|
||||
have an independent `StepExecution` or any of the rights and
|
||||
responsibilities that go along with being a full step.. However, with JSR-352, a decision
|
||||
@@ -541,7 +543,7 @@ Within a JSR-352 based job, the flow of steps works similarly as it does within
|
||||
evaluate transition elements in the order they are specified in the XML.
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
[[jsrScaling]]
|
||||
|
||||
@@ -550,7 +552,7 @@ Within a JSR-352 based job, the flow of steps works similarly as it does within
|
||||
|
||||
Traditional Spring Batch jobs have four ways of scaling (the last two capable of being executed across
|
||||
multiple JVMs):
|
||||
|
||||
|
||||
* Split - Running multiple steps in parallel.
|
||||
|
||||
|
||||
@@ -563,18 +565,18 @@ Traditional Spring Batch jobs have four ways of scaling (the last two capable of
|
||||
* Remote Chunking - Executing the processor piece of logic remotely.
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
JSR-352 provides two options for scaling batch jobs. Both options support only a single JVM:
|
||||
|
||||
|
||||
* Split - Same as Spring Batch
|
||||
|
||||
|
||||
* Partitioning - Conceptually the same as Spring Batch however implemented slightly different.
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
[[jsrPartitioning]]
|
||||
|
||||
@@ -584,7 +586,7 @@ JSR-352 provides two options for scaling batch jobs. Both options support only
|
||||
Conceptually, partitioning in JSR-352 is the same as it is in Spring Batch. Meta-data is provided
|
||||
to each slave to identify the input to be processed with the slaves reporting back to the master the
|
||||
results upon completion. However, there are some important differences:
|
||||
|
||||
|
||||
* Partitioned `Batchlet` - This will run multiple instances of the
|
||||
configured `Batchlet` on multiple threads. Each instance will have
|
||||
it's own set of properties as provided by the JSL or the
|
||||
@@ -595,7 +597,7 @@ Conceptually, partitioning in JSR-352 is the same as it is in Spring Batch. Met
|
||||
`ExecutionContext` is provided for each partition. With JSR-352, a
|
||||
single `javax.batch.api.partition.PartitionPlan` is provided with an
|
||||
array of `Properties` providing the meta-data for each partition.
|
||||
|
||||
|
||||
|
||||
|
||||
* `PartitionMapper` - JSR-352 provides two ways to generate partition
|
||||
@@ -625,7 +627,7 @@ via the `JobExplorer` and Spring Batch Admin.
|
||||
handle compensating logic if something goes wrong. However, since the slaves JSR-352
|
||||
provides a collection of other components for the ability to provide compensating logic when
|
||||
errors occur and to dynamically set the exit status. These components include the following:
|
||||
|
||||
|
||||
|===============
|
||||
|__Artifact Interface__|__Description__
|
||||
|`javax.batch.api.partition.PartitionCollector`|Provides a way for slave steps to send information back to the
|
||||
@@ -648,4 +650,3 @@ Since all JSR-352 based jobs are executed asynchronously, it can be difficult to
|
||||
`org.springframework.batch.core.jsr.JsrTestUtils`. This utility class provides the
|
||||
ability to start a job and restart a job and wait for it to complete. Once the job completes, the
|
||||
associated `JobExecution` is returned.
|
||||
|
||||
|
||||
@@ -5,7 +5,9 @@
|
||||
[[readersAndWriters]]
|
||||
== ItemReaders and ItemWriters
|
||||
|
||||
ifndef::onlyonetoggle[]
|
||||
include::toggle.adoc[]
|
||||
endif::onlyonetoggle[]
|
||||
|
||||
All batch processing can be described in its most simple form as reading in large amounts
|
||||
of data, performing some type of calculation or transformation, and writing the result
|
||||
|
||||
@@ -6,7 +6,9 @@
|
||||
|
||||
== Repeat
|
||||
|
||||
ifndef::onlyonetoggle[]
|
||||
include::toggle.adoc[]
|
||||
endif::onlyonetoggle[]
|
||||
|
||||
[[repeatTemplate]]
|
||||
|
||||
|
||||
@@ -6,7 +6,9 @@
|
||||
|
||||
== Retry
|
||||
|
||||
ifndef::onlyonetoggle[]
|
||||
include::toggle.adoc[]
|
||||
endif::onlyonetoggle[]
|
||||
|
||||
To make processing more robust and less prone to failure, it sometimes
|
||||
helps to automatically retry a failed operation in case it might
|
||||
|
||||
@@ -6,7 +6,9 @@
|
||||
|
||||
== Scaling and Parallel Processing
|
||||
|
||||
ifndef::onlyonetoggle[]
|
||||
include::toggle.adoc[]
|
||||
endif::onlyonetoggle[]
|
||||
|
||||
Many batch processing problems can be solved with single threaded, single process jobs,
|
||||
so it is always a good idea to properly check if that meets your needs before thinking
|
||||
|
||||
@@ -6,7 +6,9 @@
|
||||
|
||||
== Spring Batch Integration
|
||||
|
||||
ifndef::onlyonetoggle[]
|
||||
include::toggle.adoc[]
|
||||
endif::onlyonetoggle[]
|
||||
|
||||
[[spring-batch-integration-introduction]]
|
||||
|
||||
|
||||
@@ -5,7 +5,9 @@
|
||||
[[configureStep]]
|
||||
== Configuring a `Step`
|
||||
|
||||
ifndef::onlyonetoggle[]
|
||||
include::toggle.adoc[]
|
||||
endif::onlyonetoggle[]
|
||||
|
||||
As discussed in <<domain.adoc#domainLanguageOfBatch,the domain chapter>>, a `Step` is a
|
||||
domain object that encapsulates an independent, sequential phase of a batch job and
|
||||
|
||||
@@ -691,3 +691,111 @@ b.conum * { color: inherit !important; }
|
||||
.admonitionblock > table td.content { border-left: none; }
|
||||
|
||||
.js-download-widget-selector{display:inline;}.navbar{margin-bottom:0;}.item-slider-widget{display:inline-block;margin-left:15px;}.item-slider-widget .item--slider{height:32px;position:absolute;width:40px;border-radius:2px;margin-top:-4px;z-index:800;background:#68605a;background:-moz-linear-gradient(top,#68605a 0%,#34302d 100%,#020202 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#68605a),color-stop(100%,#34302d),color-stop(100%,#020202));background:-webkit-linear-gradient(top,#68605a 0%,#34302d 100%,#020202 100%);background:-o-linear-gradient(top,#68605a 0%,#34302d 100%,#020202 100%);background:-ms-linear-gradient(top,#68605a 0%,#34302d 100%,#020202 100%);background:linear-gradient(to bottom,#68605a 0%,#34302d 100%,#020202 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#68605a',endColorstr='#020202',GradientType=0);cursor:pointer;transition:all 0.25s;-webkit-transition:all 0.25s;-moz-webkit-transition:all 0.25s;-ms--webkit-transition:all 0.25s;-o-webkit-transition:all 0.25s;}.item-slider-widget .item-slider--container{background-color:white;border:1px solid #999;padding:0 3px;}.item-slider-widget .item-slider--container .item{display:inline-block;color:#c3c3c3;font-family:"Montserrat",sans-serif;font-size:12px;line-height:12px;text-transform:uppercase;padding:7px 6px 5px;cursor:pointer;transition:color 0.25s;-webkit-transition:color 0.25s;-moz-webkit-transition:color 0.25s;-ms--webkit-transition:color 0.25s;-o-webkit-transition:color 0.25s;}.item-slider-widget .item-slider--container .item:hover{color:black;}.item-slider-widget .item-slider--container .item.js-active{z-index:801;position:relative;color:#f1f1f1;}
|
||||
|
||||
/* Styling for the toggle buttons */
|
||||
/* Borrowed from http://jeremyworboys.com/writing/toggle-buttons-without-javascript */
|
||||
/* Micro clearfix (http://nicolasgallagher.com/micro-clearfix-hack/) */
|
||||
.cf:before,.cf:after{content:"";display:table}.cf:after{clear:both}.cf{zoom:1}
|
||||
|
||||
/* = Function = */
|
||||
|
||||
.docToggle-button input {
|
||||
display: none;
|
||||
}
|
||||
.docToggle-button label {
|
||||
background: #ccc;
|
||||
border: 1px solid #888;
|
||||
color: #666;
|
||||
padding: 5px 10px;
|
||||
}
|
||||
.docToggle-button label:hover {
|
||||
background-color: #ddd;
|
||||
}
|
||||
.docToggle-button label:active,
|
||||
.docToggle-button input:focus + label {
|
||||
background-color: #aaa;
|
||||
}
|
||||
.docToggle-button input:checked + label {
|
||||
background-color: #b4b4b4;
|
||||
}
|
||||
|
||||
.docToggle-button label {
|
||||
background-color: #f5f5f5;
|
||||
background-image: -webkit-linear-gradient(top, #ffffff, #e6e6e6);
|
||||
background-image: -moz-linear-gradient(top, #ffffff, #e6e6e6);
|
||||
background-image: -o-linear-gradient(top, #ffffff, #e6e6e6);
|
||||
background-image: -ms-linear-gradient(top, #ffffff, #e6e6e6);
|
||||
background-image: linear-gradient(top, #ffffff, #e6e6e6);
|
||||
background-repeat: repeat-x;
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#e6e6e6', GradientType=0);
|
||||
border-color: #e6e6e6 #e6e6e6 #bfbfbf;
|
||||
border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
|
||||
border: 1px solid #cccccc;
|
||||
border-bottom-color: #b3b3b3;
|
||||
-webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
|
||||
-moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
|
||||
box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
|
||||
color: #333333;
|
||||
cursor: pointer;
|
||||
display: inline-block;
|
||||
margin-bottom: 0;
|
||||
margin-left: -1px;
|
||||
padding: 4px 10px;
|
||||
font-size: 13px;
|
||||
line-height: 18px;
|
||||
text-align: center;
|
||||
text-shadow: 0 1px 1px rgba(255, 255, 255, 0.75);
|
||||
vertical-align: middle;
|
||||
}
|
||||
.docToggle-button label:hover {
|
||||
background-color: #e6e6e6;
|
||||
background-position: 0 -15px;
|
||||
color: #333333;
|
||||
text-decoration: none;
|
||||
-webkit-transition: background-position 0.1s linear;
|
||||
-moz-transition: background-position 0.1s linear;
|
||||
-ms-transition: background-position 0.1s linear;
|
||||
-o-transition: background-position 0.1s linear;
|
||||
transition: background-position 0.1s linear;
|
||||
}
|
||||
.docToggle-button label:active,
|
||||
.docToggle-button input:focus + label {
|
||||
background-color: #d9d9d9;
|
||||
background-image: none;
|
||||
-webkit-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);
|
||||
-moz-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);
|
||||
box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);
|
||||
outline: 0;
|
||||
}
|
||||
|
||||
.docToggle-button input:checked + label {
|
||||
background: #404040;
|
||||
color: #ffffff;
|
||||
-webkit-box-shadow: inset 0 1px 6px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);
|
||||
-moz-box-shadow: inset 0 1px 6px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);
|
||||
box-shadow: inset 0 1px 6px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);
|
||||
}
|
||||
.docToggle-button:first-child label {
|
||||
-webkit-border-top-left-radius: 4px;
|
||||
-moz-border-radius-topleft: 4px;
|
||||
border-top-left-radius: 4px;
|
||||
-webkit-border-bottom-left-radius: 4px;
|
||||
-moz-border-radius-bottomleft: 4px;
|
||||
border-bottom-left-radius: 4px;
|
||||
margin-left: 0;
|
||||
}
|
||||
.docToggle-button:last-child label {
|
||||
-webkit-border-top-right-radius: 4px;
|
||||
-moz-border-radius-topright: 4px;
|
||||
border-top-right-radius: 4px;
|
||||
-webkit-border-bottom-right-radius: 4px;
|
||||
-moz-border-radius-bottomright: 4px;
|
||||
border-bottom-right-radius: 4px;
|
||||
|
||||
-webkit-border-top-left-radius: 4px;
|
||||
-moz-border-radius-topleft: 4px;
|
||||
border-top-left-radius: 4px;
|
||||
-webkit-border-bottom-left-radius: 4px;
|
||||
-moz-border-radius-bottomleft: 4px;
|
||||
border-bottom-left-radius: 4px;
|
||||
}
|
||||
|
||||
@@ -6,7 +6,9 @@
|
||||
|
||||
== Unit Testing
|
||||
|
||||
ifndef::onlyonetoggle[]
|
||||
include::toggle.adoc[]
|
||||
endif::onlyonetoggle[]
|
||||
|
||||
As with other application styles, it is extremely important to
|
||||
unit test any code written as part of a batch job. The Spring core
|
||||
|
||||
1
spring-batch-docs/asciidoc/tocbot-3.0.2/styles.css
Normal file
1
spring-batch-docs/asciidoc/tocbot-3.0.2/styles.css
Normal file
@@ -0,0 +1 @@
|
||||
.transition--300{transition:all 300ms ease-in-out}.toc{height:100%;width:280px;transform:translateX(0)}.content h1:first-child,.content h2:first-child{padding-top:0;margin-top:0}.title{font-size:3em}.content{margin-bottom:95vh}.content ul,.content ol{list-style:inherit}.content a{color:#0977c3;text-decoration:none;border-bottom:1px solid #EEE;transition:all 300ms ease}.content a.no-decoration{border-bottom:0}.content a:hover{border-bottom:1px solid #0977c3}.content a:hover.no-decoration{border-bottom:0}a.toc-link{text-decoration:none}.try-it-container{transform:translateY(84%)}.try-it-container.is-open{transform:translateY(0%)}.page-content{display:block !important}.hljs{display:block;background:white;padding:0.5em;color:#333333;overflow-x:auto}.hljs-comment,.hljs-meta{color:#969896}.hljs-string,.hljs-variable,.hljs-template-variable,.hljs-strong,.hljs-emphasis,.hljs-quote{color:#df5000}.hljs-keyword,.hljs-selector-tag,.hljs-type{color:#a71d5d}.hljs-literal,.hljs-symbol,.hljs-bullet,.hljs-attribute{color:#0086b3}.hljs-section,.hljs-name{color:#63a35c}.hljs-tag{color:#333333}.hljs-title,.hljs-attr,.hljs-selector-id,.hljs-selector-class,.hljs-selector-attr,.hljs-selector-pseudo{color:#795da3}.hljs-addition{color:#55a532;background-color:#eaffea}.hljs-deletion{color:#bd2c00;background-color:#ffecec}.hljs-link{text-decoration:underline}.toc-icon{position:fixed;top:0;right:0}#toc:checked ~ .toc{box-shadow:0 0 5px #c8c8c8;transform:translateX(0)}.toc{background-color:rgba(255,255,255,0.9);transform:translateX(-100%)}.toc.toc-right{transform:translateX(100%);right:0}@media (min-width: 52em){.toc{transform:translateX(0)}.toc.toc-right{transform:translateX(0);right:calc((100% - 48rem - 4rem) / 2)}.toc-icon{display:none}.try-it-container{display:block}.content{margin-left:280px}.toc-right ~ .content{margin-left:0;margin-right:280px}}*{box-sizing:border-box}body{font-size:1.2rem;font-family:-apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif}h1,h2,h3,h4,h5,h6{padding-top:0.5em}p{margin-top:0.25rem}pre{display:block;background:#f7f7f7;border-radius:2px;border:1px solid #e0e0e0;padding:2px;line-height:1.2;margin-bottom:10px;overflow:auto;white-space:pre-wrap}code{display:inline;font-size:.8em;max-width:100%}
|
||||
1
spring-batch-docs/asciidoc/tocbot-3.0.2/tocbot.css
Normal file
1
spring-batch-docs/asciidoc/tocbot-3.0.2/tocbot.css
Normal file
@@ -0,0 +1 @@
|
||||
.toc{overflow-y:auto}.toc>ul{overflow:hidden;position:relative}.toc>ul li{list-style:none}.toc-list{margin:0;padding-left:10px}a.toc-link{color:currentColor;height:100%}.is-collapsible{max-height:1000px;overflow:hidden;transition:all 300ms ease-in-out}.is-collapsed{max-height:0}.is-position-fixed{position:fixed !important;top:0}.is-active-link{font-weight:700}.toc-link::before{background-color:#EEE;content:' ';display:inline-block;height:inherit;left:0;margin-top:-1px;position:absolute;width:2px}.is-active-link::before{background-color:#54BC4B}
|
||||
136
spring-batch-docs/asciidoc/tocbot-3.0.2/tocbot.js
Normal file
136
spring-batch-docs/asciidoc/tocbot-3.0.2/tocbot.js
Normal file
File diff suppressed because one or more lines are too long
1
spring-batch-docs/asciidoc/tocbot-3.0.2/tocbot.min.js
vendored
Normal file
1
spring-batch-docs/asciidoc/tocbot-3.0.2/tocbot.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
@@ -1,42 +1,14 @@
|
||||
ifdef::backend-html5[]
|
||||
+++
|
||||
<div class="toggleWidget">
|
||||
<script src="./jsfiles/jquery.js"></script>
|
||||
<script src="./jsfiles/underscore.js"></script>
|
||||
<script src="./jsfiles/backbone.js"></script>
|
||||
<script src="./jsfiles/js.cookie.js"></script>
|
||||
<script src="./jsfiles/projectDocumentationWidget.js"></script>
|
||||
<script src="./jsfiles/application.js"></script>
|
||||
<div code-widget-controls="" style="display: inline-block">
|
||||
<div class="item-slider-widget js-item-slider--wrapper">
|
||||
<div class="item-slider--container">
|
||||
<div class="item--slider js-item--slider"
|
||||
style="width: 57px; margin-left: 0.01555px;"></div>
|
||||
<div class="item js-item" data-snippet-type="java">
|
||||
Java
|
||||
</div>
|
||||
<div class="item js-item" data-snippet-type="xml">
|
||||
XML
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="code-widget--body">
|
||||
<div class="js-code-maven-widget"></div>
|
||||
</div>
|
||||
<script type="text/html" id="code-widget-controls-template">
|
||||
<div class="item-slider-widget js-item-slider--wrapper">
|
||||
<div class="item-slider--container">
|
||||
<div class="item--slider js-item--slider"></div>
|
||||
<div class="item js-item java_snip_item" data-snippet-type='java'>
|
||||
Java
|
||||
</div>
|
||||
<div class="item js-item xml_snip_item" data-snippet-type='xml'>
|
||||
XML
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</script>
|
||||
<div>
|
||||
<script type="text/javascript" src="jsfiles/jquery-3.2.1.min.js"></script>
|
||||
<script type="text/javascript" src="jsfiles/js.cookie.js"></script>
|
||||
<script type="text/javascript" src="jsfiles/DocumentToggle.js"></script>
|
||||
<div class="docToggle-button">
|
||||
<input id="xmlButton" type="radio" name="docToggle" value="XML"><label for="xmlButton">XML</label>
|
||||
<input id="javaButton" type="radio" name="docToggle" value="Java" checked><label for="javaButton">Java</label>
|
||||
<!-- <input id="bothButton" type="radio" name="docToggle" value="Both" checked><label for="bothButton">Both</label> -->
|
||||
</div>
|
||||
</div>
|
||||
+++
|
||||
endif::backend-html5[]
|
||||
|
||||
Reference in New Issue
Block a user