diff --git a/spring-batch-core/src/main/java/org/springframework/batch/core/scope/util/PlaceholderTargetSource.java b/spring-batch-core/src/main/java/org/springframework/batch/core/scope/util/PlaceholderTargetSource.java index 033d1438e..d4a750196 100644 --- a/spring-batch-core/src/main/java/org/springframework/batch/core/scope/util/PlaceholderTargetSource.java +++ b/spring-batch-core/src/main/java/org/springframework/batch/core/scope/util/PlaceholderTargetSource.java @@ -170,15 +170,6 @@ public class PlaceholderTargetSource extends SimpleBeanTargetSource implements I if (!strVal.contains(PLACEHOLDER_PREFIX)) { return strVal; } - if (strVal.startsWith(PLACEHOLDER_PREFIX) && strVal.endsWith(PLACEHOLDER_SUFFIX)) { - // If the whole value is a placeholder it might - // be possible to replace it all in one go as a - // String (e.g. if it's a ref=#{}) - StringBuilder result = new StringBuilder(strVal); - String key = extractKey(strVal); - replaceIfTypeMatches(result, 0, strVal.length() - 1, key, String.class, typeConverter); - return result.toString(); - } return replacePlaceholders(strVal, contextTypeConverter); } }) { @@ -327,7 +318,7 @@ public class PlaceholderTargetSource extends SimpleBeanTargetSource implements I replaced |= replaceIfTypeMatches(result, first, next, key, Integer.class, typeConverter); replaced |= replaceIfTypeMatches(result, first, next, key, Date.class, typeConverter); if (!replaced) { - throw new IllegalStateException("Cannot bind to placeholder: "+key); + logger.debug("Cannot bind to placeholder: " + key); } first = result.indexOf(PLACEHOLDER_PREFIX, first + 1); next = result.indexOf(PLACEHOLDER_SUFFIX, first + 1); diff --git a/spring-batch-core/src/test/java/org/springframework/batch/core/resource/ListPreparedStatementSetterTests.java b/spring-batch-core/src/test/java/org/springframework/batch/core/resource/ListPreparedStatementSetterTests.java index d86179d12..19a36b71f 100644 --- a/spring-batch-core/src/test/java/org/springframework/batch/core/resource/ListPreparedStatementSetterTests.java +++ b/spring-batch-core/src/test/java/org/springframework/batch/core/resource/ListPreparedStatementSetterTests.java @@ -29,7 +29,6 @@ import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.batch.core.BatchStatus; import org.springframework.batch.core.JobExecution; -import org.springframework.batch.core.JobParameters; import org.springframework.batch.core.JobParametersBuilder; import org.springframework.batch.core.StepExecution; import org.springframework.batch.core.job.AbstractJob; @@ -113,9 +112,10 @@ public class ListPreparedStatementSetterTests { this.simpleJdbcTemplate.update("insert into FOO values (?,?,?)", 0, "zero", 0); this.simpleJdbcTemplate.update("insert into FOO values (?,?,?)", 1, "one", 1); this.simpleJdbcTemplate.update("insert into FOO values (?,?,?)", 2, "two", 2); + this.simpleJdbcTemplate.update("insert into FOO values (?,?,?)", 3, "three", 3); - JobParameters params = new JobParametersBuilder().addLong("start.id", 1L).toJobParameters(); - JobExecution jobExecution = this.jobLauncher.run(this.job, params); + JobParametersBuilder builder = new JobParametersBuilder().addLong("min.id", 1L).addLong("max.id", 2L); + JobExecution jobExecution = this.jobLauncher.run(this.job, builder.toJobParameters()); assertEquals(BatchStatus.COMPLETED, jobExecution.getStatus()); List foos = fooStoringItemWriter.getFoos(); diff --git a/spring-batch-core/src/test/java/org/springframework/batch/core/scope/util/PlaceholderTargetSourceErrorTests.java b/spring-batch-core/src/test/java/org/springframework/batch/core/scope/util/PlaceholderTargetSourceErrorTests.java index f0c1abb11..316bab2db 100644 --- a/spring-batch-core/src/test/java/org/springframework/batch/core/scope/util/PlaceholderTargetSourceErrorTests.java +++ b/spring-batch-core/src/test/java/org/springframework/batch/core/scope/util/PlaceholderTargetSourceErrorTests.java @@ -74,15 +74,8 @@ public class PlaceholderTargetSourceErrorTests extends ContextFactorySupport { @Test public void testPartialReplaceMissingProperty() throws Exception { - try { - Node target = (Node) createValue("name", "#{garbage}-bar").getTarget(); - assertEquals("bar", target.getName()); - fail("Expected IllegalStateException"); - } - catch (Exception e) { - String message = e.getMessage(); - assertTrue("Wrong message: " + message, message.toLowerCase().contains("cannot bind")); - } + Node target = (Node) createValue("name", "#{garbage}-bar").getTarget(); + assertEquals("#{garbage}-bar", target.getName()); } @Test diff --git a/spring-batch-core/src/test/java/org/springframework/batch/core/scope/util/PlaceholderTargetSourceTests.java b/spring-batch-core/src/test/java/org/springframework/batch/core/scope/util/PlaceholderTargetSourceTests.java index 05825d20b..bc3d595bb 100644 --- a/spring-batch-core/src/test/java/org/springframework/batch/core/scope/util/PlaceholderTargetSourceTests.java +++ b/spring-batch-core/src/test/java/org/springframework/batch/core/scope/util/PlaceholderTargetSourceTests.java @@ -39,6 +39,10 @@ public class PlaceholderTargetSourceTests extends ContextFactorySupport { @Qualifier("withMultiple") private PlaceholderTargetSource withMultiple; + @Autowired + @Qualifier("withMultipleStartAndEnd") + private PlaceholderTargetSource withMultipleStartAndEnd; + @Autowired @Qualifier("withEmbeddedDate") private PlaceholderTargetSource withEmbeddedDate; @@ -155,6 +159,12 @@ public class PlaceholderTargetSourceTests extends ContextFactorySupport { assertEquals("bar-4321-4321", target.getName()); } + @Test + public void testGetMultipleStartAndEnd() { + Node target = (Node) withMultipleStartAndEnd.getTarget(); + assertEquals("4321-4321", target.getName()); + } + @Test public void testGetEmbeddedDate() { Node target = (Node) withEmbeddedDate.getTarget(); @@ -165,7 +175,9 @@ public class PlaceholderTargetSourceTests extends ContextFactorySupport { @Test public void testGetDate() { Node target = (Node) withDate.getTarget(); - assertEquals(1L, target.getDate().getTime()); + SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd"); + String date = sdf.format(new Date(1L)); + assertEquals(date, sdf.format(target.getDate())); } public static interface Node { diff --git a/spring-batch-core/src/test/resources/org/springframework/batch/core/resource/ListPreparedStatementSetterTests-context.xml b/spring-batch-core/src/test/resources/org/springframework/batch/core/resource/ListPreparedStatementSetterTests-context.xml index 473c5c090..d1fd2b646 100644 --- a/spring-batch-core/src/test/resources/org/springframework/batch/core/resource/ListPreparedStatementSetterTests-context.xml +++ b/spring-batch-core/src/test/resources/org/springframework/batch/core/resource/ListPreparedStatementSetterTests-context.xml @@ -22,9 +22,9 @@ - - + + @@ -32,7 +32,10 @@ - #{jobParameters[start.id]} + + #{jobParameters[min.id]} + #{jobParameters[max.id]} + diff --git a/spring-batch-core/src/test/resources/org/springframework/batch/core/scope/util/PlaceholderTargetSourceTests-context.xml b/spring-batch-core/src/test/resources/org/springframework/batch/core/scope/util/PlaceholderTargetSourceTests-context.xml index c50e4bbd3..a2e6dd458 100644 --- a/spring-batch-core/src/test/resources/org/springframework/batch/core/scope/util/PlaceholderTargetSourceTests-context.xml +++ b/spring-batch-core/src/test/resources/org/springframework/batch/core/scope/util/PlaceholderTargetSourceTests-context.xml @@ -58,6 +58,12 @@ + + + + + @@ -117,6 +123,12 @@ + + + +