blob: 2f411c4ca89e308852c565af7227166eb6a0db49 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* 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.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.shardingsphere.elasticjob.infra.concurrent;
import com.google.common.base.Strings;
import lombok.extern.slf4j.Slf4j;
import org.apache.shardingsphere.elasticjob.api.JobConfiguration;
import org.apache.shardingsphere.elasticjob.infra.context.Reloadable;
import org.apache.shardingsphere.elasticjob.infra.context.ReloadablePostProcessor;
import org.apache.shardingsphere.elasticjob.infra.handler.threadpool.JobExecutorServiceHandlerFactory;
import java.util.Optional;
import java.util.concurrent.ExecutorService;
/**
* Executor service reloadable.
*/
@Slf4j
public final class ExecutorServiceReloadable implements Reloadable<ExecutorService>, ReloadablePostProcessor {
private String jobExecutorServiceHandlerType;
private ExecutorService executorService;
@Override
public void init(final JobConfiguration jobConfig) {
jobExecutorServiceHandlerType = Strings.isNullOrEmpty(jobConfig.getJobExecutorServiceHandlerType())
? JobExecutorServiceHandlerFactory.DEFAULT_HANDLER : jobConfig.getJobExecutorServiceHandlerType();
executorService = JobExecutorServiceHandlerFactory.getHandler(jobExecutorServiceHandlerType).createExecutorService(jobConfig.getJobName());
}
@Override
public synchronized void reloadIfNecessary(final JobConfiguration jobConfig) {
String newJobExecutorServiceHandlerType = Strings.isNullOrEmpty(jobConfig.getJobExecutorServiceHandlerType())
? JobExecutorServiceHandlerFactory.DEFAULT_HANDLER : jobConfig.getJobExecutorServiceHandlerType();
if (newJobExecutorServiceHandlerType.equals(jobExecutorServiceHandlerType)) {
return;
}
log.debug("JobExecutorServiceHandler reload occurred in the job '{}'. Change from '{}' to '{}'.", jobConfig.getJobName(), jobExecutorServiceHandlerType, newJobExecutorServiceHandlerType);
reload(newJobExecutorServiceHandlerType, jobConfig.getJobName());
}
private void reload(final String jobExecutorServiceHandlerType, final String jobName) {
executorService.shutdown();
this.jobExecutorServiceHandlerType = jobExecutorServiceHandlerType;
executorService = JobExecutorServiceHandlerFactory.getHandler(jobExecutorServiceHandlerType).createExecutorService(jobName);
}
@Override
public ExecutorService getInstance() {
return executorService;
}
@Override
public void close() {
Optional.ofNullable(executorService).ifPresent(ExecutorService::shutdown);
}
@Override
public String getType() {
return ExecutorService.class.getName();
}
}