diff --git a/pom.xml b/pom.xml index ad9f027263..4f0e61b07a 100644 --- a/pom.xml +++ b/pom.xml @@ -133,7 +133,7 @@ 1.6.2 1.5.1 - 0.0.4 + 0.0.5 3.10.1 @@ -144,7 +144,7 @@ 0.8.8 1.3.0 3.1.0 - 2.2.2 + 2.2.3 3.4.2 3.5.0 3.12.1 diff --git a/spring-batch-docs/src/main/asciidoc/domain.adoc b/spring-batch-docs/src/main/asciidoc/domain.adoc index 19c8c2fcbc..c544b10539 100644 --- a/spring-batch-docs/src/main/asciidoc/domain.adoc +++ b/spring-batch-docs/src/main/asciidoc/domain.adoc @@ -60,7 +60,7 @@ global to all steps, such as restartability. The job configuration contains: * Definition and ordering of `Step` instances. * Whether or not the job is restartable. -ifdef::backend-html5[] +ifdef::backend-spring-html[] [role="javaContent"] For those who use Java configuration, Spring Batch provides a default implementation of the `Job` interface in the form of the `SimpleJob` class, which creates some standard @@ -68,7 +68,6 @@ functionality on top of `Job`. When using Java-based configuration, a collection builders is made available for the instantiation of a `Job`, as the following example shows: -==== [source, java, role="javaContent"] ---- @Bean @@ -80,7 +79,6 @@ public Job footballJob(JobRepository jobRepository) { .build(); } ---- -==== [role="xmlContent"] For those who use XML configuration, Spring Batch provides a default implementation of the @@ -89,7 +87,6 @@ functionality on top of `Job`. However, the batch namespace abstracts away the n instantiate it directly. Instead, you can use the `` element, as the following example shows: -==== [source, xml, role="xmlContent"] ---- @@ -98,8 +95,7 @@ following example shows: ---- -==== -endif::backend-html5[] +endif::backend-spring-html[] ifdef::backend-pdf[] Spring Batch provides a default implementation of the `Job` interface in the form of the @@ -107,7 +103,6 @@ Spring Batch provides a default implementation of the `Job` interface in the for Java-based configuration, a collection of builders are made available for the instantiation of a `Job`, as the following example shows: -==== [source, java] ---- @Bean @@ -119,13 +114,11 @@ public Job footballJob(JobRepository jobRepository) { .build(); } ---- -==== However, when using XML configuration, the batch namespace abstracts away the need to instantiate it directly. Instead, you can use the `` element, as the following example shows: -==== [source, xml] ---- @@ -134,7 +127,6 @@ example shows: ---- -==== endif::backend-pdf[] ==== JobInstance @@ -163,6 +155,7 @@ from previous executions is used. Using a new `JobInstance` means "`start from t beginning,`" and using an existing instance generally means "`start from where you left off`". +[[jobParameters]] ==== JobParameters Having discussed `JobInstance` and how it differs from `Job`, the natural question to ask @@ -447,12 +440,10 @@ or even if the power goes out. All that is needed is to put the current number o read into the context, as the following example shows, and the framework does the rest: -==== [source, java] ---- executionContext.putLong(getKey(LINES_READ_COUNT), reader.getPosition()); ---- -==== Using the `EndOfDay` example from the `Job` stereotypes section as an example, assume there is one step, `loadData`, that loads a file into the database. After the first failed run, @@ -513,7 +504,6 @@ the last run are reconstituted from the database. When the `ItemReader` is opene check to see if it has any stored state in the context and initialize itself from there, as the following example shows: -==== [source, java] ---- if (executionContext.containsKey(getKey(LINES_READ_COUNT))) { @@ -529,7 +519,6 @@ if (executionContext.containsKey(getKey(LINES_READ_COUNT))) { } } ---- -==== In this case, after the preceding code runs, the current line is 40,322, letting the `Step` start again from where it left off. You can also use the `ExecutionContext` for @@ -557,14 +546,12 @@ Note that there is at least one `ExecutionContext` per `JobExecution` and one for every `StepExecution`. For example, consider the following code snippet: -==== [source, java] ---- ExecutionContext ecStep = stepExecution.getExecutionContext(); ExecutionContext ecJob = jobExecution.getExecutionContext(); //ecStep does not equal ecJob ---- -==== As noted in the comment, `ecStep` does not equal `ecJob`. They are two different `ExecutionContexts`. The one scoped to the `Step` is saved at every commit point in the @@ -582,12 +569,10 @@ by passing them to the repository. The Spring Batch XML namespace provides support for configuring a `JobRepository` instance with the `` tag, as the following example shows: -==== [source, xml, role="xmlContent"] ---- ---- -==== [role="javaContent"] When using Java configuration, the `@EnableBatchProcessing` annotation provides a @@ -598,7 +583,6 @@ When using Java configuration, the `@EnableBatchProcessing` annotation provides `JobLauncher` represents a simple interface for launching a `Job` with a given set of `JobParameters`, as the following example shows: -==== [source, java] ---- public interface JobLauncher { @@ -608,7 +592,6 @@ public JobExecution run(Job job, JobParameters jobParameters) JobInstanceAlreadyCompleteException, JobParametersInvalidException; } ---- -==== It is expected that implementations obtain a valid `JobExecution` from the `JobRepository` and execute the `Job`. @@ -647,7 +630,6 @@ Many of the domain concepts listed previously need to be configured in a Spring use in a standard bean definition, a namespace has been provided for ease of configuration, as the following example shows: -==== [source, xml, role="xmlContent"] ---- > interface. However, builders abstract away the difference in configuration. The following example creates a `footballJob`: -==== [source, java, role="javaContent"] ---- @Bean @@ -44,7 +43,6 @@ public Job footballJob(JobRepository jobRepository) { .build(); } ---- -==== [role="javaContent"] A `Job` (and, typically, any `Step` within it) requires a `JobRepository`. The @@ -61,7 +59,6 @@ interface. However, the namespace abstracts away the differences in configuratio only three required dependencies: a name, `JobRepository` , and a list of `Step` instances. The following example creates a `footballJob`: -==== [source, xml, role="xmlContent"] ---- @@ -70,7 +67,6 @@ The following example creates a `footballJob`: ---- -==== [role="xmlContent"] The examples here use a parent bean definition to create the steps. @@ -79,7 +75,6 @@ for more options when declaring specific step details inline. The XML namespace defaults to referencing a repository with an ID of `jobRepository`, which is a sensible default. However, you can explicitly override it: -==== [source, xml, role="xmlContent"] ---- @@ -88,13 +83,12 @@ is a sensible default. However, you can explicitly override it: ---- -==== [role="xmlContent"] In addition to steps, a job configuration can contain other elements that help with parallelization (``), declarative flow control (``) and externalization of flow definitions (``). -endif::backend-html5[] +endif::backend-spring-html[] ifdef::backend-pdf[] There are multiple implementations of the <> interface. However, @@ -167,20 +161,17 @@ restartable property to `false`. The following example shows how to set the `restartable` field to `false` in XML: .XML Configuration -==== [source, xml, role="xmlContent"] ---- ... ---- -==== [role="javaContent"] The following example shows how to set the `restartable` field to `false` in Java: .Java Configuration -==== [source, java, role="javaContent"] ---- @Bean @@ -191,7 +182,6 @@ public Job footballJob(JobRepository jobRepository) { .build(); } ---- -==== To phrase it another way, setting `restartable` to `false` means "`this `Job` does not support being started again`". Restarting a `Job` that is not @@ -199,7 +189,6 @@ restartable causes a `JobRestartException` to be thrown. The following Junit code causes the exception to be thrown: -==== [source, java] ---- Job job = new SimpleJob(); @@ -218,7 +207,6 @@ catch (JobRestartException e) { // expected } ---- -==== The first attempt to create a `JobExecution` for a non-restartable @@ -234,7 +222,6 @@ events in its lifecycle so that custom code can be run. `SimpleJob` allows for this by calling a `JobListener` at the appropriate time: -==== [source, java] ---- public interface JobExecutionListener { @@ -244,7 +231,6 @@ public interface JobExecutionListener { void afterJob(JobExecution jobExecution); } ---- -==== You can add `JobListeners` to a `SimpleJob` by setting listeners on the job. @@ -252,7 +238,6 @@ You can add `JobListeners` to a `SimpleJob` by setting listeners on the job. The following example shows how to add a listener element to an XML job definition: .XML Configuration -==== [source, xml, role="xmlContent"] ---- @@ -264,13 +249,11 @@ The following example shows how to add a listener element to an XML job definiti ---- -==== [role="javaContent"] The following example shows how to add a listener method to a Java job definition: .Java Configuration -==== [source, java, role="javaContent"] ---- @Bean @@ -281,13 +264,11 @@ public Job footballJob(JobRepository jobRepository) { .build(); } ---- -==== Note that the `afterJob` method is called regardless of the success or failure of the `Job`. If you need to determine success or failure, you can get that information from the `JobExecution`: -==== [source, java] ---- public void afterJob(JobExecution jobExecution){ @@ -299,7 +280,6 @@ public void afterJob(JobExecution jobExecution){ } } ---- -==== The annotations corresponding to this interface are: @@ -332,7 +312,6 @@ it with its own list of listeners to produce a `Job` with two listeners and one `Step` (`step1`). -==== [source, xml, role="xmlContent"] ---- @@ -349,9 +328,9 @@ it with its own list of listeners to produce a ---- -==== + [role="xmlContent"] -See the section on <> +See the section on <> for more detailed information. ==== JobParametersValidator @@ -364,12 +343,11 @@ is started with all its mandatory parameters. There is a of simple mandatory and optional parameters. For more complex constraints, you can implement the interface yourself. -ifdef::backend-html5[] +ifdef::backend-spring-html[] [role="xmlContent"] The configuration of a validator is supported through the XML namespace through a child element of the job, as the following example shows: -==== [source, xml, role="xmlContent"] ---- @@ -377,7 +355,6 @@ element of the job, as the following example shows: ---- -==== [role="xmlContent"] You can specify the validator as a reference (as shown earlier) or as a nested bean @@ -386,7 +363,6 @@ definition in the `beans` namespace. [role="javaContent"] The configuration of a validator is supported through the Java builders: -==== [source, java, role="javaContent"] ---- @Bean @@ -397,14 +373,12 @@ public Job job1(JobRepository jobRepository) { .build(); } ---- -==== -endif::backend-html5[] +endif::backend-spring-html[] ifdef::backend-pdf[] The configuration of a validator is supported through the Java builders, as follows: -==== [source, java] ---- @Bean @@ -415,11 +389,9 @@ public Job job1(JobRepository jobRepository) { .build(); } ---- -==== XML namespace support is also available for configuration of a `JobParametersValidator`: -==== [source, xml] ---- @@ -427,7 +399,6 @@ XML namespace support is also available for configuration of a `JobParametersVal ---- -==== You can specify the validator as a reference (as shown earlier) or as a nested bean definition in the `beans` namespace. @@ -460,7 +431,6 @@ and the transaction manager named `transactionManager` will be used. You can cus the attributes of the `@EnableBatchProcessing` annotation. The following example shows how to provide a custom data source and transaction manager: -==== [source, java] ---- @Configuration @@ -487,20 +457,15 @@ public class MyJobConfiguration { } ---- -==== -[NOTE] -==== -Only one configuration class needs to have the `@EnableBatchProcessing` annotation. Once +NOTE: Only one configuration class needs to have the `@EnableBatchProcessing` annotation. Once you have a class annotated with it, you have all of the configuration described earlier. -==== Starting from v5.0, an alternative, programmatic way of configuring base infrastrucutre beans is provided through the `DefaultBatchConfiguration` class. This class provides the same beans provided by `@EnableBatchProcessing` and can be used as a base class to configure batch jobs. The following snippet is a typical example of how to use it: -==== [source, java] ---- @Configuration @@ -515,14 +480,12 @@ class MyJobConfiguration extends DefaultBatchConfiguration { } ---- -==== The data source and transaction manager will be resolved from the application context and set on the job repository and job explorer. You can customize the configuration of any infrastructure bean by overriding the required setter. The following example shows how to customize the character encoding for instance: -==== [source, java] ---- @Configuration @@ -541,15 +504,11 @@ class MyJobConfiguration extends DefaultBatchConfiguration { } } ---- -==== -[NOTE] -==== -`@EnableBatchProcessing` should *not* be used with `DefaultBatchConfiguration`. You should +NOTE: `@EnableBatchProcessing` should *not* be used with `DefaultBatchConfiguration`. You should either use the declarative way of configuring Spring Batch through `@EnableBatchProcessing`, or use the programmatic way of extending `DefaultBatchConfiguration`, but not both ways at the same time. -==== [[configuringJobRepository]] === Configuring a JobRepository @@ -569,7 +528,6 @@ The batch namespace abstracts away many of the implementation details of the configuration options available, as the following example shows: .XML Configuration -==== [source, xml, role="xmlContent"] ---- ---- -==== [role="xmlContent"] Other than the `id`, none of the configuration options listed earlier are required. If they are @@ -616,18 +573,15 @@ can override this setting. The following example shows how to override the isolation level in XML: .XML Configuration -==== [source, xml, role="xmlContent"] ---- ---- -==== [role="javaContent"] The following example shows how to override the isolation level in Java: .Java Configuration -==== [source, java, role="javaContent"] ---- @Configuration @@ -638,7 +592,6 @@ public class MyJobConfiguration { } ---- -==== If the namespace is not used, you must also configure the transactional behavior of the repository by using AOP. @@ -648,7 +601,6 @@ The following example shows how to configure the transactional behavior of the r in XML: .XML Configuration -==== [source, xml, role="xmlContent"] ---- @@ -663,7 +615,7 @@ in XML: ---- -==== + [role="xmlContent"] You can use the preceding fragment nearly as is, with almost no changes. Remember also to include the appropriate namespace declarations and to make sure `spring-tx` and `spring-aop` @@ -674,7 +626,6 @@ The following example shows how to configure the transactional behavior of the r in Java: .Java Configuration -==== [source, java, role="javaContent"] ---- @Bean @@ -688,7 +639,7 @@ public TransactionProxyFactoryBean baseProxy() { return transactionProxyFactoryBean; } ---- -==== + [[repositoryTablePrefix]] ==== Changing the Table Prefix @@ -703,19 +654,16 @@ be changed. The following example shows how to change the table prefix in XML: .XML Configuration -==== [source, xml, role="xmlContent"] ---- ---- -==== [role="xmlContent"] The following example shows how to change the table prefix in Java: .Java Configuration -==== [source, java, role="javaContent"] ---- @Configuration @@ -726,15 +674,11 @@ public class MyJobConfiguration { } ---- -==== Given the preceding changes, every query to the metadata tables is prefixed with `SYSTEM.TEST_`. `BATCH_JOB_EXECUTION` is referred to as `SYSTEM.TEST_JOB_EXECUTION`. -[NOTE] -==== -Only the table prefix is configurable. The table and column names are not. -==== +NOTE: Only the table prefix is configurable. The table and column names are not. [[nonStandardDatabaseTypesInRepository]] ==== Non-standard Database Types in a Repository @@ -749,7 +693,6 @@ The following example shows how to use `JobRepositoryFactoryBean` to set the dat to the closest match in XML: .XML Configuration -==== [source, xml, role="xmlContent"] ---- @@ -757,14 +700,12 @@ to the closest match in XML: ---- -==== [role="javaContent"] The following example shows how to use `JobRepositoryFactoryBean` to set the database type to the closest match in Java: .Java Configuration -==== [source, java, role="javaContent"] ---- @Bean @@ -776,7 +717,6 @@ public JobRepository jobRepository() throws Exception { return factory.getObject(); } ---- -==== If the database type is not specified, the `JobRepositoryFactoryBean` tries to auto-detect the database type from the `DataSource`. @@ -805,7 +745,6 @@ Its only required dependency is a `JobRepository` (needed to obtain an execution The following example shows a `TaskExecutorJobLauncher` in XML: .XML Configuration -==== [source, xml, role="xmlContent"] ---- ---- -==== [role="javaContent"] The following example shows a `TaskExecutorJobLauncher` in Java: .Java Configuration -==== [source, java, role="javaContent"] ---- ... @@ -832,7 +769,6 @@ public JobLauncher jobLauncher() throws Exception { } ... ---- -==== Once a <> is obtained, it is passed to the execute method of `Job`, ultimately returning the `JobExecution` to the caller, as @@ -858,7 +794,6 @@ You can configure the `TaskExecutorJobLauncher` to allow for this scenario by co The following XML example configures a `TaskExecutorJobLauncher` to return immediately: .XML Configuration -==== [source, xml, role="xmlContent"] ---- ---- -==== [role="javaContent"] The following Java example configures a `TaskExecutorJobLauncher` to return immediately: .Java Configuration -==== [source, java, role="javaContent"] ---- @Bean @@ -887,7 +820,6 @@ public JobLauncher jobLauncher() { return jobLauncher; } ---- -==== You can use any implementation of the spring `TaskExecutor` interface to control how jobs are asynchronously @@ -956,53 +888,45 @@ and must be in the format of `name=value`. [role="xmlContent"] The following example shows a date passed as a job parameter to a job defined in XML: -==== [source, role="xmlContent"] ---- @@ -1026,7 +949,6 @@ The following example shows a sample configuration for `endOfDay` in XML: ---- -==== [role="javaContent"] In most cases, you would want to use a manifest to declare your `main` class in a jar. However, @@ -1040,7 +962,6 @@ into a `JobParameter` object of type `java.time.LocalDate`. [role="javaContent"] The following example shows a sample configuration for `endOfDay` in Java: -==== [source, java, role="javaContent"] ---- @Configuration @@ -1062,8 +983,7 @@ public class EndOfDayJobConfiguration { } } ---- -==== -endif::backend-html5[] +endif::backend-spring-html[] ifdef::backend-pdf[] In most cases, you would want to use a manifest to declare your `main` class in a jar. However, @@ -1081,7 +1001,6 @@ schedule.date=2007-05-05,java.time.LocalDate`, is converted into a `JobParameter The following example shows a sample configuration for `endOfDay` in XML: .XML Configuration -==== [source, xml, role="xmlContent"] ---- @@ -1092,13 +1011,11 @@ The following example shows a sample configuration for `endOfDay` in XML: ---- -==== [role="javaContent"] The following example shows a sample configuration for `endOfDay` in Java: .Java Configuration -==== [source, java, role="javaContent"] ---- @Configuration @@ -1120,7 +1037,6 @@ public class EndOfDayJobConfiguration { } } ---- -==== endif::backend-pdf[] @@ -1158,7 +1074,6 @@ set by the framework (or the developer) and is returned as part of the to a number by using the `ExitCodeMapper` interface: -==== [source, java] ---- public interface ExitCodeMapper { @@ -1167,7 +1082,6 @@ public interface ExitCodeMapper { } ---- -==== The essential contract of an `ExitCodeMapper` is that, given a string exit @@ -1216,7 +1130,6 @@ nonblocking behavior lets the controller return immediately, which is required when handling an `HttpRequest`. The following listing shows an example: -==== [source, java] ---- @Controller @@ -1234,7 +1147,6 @@ public class JobLauncherController { } } ---- -==== [[advancedMetaData]] === Advanced Metadata Usage @@ -1270,7 +1182,6 @@ The most basic need before any advanced features is the ability to query the repository for existing executions. This functionality is provided by the `JobExplorer` interface: -==== [source, java] ---- public interface JobExplorer { @@ -1288,7 +1199,6 @@ public interface JobExplorer { Set findRunningJobExecutions(String jobName); } ---- -==== As is evident from its method signatures, `JobExplorer` is a read-only version of the `JobRepository`, and, like the `JobRepository`, it can be easily configured by using a @@ -1298,19 +1208,16 @@ factory bean. The following example shows how to configure a `JobExplorer` in XML: .XML Configuration -==== [source, xml, role="xmlContent"] ---- ---- -==== [role="javaContent"] The following example shows how to configure a `JobExplorer` in Java: .Java Configuration -==== [source, java, role="javaContent"] ---- ... @@ -1323,7 +1230,6 @@ public JobExplorer jobExplorer() throws Exception { } ... ---- -==== <>, we noted that you can modify the table prefix of the `JobRepository` to allow for different versions or schemas. Because @@ -1333,19 +1239,16 @@ the `JobExplorer` works with the same tables, it also needs the ability to set a The following example shows how to set the table prefix for a `JobExplorer` in XML: .XML Configuration -==== [source, xml, role="xmlContent"] ---- ---- -==== [role="javaContent"] The following example shows how to set the table prefix for a `JobExplorer` in Java: .Java Configuration -==== [source, java, role="javaContent"] ---- ... @@ -1359,7 +1262,6 @@ public JobExplorer jobExplorer() throws Exception { } ... ---- -==== ==== JobRegistry @@ -1374,18 +1276,15 @@ map from job name to job instance. [role="xmlContent"] The following example shows how to include a `JobRegistry` for a job defined in XML: -==== [source, xml, role="xmlContent"] ---- ---- -==== [role="javaContent"] When using `@EnableBatchProcessing`, a `JobRegistry` is provided for you. The following example shows how to configure your own `JobRegistry`: -==== [source, java, role="javaContent"] ---- ... @@ -1398,7 +1297,6 @@ public JobRegistry jobRegistry() throws Exception { } ... ---- -==== You can populate a `JobRegistry` in either of two ways: by using a bean post processor or by using a registrar lifecycle component. The coming @@ -1413,21 +1311,18 @@ The following example shows how to include the `JobRegistryBeanPostProcessor` fo defined in XML: .XML Configuration -==== [source, xml, role="xmlContent"] ---- ---- -==== [role="javaContent"] The following example shows how to include the `JobRegistryBeanPostProcessor` for a job defined in Java: .Java Configuration -==== [source, java, role="javaContent"] ---- @Bean @@ -1437,7 +1332,6 @@ public JobRegistryBeanPostProcessor jobRegistryBeanPostProcessor(JobRegistry job return postProcessor; } ---- -==== Although it is not strictly necessary, the post-processor in the example has been given an `id` so that it can be included in child @@ -1461,7 +1355,6 @@ The following example shows how to include the `AutomaticJobRegistrar` for a job in XML: .XML Configuration -==== [source, xml, role="xmlContent"] ---- @@ -1477,14 +1370,12 @@ in XML: ---- -==== [role="javaContent"] The following example shows how to include the `AutomaticJobRegistrar` for a job defined in Java: .Java Configuration -==== [source, java, role="javaContent"] ---- @Bean @@ -1498,7 +1389,6 @@ public AutomaticJobRegistrar registrar() { } ---- -==== The registrar has two mandatory properties: an array of `ApplicationContextFactory` (created from a @@ -1537,7 +1427,6 @@ summarizing a Job, as is commonly done by batch operators. Spring Batch provides these types of operations in the `JobOperator` interface: -==== [source, java] ---- public interface JobOperator { @@ -1574,7 +1463,6 @@ public interface JobOperator { } ---- -==== The preceding operations represent methods from many different interfaces, such as `JobLauncher`, `JobRepository`, `JobExplorer`, and `JobRegistry`. For this reason, the @@ -1583,7 +1471,6 @@ provided implementation of `JobOperator` (`SimpleJobOperator`) has many dependen [role="xmlContent"] The following example shows a typical bean definition for `SimpleJobOperator` in XML: -==== [source, xml, role="xmlContent"] ---- @@ -1597,12 +1484,10 @@ The following example shows a typical bean definition for `SimpleJobOperator` in ---- -==== [role="javaContent"] The following example shows a typical bean definition for `SimpleJobOperator` in Java: -==== [source, java, role="javaContent"] ---- /** @@ -1624,7 +1509,6 @@ The following example shows a typical bean definition for `SimpleJobOperator` in return jobOperator; } ---- -==== As of version 5.0, the `@EnableBatchProcessing` annotation automatically registers a job operator bean in the application context. @@ -1651,7 +1535,6 @@ any previous set of parameters, the `Job` to force the `Job` to a new instance: -==== [source, java] ---- public interface JobParametersIncrementer { @@ -1660,7 +1543,6 @@ public interface JobParametersIncrementer { } ---- -==== The contract of `JobParametersIncrementer` is that, given a <> @@ -1675,7 +1557,6 @@ week (if the job is weekly, for instance)? The same can be said for any numerical values that help to identify the `Job`, as the following example shows: -==== [source, java] ---- public class SampleIncrementer implements JobParametersIncrementer { @@ -1689,7 +1570,6 @@ public class SampleIncrementer implements JobParametersIncrementer { } } ---- -==== In this example, the value with a key of `run.id` is used to discriminate between `JobInstances`. If the @@ -1698,25 +1578,22 @@ assumed that the `Job` has never been run before and, thus, its initial state can be returned. However, if not, the old value is obtained, incremented by one, and returned. -ifdef::backend-html5[] +ifdef::backend-spring-html[] [role="xmlContent"] For jobs defined in XML, you can associate an incrementer with a `Job` through the `incrementer` attribute in the namespace, as follows: -==== [source, xml, role="xmlContent"] ---- ... ---- -==== [role="javaContent"] For jobs defined in Java, you can associate an incrementer with a `Job` through the `incrementer` method provided in the builders, as follows: -==== [source, java, role="javaContent"] ---- @Bean @@ -1727,26 +1604,22 @@ public Job footballJob(JobRepository jobRepository) { .build(); } ---- -==== -endif::backend-html5[] +endif::backend-spring-html[] ifdef::backend-pdf[] You can associate an incrementer with a `Job` by using the `incrementer` attribute in the namespace: -==== [source, xml] ---- ... ---- -==== The Java configuration builders also provide facilities for the configuration of an `incrementer`: -==== [source, java] ---- @Bean @@ -1757,7 +1630,6 @@ public Job footballJob(JobRepository jobRepository) { .build(); } ---- -==== endif::backend-pdf[] [[stoppingAJob]] @@ -1767,13 +1639,11 @@ One of the most common use cases of `JobOperator` is gracefully stopping a Job: -==== [source, java] ---- Set executions = jobOperator.getRunningExecutions("sampleJob"); jobOperator.stop(executions.iterator().next()); ---- -==== The shutdown is not immediate, since there is no way to force immediate shutdown, especially if the execution is currently in diff --git a/spring-batch-docs/src/main/asciidoc/spring-batch-integration.adoc b/spring-batch-docs/src/main/asciidoc/spring-batch-integration.adoc index 4ed9eb533b..5ba365ff6e 100644 --- a/spring-batch-docs/src/main/asciidoc/spring-batch-integration.adoc +++ b/spring-batch-docs/src/main/asciidoc/spring-batch-integration.adoc @@ -44,7 +44,7 @@ This section covers the following key concepts: [[namespace-support]] [role="xmlContent"] -==== Namespace Support +=== Namespace Support Dedicated XML namespace support was added to Spring Batch Integration in version 1.3, with the aim to provide an easier configuration @@ -101,7 +101,7 @@ of the XML schema. [[launching-batch-jobs-through-messages]] -==== Launching Batch Jobs through Messages +=== Launching Batch Jobs through Messages When starting batch jobs by using the core Spring Batch API, you basically have two options: @@ -152,7 +152,7 @@ image::{batch-asciidoc}images/launch-batch-job.png[Launch Batch Job, scaledwidth [[transforming-a-file-into-a-joblaunchrequest]] -===== Transforming a File into a JobLaunchRequest +==== Transforming a File into a JobLaunchRequest The following example transforms a file into a `JobLaunchRequest`: @@ -194,7 +194,7 @@ public class FileMessageToJobRequest { ---- [[the-jobexecution-response]] -===== The JobExecution Response +==== The JobExecution Response When a batch job is being executed, a `JobExecution` instance is returned. You can use this @@ -222,7 +222,7 @@ information, see <>. [[spring-batch-integration-configuration]] -===== Spring Batch Integration Configuration +==== Spring Batch Integration Configuration Consider a case where someone needs to create a file `inbound-channel-adapter` to listen for CSV files in the provided directory, hand them off to a transformer @@ -297,7 +297,7 @@ public IntegrationFlow integrationFlow(JobLaunchingGateway jobLaunchingGateway) [[example-itemreader-configuration]] -===== Example ItemReader Configuration +==== Example ItemReader Configuration Now that we are polling for files and launching jobs, we need to configure our Spring Batch `ItemReader` (for example) to use the files found at the location defined by the job diff --git a/spring-batch-docs/src/main/asciidoc/spring-batch-intro.adoc b/spring-batch-docs/src/main/asciidoc/spring-batch-intro.adoc index 5959155cb5..3003946a32 100644 --- a/spring-batch-docs/src/main/asciidoc/spring-batch-intro.adoc +++ b/spring-batch-docs/src/main/asciidoc/spring-batch-intro.adoc @@ -3,7 +3,7 @@ include::attributes.adoc[] -ifdef::backend-html5[] +ifdef::backend-spring-html[] This documentation is also available as link:index.html[multiple HTML files] and as link:../pdf/spring-batch-reference.pdf[PDF] and link:../epub/spring-batch-reference.epub[EPUB] documents. diff --git a/spring-batch-docs/src/main/asciidoc/step.adoc b/spring-batch-docs/src/main/asciidoc/step.adoc index 479e6dc61c..9825377c7f 100644 --- a/spring-batch-docs/src/main/asciidoc/step.adoc +++ b/spring-batch-docs/src/main/asciidoc/step.adoc @@ -93,7 +93,6 @@ To ease configuration, you can use the Spring Batch XML namespace, as the following example shows: .XML Configuration -==== [source, xml, role="xmlContent"] ---- @@ -104,14 +103,12 @@ the following example shows: ---- -==== [role="javaContent"] When using Java configuration, you can use the Spring Batch builders, as the following example shows: .Java Configuration -==== [source, java, role="javaContent"] ---- /** @@ -138,9 +135,8 @@ public Step sampleStep(JobRepository jobRepository, PlatformTransactionManager t .build(); } ---- -==== -ifdef::backend-html5[] +ifdef::backend-spring-html[] The preceding configuration includes the only required dependencies to create a item-oriented step: @@ -184,7 +180,7 @@ Note that `repository` defaults to `jobRepository` (provided through `@EnableBat and `transactionManager` defaults to `transactionManager` (provided from the application context). Also, the `ItemProcessor` is optional, since the item could be directly passed from the reader to the writer. -endif::backend-html5[] +endif::backend-spring-html[] ifdef::backend-pdf[] The preceding configuration above the only required dependencies to create a item-oriented @@ -224,7 +220,6 @@ instantiated with `itemReader`, `itemProcessor`, `itemWriter`, `startLimit=5`, a `allowStartIfComplete=true`. Additionally, the `commitInterval` is `5`, since it is overridden by the `concreteStep1` `Step`, as the following example shows: -==== [source, xml, role="xmlContent"] ---- @@ -239,7 +234,6 @@ overridden by the `concreteStep1` `Step`, as the following example shows: ---- -==== [role="xmlContent"] The `id` attribute is still required on the step within the job element. This is for two @@ -249,7 +243,7 @@ reasons: standalone step is referenced in more than one step in the job, an error occurs. [role="xmlContent"] -* When creating job flows, as described <>, the `next` attribute +* When creating job flows, as described <>, the `next` attribute should refer to the step in the flow, not the standalone step. [[abstractStep]] @@ -707,13 +701,13 @@ exception class is fatal if encountered (that is, they are not skipped). For any exception encountered, the skippability is determined by the nearest superclass in the class hierarchy. Any unclassified exception is treated as 'fatal'. -ifdef::backend-html5[] +ifdef::backend-spring-html[] [role="xmlContent"] The order of the `` and `` elements does not matter. [role="javaContent"] The order of the `skip` and `noSkip` method calls does not matter. -endif::backend-html5[] +endif::backend-spring-html[] ifdef::backend-pdf[] The order of specifying include versus exclude (by using either the XML tags or the `skip` and @@ -1262,7 +1256,7 @@ an exception to signal a failure. Each call to a `Tasklet` is wrapped in a trans `Tasklet` implementors might call a stored procedure, a script, or a SQL update statement. -ifdef::backend-html5[] +ifdef::backend-spring-html[] [role="xmlContent"] To create a `TaskletStep` in XML, the `ref` attribute of the `` element should reference a bean that defines a `Tasklet` object. No `` element should be used @@ -1289,7 +1283,7 @@ public Step step1(JobRepository jobRepository, PlatformTransactionManager transa .build(); } ---- -endif::backend-html5[] +endif::backend-spring-html[] ifdef::backend-pdf[] To create a `TaskletStep` the bean associated with the step (through the `ref` attribute diff --git a/spring-batch-docs/src/main/asciidoc/toggle.adoc b/spring-batch-docs/src/main/asciidoc/toggle.adoc index d39eb5ab08..69645cef3d 100644 --- a/spring-batch-docs/src/main/asciidoc/toggle.adoc +++ b/spring-batch-docs/src/main/asciidoc/toggle.adoc @@ -1,4 +1,4 @@ -ifdef::backend-html5[] +ifdef::backend-spring-html[] +++
@@ -12,4 +12,4 @@ ifdef::backend-html5[]
+++ -endif::backend-html5[] +endif::backend-spring-html[]