!41 add postgresql support

Merge pull request !41 from runner-mei/master
This commit is contained in:
sswiki
2024-11-30 12:28:31 +00:00
committed by Gitee
10 changed files with 133 additions and 13 deletions

7
.gitignore vendored
View File

@@ -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/

View File

@@ -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%

View File

@@ -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;

View File

@@ -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);
}

View File

@@ -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();

View File

@@ -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>

View File

@@ -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>-->

View File

@@ -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;
}

View 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&currentSchema=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

View File

@@ -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,