!41 add postgresql support
Merge pull request !41 from runner-mei/master
This commit is contained in:
7
.gitignore
vendored
7
.gitignore
vendored
@@ -61,3 +61,10 @@ rebel.xml
|
||||
# 忽略office文件打开临时文件 #
|
||||
[~$]*.*
|
||||
tmlog.lck
|
||||
/.metadata/
|
||||
zyplayer-doc-data/bin
|
||||
zyplayer-doc-api/bin
|
||||
zyplayer-doc-core/bin
|
||||
zyplayer-doc-data/src/main/java/com/zyplayer/.metadata/
|
||||
zyplayer-doc-db/bin/
|
||||
zyplayer-doc-wiki/bin/
|
||||
@@ -20,6 +20,7 @@ md %target_dir%
|
||||
|
||||
copy zyplayer-doc-manage\target\zyplayer-doc.jar %target_dir%
|
||||
copy zyplayer-doc-manage\src\main\resources\application.yml %target_dir%
|
||||
copy zyplayer-doc-manage\src\main\resources\application_pg.yml %target_dir%
|
||||
|
||||
xcopy /e /y /q zyplayer-doc-other\script %target_dir%
|
||||
|
||||
|
||||
@@ -11,7 +11,10 @@ import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
|
||||
import org.springframework.transaction.annotation.EnableTransactionManagement;
|
||||
import org.apache.ibatis.mapping.DatabaseIdProvider;
|
||||
import org.apache.ibatis.mapping.VendorDatabaseIdProvider;
|
||||
|
||||
import java.util.Properties;
|
||||
import javax.annotation.Resource;
|
||||
import javax.sql.DataSource;
|
||||
|
||||
@@ -51,9 +54,21 @@ public class MybatisPlusConfig {
|
||||
@Bean(name = "manageSqlSessionFactory")
|
||||
public MybatisSqlSessionFactoryBean manageSqlSessionFactory() throws Exception {
|
||||
MybatisSqlSessionFactoryBean sqlSessionFactoryBean = new MybatisSqlSessionFactoryBean();
|
||||
DatabaseIdProvider databaseIdProvider = new VendorDatabaseIdProvider();
|
||||
Properties properties = new Properties();
|
||||
properties.setProperty("SQL Server", "sqlserver");
|
||||
properties.setProperty("DB2", "db2");
|
||||
properties.setProperty("Oracle", "oracle");
|
||||
properties.setProperty("MySQL", "mysql");
|
||||
properties.setProperty("PostgreSQL", "postgresql");
|
||||
properties.setProperty("Derby", "derby");
|
||||
properties.setProperty("HSQL", "hsqldb");
|
||||
properties.setProperty("H2", "h2");
|
||||
databaseIdProvider.setProperties(properties);
|
||||
sqlSessionFactoryBean.setDatabaseIdProvider(databaseIdProvider);
|
||||
sqlSessionFactoryBean.setDataSource(manageDatasource());
|
||||
sqlSessionFactoryBean.setPlugins(new SqlLogInterceptor(), paginationInterceptor);
|
||||
|
||||
|
||||
PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
|
||||
sqlSessionFactoryBean.setMapperLocations(resolver.getResources("classpath:/mapper/manage/*Mapper.xml"));
|
||||
return sqlSessionFactoryBean;
|
||||
|
||||
@@ -18,15 +18,18 @@ import java.util.Map;
|
||||
*/
|
||||
public interface UserInfoMapper extends BaseMapper<UserInfo> {
|
||||
|
||||
@Select("show tables")
|
||||
@Select(value = "show tables")
|
||||
@Select(value = "SELECT table_name FROM information_schema.tables where table_schema = 'zyplayer_doc'", databaseId="postgresql")
|
||||
List<String> getTableList();
|
||||
|
||||
@Select("${sql}")
|
||||
List<String> executeSql(@Param("sql") String sql);
|
||||
|
||||
@Select("SHOW COLUMNS FROM ${tableName}")
|
||||
@Select(value = "SELECT * FROM information_schema.columns WHERE table_name = #{tableName} and table_schema = 'zyplayer_doc'", databaseId="postgresql")
|
||||
List<Map<String, Object>> getTableColumnList(@Param("tableName") String tableName);
|
||||
|
||||
@Select("SHOW INDEX FROM ${tableName}")
|
||||
@Select(value = "SELECT * FROM pg_catalog.pg_indexes WHERE tablename = #{tableName} and schemaname = 'zyplayer_doc'", databaseId="postgresql")
|
||||
List<Map<String, Object>> getTableIndexList(@Param("tableName") String tableName);
|
||||
}
|
||||
|
||||
@@ -32,7 +32,7 @@ public class UserAuthServiceImpl extends ServiceImpl<UserAuthMapper, UserAuth> i
|
||||
@Override
|
||||
public List<UserAuthInfo> getUserAuthSet(Long userId) {
|
||||
QueryWrapper<UserAuth> authWrapper = new QueryWrapper<>();
|
||||
authWrapper.eq("user_id", userId).eq("del_flag", "0");
|
||||
authWrapper.eq("user_id", userId).eq("del_flag", 0);
|
||||
List<UserAuth> userAuthList = this.list(authWrapper);
|
||||
if (CollectionUtils.isEmpty(userAuthList)) {
|
||||
return Collections.emptyList();
|
||||
|
||||
@@ -12,4 +12,12 @@
|
||||
set seq_no = b.rownum
|
||||
where a.parent_id = #{parentId} and a.space_id = #{spaceId};
|
||||
</update>
|
||||
<update id="updateChildrenSeq" databaseId="postgresql">
|
||||
WITH exceeded_wiki_page AS (
|
||||
select row_number() over() as rownum, * from wiki_page where parent_id = #{parentId} and space_id = #{spaceId} ORDER BY seq_no ASC, update_time DESC
|
||||
)
|
||||
UPDATE wiki_page SET seq_no = ewp.rownum
|
||||
FROM exceeded_wiki_page AS ewp
|
||||
WHERE wiki_page.id = ewp.id
|
||||
</update>
|
||||
</mapper>
|
||||
|
||||
@@ -57,6 +57,13 @@
|
||||
<groupId>mysql</groupId>
|
||||
<artifactId>mysql-connector-java</artifactId>
|
||||
</dependency>
|
||||
<!-- https://mvnrepository.com/artifact/org.postgresql/postgresql -->
|
||||
<dependency>
|
||||
<groupId>org.postgresql</groupId>
|
||||
<artifactId>postgresql</artifactId>
|
||||
<version>42.7.4</version>
|
||||
</dependency>
|
||||
|
||||
<!-- <dependency>-->
|
||||
<!-- <groupId>com.oracle</groupId>-->
|
||||
<!-- <artifactId>ojdbc6</artifactId>-->
|
||||
|
||||
@@ -3,6 +3,9 @@ package com.zyplayer.doc.manage.framework.upgrade;
|
||||
import com.alibaba.druid.sql.ast.SQLStatement;
|
||||
import com.alibaba.druid.sql.ast.statement.*;
|
||||
import com.alibaba.druid.sql.dialect.mysql.parser.MySqlStatementParser;
|
||||
import org.apache.ibatis.session.Configuration;
|
||||
import org.apache.ibatis.session.SqlSessionFactory;
|
||||
import com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean;
|
||||
import com.zyplayer.doc.core.enums.SystemConfigEnum;
|
||||
import com.zyplayer.doc.core.util.UpgradeInfo;
|
||||
import com.zyplayer.doc.core.util.ZyplayerDocVersion;
|
||||
@@ -37,6 +40,8 @@ public class UpgradeSystemDdlTask {
|
||||
@Resource
|
||||
UserInfoMapper userInfoMapper;
|
||||
@Resource
|
||||
MybatisSqlSessionFactoryBean mybatisSqlSessionFactoryBean;
|
||||
@Resource
|
||||
SystemConfigService systemConfigService;
|
||||
|
||||
/**
|
||||
@@ -48,6 +53,11 @@ public class UpgradeSystemDdlTask {
|
||||
@PostConstruct
|
||||
public void init() {
|
||||
try {
|
||||
|
||||
SqlSessionFactory sqlSessionFactory = mybatisSqlSessionFactoryBean.getObject();
|
||||
Configuration c = sqlSessionFactory.getConfiguration();
|
||||
String databaseId = c.getDatabaseId();
|
||||
|
||||
String nowVersion = systemConfigService.getConfigValue(SystemConfigEnum.DOC_SYSTEM_VERSION);
|
||||
if (Objects.equals(nowVersion, ZyplayerDocVersion.version)) {
|
||||
logger.info("当前数据库DDL已是最新版本:" + nowVersion);
|
||||
@@ -57,14 +67,14 @@ public class UpgradeSystemDdlTask {
|
||||
if (StringUtils.isBlank(nowVersion)) {
|
||||
if (CollectionUtils.isEmpty(tableList)) {
|
||||
// 新部署,执行全量建表语句
|
||||
initDatabase();
|
||||
initDatabase(databaseId);
|
||||
} else {
|
||||
// 执行一次最新的脚本
|
||||
upgradeByStart();
|
||||
upgradeByStart(databaseId);
|
||||
}
|
||||
} else {
|
||||
// 依次执行高于此版本的脚本
|
||||
upgradeByNowVersion(nowVersion, tableList);
|
||||
upgradeByNowVersion(databaseId, nowVersion, tableList);
|
||||
}
|
||||
// 更新当前版本
|
||||
systemConfigService.setConfigValue(SystemConfigEnum.DOC_SYSTEM_VERSION, ZyplayerDocVersion.version);
|
||||
@@ -79,8 +89,11 @@ public class UpgradeSystemDdlTask {
|
||||
* @author 暮光:城中城
|
||||
* @since 2022-12-03
|
||||
*/
|
||||
public void initDatabase() {
|
||||
public void initDatabase(String databaseId) {
|
||||
String sql = loadDDLFile("sql/full/full.sql");
|
||||
if (!"mysql".equals(databaseId)) {
|
||||
sql = loadDDLFile("sql/full/"+databaseId+"_full.sql");
|
||||
}
|
||||
if (StringUtils.isBlank(sql)) {
|
||||
logger.error("初始化数据库DDL失败,未找到当前版本的DDL脚本");
|
||||
return;
|
||||
@@ -90,6 +103,7 @@ public class UpgradeSystemDdlTask {
|
||||
for (SQLStatement sqlStatement : sqlStatements) {
|
||||
// 执行SQL
|
||||
try {
|
||||
logger.info("开始执行 DDL:" + sqlStatement.toString());
|
||||
userInfoMapper.executeSql(sqlStatement.toString());
|
||||
} catch (Exception e) {
|
||||
logger.info("执行升级SQL异常:" + e.getMessage());
|
||||
@@ -104,7 +118,7 @@ public class UpgradeSystemDdlTask {
|
||||
* @author 暮光:城中城
|
||||
* @since 2022-12-03
|
||||
*/
|
||||
public void upgradeByNowVersion(String nowVersion, List<String> tableList) {
|
||||
public void upgradeByNowVersion(String databaseId, String nowVersion, List<String> tableList) throws Exception {
|
||||
logger.info("升级数据库DDL脚本:{} --> {}", nowVersion, ZyplayerDocVersion.version);
|
||||
boolean isStart = false;
|
||||
for (int i = ZyplayerDocVersion.versionUpgrade.size() - 1; i >= 0; i--) {
|
||||
@@ -116,7 +130,7 @@ public class UpgradeSystemDdlTask {
|
||||
} else if (!upgradeInfo.isHaveUpgradeSql()) {
|
||||
logger.info("该版本无DDL脚本,跳过此版本:" + upgradeInfo.getVersion());
|
||||
} else {
|
||||
upgradeByVersion(upgradeInfo.getVersion(), tableList);
|
||||
upgradeByVersion(databaseId, upgradeInfo.getVersion(), tableList);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -127,9 +141,13 @@ public class UpgradeSystemDdlTask {
|
||||
* @author 暮光:城中城
|
||||
* @since 2022-12-03
|
||||
*/
|
||||
public void upgradeByVersion(String version, List<String> tableList) {
|
||||
public void upgradeByVersion(String databaseId, String version, List<String> tableList) {
|
||||
logger.info("升级数据库DDL开始:" + version);
|
||||
String sql = loadDDLFile("sql/upgrade/" + version + ".sql");
|
||||
if (!"mysql".equals(databaseId)) {
|
||||
sql = loadDDLFile("sql/upgrade/"+databaseId+"/" + version + ".sql");
|
||||
}
|
||||
|
||||
if (StringUtils.isBlank(sql)) {
|
||||
logger.info("未找到当前版本的DDL脚本:" + version);
|
||||
return;
|
||||
@@ -156,7 +174,7 @@ public class UpgradeSystemDdlTask {
|
||||
* @author 暮光:城中城
|
||||
* @since 2022-12-03
|
||||
*/
|
||||
public void upgradeByStart() {
|
||||
public void upgradeByStart(String databaseId) {
|
||||
logger.info("初始升级数据库DDL脚本:{} --> {}", "1.1.1", ZyplayerDocVersion.version);
|
||||
for (int i = ZyplayerDocVersion.versionUpgrade.size() - 1; i >= 0; i--) {
|
||||
UpgradeInfo upgradeInfo = ZyplayerDocVersion.versionUpgrade.get(i);
|
||||
@@ -165,6 +183,9 @@ public class UpgradeSystemDdlTask {
|
||||
continue;
|
||||
}
|
||||
String sql = loadDDLFile("sql/upgrade/" + upgradeInfo.getVersion() + ".sql");
|
||||
if (!"mysql".equals(databaseId)) {
|
||||
sql = loadDDLFile("sql/upgrade/"+databaseId+"/" + upgradeInfo.getVersion() + ".sql");
|
||||
}
|
||||
if (StringUtils.isBlank(sql)) {
|
||||
return;
|
||||
}
|
||||
|
||||
60
zyplayer-doc-manage/src/main/resources/application_pg.yml
Normal file
60
zyplayer-doc-manage/src/main/resources/application_pg.yml
Normal file
@@ -0,0 +1,60 @@
|
||||
# 端口和根路径,jar启动时依此处配置,放tomcat后以tomcat的配置为准
|
||||
server:
|
||||
port: ${SERVER_PORT:8083}
|
||||
servlet:
|
||||
context-path: ${CONTEXT_PATH:/}
|
||||
compression:
|
||||
enabled: true
|
||||
min-response-size: 2048
|
||||
tomcat:
|
||||
# tomcat容器层最大传输限制,不做限制
|
||||
max-http-post-size: -1
|
||||
max-http-form-post-size: -1
|
||||
max-swallow-size: -1
|
||||
|
||||
# 整个文档项目的配置
|
||||
zyplayer:
|
||||
doc:
|
||||
# ------zyplayer_doc_manage相关配置------
|
||||
manage:
|
||||
# 管理端的数据库配置
|
||||
datasource:
|
||||
driverClassName: ${DATASOURCE_DRIVER:org.postgresql.Driver}
|
||||
url: jdbc:postgresql://${DATASOURCE_HOST_PORT:127.0.0.1:5432}/${DATASOURCE_DATABASE:zyplayer_doc}?ssl=false&characterEncoding=utf-8¤tSchema=zyplayer_doc
|
||||
username: ${DATASOURCE_USER:rootxxx}
|
||||
password: ${DATASOURCE_PASSWORD:passwordxxxx}
|
||||
enable:
|
||||
#wiki模块的是否加载,没有此配置也为true,只有填写false才是不加载
|
||||
wiki: ${ZYPLAYER_ENABLE_WIKI:true}
|
||||
#db模块的是否加载,没有此配置也为true,只有填写false才是不加载
|
||||
db: ${ZYPLAYER_ENABLE_DB:true}
|
||||
#api模块的是否加载,没有此配置也为true,只有填写false才是不加载
|
||||
api: ${ZYPLAYER_ENABLE_API:true}
|
||||
# 版本和升级信息获取地址
|
||||
upgradePropertiesUrl: https://gitee.com/zyplayer/zyplayer-doc/raw/master/upgrade.properties
|
||||
# 系统根域名,调试UI时需要使用,同时需要在host文件里配置:127.0.0.1 local.zyplayer.com
|
||||
originDomainRegex: .*\.zyplayer\.com(:\d+|)$
|
||||
# ------WIKI文档相关------
|
||||
wiki:
|
||||
# WIKI文档的文件上传后的存储目录
|
||||
upload-path: ${WIKI_UPLOAD_PATH:D:/zyplayerDoc/wikiFiles}
|
||||
# 是否检查目录有被系统定期清理的风险,建议开启
|
||||
upload-path-check: true
|
||||
# ------数据库相关配置------
|
||||
db:
|
||||
# 最大允许导出的行数,设置的过大有可能会导致内存溢出
|
||||
download-max-row: 100000
|
||||
swagger:
|
||||
proxy-request:
|
||||
# 允许代理请求的域名,正则表达式,多个使用 ; 分割,必须设置,防止通过代理接口访问到内部资源,实在觉得没必要可设置为:.+
|
||||
white-domain: .+
|
||||
|
||||
spring:
|
||||
application:
|
||||
name: zyplayer-doc
|
||||
servlet:
|
||||
multipart:
|
||||
max-file-size: ${SERVLET_MAX_FILE_SIZE:100MB}
|
||||
max-request-size: ${SERVLET_MAX_REQUEST_SIZE:100MB}
|
||||
datasource:
|
||||
continue-on-error: true
|
||||
@@ -1,5 +1,3 @@
|
||||
-- add new schema named "zyplayer_doc":
|
||||
CREATE SCHEMA "zyplayer_doc";
|
||||
-- create "api_custom_node" table:
|
||||
CREATE TABLE "zyplayer_doc"."api_custom_node" (
|
||||
"id" serial NOT NULL,
|
||||
Reference in New Issue
Block a user