package tech.powerjob.worker.autoconfigure; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import tech.powerjob.common.utils.CommonUtils; import tech.powerjob.common.utils.NetUtils; import tech.powerjob.worker.PowerJobSpringWorker; import tech.powerjob.worker.common.PowerJobWorkerConfig; import java.util.Arrays; import java.util.List; /** * Autoconfiguration class for PowerJob-worker. * * @author songyinyin * @since 2020/7/26 16:37 */ @Configuration @EnableConfigurationProperties(PowerJobProperties.class) @ConditionalOnProperty(prefix = "powerjob.worker", name = "enabled", havingValue = "true", matchIfMissing = true) public class PowerJobAutoConfiguration { @Bean @ConditionalOnMissingBean public PowerJobSpringWorker initPowerJob(PowerJobProperties properties) { PowerJobProperties.Worker worker = properties.getWorker(); /* * Address of PowerJob-server node(s). Do not mistake for ActorSystem port. Do not add * any prefix, i.e. http://. */ CommonUtils.requireNonNull(worker.getServerAddress(), "serverAddress can't be empty! " + "if you don't want to enable powerjob, please config program arguments: powerjob.worker.enabled=false"); List serverAddress = Arrays.asList(worker.getServerAddress().split(",")); /* * Create OhMyConfig object for setting properties. */ PowerJobWorkerConfig config = new PowerJobWorkerConfig(); /* * Configuration of worker port. Random port is enabled when port is set with non-positive number. */ if (worker.getPort() != null) { config.setPort(worker.getPort()); } else { int port = worker.getAkkaPort(); if (port <= 0) { port = NetUtils.getRandomPort(); } config.setPort(port); } /* * appName, name of the application. Applications should be registered in advance to prevent * error. This property should be the same with what you entered for appName when getting * registered. */ config.setAppName(worker.getAppName()); config.setServerAddress(serverAddress); config.setProtocol(worker.getProtocol()); /* * For non-Map/MapReduce tasks, {@code memory} is recommended for speeding up calculation. * Map/MapReduce tasks may produce batches of subtasks, which could lead to OutOfMemory * exception or error, {@code disk} should be applied. */ config.setStoreStrategy(worker.getStoreStrategy()); /* * When enabledTestMode is set as true, PowerJob-worker no longer connects to PowerJob-server * or validate appName. */ config.setAllowLazyConnectServer(worker.isAllowLazyConnectServer()); /* * Max length of appended workflow context . Appended workflow context value that is longer than the value will be ignored. */ config.setMaxAppendedWfContextLength(worker.getMaxAppendedWfContextLength()); config.setTag(worker.getTag()); config.setMaxHeavyweightTaskNum(worker.getMaxHeavyweightTaskNum()); config.setMaxLightweightTaskNum(worker.getMaxLightweightTaskNum()); config.setHealthReportInterval(worker.getHealthReportInterval()); /* * Create PowerJobSpringWorker object and set properties. */ return new PowerJobSpringWorker(config); } }