forked from p85126437/datagear
[management]完善DbVersionManager类功能
This commit is contained in:
parent
1b08a22d0a
commit
d8d85e583d
|
@ -2,7 +2,7 @@
|
|||
* Copyright 2018 datagear.tech. All Rights Reserved.
|
||||
*/
|
||||
|
||||
package org.datagear.management.dbversion;
|
||||
package org.datagear.management;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
|
@ -14,11 +14,23 @@ import java.util.List;
|
|||
import javax.sql.DataSource;
|
||||
|
||||
import org.datagear.connection.JdbcUtil;
|
||||
import org.datagear.management.Version;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
/**
|
||||
* 数据库版本管理器。
|
||||
* <p>
|
||||
* 此类用于读取SQL脚本文件,执行数据库版本升级。
|
||||
* </p>
|
||||
* <p>
|
||||
* 它对SQL脚本文件格式有如下规范:
|
||||
* </p>
|
||||
* <ul>
|
||||
* <li>以“--”开头的行表示注释行,将被忽略执行;</li>
|
||||
* <li>空行用于分隔SQL语句;</li>
|
||||
* <li>“--version[1.0.0]...”是版本行,用于标识后续的SQL版本,直到下一个版本行或者文件末尾;</li>
|
||||
* </ul>
|
||||
*
|
||||
* @author datagear@163.com
|
||||
*
|
||||
|
@ -28,18 +40,28 @@ public class DbVersionManager
|
|||
private static final Logger LOGGER = LoggerFactory.getLogger(DbVersionManager.class);
|
||||
|
||||
/** 脚本资源文件路径 */
|
||||
protected static final String SCRIPT_RESOURCE = "org/datagear/management/ddl/datagear.sql";
|
||||
public static final String SQL_SCRIPT_RESOURCE = "org/datagear/management/ddl/datagear.sql";
|
||||
|
||||
/** 脚本资源文件编码 */
|
||||
protected static final String SCRIPT_RESOURCE_ENCODING = "UTF-8";
|
||||
public static final String DEFAULT_SQL_SCRIPT_ENCODING = "UTF-8";
|
||||
|
||||
/** 数据库SQL文件中版本号注释开头标识 */
|
||||
protected static final String VERSION_LINE_PREFIX = "--version[";
|
||||
public static final String DEFAULT_VERSION_LINE_PREFIX = "--version[";
|
||||
|
||||
/** 数据库SQL文件中版本号注释结尾标识 */
|
||||
protected static final String VERSION_LINE_SUFFIX = "]";
|
||||
public static final String DEFAULT_VERSION_LINE_SUFFIX = "]";
|
||||
|
||||
public static final String VERSION_TABLE_NAME = "DATAGEAR_VERSION";
|
||||
public static final String DEFAULT_VERSION_TABLE_NAME = "DATAGEAR_VERSION";
|
||||
|
||||
private String sqlScriptLocation = SQL_SCRIPT_RESOURCE;
|
||||
|
||||
private String sqlScriptEncoding = DEFAULT_SQL_SCRIPT_ENCODING;
|
||||
|
||||
private String versionLinePrefix = DEFAULT_VERSION_LINE_PREFIX;
|
||||
|
||||
private String versionLineSuffix = DEFAULT_VERSION_LINE_SUFFIX;
|
||||
|
||||
private String versionTableName = DEFAULT_VERSION_TABLE_NAME;
|
||||
|
||||
private DataSource dataSource;
|
||||
|
||||
|
@ -54,6 +76,56 @@ public class DbVersionManager
|
|||
this.dataSource = dataSource;
|
||||
}
|
||||
|
||||
public String getSqlScriptLocation()
|
||||
{
|
||||
return sqlScriptLocation;
|
||||
}
|
||||
|
||||
public void setSqlScriptLocation(String sqlScriptLocation)
|
||||
{
|
||||
this.sqlScriptLocation = sqlScriptLocation;
|
||||
}
|
||||
|
||||
public String getSqlScriptEncoding()
|
||||
{
|
||||
return sqlScriptEncoding;
|
||||
}
|
||||
|
||||
public void setSqlScriptEncoding(String sqlScriptEncoding)
|
||||
{
|
||||
this.sqlScriptEncoding = sqlScriptEncoding;
|
||||
}
|
||||
|
||||
public String getVersionLinePrefix()
|
||||
{
|
||||
return versionLinePrefix;
|
||||
}
|
||||
|
||||
public void setVersionLinePrefix(String versionLinePrefix)
|
||||
{
|
||||
this.versionLinePrefix = versionLinePrefix;
|
||||
}
|
||||
|
||||
public String getVersionLineSuffix()
|
||||
{
|
||||
return versionLineSuffix;
|
||||
}
|
||||
|
||||
public void setVersionLineSuffix(String versionLineSuffix)
|
||||
{
|
||||
this.versionLineSuffix = versionLineSuffix;
|
||||
}
|
||||
|
||||
public String getVersionTableName()
|
||||
{
|
||||
return versionTableName;
|
||||
}
|
||||
|
||||
public void setVersionTableName(String versionTableName)
|
||||
{
|
||||
this.versionTableName = versionTableName;
|
||||
}
|
||||
|
||||
public DataSource getDataSource()
|
||||
{
|
||||
return dataSource;
|
||||
|
@ -170,7 +242,7 @@ public class DbVersionManager
|
|||
Statement st = cn.createStatement();
|
||||
|
||||
ResultSet rs = st.executeQuery(
|
||||
"SELECT VERSION_MAJOR, VERSION_MINOR, VERSION_REVISION, VERSION_BUILD FROM " + VERSION_TABLE_NAME);
|
||||
"SELECT VERSION_MAJOR, VERSION_MINOR, VERSION_REVISION, VERSION_BUILD FROM " + this.versionTableName);
|
||||
|
||||
if (rs.next())
|
||||
{
|
||||
|
@ -194,7 +266,7 @@ public class DbVersionManager
|
|||
*/
|
||||
protected void updateVersion(Connection cn, Version version) throws SQLException
|
||||
{
|
||||
PreparedStatement st = cn.prepareStatement("UPDATE " + VERSION_TABLE_NAME
|
||||
PreparedStatement st = cn.prepareStatement("UPDATE " + this.versionTableName
|
||||
+ " SET VERSION_MAJOR = ?, VERSION_MINOR = ?, VERSION_REVISION = ?, VERSION_BUILD = ?");
|
||||
|
||||
st.setString(1, version.getMajor());
|
||||
|
@ -206,7 +278,7 @@ public class DbVersionManager
|
|||
|
||||
if (count == 0)
|
||||
{
|
||||
st = cn.prepareStatement("INSERT INTO " + VERSION_TABLE_NAME
|
||||
st = cn.prepareStatement("INSERT INTO " + this.versionTableName
|
||||
+ " (VERSION_MAJOR, VERSION_MINOR, VERSION_REVISION, VERSION_BUILD) VALUES(?, ?, ?, ?)");
|
||||
|
||||
st.setString(1, version.getMajor());
|
||||
|
@ -246,7 +318,7 @@ public class DbVersionManager
|
|||
|
||||
if (LOGGER.isInfoEnabled())
|
||||
LOGGER.info("Got upgrade sqls for verion from [" + from + "] to [" + target + "], line from ["
|
||||
+ upgradeSqls.getStartLine() + "] in [" + SCRIPT_RESOURCE + "]");
|
||||
+ upgradeSqls.getStartLine() + "] in [" + this.sqlScriptLocation + "]");
|
||||
|
||||
executeSqls(cn, upgradeSqls.getSqls());
|
||||
}
|
||||
|
@ -298,9 +370,7 @@ public class DbVersionManager
|
|||
|
||||
Version target = null;
|
||||
|
||||
BufferedReader reader = new BufferedReader(
|
||||
new InputStreamReader(DbVersionManager.class.getClassLoader().getResourceAsStream(SCRIPT_RESOURCE),
|
||||
SCRIPT_RESOURCE_ENCODING));
|
||||
BufferedReader reader = getSqlScriptBufferedReader();
|
||||
|
||||
int readStart = -1;
|
||||
|
||||
|
@ -335,7 +405,7 @@ public class DbVersionManager
|
|||
String trimSql = sql.toString().trim();
|
||||
|
||||
if (!trimSql.isEmpty())
|
||||
sqls.add(trimSql);
|
||||
sqls.add(postProcessSql(trimSql));
|
||||
|
||||
sql.delete(0, sql.length());
|
||||
}
|
||||
|
@ -367,7 +437,7 @@ public class DbVersionManager
|
|||
String trimSql = sql.toString().trim();
|
||||
|
||||
if (!trimSql.isEmpty())
|
||||
sqls.add(trimSql);
|
||||
sqls.add(postProcessSql(trimSql));
|
||||
}
|
||||
finally
|
||||
{
|
||||
|
@ -380,6 +450,35 @@ public class DbVersionManager
|
|||
return new UpgradeSqls(sqls, target, readStart);
|
||||
}
|
||||
|
||||
/**
|
||||
* 后置处理SQL语句。
|
||||
*
|
||||
* @param trimSql
|
||||
* @return
|
||||
*/
|
||||
protected String postProcessSql(String trimSql)
|
||||
{
|
||||
if (trimSql.endsWith(";"))
|
||||
trimSql = trimSql.substring(0, trimSql.length() - 1);
|
||||
|
||||
return trimSql;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取SQL脚本输入流。
|
||||
*
|
||||
* @return
|
||||
* @throws IOException
|
||||
*/
|
||||
protected BufferedReader getSqlScriptBufferedReader() throws IOException
|
||||
{
|
||||
BufferedReader reader = new BufferedReader(new InputStreamReader(
|
||||
DbVersionManager.class.getClassLoader().getResourceAsStream(this.sqlScriptLocation),
|
||||
this.sqlScriptEncoding));
|
||||
|
||||
return reader;
|
||||
}
|
||||
|
||||
/**
|
||||
* 是否空行。
|
||||
*
|
||||
|
@ -410,7 +509,7 @@ public class DbVersionManager
|
|||
*/
|
||||
protected boolean isVersionLine(String trimLine)
|
||||
{
|
||||
return trimLine.startsWith(VERSION_LINE_PREFIX);
|
||||
return trimLine.startsWith(this.versionLinePrefix);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -421,13 +520,13 @@ public class DbVersionManager
|
|||
*/
|
||||
protected Version extractVersion(String line)
|
||||
{
|
||||
int start = line.indexOf(VERSION_LINE_PREFIX);
|
||||
int start = line.indexOf(this.versionLinePrefix);
|
||||
|
||||
if (start < 0)
|
||||
throw new IllegalArgumentException("[" + line + "] is not version line");
|
||||
|
||||
start = start + VERSION_LINE_PREFIX.length();
|
||||
int end = line.indexOf(VERSION_LINE_SUFFIX, start);
|
||||
start = start + this.versionLinePrefix.length();
|
||||
int end = line.indexOf(this.versionLineSuffix, start);
|
||||
|
||||
String version = line.substring(start, end);
|
||||
|
||||
|
|
|
@ -1,4 +1,6 @@
|
|||
--version[1.0.0]
|
||||
-----------------------------------------
|
||||
--version[1.0.0], DO NOT EDIT THIS LINE!
|
||||
-----------------------------------------
|
||||
|
||||
CREATE TABLE DATAGEAR_VERSION
|
||||
(
|
||||
|
@ -6,7 +8,7 @@ CREATE TABLE DATAGEAR_VERSION
|
|||
VERSION_MINOR VARCHAR(50),
|
||||
VERSION_REVISION VARCHAR(50),
|
||||
VERSION_BUILD VARCHAR(50)
|
||||
)
|
||||
);
|
||||
|
||||
CREATE TABLE DATAGEAR_GLOBALSETTING
|
||||
(
|
||||
|
@ -18,7 +20,7 @@ CREATE TABLE DATAGEAR_GLOBALSETTING
|
|||
SMTP_CONNECTION_TYPE VARCHAR(100),
|
||||
SMTP_SYSTEM_EMAIL VARCHAR(100),
|
||||
PRIMARY KEY (SETTING_ID)
|
||||
)
|
||||
);
|
||||
|
||||
CREATE TABLE DATAGEAR_USER
|
||||
(
|
||||
|
@ -31,10 +33,10 @@ CREATE TABLE DATAGEAR_USER
|
|||
USER_CREATE_TIME TIMESTAMP,
|
||||
PRIMARY KEY (USER_ID),
|
||||
UNIQUE (USER_NAME)
|
||||
)
|
||||
);
|
||||
|
||||
--the password is 'admin'
|
||||
INSERT INTO DATAGEAR_USER VALUES('admin', 'admin', '4c6d8d058a4db956660f0ee51fcb515f93471a086fc676bfb71ba2ceece5bf4702c61cefab3fa54b', '', '', 'true', CURRENT_TIMESTAMP)
|
||||
INSERT INTO DATAGEAR_USER VALUES('admin', 'admin', '4c6d8d058a4db956660f0ee51fcb515f93471a086fc676bfb71ba2ceece5bf4702c61cefab3fa54b', '', '', 'true', CURRENT_TIMESTAMP);
|
||||
|
||||
CREATE TABLE DATAGEAR_RESET_PSD_REQUEST
|
||||
(
|
||||
|
@ -45,7 +47,7 @@ CREATE TABLE DATAGEAR_RESET_PSD_REQUEST
|
|||
RESET_PSD_PRINCIPAL VARCHAR(200) NOT NULL,
|
||||
PRIMARY KEY (RESET_PSD_REQ_ID),
|
||||
UNIQUE (RESET_PSD_USER_ID)
|
||||
)
|
||||
);
|
||||
|
||||
CREATE TABLE DATAGEAR_RESET_PSD_REQUEST_HISTORY
|
||||
(
|
||||
|
@ -57,7 +59,7 @@ CREATE TABLE DATAGEAR_RESET_PSD_REQUEST_HISTORY
|
|||
RESET_PSD_EFFECTIVE_TIME TIMESTAMP,
|
||||
HISTORY_CREATE_TIME TIMESTAMP NOT NULL,
|
||||
PRIMARY KEY (RESET_PSD_REQ_ID)
|
||||
)
|
||||
);
|
||||
|
||||
CREATE TABLE DATAGEAR_SCHEMA
|
||||
(
|
||||
|
@ -71,4 +73,4 @@ CREATE TABLE DATAGEAR_SCHEMA
|
|||
SCHEMA_SHARED VARCHAR(20),
|
||||
DRIVER_ENTITY_ID VARCHAR(100),
|
||||
PRIMARY KEY (SCHEMA_ID)
|
||||
)
|
||||
);
|
||||
|
|
Loading…
Reference in New Issue