This is an automated email from the ASF dual-hosted git repository.
wuweijie pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/shardingsphere-elasticjob.git
The following commit(s) were added to refs/heads/master by this push:
new d1339cc Spring boot tracing filter (#1967)
d1339cc is described below
commit d1339cc2b0e3d411bd8d8754b194ab422d1af515
Author: skai <[email protected]>
AuthorDate: Mon Sep 6 10:22:09 2021 +0800
Spring boot tracing filter (#1967)
* support `elasticjob.tracing.includeJobNames` and
`elasticjob.tracing.excludeJobNames`
* add test
* change `tracingProperties` attribute type
* includeJobNames and excludeJobNames are mutually exclusive
* Code refactoring
Co-authored-by: 蔡顺铠 <[email protected]>
---
.../boot/job/ElasticJobBootstrapConfiguration.java | 31 ++++++++++++++---
.../tracing/ElasticJobTracingConfiguration.java | 2 ++
...ngConfiguration.java => TracingProperties.java} | 36 ++++++++-----------
.../additional-spring-configuration-metadata.json | 12 +++++++
.../spring/boot/job/ElasticJobSpringBootTest.java | 40 +++++++++++++++++++---
.../src/test/resources/application-elasticjob.yml | 1 +
6 files changed, 92 insertions(+), 30 deletions(-)
diff --git
a/elasticjob-lite/elasticjob-lite-spring/elasticjob-lite-spring-boot-starter/src/main/java/org/apache/shardingsphere/elasticjob/lite/spring/boot/job/ElasticJobBootstrapConfiguration.java
b/elasticjob-lite/elasticjob-lite-spring/elasticjob-lite-spring-boot-starter/src/main/java/org/apache/shardingsphere/elasticjob/lite/spring/boot/job/ElasticJobBootstrapConfiguration.java
index 0deeb97..317dfa3 100644
---
a/elasticjob-lite/elasticjob-lite-spring/elasticjob-lite-spring-boot-starter/src/main/java/org/apache/shardingsphere/elasticjob/lite/spring/boot/job/ElasticJobBootstrapConfiguration.java
+++
b/elasticjob-lite/elasticjob-lite-spring/elasticjob-lite-spring-boot-starter/src/main/java/org/apache/shardingsphere/elasticjob/lite/spring/boot/job/ElasticJobBootstrapConfiguration.java
@@ -25,6 +25,7 @@ import org.apache.shardingsphere.elasticjob.api.ElasticJob;
import org.apache.shardingsphere.elasticjob.api.JobConfiguration;
import
org.apache.shardingsphere.elasticjob.lite.api.bootstrap.impl.OneOffJobBootstrap;
import
org.apache.shardingsphere.elasticjob.lite.api.bootstrap.impl.ScheduleJobBootstrap;
+import
org.apache.shardingsphere.elasticjob.lite.spring.boot.tracing.TracingProperties;
import org.apache.shardingsphere.elasticjob.reg.base.CoordinatorRegistryCenter;
import org.apache.shardingsphere.elasticjob.tracing.api.TracingConfiguration;
import org.springframework.beans.factory.BeanCreationException;
@@ -35,7 +36,6 @@ import org.springframework.context.ApplicationContextAware;
import org.springframework.context.ConfigurableApplicationContext;
import java.util.Map;
-import java.util.Optional;
/**
* JobBootstrap configuration.
@@ -45,7 +45,7 @@ public class ElasticJobBootstrapConfiguration implements
SmartInitializingSingle
@Setter
private ApplicationContext applicationContext;
-
+
@Override
public void afterSingletonsInstantiated() {
log.info("creating Job Bootstrap Beans");
@@ -95,10 +95,33 @@ public class ElasticJobBootstrapConfiguration implements
SmartInitializingSingle
}
}
+ private void jobExtraConfigurations(final JobConfiguration jobConfig,
final TracingConfiguration<?> tracingConfig) {
+ if (null == tracingConfig) {
+ return;
+ }
+ TracingProperties tracingProperties =
applicationContext.getBean(TracingProperties.class);
+ Preconditions.checkArgument(null ==
tracingProperties.getIncludeJobNames()
+ || null == tracingProperties.getExcludeJobNames(),
+ "[tracing.includeJobNames] and [tracing.excludeJobNames] are
mutually exclusive.");
+ if (null == tracingProperties.getIncludeJobNames() && null ==
tracingProperties.getExcludeJobNames()) {
+ jobConfig.getExtraConfigurations().add(tracingConfig);
+ return;
+ }
+ if (null != tracingProperties.getIncludeJobNames()) {
+ if
(tracingProperties.getIncludeJobNames().contains(jobConfig.getJobName())) {
+ jobConfig.getExtraConfigurations().add(tracingConfig);
+ }
+ return;
+ }
+ if
(!tracingProperties.getExcludeJobNames().contains(jobConfig.getJobName())) {
+ jobConfig.getExtraConfigurations().add(tracingConfig);
+ }
+ }
+
private void registerClassedJob(final String jobName, final String
jobBootstrapBeanName, final SingletonBeanRegistry singletonBeanRegistry, final
CoordinatorRegistryCenter registryCenter,
final TracingConfiguration<?>
tracingConfig, final ElasticJobConfigurationProperties
jobConfigurationProperties) {
JobConfiguration jobConfig =
jobConfigurationProperties.toJobConfiguration(jobName);
-
Optional.ofNullable(tracingConfig).ifPresent(jobConfig.getExtraConfigurations()::add);
+ jobExtraConfigurations(jobConfig, tracingConfig);
ElasticJob elasticJob =
applicationContext.getBean(jobConfigurationProperties.getElasticJobClass());
if (Strings.isNullOrEmpty(jobConfig.getCron())) {
Preconditions.checkArgument(!Strings.isNullOrEmpty(jobBootstrapBeanName), "The
property [jobBootstrapBeanName] is required for One-off job.");
@@ -112,7 +135,7 @@ public class ElasticJobBootstrapConfiguration implements
SmartInitializingSingle
private void registerTypedJob(final String jobName, final String
jobBootstrapBeanName, final SingletonBeanRegistry singletonBeanRegistry, final
CoordinatorRegistryCenter registryCenter,
final TracingConfiguration<?> tracingConfig,
final ElasticJobConfigurationProperties jobConfigurationProperties) {
JobConfiguration jobConfig =
jobConfigurationProperties.toJobConfiguration(jobName);
-
Optional.ofNullable(tracingConfig).ifPresent(jobConfig.getExtraConfigurations()::add);
+ jobExtraConfigurations(jobConfig, tracingConfig);
if (Strings.isNullOrEmpty(jobConfig.getCron())) {
Preconditions.checkArgument(!Strings.isNullOrEmpty(jobBootstrapBeanName), "The
property [jobBootstrapBeanName] is required for One-off job.");
singletonBeanRegistry.registerSingleton(jobBootstrapBeanName, new
OneOffJobBootstrap(registryCenter,
jobConfigurationProperties.getElasticJobType(), jobConfig));
diff --git
a/elasticjob-lite/elasticjob-lite-spring/elasticjob-lite-spring-boot-starter/src/main/java/org/apache/shardingsphere/elasticjob/lite/spring/boot/tracing/ElasticJobTracingConfiguration.java
b/elasticjob-lite/elasticjob-lite-spring/elasticjob-lite-spring-boot-starter/src/main/java/org/apache/shardingsphere/elasticjob/lite/spring/boot/tracing/ElasticJobTracingConfiguration.java
index 4cb0e28..694a0c7 100644
---
a/elasticjob-lite/elasticjob-lite-spring/elasticjob-lite-spring-boot-starter/src/main/java/org/apache/shardingsphere/elasticjob/lite/spring/boot/tracing/ElasticJobTracingConfiguration.java
+++
b/elasticjob-lite/elasticjob-lite-spring/elasticjob-lite-spring-boot-starter/src/main/java/org/apache/shardingsphere/elasticjob/lite/spring/boot/tracing/ElasticJobTracingConfiguration.java
@@ -20,6 +20,7 @@ package
org.apache.shardingsphere.elasticjob.lite.spring.boot.tracing;
import org.apache.shardingsphere.elasticjob.tracing.api.TracingConfiguration;
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
+import
org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import javax.sql.DataSource;
@@ -27,6 +28,7 @@ import javax.sql.DataSource;
/**
* ElasticJob tracing auto configuration.
*/
+@EnableConfigurationProperties(TracingProperties.class)
public class ElasticJobTracingConfiguration {
/**
diff --git
a/elasticjob-lite/elasticjob-lite-spring/elasticjob-lite-spring-boot-starter/src/main/java/org/apache/shardingsphere/elasticjob/lite/spring/boot/tracing/ElasticJobTracingConfiguration.java
b/elasticjob-lite/elasticjob-lite-spring/elasticjob-lite-spring-boot-starter/src/main/java/org/apache/shardingsphere/elasticjob/lite/spring/boot/tracing/TracingProperties.java
similarity index 50%
copy from
elasticjob-lite/elasticjob-lite-spring/elasticjob-lite-spring-boot-starter/src/main/java/org/apache/shardingsphere/elasticjob/lite/spring/boot/tracing/ElasticJobTracingConfiguration.java
copy to
elasticjob-lite/elasticjob-lite-spring/elasticjob-lite-spring-boot-starter/src/main/java/org/apache/shardingsphere/elasticjob/lite/spring/boot/tracing/TracingProperties.java
index 4cb0e28..77c5532 100644
---
a/elasticjob-lite/elasticjob-lite-spring/elasticjob-lite-spring-boot-starter/src/main/java/org/apache/shardingsphere/elasticjob/lite/spring/boot/tracing/ElasticJobTracingConfiguration.java
+++
b/elasticjob-lite/elasticjob-lite-spring/elasticjob-lite-spring-boot-starter/src/main/java/org/apache/shardingsphere/elasticjob/lite/spring/boot/tracing/TracingProperties.java
@@ -17,28 +17,20 @@
package org.apache.shardingsphere.elasticjob.lite.spring.boot.tracing;
-import org.apache.shardingsphere.elasticjob.tracing.api.TracingConfiguration;
-import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
-import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
-import org.springframework.context.annotation.Bean;
+import java.util.Set;
+import lombok.Getter;
+import lombok.Setter;
+import org.springframework.boot.context.properties.ConfigurationProperties;
-import javax.sql.DataSource;
-
-/**
- * ElasticJob tracing auto configuration.
- */
-public class ElasticJobTracingConfiguration {
+@Getter
+@Setter
+@ConfigurationProperties(prefix = "elasticjob.tracing")
+public class TracingProperties {
+
+ private String type;
+
+ private Set<String> includeJobNames;
+
+ private Set<String> excludeJobNames;
- /**
- * Create a bean of tracing configuration.
- *
- * @param dataSource required by constructor
- * @return a bean of tracing configuration
- */
- @Bean
- @ConditionalOnBean(DataSource.class)
- @ConditionalOnProperty(name = "elasticjob.tracing.type", havingValue =
"RDB")
- public TracingConfiguration<DataSource> tracingConfiguration(final
DataSource dataSource) {
- return new TracingConfiguration<>("RDB", dataSource);
- }
}
diff --git
a/elasticjob-lite/elasticjob-lite-spring/elasticjob-lite-spring-boot-starter/src/main/resources/META-INF/additional-spring-configuration-metadata.json
b/elasticjob-lite/elasticjob-lite-spring/elasticjob-lite-spring-boot-starter/src/main/resources/META-INF/additional-spring-configuration-metadata.json
index db70e7d..c4e4e38 100644
---
a/elasticjob-lite/elasticjob-lite-spring/elasticjob-lite-spring-boot-starter/src/main/resources/META-INF/additional-spring-configuration-metadata.json
+++
b/elasticjob-lite/elasticjob-lite-spring/elasticjob-lite-spring-boot-starter/src/main/resources/META-INF/additional-spring-configuration-metadata.json
@@ -89,6 +89,18 @@
"description": "Type of Event Trace storage."
},
{
+ "name": "elasticjob.tracing.includeJobNames",
+ "type": "java.util.Set<java.lang.String>",
+ "description": "include the specific job.",
+ "defaultValue": null
+ },
+ {
+ "name": "elasticjob.tracing.excludeJobNames",
+ "type": "java.util.Set<java.lang.String>",
+ "description": "exclude the specific job.",
+ "defaultValue": null
+ },
+ {
"name": "elasticjob.jobs",
"type":
"java.util.Map<java.lang.String,org.apache.shardingsphere.elasticjob.lite.spring.boot.job.ElasticJobConfigurationProperties>"
},
diff --git
a/elasticjob-lite/elasticjob-lite-spring/elasticjob-lite-spring-boot-starter/src/test/java/org/apache/shardingsphere/elasticjob/lite/spring/boot/job/ElasticJobSpringBootTest.java
b/elasticjob-lite/elasticjob-lite-spring/elasticjob-lite-spring-boot-starter/src/test/java/org/apache/shardingsphere/elasticjob/lite/spring/boot/job/ElasticJobSpringBootTest.java
index 71032f0..1efcaa5 100644
---
a/elasticjob-lite/elasticjob-lite-spring/elasticjob-lite-spring-boot-starter/src/test/java/org/apache/shardingsphere/elasticjob/lite/spring/boot/job/ElasticJobSpringBootTest.java
+++
b/elasticjob-lite/elasticjob-lite-spring/elasticjob-lite-spring-boot-starter/src/test/java/org/apache/shardingsphere/elasticjob/lite/spring/boot/job/ElasticJobSpringBootTest.java
@@ -18,13 +18,16 @@
package org.apache.shardingsphere.elasticjob.lite.spring.boot.job;
import org.apache.shardingsphere.elasticjob.api.ElasticJob;
+import org.apache.shardingsphere.elasticjob.api.JobExtraConfiguration;
import org.apache.shardingsphere.elasticjob.infra.concurrent.BlockUtils;
import org.apache.shardingsphere.elasticjob.lite.api.bootstrap.JobBootstrap;
import
org.apache.shardingsphere.elasticjob.lite.api.bootstrap.impl.OneOffJobBootstrap;
import
org.apache.shardingsphere.elasticjob.lite.api.bootstrap.impl.ScheduleJobBootstrap;
+import
org.apache.shardingsphere.elasticjob.lite.internal.schedule.JobScheduler;
import
org.apache.shardingsphere.elasticjob.lite.spring.boot.job.fixture.EmbedTestingServer;
import
org.apache.shardingsphere.elasticjob.lite.spring.boot.job.fixture.job.impl.CustomTestJob;
import
org.apache.shardingsphere.elasticjob.lite.spring.boot.reg.ZookeeperProperties;
+import
org.apache.shardingsphere.elasticjob.lite.spring.boot.tracing.TracingProperties;
import
org.apache.shardingsphere.elasticjob.reg.zookeeper.ZookeeperRegistryCenter;
import org.apache.shardingsphere.elasticjob.tracing.api.TracingConfiguration;
import org.junit.BeforeClass;
@@ -35,9 +38,13 @@ import org.springframework.test.context.ActiveProfiles;
import
org.springframework.test.context.junit4.AbstractJUnit4SpringContextTests;
import javax.sql.DataSource;
+import java.lang.reflect.Field;
import java.sql.SQLException;
import java.util.Arrays;
+import java.util.Collection;
+import java.util.HashSet;
import java.util.Map;
+import java.util.Set;
import static org.hamcrest.CoreMatchers.equalTo;
import static org.hamcrest.CoreMatchers.is;
@@ -84,7 +91,18 @@ public class ElasticJobSpringBootTest extends
AbstractJUnit4SpringContextTests {
DataSource dataSource = (DataSource)
tracingConfig.getTracingStorageConfiguration().getStorage();
assertNotNull(dataSource.getConnection());
}
-
+
+ @Test
+ public void assertTracingProperties() {
+ assertNotNull(applicationContext);
+ TracingProperties tracingProperties =
applicationContext.getBean(TracingProperties.class);
+ assertNotNull(tracingProperties);
+ assertNull(tracingProperties.getIncludeJobNames());
+ Set<String> excludeJobNames = new HashSet<>();
+ excludeJobNames.add("customTestJob");
+ assertThat(tracingProperties.getExcludeJobNames(),
is(excludeJobNames));
+ }
+
@Test
public void assertElasticJobProperties() {
assertNotNull(applicationContext);
@@ -122,10 +140,24 @@ public class ElasticJobSpringBootTest extends
AbstractJUnit4SpringContextTests {
}
@Test
- public void assertOneOffJobBootstrapBeanName() {
+ public void assertOneOffJobBootstrapBeanName()
+ throws NoSuchFieldException, SecurityException,
IllegalArgumentException, IllegalAccessException {
assertNotNull(applicationContext);
- assertNotNull(applicationContext.getBean("customTestJobBean",
OneOffJobBootstrap.class));
- assertNotNull(applicationContext.getBean("printTestJobBean",
OneOffJobBootstrap.class));
+ OneOffJobBootstrap customTestJobBootstrap =
+ applicationContext.getBean("customTestJobBean",
OneOffJobBootstrap.class);
+ assertNotNull(customTestJobBootstrap);
+ Field jobSchedulerField =
customTestJobBootstrap.getClass().getDeclaredField("jobScheduler");
+ jobSchedulerField.setAccessible(true);
+ Collection<JobExtraConfiguration> extraConfigurations =
+ ((JobScheduler)
jobSchedulerField.get(customTestJobBootstrap)).getJobConfig().getExtraConfigurations();
+ assertThat(extraConfigurations.size(), is(0));
+ OneOffJobBootstrap printTestJobBootstrap =
+ applicationContext.getBean("printTestJobBean",
OneOffJobBootstrap.class);
+ jobSchedulerField =
printTestJobBootstrap.getClass().getDeclaredField("jobScheduler");
+ jobSchedulerField.setAccessible(true);
+ extraConfigurations =
+ ((JobScheduler)
jobSchedulerField.get(printTestJobBootstrap)).getJobConfig().getExtraConfigurations();
+ assertThat(extraConfigurations.size(), is(1));
}
@Test
diff --git
a/elasticjob-lite/elasticjob-lite-spring/elasticjob-lite-spring-boot-starter/src/test/resources/application-elasticjob.yml
b/elasticjob-lite/elasticjob-lite-spring/elasticjob-lite-spring-boot-starter/src/test/resources/application-elasticjob.yml
index 1e7ec2b..98b41fe 100644
---
a/elasticjob-lite/elasticjob-lite-spring/elasticjob-lite-spring-boot-starter/src/test/resources/application-elasticjob.yml
+++
b/elasticjob-lite/elasticjob-lite-spring/elasticjob-lite-spring-boot-starter/src/test/resources/application-elasticjob.yml
@@ -25,6 +25,7 @@ spring:
elasticjob:
tracing:
type: RDB
+ excludeJobNames: [customTestJob]
regCenter:
serverLists: localhost:18181
namespace: elasticjob-lite-spring-boot-starter