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

Reply via email to