Skip to content
This repository was archived by the owner on May 14, 2025. It is now read-only.

Commit 34e480c

Browse files
cppwfsilayaperumalg
authored andcommitted
Users can override driverClassName property (#4144)
* Users can override driverClassName property resolves #4128 url can also be overridden using properties. * Updated based on code review. Thanks for the review
1 parent ef4fe8e commit 34e480c

File tree

2 files changed

+87
-22
lines changed

2 files changed

+87
-22
lines changed

spring-cloud-dataflow-server-core/src/main/java/org/springframework/cloud/dataflow/server/service/impl/TaskServiceUtils.java

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -128,8 +128,12 @@ public static TaskDefinition updateTaskProperties(TaskDefinition taskDefinition,
128128
}
129129
builder.setProperty("spring.datasource.username", dataSourceProperties.getUsername());
130130
}
131-
builder.setProperty("spring.datasource.url", dataSourceProperties.getUrl());
132-
builder.setProperty("spring.datasource.driverClassName", dataSourceProperties.getDriverClassName());
131+
if(!isPropertyPresent("spring.datasource.url", taskDefinition)) {
132+
builder.setProperty("spring.datasource.url", dataSourceProperties.getUrl());
133+
}
134+
if(!isPropertyPresent("spring.datasource.driverClassName", taskDefinition)) {
135+
builder.setProperty("spring.datasource.driverClassName", dataSourceProperties.getDriverClassName());
136+
}
133137
builder.setTaskName(taskDefinition.getTaskName());
134138
builder.setDslText(taskDefinition.getDslText());
135139
return builder.build();
@@ -228,4 +232,17 @@ private static String updateProperties(TaskNode taskNode, TaskApp subTask, Map<S
228232
}
229233
return result;
230234
}
235+
236+
private static boolean isPropertyPresent(String property, TaskDefinition taskDefinition) {
237+
RelaxedNames relaxedNames = new RelaxedNames(property);
238+
boolean result = false;
239+
Map<String, String> properties = taskDefinition.getProperties();
240+
for (String dataFlowUriKey : relaxedNames) {
241+
if (properties.containsKey(dataFlowUriKey)) {
242+
result = true;
243+
break;
244+
}
245+
}
246+
return result;
247+
}
231248
}

spring-cloud-dataflow-server-core/src/test/java/org/springframework/cloud/dataflow/server/service/impl/TaskServiceUtilsTests.java

Lines changed: 68 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323

2424
import org.junit.Rule;
2525
import org.junit.Test;
26+
import org.junit.jupiter.api.Assertions;
2627
import org.junit.rules.ExpectedException;
2728

2829
import org.springframework.boot.autoconfigure.jdbc.DataSourceProperties;
@@ -32,6 +33,7 @@
3233
import org.springframework.cloud.dataflow.server.controller.WhitelistProperties;
3334
import org.springframework.cloud.deployer.spi.core.AppDefinition;
3435
import org.springframework.core.io.Resource;
36+
import org.springframework.util.StringUtils;
3537

3638
import static org.assertj.core.api.Assertions.assertThat;
3739
import static org.junit.Assert.assertTrue;
@@ -47,7 +49,7 @@ public class TaskServiceUtilsTests {
4749
public static final String BASE_GRAPH = "AAA && BBB";
4850

4951
@Rule
50-
public ExpectedException expectedException = ExpectedException.none();
52+
public ExpectedException expectedException;
5153

5254
@Test
5355
public void testCreateComposedTaskDefinition() {
@@ -58,16 +60,18 @@ public void testCreateComposedTaskDefinition() {
5860

5961
@Test
6062
public void testCreateComposeTaskDefinitionNullNameCheck() {
61-
this.expectedException.expect(IllegalArgumentException.class);
62-
TaskConfigurationProperties props = new TaskConfigurationProperties();
63-
TaskServiceUtils.createComposedTaskDefinition(BASE_GRAPH);
64-
TaskServiceUtils.createComposedTaskDefinition(null);
63+
Assertions.assertThrows(IllegalArgumentException.class, () -> {
64+
TaskConfigurationProperties props = new TaskConfigurationProperties();
65+
TaskServiceUtils.createComposedTaskDefinition(BASE_GRAPH);
66+
TaskServiceUtils.createComposedTaskDefinition(null);
67+
});
6568
}
6669

6770
@Test
6871
public void testCreateComposeTaskDefinitionNullProperties() {
69-
this.expectedException.expect(IllegalArgumentException.class);
70-
TaskServiceUtils.createComposedTaskDefinition(BASE_GRAPH, null);
72+
Assertions.assertThrows(IllegalArgumentException.class, () -> {
73+
TaskServiceUtils.createComposedTaskDefinition(BASE_GRAPH, null);
74+
});
7175
}
7276

7377
@Test
@@ -88,16 +92,11 @@ public void testCTRPropertyReplacement() {
8892
@Test
8993
public void testDatabasePropUpdate() {
9094
TaskDefinition taskDefinition = new TaskDefinition("testTask", "testApp");
91-
DataSourceProperties dataSourceProperties = new DataSourceProperties();
92-
dataSourceProperties.setUsername("myUser");
93-
dataSourceProperties.setDriverClassName("myDriver");
94-
dataSourceProperties.setPassword("myPassword");
95-
dataSourceProperties.setUrl("myUrl");
95+
DataSourceProperties dataSourceProperties = getDataSourceProperties();
9696
TaskDefinition definition = TaskServiceUtils.updateTaskProperties(
9797
taskDefinition,
9898
dataSourceProperties);
9999

100-
assertThat(definition.getProperties().size()).isEqualTo(5);
101100
assertThat(definition.getProperties().get("spring.datasource.url")).isEqualTo("myUrl");
102101
assertThat(definition.getProperties().get("spring.datasource.driverClassName")).isEqualTo("myDriver");
103102
assertThat(definition.getProperties().get("spring.datasource.username")).isEqualTo("myUser");
@@ -107,18 +106,58 @@ public void testDatabasePropUpdate() {
107106
@Test
108107
public void testDatabasePropUpdateWithPlatform() {
109108
TaskDefinition taskDefinition = new TaskDefinition("testTask", "testApp");
110-
DataSourceProperties dataSourceProperties = new DataSourceProperties();
111-
dataSourceProperties.setUsername("myUser");
112-
dataSourceProperties.setDriverClassName("myDriver");
113-
dataSourceProperties.setPassword("myPassword");
114-
dataSourceProperties.setUrl("myUrl");
109+
DataSourceProperties dataSourceProperties = getDataSourceProperties();
115110
TaskDefinition definition = TaskServiceUtils.updateTaskProperties(
116111
taskDefinition,
117112
dataSourceProperties, false);
118113

119-
assertThat(definition.getProperties().size()).isEqualTo(3);
120-
assertThat(definition.getProperties().get("spring.datasource.url")).isEqualTo("myUrl");
114+
validateProperties(definition, 3);
121115
assertThat(definition.getProperties().get("spring.datasource.driverClassName")).isEqualTo("myDriver");
116+
}
117+
118+
@Test
119+
public void testDatabasePropUpdateWithPlatformForUserDriverClassName() {
120+
TaskDefinition definition = createUpdatedDefinitionForProperty("spring.datasource.driverClassName", "foobar");
121+
validateProperties(definition, 2);
122+
assertThat(definition.getProperties().get("spring.datasource.driverClassName")).isEqualTo("foobar");
123+
124+
definition = createUpdatedDefinitionForProperty("spring.datasource.driver-class-name", "feebar");
125+
validateProperties(definition, 2);
126+
assertThat(definition.getProperties().get("spring.datasource.driver-class-name")).isEqualTo("feebar");
127+
128+
definition = createUpdatedDefinitionForProperty(null, null);
129+
validateProperties(definition, 2);
130+
assertThat(definition.getProperties().get("spring.datasource.driverClassName")).isEqualTo("myDriver");
131+
}
132+
133+
@Test
134+
public void testDatabasePropUpdateWithPlatformForUrl() {
135+
TaskDefinition definition = createUpdatedDefinitionForProperty("spring.datasource.url", "newurl");
136+
assertThat(definition.getProperties().get("spring.datasource.url")).isEqualTo("newurl");
137+
138+
definition = createUpdatedDefinitionForProperty(null, null);
139+
assertThat(definition.getProperties().get("spring.datasource.url")).isEqualTo("myUrl");
140+
}
141+
142+
private TaskDefinition createUpdatedDefinitionForProperty(String key, String value) {
143+
Map<String, String> props = new HashMap<>();
144+
if(StringUtils.hasText(key) && StringUtils.hasText(value)) {
145+
props.put(key, value);
146+
}
147+
TaskDefinition taskDefinition = (new TaskDefinition.TaskDefinitionBuilder()).
148+
addProperties(props).
149+
setTaskName("testTask").
150+
setRegisteredAppName("testApp").
151+
build();
152+
DataSourceProperties dataSourceProperties = getDataSourceProperties();
153+
return TaskServiceUtils.updateTaskProperties(
154+
taskDefinition,
155+
dataSourceProperties, false);
156+
}
157+
158+
private void validateProperties(TaskDefinition definition, int size) {
159+
assertThat(definition.getProperties().size()).isEqualTo(size);
160+
assertThat(definition.getProperties().get("spring.datasource.url")).isEqualTo("myUrl");
122161
assertThat(definition.getProperties().get("spring.datasource.username")).isNull();
123162
assertThat(definition.getProperties().get("spring.datasource.password")).isNull();
124163
}
@@ -201,4 +240,13 @@ private TaskNode parse(String dsltext) {
201240
TaskNode ctn = new TaskParser("test", dsltext, true, true).parse();
202241
return ctn;
203242
}
243+
244+
private DataSourceProperties getDataSourceProperties() {
245+
DataSourceProperties dataSourceProperties = new DataSourceProperties();
246+
dataSourceProperties.setUsername("myUser");
247+
dataSourceProperties.setDriverClassName("myDriver");
248+
dataSourceProperties.setPassword("myPassword");
249+
dataSourceProperties.setUrl("myUrl");
250+
return dataSourceProperties;
251+
}
204252
}

0 commit comments

Comments
 (0)