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 <[email protected]>
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();
}