You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by zh...@apache.org on 2020/07/15 03:26:43 UTC
[shardingsphere-elasticjob] branch master updated: Add
setDestroyMethodName for reg spring namespace (#1065)
This is an automated email from the ASF dual-hosted git repository.
zhangliang 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 bfb66ff Add setDestroyMethodName for reg spring namespace (#1065)
bfb66ff is described below
commit bfb66ff541a04532e45886f87c85058d957b847c
Author: Liang Zhang <te...@163.com>
AuthorDate: Wed Jul 15 11:26:31 2020 +0800
Add setDestroyMethodName for reg spring namespace (#1065)
* Add setDestroyMethodName for reg spring namespace
* Add todo
* Refactor ElasticJobLiteAutoConfiguration
---
.../lite/boot/ElasticJobLiteAutoConfiguration.java | 101 ++++++++++-----------
.../lite/boot/ElasticJobStartupRunner.java | 28 +++---
.../reg/parser/ZookeeperBeanDefinitionParser.java | 1 +
3 files changed, 59 insertions(+), 71 deletions(-)
diff --git a/elasticjob-lite/elasticjob-lite-spring-boot-starter/src/main/java/org/apache/shardingsphere/elasticjob/lite/boot/ElasticJobLiteAutoConfiguration.java b/elasticjob-lite/elasticjob-lite-spring-boot-starter/src/main/java/org/apache/shardingsphere/elasticjob/lite/boot/ElasticJobLiteAutoConfiguration.java
index 9ed7a2d..a927d01 100644
--- a/elasticjob-lite/elasticjob-lite-spring-boot-starter/src/main/java/org/apache/shardingsphere/elasticjob/lite/boot/ElasticJobLiteAutoConfiguration.java
+++ b/elasticjob-lite/elasticjob-lite-spring-boot-starter/src/main/java/org/apache/shardingsphere/elasticjob/lite/boot/ElasticJobLiteAutoConfiguration.java
@@ -17,6 +17,7 @@
package org.apache.shardingsphere.elasticjob.lite.boot;
+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;
@@ -26,7 +27,6 @@ import org.apache.shardingsphere.elasticjob.reg.base.CoordinatorRegistryCenter;
import org.apache.shardingsphere.elasticjob.reg.boot.ElasticJobRegistryCenterAutoConfiguration;
import org.apache.shardingsphere.elasticjob.tracing.api.TracingConfiguration;
import org.assertj.core.util.Strings;
-import org.springframework.beans.BeansException;
import org.springframework.beans.factory.BeanCreationException;
import org.springframework.beans.factory.config.SingletonBeanRegistry;
import org.springframework.boot.autoconfigure.AutoConfigureAfter;
@@ -41,81 +41,74 @@ import org.springframework.context.annotation.Import;
import javax.annotation.PostConstruct;
import java.util.List;
import java.util.Map;
+import java.util.Map.Entry;
@Configuration
@AutoConfigureAfter(ElasticJobRegistryCenterAutoConfiguration.class)
@ConditionalOnProperty(name = "elasticjob.enabled", havingValue = "true", matchIfMissing = true)
@Import(ElasticJobStartupRunner.class)
@EnableConfigurationProperties(ElasticJobProperties.class)
+@Setter
public class ElasticJobLiteAutoConfiguration implements ApplicationContextAware {
-
+
private ApplicationContext applicationContext;
-
- @Override
- public void setApplicationContext(final ApplicationContext applicationContext) throws BeansException {
- this.applicationContext = applicationContext;
- }
-
+
/**
- * Create JobBootstrap instances.
+ * Create job bootstrap instances.
*
- * @throws ClassNotFoundException if the Class configured under classed jobs not found
+ * @throws ClassNotFoundException if the class configured under classed jobs not found
*/
@PostConstruct
public void createJobBootstrapBeans() throws ClassNotFoundException {
- ElasticJobProperties elasticJobProperties = this.applicationContext.getBean(ElasticJobProperties.class);
-
- // Looking for a better way
- final SingletonBeanRegistry beanFactory = ((ConfigurableApplicationContext) this.applicationContext).getBeanFactory();
-
- final CoordinatorRegistryCenter registryCenter = this.applicationContext.getBean(CoordinatorRegistryCenter.class);
- TracingConfiguration<?> tracingConfiguration = null;
- Map<String, TracingConfiguration> tracingConfigurationBeans = this.applicationContext.getBeansOfType(TracingConfiguration.class);
- if (tracingConfigurationBeans.size() == 1) {
- tracingConfiguration = tracingConfigurationBeans.values().stream().findAny().orElse(null);
- } else if (tracingConfigurationBeans.size() > 1) {
- throw new BeanCreationException(
- "More than one [org.apache.shardingsphere.elasticjob.tracing.api.TracingConfiguration] beans found. "
- + "Consider disabling [org.apache.shardingsphere.elasticjob.tracing.boot.ElasticjobTracingAutoConfiguration].");
+ ElasticJobProperties elasticJobProperties = applicationContext.getBean(ElasticJobProperties.class);
+ // TODO Looking for a better way
+ SingletonBeanRegistry beanFactory = ((ConfigurableApplicationContext) applicationContext).getBeanFactory();
+ CoordinatorRegistryCenter registryCenter = applicationContext.getBean(CoordinatorRegistryCenter.class);
+ TracingConfiguration tracingConfiguration = getTracingConfiguration();
+ registerClassedJobs(elasticJobProperties, beanFactory, registryCenter, tracingConfiguration);
+ registerTypedJobs(elasticJobProperties, beanFactory, registryCenter, tracingConfiguration);
+ }
+
+ private TracingConfiguration getTracingConfiguration() {
+ Map<String, TracingConfiguration> tracingConfigurationBeans = applicationContext.getBeansOfType(TracingConfiguration.class);
+ if (tracingConfigurationBeans.isEmpty()) {
+ return null;
}
-
- for (String elasticJobClassName : elasticJobProperties.getClassed().keySet()) {
- List<JobConfigurationPOJO> jobConfigurationPojoList = elasticJobProperties.getClassed().get(elasticJobClassName);
- for (JobConfigurationPOJO jobConfigurationPojo : jobConfigurationPojoList) {
- JobConfiguration jobConfiguration = jobConfigurationPojo.toJobConfiguration();
- ElasticJob elasticJob = (ElasticJob) applicationContext.getBean(
- Thread.currentThread().getContextClassLoader().loadClass(elasticJobClassName));
- if (!Strings.isNullOrEmpty(jobConfiguration.getCron())) {
- beanFactory.registerSingleton(
- jobConfiguration.getJobName() + "ScheduleJobBootstrap",
- new ScheduleJobBootstrap(registryCenter,
- elasticJob,
- jobConfiguration, tracingConfiguration));
+ 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 registerClassedJobs(final ElasticJobProperties elasticJobProperties, final SingletonBeanRegistry beanFactory,
+ final CoordinatorRegistryCenter registryCenter, final TracingConfiguration tracingConfiguration) throws ClassNotFoundException {
+ for (Entry<String, List<JobConfigurationPOJO>> entry : elasticJobProperties.getClassed().entrySet()) {
+ for (JobConfigurationPOJO each : entry.getValue()) {
+ JobConfiguration jobConfiguration = each.toJobConfiguration();
+ ElasticJob elasticJob = (ElasticJob) applicationContext.getBean(Thread.currentThread().getContextClassLoader().loadClass(entry.getKey()));
+ if (Strings.isNullOrEmpty(jobConfiguration.getCron())) {
+ beanFactory.registerSingleton(jobConfiguration.getJobName() + "OneOffJobBootstrap", new OneOffJobBootstrap(registryCenter, elasticJob, jobConfiguration, tracingConfiguration));
} else {
beanFactory.registerSingleton(
- jobConfiguration.getJobName() + "OneOffJobBootstrap",
- new OneOffJobBootstrap(registryCenter,
- elasticJob,
- jobConfiguration, tracingConfiguration));
+ jobConfiguration.getJobName() + "ScheduleJobBootstrap", new ScheduleJobBootstrap(registryCenter, elasticJob, jobConfiguration, tracingConfiguration));
}
}
}
- for (String elasticJobType : elasticJobProperties.getTyped().keySet()) {
- List<JobConfigurationPOJO> jobConfigurationPojoList = elasticJobProperties.getTyped().get(elasticJobType);
- for (JobConfigurationPOJO jobConfigurationPojo : jobConfigurationPojoList) {
- JobConfiguration jobConfiguration = jobConfigurationPojo.toJobConfiguration();
- if (!Strings.isNullOrEmpty(jobConfiguration.getCron())) {
+ }
+
+ private void registerTypedJobs(final ElasticJobProperties elasticJobProperties, final SingletonBeanRegistry beanFactory,
+ final CoordinatorRegistryCenter registryCenter, final TracingConfiguration tracingConfiguration) {
+ for (Entry<String, List<JobConfigurationPOJO>> entry : elasticJobProperties.getTyped().entrySet()) {
+ for (JobConfigurationPOJO each : entry.getValue()) {
+ JobConfiguration jobConfiguration = each.toJobConfiguration();
+ if (Strings.isNullOrEmpty(jobConfiguration.getCron())) {
beanFactory.registerSingleton(
- jobConfiguration.getJobName() + "ScheduleJobBootstrap",
- new ScheduleJobBootstrap(registryCenter,
- elasticJobType,
- jobConfiguration, tracingConfiguration));
+ jobConfiguration.getJobName() + "OneOffJobBootstrap", new OneOffJobBootstrap(registryCenter, entry.getKey(), jobConfiguration, tracingConfiguration));
} else {
beanFactory.registerSingleton(
- jobConfiguration.getJobName() + "OneOffJobBootstrap",
- new OneOffJobBootstrap(registryCenter,
- elasticJobType,
- jobConfiguration, tracingConfiguration));
+ jobConfiguration.getJobName() + "ScheduleJobBootstrap", new ScheduleJobBootstrap(registryCenter, entry.getKey(), jobConfiguration, tracingConfiguration));
}
}
}
diff --git a/elasticjob-lite/elasticjob-lite-spring-boot-starter/src/main/java/org/apache/shardingsphere/elasticjob/lite/boot/ElasticJobStartupRunner.java b/elasticjob-lite/elasticjob-lite-spring-boot-starter/src/main/java/org/apache/shardingsphere/elasticjob/lite/boot/ElasticJobStartupRunner.java
index 7991a63..b856ff7 100644
--- a/elasticjob-lite/elasticjob-lite-spring-boot-starter/src/main/java/org/apache/shardingsphere/elasticjob/lite/boot/ElasticJobStartupRunner.java
+++ b/elasticjob-lite/elasticjob-lite-spring-boot-starter/src/main/java/org/apache/shardingsphere/elasticjob/lite/boot/ElasticJobStartupRunner.java
@@ -17,31 +17,25 @@
package org.apache.shardingsphere.elasticjob.lite.boot;
+import lombok.Setter;
+import lombok.extern.slf4j.Slf4j;
import org.apache.shardingsphere.elasticjob.lite.api.bootstrap.impl.OneOffJobBootstrap;
import org.apache.shardingsphere.elasticjob.lite.api.bootstrap.impl.ScheduleJobBootstrap;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.BeansException;
import org.springframework.boot.CommandLineRunner;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
+@Setter
+@Slf4j
public class ElasticJobStartupRunner implements CommandLineRunner, ApplicationContextAware {
-
- private final Logger logger = LoggerFactory.getLogger(ElasticJobStartupRunner.class);
-
+
private ApplicationContext applicationContext;
-
- @Override
- public void setApplicationContext(final ApplicationContext applicationContext) throws BeansException {
- this.applicationContext = applicationContext;
- }
-
+
@Override
- public void run(final String... args) throws Exception {
- logger.info("Starting ElasticJob Bootstrap.");
- this.applicationContext.getBeansOfType(ScheduleJobBootstrap.class).values().forEach(ScheduleJobBootstrap::schedule);
- this.applicationContext.getBeansOfType(OneOffJobBootstrap.class).values().forEach(OneOffJobBootstrap::execute);
- logger.info("ElasticJob Bootstrap started.");
+ public void run(final String... args) {
+ log.info("Starting ElasticJob Bootstrap.");
+ applicationContext.getBeansOfType(ScheduleJobBootstrap.class).values().forEach(ScheduleJobBootstrap::schedule);
+ applicationContext.getBeansOfType(OneOffJobBootstrap.class).values().forEach(OneOffJobBootstrap::execute);
+ log.info("ElasticJob Bootstrap started.");
}
}
diff --git a/elasticjob-lite/elasticjob-lite-spring/src/main/java/org/apache/shardingsphere/elasticjob/lite/spring/reg/parser/ZookeeperBeanDefinitionParser.java b/elasticjob-lite/elasticjob-lite-spring/src/main/java/org/apache/shardingsphere/elasticjob/lite/spring/reg/parser/ZookeeperBeanDefinitionParser.java
index 3ac5ccd..6fd5077 100644
--- a/elasticjob-lite/elasticjob-lite-spring/src/main/java/org/apache/shardingsphere/elasticjob/lite/spring/reg/parser/ZookeeperBeanDefinitionParser.java
+++ b/elasticjob-lite/elasticjob-lite-spring/src/main/java/org/apache/shardingsphere/elasticjob/lite/spring/reg/parser/ZookeeperBeanDefinitionParser.java
@@ -37,6 +37,7 @@ public final class ZookeeperBeanDefinitionParser extends AbstractBeanDefinitionP
BeanDefinitionBuilder result = BeanDefinitionBuilder.rootBeanDefinition(ZookeeperRegistryCenter.class);
result.addConstructorArgValue(buildZookeeperConfigurationBeanDefinition(element));
result.setInitMethodName("init");
+ result.setDestroyMethodName("close");
return result.getBeanDefinition();
}