You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by te...@apache.org on 2020/11/10 12:36:37 UTC
[shardingsphere-elasticjob] branch master updated: Adjust the
timing of configuring ElasticJob in Spring Boot startup process (#1703)
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: 吴伟杰 <ro...@me.com>
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;