diff --git a/pom.xml b/pom.xml index 24f4c25b..ae73497b 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ com.github.kfcfans powerjob - 1.0.0 + 2.0.0 pom powerjob https://github.com/KFCFans/PowerJob diff --git a/powerjob-client/pom.xml b/powerjob-client/pom.xml index 2d4286da..83485c94 100644 --- a/powerjob-client/pom.xml +++ b/powerjob-client/pom.xml @@ -5,7 +5,7 @@ powerjob com.github.kfcfans - 1.0.0 + 2.0.0 4.0.0 diff --git a/powerjob-common/pom.xml b/powerjob-common/pom.xml index bca0ae69..f0aadcfb 100644 --- a/powerjob-common/pom.xml +++ b/powerjob-common/pom.xml @@ -5,7 +5,7 @@ powerjob com.github.kfcfans - 1.0.0 + 2.0.0 4.0.0 diff --git a/powerjob-server/pom.xml b/powerjob-server/pom.xml index 215247f3..0675761e 100644 --- a/powerjob-server/pom.xml +++ b/powerjob-server/pom.xml @@ -5,7 +5,7 @@ powerjob com.github.kfcfans - 1.0.0 + 2.0.0 4.0.0 diff --git a/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/OhMyApplication.java b/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/OhMyApplication.java index a5a0ddcd..434a2e9b 100644 --- a/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/OhMyApplication.java +++ b/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/OhMyApplication.java @@ -1,16 +1,11 @@ package com.github.kfcfans.powerjob.server; import com.github.kfcfans.powerjob.server.akka.OhMyServer; -import com.github.kfcfans.powerjob.server.common.utils.OmsFileUtils; -import com.google.common.annotations.VisibleForTesting; import lombok.extern.slf4j.Slf4j; -import org.apache.commons.io.FileUtils; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.scheduling.annotation.EnableScheduling; -import java.io.File; - /** * SpringBoot 启动入口 * @@ -46,19 +41,8 @@ public class OhMyApplication { } } - @VisibleForTesting - public static void pre() { + private static void pre() { log.info(TIPS); - - // 删除历史遗留的 H2 数据库文件 - File oldH2 = new File(OmsFileUtils.genH2BasePath()); - try { - if (oldH2.exists()) { - FileUtils.forceDelete(oldH2); - } - }catch (Exception e) { - log.warn("[PowerJob] delete h2 workspace({}) failed, if server can't startup successfully, please delete it manually", oldH2, e); - } } } diff --git a/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/persistence/config/MultiDatasourceConfig.java b/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/persistence/config/MultiDatasourceConfig.java index 88693d16..06531499 100644 --- a/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/persistence/config/MultiDatasourceConfig.java +++ b/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/persistence/config/MultiDatasourceConfig.java @@ -3,6 +3,7 @@ package com.github.kfcfans.powerjob.server.persistence.config; import com.github.kfcfans.powerjob.server.common.utils.OmsFileUtils; import com.zaxxer.hikari.HikariConfig; import com.zaxxer.hikari.HikariDataSource; +import org.apache.commons.io.FileUtils; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.boot.jdbc.DataSourceBuilder; import org.springframework.context.annotation.Bean; @@ -10,6 +11,7 @@ import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Primary; import javax.sql.DataSource; +import java.io.File; /** * 多重数据源配置 @@ -34,14 +36,21 @@ public class MultiDatasourceConfig { @Bean("omsLocalDatasource") public DataSource initOmsLocalDatasource() { + String h2Path = OmsFileUtils.genH2WorkPath(); HikariConfig config = new HikariConfig(); config.setDriverClassName(H2_DRIVER_CLASS_NAME); - config.setJdbcUrl(String.format(H2_JDBC_URL_PATTERN, OmsFileUtils.genH2WorkPath())); + config.setJdbcUrl(String.format(H2_JDBC_URL_PATTERN, h2Path)); config.setAutoCommit(true); // 池中最小空闲连接数量 config.setMinimumIdle(H2_MIN_SIZE); // 池中最大连接数量 config.setMaximumPoolSize(H2_MAX_ACTIVE_SIZE); + + // JVM 关闭时删除文件 + try { + FileUtils.forceDeleteOnExit(new File(h2Path)); + }catch (Exception ignore) { + } return new HikariDataSource(config); } } diff --git a/powerjob-server/src/test/java/com/github/kfcfans/powerjob/server/test/UtilsTest.java b/powerjob-server/src/test/java/com/github/kfcfans/powerjob/server/test/UtilsTest.java index cfe39ba7..c6ebe28b 100644 --- a/powerjob-server/src/test/java/com/github/kfcfans/powerjob/server/test/UtilsTest.java +++ b/powerjob-server/src/test/java/com/github/kfcfans/powerjob/server/test/UtilsTest.java @@ -92,9 +92,4 @@ public class UtilsTest { System.out.println(StringUtils.containsWhitespace(goodAppName)); System.out.println(StringUtils.containsWhitespace(appName)); } - - @Test - public void testPre() { - OhMyApplication.pre(); - } } diff --git a/powerjob-worker-agent/pom.xml b/powerjob-worker-agent/pom.xml index 82211504..b6a16adb 100644 --- a/powerjob-worker-agent/pom.xml +++ b/powerjob-worker-agent/pom.xml @@ -5,7 +5,7 @@ powerjob com.github.kfcfans - 1.0.0 + 2.0.0 4.0.0 diff --git a/powerjob-worker-samples/pom.xml b/powerjob-worker-samples/pom.xml index e2500e5a..071be86e 100644 --- a/powerjob-worker-samples/pom.xml +++ b/powerjob-worker-samples/pom.xml @@ -5,7 +5,7 @@ powerjob com.github.kfcfans - 1.0.0 + 2.0.0 4.0.0 diff --git a/powerjob-worker-spring-boot-starter/pom.xml b/powerjob-worker-spring-boot-starter/pom.xml index 1e7eb819..73c237bf 100644 --- a/powerjob-worker-spring-boot-starter/pom.xml +++ b/powerjob-worker-spring-boot-starter/pom.xml @@ -5,7 +5,7 @@ powerjob com.github.kfcfans - 1.0.0 + 2.0.0 4.0.0 diff --git a/powerjob-worker/pom.xml b/powerjob-worker/pom.xml index 63661bc0..7fb3fd36 100644 --- a/powerjob-worker/pom.xml +++ b/powerjob-worker/pom.xml @@ -5,7 +5,7 @@ powerjob com.github.kfcfans - 1.0.0 + 2.0.0 4.0.0 diff --git a/powerjob-worker/src/main/java/com/github/kfcfans/powerjob/worker/OhMyWorker.java b/powerjob-worker/src/main/java/com/github/kfcfans/powerjob/worker/OhMyWorker.java index 65719f48..3a78f2f9 100644 --- a/powerjob-worker/src/main/java/com/github/kfcfans/powerjob/worker/OhMyWorker.java +++ b/powerjob-worker/src/main/java/com/github/kfcfans/powerjob/worker/OhMyWorker.java @@ -12,16 +12,15 @@ import com.github.kfcfans.powerjob.common.utils.CommonUtils; import com.github.kfcfans.powerjob.common.utils.HttpUtils; import com.github.kfcfans.powerjob.common.utils.JsonUtils; import com.github.kfcfans.powerjob.common.utils.NetUtils; -import com.github.kfcfans.powerjob.worker.actors.TroubleshootingActor; import com.github.kfcfans.powerjob.worker.actors.ProcessorTrackerActor; import com.github.kfcfans.powerjob.worker.actors.TaskTrackerActor; +import com.github.kfcfans.powerjob.worker.actors.TroubleshootingActor; import com.github.kfcfans.powerjob.worker.actors.WorkerActor; import com.github.kfcfans.powerjob.worker.background.OmsLogHandler; import com.github.kfcfans.powerjob.worker.background.ServerDiscoveryService; import com.github.kfcfans.powerjob.worker.background.WorkerHealthReporter; import com.github.kfcfans.powerjob.worker.common.OhMyConfig; import com.github.kfcfans.powerjob.worker.common.OmsBannerPrinter; -import com.github.kfcfans.powerjob.worker.common.utils.OmsWorkerFileUtils; import com.github.kfcfans.powerjob.worker.common.utils.SpringUtils; import com.github.kfcfans.powerjob.worker.persistence.TaskPersistenceService; import com.google.common.base.Stopwatch; @@ -31,7 +30,6 @@ import com.typesafe.config.Config; import com.typesafe.config.ConfigFactory; import lombok.Getter; import lombok.extern.slf4j.Slf4j; -import org.apache.commons.io.FileUtils; import org.springframework.beans.BeansException; import org.springframework.beans.factory.DisposableBean; import org.springframework.beans.factory.InitializingBean; @@ -39,7 +37,6 @@ import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware; import org.springframework.util.StringUtils; -import java.io.File; import java.util.Map; import java.util.Objects; import java.util.concurrent.Executors; @@ -83,7 +80,6 @@ public class OhMyWorker implements ApplicationContextAware, InitializingBean, Di Stopwatch stopwatch = Stopwatch.createStarted(); log.info("[OhMyWorker] start to initialize OhMyWorker..."); try { - pre(); OmsBannerPrinter.print(); // 校验 appName if (!config.isEnableTestMode()) { @@ -183,16 +179,4 @@ public class OhMyWorker implements ApplicationContextAware, InitializingBean, Di public void destroy() throws Exception { timingPool.shutdownNow(); } - - private static void pre() { - // 删除历史遗留的 H2 数据库文件 - File oldH2File = new File(OmsWorkerFileUtils.getH2BaseDir()); - try { - if (oldH2File.exists()) { - FileUtils.forceDelete(oldH2File); - } - }catch (Exception e) { - log.warn("[PowerJob] delete h2 workspace({}) failed, if worker can't startup successfully, please delete it manually", oldH2File, e); - } - } } diff --git a/powerjob-worker/src/main/java/com/github/kfcfans/powerjob/worker/persistence/ConnectionFactory.java b/powerjob-worker/src/main/java/com/github/kfcfans/powerjob/worker/persistence/ConnectionFactory.java index 5fd2b537..0603576a 100644 --- a/powerjob-worker/src/main/java/com/github/kfcfans/powerjob/worker/persistence/ConnectionFactory.java +++ b/powerjob-worker/src/main/java/com/github/kfcfans/powerjob/worker/persistence/ConnectionFactory.java @@ -5,8 +5,12 @@ import com.github.kfcfans.powerjob.worker.common.constants.StoreStrategy; import com.github.kfcfans.powerjob.worker.common.utils.OmsWorkerFileUtils; import com.zaxxer.hikari.HikariConfig; import com.zaxxer.hikari.HikariDataSource; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.io.FileUtils; +import org.h2.Driver; import javax.sql.DataSource; +import java.io.File; import java.sql.Connection; import java.sql.SQLException; @@ -16,12 +20,14 @@ import java.sql.SQLException; * @author tjq * @since 2020/3/17 */ +@Slf4j public class ConnectionFactory { private static volatile DataSource dataSource; - private static final String DISK_JDBC_URL = String.format("jdbc:h2:file:%spowerjob_worker_db", OmsWorkerFileUtils.getH2WorkDir()); - private static final String MEMORY_JDBC_URL = String.format("jdbc:h2:mem:%spowerjob_worker_db", OmsWorkerFileUtils.getH2WorkDir()); + private static final String H2_PATH = OmsWorkerFileUtils.getH2WorkDir(); + private static final String DISK_JDBC_URL = String.format("jdbc:h2:file:%spowerjob_worker_db;DB_CLOSE_DELAY=-1;DATABASE_TO_UPPER=false", H2_PATH); + private static final String MEMORY_JDBC_URL = String.format("jdbc:h2:mem:%spowerjob_worker_db;DB_CLOSE_DELAY=-1;DATABASE_TO_UPPER=false", H2_PATH); public static Connection getConnection() throws SQLException { return getDataSource().getConnection(); @@ -38,7 +44,7 @@ public class ConnectionFactory { StoreStrategy strategy = OhMyWorker.getConfig() == null ? StoreStrategy.DISK : OhMyWorker.getConfig().getStoreStrategy(); HikariConfig config = new HikariConfig(); - config.setDriverClassName("org.h2.Driver"); + config.setDriverClassName(Driver.class.getName()); config.setJdbcUrl(strategy == StoreStrategy.DISK ? DISK_JDBC_URL : MEMORY_JDBC_URL); config.setAutoCommit(true); // 池中最小空闲连接数量 @@ -46,6 +52,14 @@ public class ConnectionFactory { // 池中最大连接数量 config.setMaximumPoolSize(32); dataSource = new HikariDataSource(config); + + log.info("[OmsDatasource] init h2 datasource successfully, use url: {}", config.getJdbcUrl()); + + // JVM 关闭时删除数据库文件 + try { + FileUtils.forceDeleteOnExit(new File(H2_PATH)); + }catch (Exception ignore) { + } } } return dataSource; diff --git a/powerjob-worker/src/main/java/com/github/kfcfans/powerjob/worker/persistence/TaskPersistenceService.java b/powerjob-worker/src/main/java/com/github/kfcfans/powerjob/worker/persistence/TaskPersistenceService.java index 0180b9ca..b967af3e 100644 --- a/powerjob-worker/src/main/java/com/github/kfcfans/powerjob/worker/persistence/TaskPersistenceService.java +++ b/powerjob-worker/src/main/java/com/github/kfcfans/powerjob/worker/persistence/TaskPersistenceService.java @@ -36,7 +36,7 @@ public class TaskPersistenceService { private TaskPersistenceService() { } - private TaskDAO taskDAO = new TaskDAOImpl(); + private final TaskDAO taskDAO = new TaskDAOImpl(); public void init() throws Exception { if (initialized) { @@ -207,8 +207,8 @@ public class TaskPersistenceService { Map result = Maps.newHashMap(); dbRES.forEach(row -> { // H2 数据库都是大写... - int status = Integer.parseInt(String.valueOf(row.get("STATUS"))); - long num = Long.parseLong(String.valueOf(row.get("NUM"))); + int status = Integer.parseInt(String.valueOf(row.get("status"))); + long num = Long.parseLong(String.valueOf(row.get("num"))); result.put(TaskStatus.of(status), num); }); return result; @@ -238,10 +238,10 @@ public class TaskPersistenceService { try { SimpleTaskQuery query = genKeyQuery(instanceId, taskId); - query.setQueryContent("STATUS"); + query.setQueryContent("status"); return execute(() -> { List> rows = taskDAO.simpleQueryPlus(query); - return Optional.of(TaskStatus.of((int) rows.get(0).get("STATUS"))); + return Optional.of(TaskStatus.of((int) rows.get(0).get("status"))); }); }catch (Exception e) { log.error("[TaskPersistenceService] getTaskStatus failed, instanceId={},taskId={}.", instanceId, taskId, e);