[Improvement-#7529][tools] Init DB schema from the full sql file. (#7530)

This commit is contained in:
lgcareer 2021-12-23 00:19:58 +08:00 committed by GitHub
parent d3533851a0
commit cdd4e7bf03
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 26 additions and 51 deletions

View File

@ -42,10 +42,13 @@ public class CreateDolphinScheduler {
@Override
public void run(String... args) throws Exception {
dolphinSchedulerManager.initDolphinScheduler();
logger.info("init DolphinScheduler finished");
dolphinSchedulerManager.upgradeDolphinScheduler();
logger.info("upgrade DolphinScheduler finished");
if (dolphinSchedulerManager.schemaIsInitialized()) {
dolphinSchedulerManager.upgradeDolphinScheduler();
logger.info("upgrade DolphinScheduler finished");
} else {
dolphinSchedulerManager.initDolphinScheduler();
logger.info("init DolphinScheduler finished");
}
logger.info("create DolphinScheduler success");
}
}

View File

@ -55,21 +55,28 @@ public class DolphinSchedulerManager {
}
public void initDolphinScheduler() {
this.initDolphinSchedulerSchema();
}
/**
* whether schema is initialized
* @return true if schema is initialized
*/
public boolean schemaIsInitialized() {
// Determines whether the dolphinscheduler table structure has been init
if (upgradeDao.isExistsTable("t_escheduler_version")
|| upgradeDao.isExistsTable("t_ds_version")
|| upgradeDao.isExistsTable("t_escheduler_queue")) {
logger.info("The database has been initialized. Skip the initialization step");
return;
return true;
}
this.initDolphinSchedulerSchema();
return false;
}
public void initDolphinSchedulerSchema() {
logger.info("Start initializing the DolphinScheduler manager table structure");
upgradeDao.initSchema();
}
public void upgradeDolphinScheduler() throws IOException {
// Gets a list of all upgrades
List<String> schemaList = SchemaUtils.getAllSchemaList();

View File

@ -89,52 +89,17 @@ public abstract class UpgradeDao {
public abstract DbType getDbType();
public void initSchema() {
// Execute the dolphinscheduler DDL, it cannot be rolled back
runInitDDL();
// Execute the dolphinscheduler DML, it can be rolled back
runInitDML();
// Execute the dolphinscheduler full sql
runInitSql(getDbType());
}
private void runInitDML() {
Resource mysqlSQLFilePath = new ClassPathResource("sql/" + initSqlPath() + "/dolphinscheduler_dml.sql");
Connection conn = null;
try {
conn = dataSource.getConnection();
conn.setAutoCommit(false);
// Execute the dolphinscheduler_dml.sql script to import related data of dolphinscheduler
ScriptRunner initScriptRunner = new ScriptRunner(conn, false, true);
Reader initSqlReader = new InputStreamReader(mysqlSQLFilePath.getInputStream());
initScriptRunner.runScript(initSqlReader);
conn.commit();
} catch (IOException e) {
try {
conn.rollback();
} catch (SQLException e1) {
logger.error(e1.getMessage(), e1);
}
logger.error(e.getMessage(), e);
throw new RuntimeException(e.getMessage(), e);
} catch (Exception e) {
try {
if (null != conn) {
conn.rollback();
}
} catch (SQLException e1) {
logger.error(e1.getMessage(), e1);
}
logger.error(e.getMessage(), e);
throw new RuntimeException(e.getMessage(), e);
} finally {
ConnectionUtils.releaseResource(conn);
}
}
private void runInitDDL() {
Resource mysqlSQLFilePath = new ClassPathResource("sql/" + initSqlPath() + "/dolphinscheduler_ddl.sql");
/**
* run init sql to init db schema
* @param dbType db type
*/
private void runInitSql(DbType dbType) {
String sqlFile = String.format("dolphinscheduler_%s.sql",dbType.getDescp());
Resource mysqlSQLFilePath = new ClassPathResource("sql/" + sqlFile);
try (Connection conn = dataSource.getConnection()) {
// Execute the dolphinscheduler_ddl.sql script to create the table structure of dolphinscheduler
ScriptRunner initScriptRunner = new ScriptRunner(conn, true, true);