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 42edbeb2..686a4c60 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 @@ -39,9 +39,9 @@ public class OhMyApplication { // 再启动SpringBoot try { SpringApplication.run(OhMyApplication.class, args); - }catch (Exception e) { + }catch (Throwable t) { log.error(TIPS); - throw e; + throw t; } } 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 62f55b99..f233bc99 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 @@ -1,5 +1,6 @@ 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.springframework.boot.context.properties.ConfigurationProperties; @@ -20,7 +21,7 @@ import javax.sql.DataSource; public class MultiDatasourceConfig { private static final String H2_DRIVER_CLASS_NAME = "org.h2.Driver"; - private static final String H2_JDBC_URL = "jdbc:h2:file:~/powerjob-server/h2/powerjob_server_db"; + private static final String H2_JDBC_URL_PATTERN = "jdbc:h2:file:%spowerjob_server_db"; private static final int H2_MIN_SIZE = 4; private static final int H2_MAX_ACTIVE_SIZE = 10; @@ -35,7 +36,7 @@ public class MultiDatasourceConfig { public DataSource initOmsLocalDatasource() { HikariConfig config = new HikariConfig(); config.setDriverClassName(H2_DRIVER_CLASS_NAME); - config.setJdbcUrl(H2_JDBC_URL); + config.setJdbcUrl(String.format(H2_JDBC_URL_PATTERN, OmsFileUtils.genH2Path())); config.setAutoCommit(true); // 池中最小空闲连接数量 config.setMinimumIdle(H2_MIN_SIZE); 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 90722fee..5b43a04c 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 @@ -21,6 +21,7 @@ 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; @@ -30,6 +31,7 @@ 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; @@ -37,6 +39,7 @@ 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; @@ -80,6 +83,7 @@ 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()) { @@ -179,4 +183,14 @@ public class OhMyWorker implements ApplicationContextAware, InitializingBean, Di public void destroy() throws Exception { timingPool.shutdownNow(); } + + private static void pre() { + // 删除历史遗留的 H2 数据库文件 + String h2Path = OmsWorkerFileUtils.getH2Dir(); + try { + FileUtils.forceDeleteOnExit(new File(h2Path)); + }catch (Exception e) { + log.warn("[PowerJob] delete h2 workspace({}) failed, if worker can't startup successfully, please delete it manually", h2Path, e); + } + } } diff --git a/powerjob-worker/src/main/java/com/github/kfcfans/powerjob/worker/common/utils/OmsWorkerFileUtils.java b/powerjob-worker/src/main/java/com/github/kfcfans/powerjob/worker/common/utils/OmsWorkerFileUtils.java index 2cf9884b..823e5504 100644 --- a/powerjob-worker/src/main/java/com/github/kfcfans/powerjob/worker/common/utils/OmsWorkerFileUtils.java +++ b/powerjob-worker/src/main/java/com/github/kfcfans/powerjob/worker/common/utils/OmsWorkerFileUtils.java @@ -18,4 +18,8 @@ public class OmsWorkerFileUtils { public static String getContainerDir() { return WORKER_DIR + "container/"; } + + public static String getH2Dir() { + return WORKER_DIR + "h2/"; + } } 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 a941c34f..aa630a9b 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 @@ -2,6 +2,7 @@ package com.github.kfcfans.powerjob.worker.persistence; import com.github.kfcfans.powerjob.worker.OhMyWorker; 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; @@ -19,8 +20,8 @@ public class ConnectionFactory { private static volatile DataSource dataSource; - private static final String DISK_JDBC_URL = "jdbc:h2:file:~/powerjob/h2/oms_worker_db"; - private static final String MEMORY_JDBC_URL = "jdbc:h2:mem:~/powerjob/h2/oms_worker_db"; + private static final String DISK_JDBC_URL = String.format("jdbc:h2:file:%spowerjob_worker_db", OmsWorkerFileUtils.getH2Dir()); + private static final String MEMORY_JDBC_URL = String.format("jdbc:h2:mem:%spowerjob_worker_db", OmsWorkerFileUtils.getH2Dir()); public static Connection getConnection() throws SQLException { return getDataSource().getConnection();