This is an automated email from the ASF dual-hosted git repository.

technoboy 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 b214854  Adjust the timing of configuring ElasticJob in Spring Boot 
startup process (#1703)
b214854 is described below

commit b21485497746011fd1c4b2fc3d35d0972af82d42
Author: 吴伟杰 <[email protected]>
AuthorDate: Tue Nov 10 20:33:11 2020 +0800

    Adjust the timing of configuring ElasticJob in Spring Boot startup process 
(#1703)
---
 ....java => ElasticJobBootstrapConfiguration.java} |  47 +++-------
 .../boot/job/ElasticJobLiteAutoConfiguration.java  | 104 ++-------------------
 ...java => ScheduleJobBootstrapStartupRunner.java} |   2 +-
 3 files changed, 21 insertions(+), 132 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/ElasticJobLiteAutoConfiguration.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
similarity index 74%
copy from 
elasticjob-lite/elasticjob-lite-spring/elasticjob-lite-spring-boot-starter/src/main/java/org/apache/shardingsphere/elasticjob/lite/spring/boot/job/ElasticJobLiteAutoConfiguration.java
copy to 
elasticjob-lite/elasticjob-lite-spring/elasticjob-lite-spring-boot-starter/src/main/java/org/apache/shardingsphere/elasticjob/lite/spring/boot/job/ElasticJobBootstrapConfiguration.java
index f6b65fc..11f4279 100644
--- 
a/elasticjob-lite/elasticjob-lite-spring/elasticjob-lite-spring-boot-starter/src/main/java/org/apache/shardingsphere/elasticjob/lite/spring/boot/job/ElasticJobLiteAutoConfiguration.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
@@ -7,7 +7,7 @@
  * the License.  You may obtain a copy of the License at
  *
  *     http://www.apache.org/licenses/LICENSE-2.0
- *  
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -24,39 +24,25 @@ 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.reg.ElasticJobRegistryCenterConfiguration;
-import 
org.apache.shardingsphere.elasticjob.lite.spring.boot.reg.snapshot.ElasticJobSnapshotServiceConfiguration;
-import 
org.apache.shardingsphere.elasticjob.lite.spring.boot.tracing.ElasticJobTracingConfiguration;
 import org.apache.shardingsphere.elasticjob.reg.base.CoordinatorRegistryCenter;
 import org.apache.shardingsphere.elasticjob.tracing.api.TracingConfiguration;
 import org.springframework.beans.factory.BeanCreationException;
+import org.springframework.beans.factory.config.BeanPostProcessor;
 import org.springframework.beans.factory.config.SingletonBeanRegistry;
-import org.springframework.boot.autoconfigure.AutoConfigureAfter;
-import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
-import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
-import 
org.springframework.boot.context.properties.EnableConfigurationProperties;
 import org.springframework.context.ApplicationContext;
 import org.springframework.context.ApplicationContextAware;
 import org.springframework.context.ConfigurableApplicationContext;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.context.annotation.Import;
 
 import javax.annotation.PostConstruct;
 import java.util.Map;
-import java.util.Map.Entry;
 import java.util.Optional;
 
 /**
- * ElasticJob-Lite auto configuration.
+ * JobBootstrap configuration.
  */
-@Configuration
-@AutoConfigureAfter(DataSourceAutoConfiguration.class)
-@ConditionalOnProperty(name = "elasticjob.enabled", havingValue = "true", 
matchIfMissing = true)
-@Import({ElasticJobRegistryCenterConfiguration.class, 
ElasticJobTracingConfiguration.class, ElasticJobStartupRunner.class, 
ElasticJobSnapshotServiceConfiguration.class})
-@EnableConfigurationProperties(ElasticJobProperties.class)
-@Setter
-public class ElasticJobLiteAutoConfiguration implements 
ApplicationContextAware {
+public class ElasticJobBootstrapConfiguration implements 
ApplicationContextAware, BeanPostProcessor {
     
+    @Setter
     private ApplicationContext applicationContext;
     
     /**
@@ -80,14 +66,13 @@ public class ElasticJobLiteAutoConfiguration implements 
ApplicationContextAware
         if (1 == tracingConfigurationBeans.size()) {
             return tracingConfigurationBeans.values().iterator().next();
         }
-        throw new BeanCreationException(
-                "More than one 
[org.apache.shardingsphere.elasticjob.tracing.api.TracingConfiguration] beans 
found. "
-                        + "Consider disabling 
[org.apache.shardingsphere.elasticjob.tracing.boot.ElasticJobTracingAutoConfiguration].");
+        throw new BeanCreationException("More than one 
[org.apache.shardingsphere.elasticjob.tracing.api.TracingConfiguration] beans 
found. "
+                + "Consider disabling 
[org.apache.shardingsphere.elasticjob.tracing.boot.ElasticJobTracingAutoConfiguration].");
     }
     
     private void constructJobBootstraps(final ElasticJobProperties 
elasticJobProperties, final SingletonBeanRegistry singletonBeanRegistry,
                                         final CoordinatorRegistryCenter 
registryCenter, final TracingConfiguration<?> tracingConfig) {
-        for (Entry<String, ElasticJobConfigurationProperties> entry : 
elasticJobProperties.getJobs().entrySet()) {
+        for (Map.Entry<String, ElasticJobConfigurationProperties> entry : 
elasticJobProperties.getJobs().entrySet()) {
             ElasticJobConfigurationProperties jobConfigurationProperties = 
entry.getValue();
             Preconditions.checkArgument(null != 
jobConfigurationProperties.getElasticJobClass()
                             || 
!Strings.isNullOrEmpty(jobConfigurationProperties.getElasticJobType()),
@@ -109,13 +94,11 @@ public class ElasticJobLiteAutoConfiguration implements 
ApplicationContextAware
         
Optional.ofNullable(tracingConfig).ifPresent(jobConfig.getExtraConfigurations()::add);
         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.");
-            singletonBeanRegistry.registerSingleton(jobBootstrapBeanName,
-                    new OneOffJobBootstrap(registryCenter, elasticJob, 
jobConfig));
+            
Preconditions.checkArgument(!Strings.isNullOrEmpty(jobBootstrapBeanName), "The 
property [jobBootstrapBeanName] is required for One-off job.");
+            singletonBeanRegistry.registerSingleton(jobBootstrapBeanName, new 
OneOffJobBootstrap(registryCenter, elasticJob, jobConfig));
         } else {
             String beanName = !Strings.isNullOrEmpty(jobBootstrapBeanName) ? 
jobBootstrapBeanName : jobConfig.getJobName() + "ScheduleJobBootstrap";
-            singletonBeanRegistry.registerSingleton(beanName,
-                    new ScheduleJobBootstrap(registryCenter, elasticJob, 
jobConfig));
+            singletonBeanRegistry.registerSingleton(beanName, new 
ScheduleJobBootstrap(registryCenter, elasticJob, jobConfig));
         }
     }
     
@@ -124,13 +107,11 @@ public class ElasticJobLiteAutoConfiguration implements 
ApplicationContextAware
         JobConfiguration jobConfig = 
jobConfigurationProperties.toJobConfiguration(jobName);
         
Optional.ofNullable(tracingConfig).ifPresent(jobConfig.getExtraConfigurations()::add);
         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));
+            
Preconditions.checkArgument(!Strings.isNullOrEmpty(jobBootstrapBeanName), "The 
property [jobBootstrapBeanName] is required for One-off job.");
+            singletonBeanRegistry.registerSingleton(jobBootstrapBeanName, new 
OneOffJobBootstrap(registryCenter, 
jobConfigurationProperties.getElasticJobType(), jobConfig));
         } else {
             String beanName = !Strings.isNullOrEmpty(jobBootstrapBeanName) ? 
jobBootstrapBeanName : jobConfig.getJobName() + "ScheduleJobBootstrap";
-            singletonBeanRegistry.registerSingleton(beanName,
-                    new ScheduleJobBootstrap(registryCenter, 
jobConfigurationProperties.getElasticJobType(), jobConfig));
+            singletonBeanRegistry.registerSingleton(beanName, new 
ScheduleJobBootstrap(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/job/ElasticJobLiteAutoConfiguration.java
 
b/elasticjob-lite/elasticjob-lite-spring/elasticjob-lite-spring-boot-starter/src/main/java/org/apache/shardingsphere/elasticjob/lite/spring/boot/job/ElasticJobLiteAutoConfiguration.java
index f6b65fc..0473e39 100644
--- 
a/elasticjob-lite/elasticjob-lite-spring/elasticjob-lite-spring-boot-starter/src/main/java/org/apache/shardingsphere/elasticjob/lite/spring/boot/job/ElasticJobLiteAutoConfiguration.java
+++ 
b/elasticjob-lite/elasticjob-lite-spring/elasticjob-lite-spring-boot-starter/src/main/java/org/apache/shardingsphere/elasticjob/lite/spring/boot/job/ElasticJobLiteAutoConfiguration.java
@@ -17,120 +17,28 @@
 
 package org.apache.shardingsphere.elasticjob.lite.spring.boot.job;
 
-import com.google.common.base.Preconditions;
-import com.google.common.base.Strings;
-import lombok.Setter;
-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.reg.ElasticJobRegistryCenterConfiguration;
 import 
org.apache.shardingsphere.elasticjob.lite.spring.boot.reg.snapshot.ElasticJobSnapshotServiceConfiguration;
 import 
org.apache.shardingsphere.elasticjob.lite.spring.boot.tracing.ElasticJobTracingConfiguration;
-import org.apache.shardingsphere.elasticjob.reg.base.CoordinatorRegistryCenter;
-import org.apache.shardingsphere.elasticjob.tracing.api.TracingConfiguration;
-import org.springframework.beans.factory.BeanCreationException;
-import org.springframework.beans.factory.config.SingletonBeanRegistry;
 import org.springframework.boot.autoconfigure.AutoConfigureAfter;
 import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
 import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
 import 
org.springframework.boot.context.properties.EnableConfigurationProperties;
-import org.springframework.context.ApplicationContext;
-import org.springframework.context.ApplicationContextAware;
-import org.springframework.context.ConfigurableApplicationContext;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.context.annotation.Import;
 
-import javax.annotation.PostConstruct;
-import java.util.Map;
-import java.util.Map.Entry;
-import java.util.Optional;
-
 /**
  * ElasticJob-Lite auto configuration.
  */
-@Configuration
+@Configuration(proxyBeanMethods = false)
 @AutoConfigureAfter(DataSourceAutoConfiguration.class)
 @ConditionalOnProperty(name = "elasticjob.enabled", havingValue = "true", 
matchIfMissing = true)
-@Import({ElasticJobRegistryCenterConfiguration.class, 
ElasticJobTracingConfiguration.class, ElasticJobStartupRunner.class, 
ElasticJobSnapshotServiceConfiguration.class})
+@Import({ElasticJobRegistryCenterConfiguration.class, 
ElasticJobTracingConfiguration.class, 
ElasticJobSnapshotServiceConfiguration.class})
 @EnableConfigurationProperties(ElasticJobProperties.class)
-@Setter
-public class ElasticJobLiteAutoConfiguration implements 
ApplicationContextAware {
-    
-    private ApplicationContext applicationContext;
-    
-    /**
-     * Create job bootstrap instances and register them into container.
-     */
-    @PostConstruct
-    public void createJobBootstrapBeans() {
-        ElasticJobProperties elasticJobProperties = 
applicationContext.getBean(ElasticJobProperties.class);
-        SingletonBeanRegistry singletonBeanRegistry = 
((ConfigurableApplicationContext) applicationContext).getBeanFactory();
-        CoordinatorRegistryCenter registryCenter = 
applicationContext.getBean(CoordinatorRegistryCenter.class);
-        TracingConfiguration<?> tracingConfig = getTracingConfiguration();
-        constructJobBootstraps(elasticJobProperties, singletonBeanRegistry, 
registryCenter, tracingConfig);
-    }
-    
-    @SuppressWarnings("rawtypes")
-    private TracingConfiguration<?> getTracingConfiguration() {
-        Map<String, TracingConfiguration> tracingConfigurationBeans = 
applicationContext.getBeansOfType(TracingConfiguration.class);
-        if (tracingConfigurationBeans.isEmpty()) {
-            return null;
-        }
-        if (1 == tracingConfigurationBeans.size()) {
-            return tracingConfigurationBeans.values().iterator().next();
-        }
-        throw new BeanCreationException(
-                "More than one 
[org.apache.shardingsphere.elasticjob.tracing.api.TracingConfiguration] beans 
found. "
-                        + "Consider disabling 
[org.apache.shardingsphere.elasticjob.tracing.boot.ElasticJobTracingAutoConfiguration].");
-    }
-    
-    private void constructJobBootstraps(final ElasticJobProperties 
elasticJobProperties, final SingletonBeanRegistry singletonBeanRegistry,
-                                        final CoordinatorRegistryCenter 
registryCenter, final TracingConfiguration<?> tracingConfig) {
-        for (Entry<String, ElasticJobConfigurationProperties> entry : 
elasticJobProperties.getJobs().entrySet()) {
-            ElasticJobConfigurationProperties jobConfigurationProperties = 
entry.getValue();
-            Preconditions.checkArgument(null != 
jobConfigurationProperties.getElasticJobClass()
-                            || 
!Strings.isNullOrEmpty(jobConfigurationProperties.getElasticJobType()),
-                    "Please specific [elasticJobClass] or [elasticJobType] 
under job configuration.");
-            Preconditions.checkArgument(null == 
jobConfigurationProperties.getElasticJobClass()
-                            || 
Strings.isNullOrEmpty(jobConfigurationProperties.getElasticJobType()),
-                    "[elasticJobClass] and [elasticJobType] are mutually 
exclusive.");
-            if (null != jobConfigurationProperties.getElasticJobClass()) {
-                registerClassedJob(entry.getKey(), 
entry.getValue().getJobBootstrapBeanName(), singletonBeanRegistry, 
registryCenter, tracingConfig, jobConfigurationProperties);
-            } else if 
(!Strings.isNullOrEmpty(jobConfigurationProperties.getElasticJobType())) {
-                registerTypedJob(entry.getKey(), 
entry.getValue().getJobBootstrapBeanName(), singletonBeanRegistry, 
registryCenter, tracingConfig, jobConfigurationProperties);
-            }
-        }
-    }
-    
-    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);
-        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.");
-            singletonBeanRegistry.registerSingleton(jobBootstrapBeanName,
-                    new OneOffJobBootstrap(registryCenter, elasticJob, 
jobConfig));
-        } else {
-            String beanName = !Strings.isNullOrEmpty(jobBootstrapBeanName) ? 
jobBootstrapBeanName : jobConfig.getJobName() + "ScheduleJobBootstrap";
-            singletonBeanRegistry.registerSingleton(beanName,
-                    new ScheduleJobBootstrap(registryCenter, elasticJob, 
jobConfig));
-        }
-    }
+public class ElasticJobLiteAutoConfiguration {
     
-    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);
-        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));
-        } else {
-            String beanName = !Strings.isNullOrEmpty(jobBootstrapBeanName) ? 
jobBootstrapBeanName : jobConfig.getJobName() + "ScheduleJobBootstrap";
-            singletonBeanRegistry.registerSingleton(beanName,
-                    new ScheduleJobBootstrap(registryCenter, 
jobConfigurationProperties.getElasticJobType(), jobConfig));
-        }
+    @Configuration(proxyBeanMethods = false)
+    @Import({ElasticJobBootstrapConfiguration.class, 
ScheduleJobBootstrapStartupRunner.class})
+    protected static class ElasticJobConfiguration {
     }
 }
diff --git 
a/elasticjob-lite/elasticjob-lite-spring/elasticjob-lite-spring-boot-starter/src/main/java/org/apache/shardingsphere/elasticjob/lite/spring/boot/job/ElasticJobStartupRunner.java
 
b/elasticjob-lite/elasticjob-lite-spring/elasticjob-lite-spring-boot-starter/src/main/java/org/apache/shardingsphere/elasticjob/lite/spring/boot/job/ScheduleJobBootstrapStartupRunner.java
similarity index 93%
rename from 
elasticjob-lite/elasticjob-lite-spring/elasticjob-lite-spring-boot-starter/src/main/java/org/apache/shardingsphere/elasticjob/lite/spring/boot/job/ElasticJobStartupRunner.java
rename to 
elasticjob-lite/elasticjob-lite-spring/elasticjob-lite-spring-boot-starter/src/main/java/org/apache/shardingsphere/elasticjob/lite/spring/boot/job/ScheduleJobBootstrapStartupRunner.java
index 00a687c..88b4a6c 100644
--- 
a/elasticjob-lite/elasticjob-lite-spring/elasticjob-lite-spring-boot-starter/src/main/java/org/apache/shardingsphere/elasticjob/lite/spring/boot/job/ElasticJobStartupRunner.java
+++ 
b/elasticjob-lite/elasticjob-lite-spring/elasticjob-lite-spring-boot-starter/src/main/java/org/apache/shardingsphere/elasticjob/lite/spring/boot/job/ScheduleJobBootstrapStartupRunner.java
@@ -29,7 +29,7 @@ import org.springframework.context.ApplicationContextAware;
  */
 @Setter
 @Slf4j
-public class ElasticJobStartupRunner implements CommandLineRunner, 
ApplicationContextAware {
+public class ScheduleJobBootstrapStartupRunner implements CommandLineRunner, 
ApplicationContextAware {
     
     private ApplicationContext applicationContext;
     

Reply via email to