General cleanup etc around properties and substitution
* Move pre-context init of JobParameters support out of ThreadLocalClassloaderBeanPostProcessor * General cleanup in BatchPropertyBeanPostProcessor, move artifact type checking into classifer class, minor naming updates * Refactor BatchPropertyContext to use different data structures for different types of properties and provide named accessors * Remove path based artifact scoping support * Make sure expressions are parsed when resolving properties directly from XML * Update property tests * Move registration of jobProperties bean into the JsrNamespaceUtils
This commit is contained in:
@@ -16,13 +16,12 @@
|
||||
package org.springframework.batch.core.jsr.configuration.support;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.Properties;
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.Assert.assertFalse;
|
||||
import static org.junit.Assert.assertTrue;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
@@ -32,7 +31,10 @@ import static org.junit.Assert.assertTrue;
|
||||
* @author Chris Schaefer
|
||||
*/
|
||||
public class BatchPropertyContextTests {
|
||||
private List<BatchPropertyContext.BatchPropertyContextEntry> entries = new ArrayList<BatchPropertyContext.BatchPropertyContextEntry>();
|
||||
private List<BatchPropertyContext.BatchPropertyContextEntry> jobProperties = new ArrayList<BatchPropertyContext.BatchPropertyContextEntry>();
|
||||
private List<BatchPropertyContext.BatchPropertyContextEntry> stepProperties = new ArrayList<BatchPropertyContext.BatchPropertyContextEntry>();
|
||||
private List<BatchPropertyContext.BatchPropertyContextEntry> artifactProperties = new ArrayList<BatchPropertyContext.BatchPropertyContextEntry>();
|
||||
private List<BatchPropertyContext.BatchPropertyContextEntry> stepArtifactProperties = new ArrayList<BatchPropertyContext.BatchPropertyContextEntry>();
|
||||
|
||||
@Before
|
||||
public void setUp() {
|
||||
@@ -41,83 +43,55 @@ public class BatchPropertyContextTests {
|
||||
Properties step1Properties = new Properties();
|
||||
step1Properties.setProperty("step1PropertyName1", "step1PropertyValue1");
|
||||
step1Properties.setProperty("step1PropertyName2", "step1PropertyValue2");
|
||||
entries.add(batchPropertyContext.new BatchPropertyContextEntry("job1.step1", step1Properties));
|
||||
stepProperties.add(batchPropertyContext.new BatchPropertyContextEntry("step1", step1Properties, BatchArtifact.BatchArtifactType.STEP));
|
||||
|
||||
Properties step2Properties = new Properties();
|
||||
step2Properties.setProperty("step2PropertyName1", "step2PropertyValue1");
|
||||
step2Properties.setProperty("step2PropertyName2", "step2PropertyValue2");
|
||||
entries.add(batchPropertyContext.new BatchPropertyContextEntry("job1.step2", step2Properties));
|
||||
stepProperties.add(batchPropertyContext.new BatchPropertyContextEntry("step2", step2Properties, BatchArtifact.BatchArtifactType.STEP));
|
||||
|
||||
Properties jobProperties = new Properties();
|
||||
jobProperties.setProperty("jobProperty1", "jobProperty1value");
|
||||
jobProperties.setProperty("jobProperty2", "jobProperty2value");
|
||||
entries.add(batchPropertyContext.new BatchPropertyContextEntry("job1.job-job1", jobProperties));
|
||||
this.jobProperties.add(batchPropertyContext.new BatchPropertyContextEntry("job1", jobProperties, BatchArtifact.BatchArtifactType.JOB));
|
||||
|
||||
Properties artifactProperties = new Properties();
|
||||
artifactProperties.setProperty("deciderProperty1", "deciderProperty1value");
|
||||
artifactProperties.setProperty("deciderProperty2", "deciderProperty2value");
|
||||
this.artifactProperties.add(batchPropertyContext.new BatchPropertyContextEntry("decider1", artifactProperties, BatchArtifact.BatchArtifactType.ARTIFACT));
|
||||
|
||||
Properties stepArtifactProperties = new Properties();
|
||||
stepArtifactProperties.setProperty("readerProperty1", "readerProperty1value");
|
||||
stepArtifactProperties.setProperty("readerProperty2", "readerProperty2value");
|
||||
|
||||
BatchPropertyContext.BatchPropertyContextEntry batchPropertyContextEntry =
|
||||
batchPropertyContext.new BatchPropertyContextEntry("reader", stepArtifactProperties, BatchArtifact.BatchArtifactType.STEP_ARTIFACT);
|
||||
batchPropertyContextEntry.setStepName("step1");
|
||||
|
||||
this.stepArtifactProperties.add(batchPropertyContextEntry);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testAddBatchContextEntries() {
|
||||
public void testStepLevelProperties() {
|
||||
BatchPropertyContext batchPropertyContext = new BatchPropertyContext();
|
||||
batchPropertyContext.setBatchContextEntries(entries);
|
||||
batchPropertyContext.setJobPropertiesContextEntry(jobProperties);
|
||||
batchPropertyContext.setStepPropertiesContextEntry(stepProperties);
|
||||
|
||||
Properties step1BatchProperties = batchPropertyContext.getBatchProperties("job1.step1");
|
||||
assertEquals(4, step1BatchProperties.size());
|
||||
assertEquals("step1PropertyValue1", step1BatchProperties.getProperty("step1PropertyName1"));
|
||||
assertEquals("step1PropertyValue2", step1BatchProperties.getProperty("step1PropertyName2"));
|
||||
assertEquals("jobProperty1value", step1BatchProperties.getProperty("jobProperty1"));
|
||||
assertEquals("jobProperty2value", step1BatchProperties.getProperty("jobProperty2"));
|
||||
Properties step1Properties = batchPropertyContext.getStepProperties("step1");
|
||||
assertEquals(2, step1Properties.size());
|
||||
assertEquals("step1PropertyValue1", step1Properties.getProperty("step1PropertyName1"));
|
||||
assertEquals("step1PropertyValue2", step1Properties.getProperty("step1PropertyName2"));
|
||||
|
||||
Properties step2BatchProperties = batchPropertyContext.getBatchProperties("job1.step2");
|
||||
assertEquals(4, step2BatchProperties.size());
|
||||
assertEquals("step2PropertyValue1", step2BatchProperties.getProperty("step2PropertyName1"));
|
||||
assertEquals("step2PropertyValue2", step2BatchProperties.getProperty("step2PropertyName2"));
|
||||
assertEquals("jobProperty1value", step2BatchProperties.getProperty("jobProperty1"));
|
||||
assertEquals("jobProperty2value", step2BatchProperties.getProperty("jobProperty2"));
|
||||
|
||||
Properties jobProperties = batchPropertyContext.getBatchProperties("job1.job-job1");
|
||||
assertEquals(2, jobProperties.size());
|
||||
assertEquals("jobProperty1value", jobProperties.getProperty("jobProperty1"));
|
||||
assertEquals("jobProperty2value", jobProperties.getProperty("jobProperty2"));
|
||||
Properties step2Properties = batchPropertyContext.getStepProperties("step2");
|
||||
assertEquals(2, step2Properties.size());
|
||||
assertEquals("step2PropertyValue1", step2Properties.getProperty("step2PropertyName1"));
|
||||
assertEquals("step2PropertyValue2", step2Properties.getProperty("step2PropertyName2"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testAddBatchContextEntriesToExistingArtifact() {
|
||||
public void testJobLevelProperties() {
|
||||
BatchPropertyContext batchPropertyContext = new BatchPropertyContext();
|
||||
|
||||
Properties step1properties = new Properties();
|
||||
step1properties.setProperty("newStep1PropertyName", "newStep1PropertyValue");
|
||||
entries.add(batchPropertyContext.new BatchPropertyContextEntry("job1.step1", step1properties));
|
||||
|
||||
batchPropertyContext.setBatchContextEntries(entries);
|
||||
|
||||
Properties bean2 = batchPropertyContext.getBatchProperties("job1.step1");
|
||||
assertEquals(5, bean2.size());
|
||||
assertEquals("step1PropertyValue1", bean2.getProperty("step1PropertyName1"));
|
||||
assertEquals("step1PropertyValue2", bean2.getProperty("step1PropertyName2"));
|
||||
assertEquals("newStep1PropertyValue", bean2.getProperty("newStep1PropertyName"));
|
||||
assertEquals("jobProperty1value", bean2.getProperty("jobProperty1"));
|
||||
assertEquals("jobProperty2value", bean2.getProperty("jobProperty2"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGetStepLevelProperties() {
|
||||
BatchPropertyContext batchPropertyContext = new BatchPropertyContext();
|
||||
batchPropertyContext.setBatchContextEntries(entries);
|
||||
|
||||
Properties bean1 = batchPropertyContext.getStepLevelProperties("job1.step1");
|
||||
assertEquals(2, bean1.size());
|
||||
assertEquals("step1PropertyValue1", bean1.getProperty("step1PropertyName1"));
|
||||
assertEquals("step1PropertyValue2", bean1.getProperty("step1PropertyName2"));
|
||||
|
||||
Properties bean2 = batchPropertyContext.getStepLevelProperties("job1.step2");
|
||||
assertEquals(2, bean2.size());
|
||||
assertEquals("step2PropertyValue1", bean2.getProperty("step2PropertyName1"));
|
||||
assertEquals("step2PropertyValue2", bean2.getProperty("step2PropertyName2"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testJobProperties() {
|
||||
BatchPropertyContext batchPropertyContext = new BatchPropertyContext();
|
||||
batchPropertyContext.setBatchContextEntries(entries);
|
||||
batchPropertyContext.setJobPropertiesContextEntry(jobProperties);
|
||||
|
||||
Properties jobProperties = batchPropertyContext.getJobProperties();
|
||||
assertEquals(2, jobProperties.size());
|
||||
@@ -126,56 +100,83 @@ public class BatchPropertyContextTests {
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testJobNonOverridingJobProperties() {
|
||||
public void testAddPropertiesToExistingStep() {
|
||||
BatchPropertyContext batchPropertyContext = new BatchPropertyContext();
|
||||
batchPropertyContext.setJobPropertiesContextEntry(jobProperties);
|
||||
batchPropertyContext.setStepPropertiesContextEntry(stepProperties);
|
||||
|
||||
Properties jobProperties = new Properties();
|
||||
jobProperties.setProperty("step1PropertyName1", "step1PropertyOverride");
|
||||
entries.add(batchPropertyContext.new BatchPropertyContextEntry("job1.job-job1", jobProperties));
|
||||
Properties step1 = batchPropertyContext.getStepProperties("step1");
|
||||
assertEquals(2, step1.size());
|
||||
assertEquals("step1PropertyValue1", step1.getProperty("step1PropertyName1"));
|
||||
assertEquals("step1PropertyValue2", step1.getProperty("step1PropertyName2"));
|
||||
|
||||
batchPropertyContext.setBatchContextEntries(entries);
|
||||
Properties step1properties = new Properties();
|
||||
step1properties.setProperty("newStep1PropertyName", "newStep1PropertyValue");
|
||||
|
||||
Properties bean1 = batchPropertyContext.getBatchProperties("job1.step1");
|
||||
assertEquals(4, bean1.size());
|
||||
assertEquals("step1PropertyValue1", bean1.getProperty("step1PropertyName1"));
|
||||
assertEquals("step1PropertyValue2", bean1.getProperty("step1PropertyName2"));
|
||||
assertEquals("jobProperty1value", bean1.getProperty("jobProperty1"));
|
||||
assertEquals("jobProperty2value", bean1.getProperty("jobProperty2"));
|
||||
batchPropertyContext.setStepPropertiesContextEntry(
|
||||
Collections.singletonList(batchPropertyContext.new BatchPropertyContextEntry("step1", step1properties, BatchArtifact.BatchArtifactType.STEP)));
|
||||
|
||||
Properties testJobBean = batchPropertyContext.getBatchProperties("job1.job-job1");
|
||||
assertEquals(3, testJobBean.size());
|
||||
assertEquals("step1PropertyOverride", testJobBean.getProperty("step1PropertyName1"));
|
||||
assertEquals("jobProperty1value", testJobBean.getProperty("jobProperty1"));
|
||||
assertEquals("jobProperty2value", testJobBean.getProperty("jobProperty2"));
|
||||
Properties step1updated = batchPropertyContext.getStepProperties("step1");
|
||||
assertEquals(3, step1updated.size());
|
||||
assertEquals("step1PropertyValue1", step1updated.getProperty("step1PropertyName1"));
|
||||
assertEquals("step1PropertyValue2", step1updated.getProperty("step1PropertyName2"));
|
||||
assertEquals("newStep1PropertyValue", step1updated.getProperty("newStep1PropertyName"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testJobLevelPropertiesWithPath() {
|
||||
List<BatchPropertyContext.BatchPropertyContextEntry> entries = new ArrayList<BatchPropertyContext.BatchPropertyContextEntry>();
|
||||
|
||||
public void testNonStepLevelArtifactProperties() {
|
||||
BatchPropertyContext batchPropertyContext = new BatchPropertyContext();
|
||||
batchPropertyContext.setJobPropertiesContextEntry(jobProperties);
|
||||
batchPropertyContext.setArtifactPropertiesContextEntry(artifactProperties);
|
||||
batchPropertyContext.setStepPropertiesContextEntry(stepProperties);
|
||||
|
||||
Properties jobProperties = new Properties();
|
||||
jobProperties.setProperty("readerName", "testJobreaderName");
|
||||
|
||||
entries.add(batchPropertyContext.new BatchPropertyContextEntry("job1.job-job1.itemReader", jobProperties));
|
||||
|
||||
batchPropertyContext.setBatchContextEntries(entries);
|
||||
|
||||
Properties props = batchPropertyContext.getJobProperties();
|
||||
assertEquals(1, props.size());
|
||||
assertEquals("testJobreaderName", props.getProperty("readerName"));
|
||||
Properties artifactProperties = batchPropertyContext.getArtifactProperties("decider1");
|
||||
assertEquals(4, artifactProperties.size());
|
||||
assertEquals("deciderProperty1value", artifactProperties.getProperty("deciderProperty1"));
|
||||
assertEquals("deciderProperty2value", artifactProperties.getProperty("deciderProperty2"));
|
||||
assertEquals("jobProperty1value", artifactProperties.getProperty("jobProperty1"));
|
||||
assertEquals("jobProperty2value", artifactProperties.getProperty("jobProperty2"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testJobLevelComponentPath() {
|
||||
public void testStepLevelArtifactProperties() {
|
||||
BatchPropertyContext batchPropertyContext = new BatchPropertyContext();
|
||||
assertTrue(batchPropertyContext.isJobLevelComponentPath("myJob.job-myJob"));
|
||||
assertTrue(batchPropertyContext.isJobLevelComponentPath("myJob.job-myJob.myReader"));
|
||||
assertTrue(batchPropertyContext.isJobLevelComponentPath("myJob.job-myJob.myReader.something"));
|
||||
assertFalse(batchPropertyContext.isJobLevelComponentPath("myJob"));
|
||||
assertFalse(batchPropertyContext.isJobLevelComponentPath("job-myJob"));
|
||||
assertFalse(batchPropertyContext.isJobLevelComponentPath(null));
|
||||
assertFalse(batchPropertyContext.isJobLevelComponentPath("myJob."));
|
||||
batchPropertyContext.setJobPropertiesContextEntry(jobProperties);
|
||||
batchPropertyContext.setArtifactPropertiesContextEntry(artifactProperties);
|
||||
batchPropertyContext.setStepPropertiesContextEntry(stepProperties);
|
||||
batchPropertyContext.setStepArtifactPropertiesContextEntry(stepArtifactProperties);
|
||||
|
||||
Properties artifactProperties = batchPropertyContext.getStepArtifactProperties("step1", "reader");
|
||||
assertEquals(4, artifactProperties.size());
|
||||
assertEquals("readerProperty1value", artifactProperties.getProperty("readerProperty1"));
|
||||
assertEquals("readerProperty2value", artifactProperties.getProperty("readerProperty2"));
|
||||
assertEquals("step1PropertyValue1", artifactProperties.getProperty("step1PropertyName1"));
|
||||
assertEquals("step1PropertyValue2", artifactProperties.getProperty("step1PropertyName2"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testArtifactNonOverridingJobProperties() {
|
||||
BatchPropertyContext batchPropertyContext = new BatchPropertyContext();
|
||||
batchPropertyContext.setJobPropertiesContextEntry(jobProperties);
|
||||
batchPropertyContext.setArtifactPropertiesContextEntry(artifactProperties);
|
||||
|
||||
Properties jobProperties = new Properties();
|
||||
jobProperties.setProperty("deciderProperty1", "decider1PropertyOverride");
|
||||
|
||||
batchPropertyContext.setJobPropertiesContextEntry(
|
||||
Collections.singletonList(batchPropertyContext.new BatchPropertyContextEntry("job1", jobProperties, BatchArtifact.BatchArtifactType.JOB)));
|
||||
|
||||
Properties step1 = batchPropertyContext.getArtifactProperties("decider1");
|
||||
assertEquals(4, step1.size());
|
||||
assertEquals("deciderProperty1value", step1.getProperty("deciderProperty1"));
|
||||
assertEquals("deciderProperty2value", step1.getProperty("deciderProperty2"));
|
||||
assertEquals("jobProperty1value", step1.getProperty("jobProperty1"));
|
||||
assertEquals("jobProperty2value", step1.getProperty("jobProperty2"));
|
||||
|
||||
Properties job = batchPropertyContext.getJobProperties();
|
||||
assertEquals(3, job.size());
|
||||
assertEquals("decider1PropertyOverride", job.getProperty("deciderProperty1"));
|
||||
assertEquals("jobProperty1value", job.getProperty("jobProperty1"));
|
||||
assertEquals("jobProperty2value", job.getProperty("jobProperty2"));
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user