From b27f2c5c5ab36960d9fa6b97ac0623cf3aa97a39 Mon Sep 17 00:00:00 2001 From: ligang Date: Thu, 25 Apr 2019 18:22:39 +0800 Subject: [PATCH] update create and upgrade function --- .../dao/upgrade/EschedulerManager.java | 30 ++++++++++++----- .../cn/escheduler/dao/upgrade/UpgradeDao.java | 33 ++++++++++++++++++- .../dao/upgrade/shell/CreateEscheduler.java | 1 - .../1.0.2_schema/mysql/escheduler_dml.sql | 2 +- 4 files changed, 55 insertions(+), 11 deletions(-) diff --git a/escheduler-dao/src/main/java/cn/escheduler/dao/upgrade/EschedulerManager.java b/escheduler-dao/src/main/java/cn/escheduler/dao/upgrade/EschedulerManager.java index 34f07fbb29..0df98ec56e 100644 --- a/escheduler-dao/src/main/java/cn/escheduler/dao/upgrade/EschedulerManager.java +++ b/escheduler-dao/src/main/java/cn/escheduler/dao/upgrade/EschedulerManager.java @@ -30,12 +30,17 @@ public class EschedulerManager { UpgradeDao upgradeDao = UpgradeDao.getInstance(); public void initEscheduler() { + // Determines whether the escheduler table structure has been init + if(upgradeDao.isExistsTable("t_escheduler_version") || upgradeDao.isExistsTable("t_escheduler_queue")) { + logger.info("The database has been initialized. Skip the initialization step"); + return; + } this.initEschedulerSchema(); } public void initEschedulerSchema() { - logger.info("Start initializing the ark manager mysql table structure"); + logger.info("Start initializing the escheduler manager mysql table structure"); upgradeDao.initEschedulerSchema(); } @@ -52,15 +57,20 @@ public class EschedulerManager { }else { String version = ""; + // Gets the version of the current system + if (upgradeDao.isExistsTable("t_escheduler_version")) { + version = upgradeDao.getCurrentVersion(); + }else if(upgradeDao.isExistsColumn("t_escheduler_queue","create_time")){ + version = "1.0.1"; + }else if(upgradeDao.isExistsTable("t_escheduler_queue")){ + version = "1.0.0"; + }else{ + logger.error("Unable to determine current software version, so cannot upgrade"); + } // The target version of the upgrade String schemaVersion = ""; for(String schemaDir : schemaList) { - // Gets the version of the current system - if (upgradeDao.isExistsTable("t_escheduler_version")) { - version = upgradeDao.getCurrentVersion(); - }else { - version = "1.0.0"; - } + schemaVersion = schemaDir.split("_")[0]; if(SchemaUtils.isAGreatVersion(schemaVersion , version)) { @@ -70,7 +80,11 @@ public class EschedulerManager { logger.info("Begin upgrading escheduler's mysql table structure"); upgradeDao.upgradeEscheduler(schemaDir); - + if(SchemaUtils.isAGreatVersion(version,"1.0.1")){ + version = upgradeDao.getCurrentVersion(); + }else { + version = schemaVersion; + } } } diff --git a/escheduler-dao/src/main/java/cn/escheduler/dao/upgrade/UpgradeDao.java b/escheduler-dao/src/main/java/cn/escheduler/dao/upgrade/UpgradeDao.java index f4fb307f05..21cc5af954 100644 --- a/escheduler-dao/src/main/java/cn/escheduler/dao/upgrade/UpgradeDao.java +++ b/escheduler-dao/src/main/java/cn/escheduler/dao/upgrade/UpgradeDao.java @@ -122,7 +122,11 @@ public class UpgradeDao extends AbstractBaseDao { } - + /** + * Determines whether a table exists + * @param tableName + * @return + */ public boolean isExistsTable(String tableName) { Connection conn = null; try { @@ -144,6 +148,33 @@ public class UpgradeDao extends AbstractBaseDao { } + /** + * Determines whether a field exists in the specified table + * @param tableName + * @param columnName + * @return + */ + public boolean isExistsColumn(String tableName,String columnName) { + Connection conn = null; + try { + conn = ConnectionFactory.getDataSource().getConnection(); + ResultSet rs = conn.getMetaData().getColumns(null,null,tableName,columnName); + if (rs.next()) { + return true; + } else { + return false; + } + + } catch (SQLException e) { + logger.error(e.getMessage(),e); + throw new RuntimeException(e.getMessage(),e); + } finally { + MysqlUtil.realeaseResource(null, null, conn); + + } + + } + public String getCurrentVersion() { String sql = String.format("select version from %s",T_VERSION_NAME); diff --git a/escheduler-dao/src/main/java/cn/escheduler/dao/upgrade/shell/CreateEscheduler.java b/escheduler-dao/src/main/java/cn/escheduler/dao/upgrade/shell/CreateEscheduler.java index 012c32bb9a..3726a70809 100644 --- a/escheduler-dao/src/main/java/cn/escheduler/dao/upgrade/shell/CreateEscheduler.java +++ b/escheduler-dao/src/main/java/cn/escheduler/dao/upgrade/shell/CreateEscheduler.java @@ -29,7 +29,6 @@ public class CreateEscheduler { private static final Logger logger = LoggerFactory.getLogger(CreateEscheduler.class); public static void main(String[] args) { - Thread.currentThread().setName("manager-CreateEscheduler"); EschedulerManager eschedulerManager = new EschedulerManager(); eschedulerManager.initEscheduler(); logger.info("init escheduler finished"); diff --git a/sql/upgrade/1.0.2_schema/mysql/escheduler_dml.sql b/sql/upgrade/1.0.2_schema/mysql/escheduler_dml.sql index b9c214b7ad..97da34884c 100644 --- a/sql/upgrade/1.0.2_schema/mysql/escheduler_dml.sql +++ b/sql/upgrade/1.0.2_schema/mysql/escheduler_dml.sql @@ -1 +1 @@ -INSERT INTO `t_escheduler_version` (`version`) VALUES ('1.0.0'); \ No newline at end of file +INSERT INTO `t_escheduler_version` (`version`) VALUES ('1.0.2'); \ No newline at end of file