去掉db、api模块,后续只专注于维护wiki知识库模块,最后支持的代码存放于 full-latest 分支

This commit is contained in:
sswiki
2024-12-02 22:39:06 +08:00
parent cd0651db1b
commit 9bcd72d2e6
573 changed files with 53 additions and 198717 deletions

View File

@@ -37,10 +37,6 @@
<groupId>org.dromara</groupId>
<artifactId>zyplayer-doc-core</artifactId>
</dependency>
<dependency>
<groupId>org.dromara</groupId>
<artifactId>zyplayer-doc-db</artifactId>
</dependency>
<dependency>
<groupId>org.dromara</groupId>
<artifactId>zyplayer-doc-wiki</artifactId>
@@ -49,10 +45,6 @@
<groupId>org.dromara</groupId>
<artifactId>zyplayer-doc-data</artifactId>
</dependency>
<dependency>
<groupId>org.dromara</groupId>
<artifactId>zyplayer-doc-api</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>

View File

@@ -1,15 +1,23 @@
package org.dromara.zyplayer.manage;
import org.dromara.zyplayer.core.util.ZyplayerDocVersion;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.beans.factory.support.BeanDefinitionRegistry;
import org.springframework.beans.factory.support.BeanNameGenerator;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.core.env.Environment;
import org.springframework.scheduling.annotation.EnableScheduling;
import java.net.InetAddress;
import java.util.Optional;
/**
* 程序启动器
*
@@ -33,7 +41,38 @@ public class Application extends SpringBootServletInitializer {
}
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
ConfigurableApplicationContext application = new SpringApplicationBuilder(Application.class)
.beanNameGenerator(new CustomGenerator()).run(args);
Environment env = application.getEnvironment();
String contextPath = env.getProperty("server.servlet.context-path");
contextPath = Optional.ofNullable(contextPath).orElse("").replaceFirst("/", "");
contextPath = (contextPath.length() <= 0 || contextPath.endsWith("/")) ? contextPath : contextPath + "/";
String hostAddress = getLocalHostAddress();
String serverPort = env.getProperty("server.port");
String urlCtx = hostAddress + ":" + serverPort + "/" + contextPath;
logger.info("\n" +
"-------------------------------------------------------------\n" +
" zyplayer-doc Launch completed, Current version: {}\n" +
" Access address: http://{}\n" +
"-------------------------------------------------------------",
ZyplayerDocVersion.version, urlCtx
);
}
public static class CustomGenerator implements BeanNameGenerator {
@Override
public String generateBeanName(BeanDefinition definition, BeanDefinitionRegistry registry) {
return definition.getBeanClassName();
}
}
private static String getLocalHostAddress() {
try {
return InetAddress.getLocalHost().getHostAddress();
} catch (Exception e) {
logger.error("获取本机IP失败" + e.getMessage());
}
return "127.0.0.1";
}
}

View File

@@ -3,7 +3,6 @@ package org.dromara.zyplayer.manage.framework.config;
import com.alibaba.fastjson.serializer.SerializerFeature;
import com.alibaba.fastjson.support.config.FastJsonConfig;
import com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter;
import org.dromara.zyplayer.manage.framework.interceptor.ModuleMissingInterceptor;
import org.dromara.zyplayer.manage.framework.interceptor.UserLoginInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@@ -34,8 +33,6 @@ public class WebMvcConfig implements WebMvcConfigurer {
@Resource
UserLoginInterceptor userLoginInterceptor;
@Resource
ModuleMissingInterceptor moduleMissingInterceptor;
@Override
public void addFormatters(FormatterRegistry registry) {
@@ -69,9 +66,6 @@ public class WebMvcConfig implements WebMvcConfigurer {
registry.addInterceptor(userLoginInterceptor)
.excludePathPatterns("/", "/doc-wiki", "/doc-db", "/doc-swagger-plus")
.excludePathPatterns("/**/*.js", "/**/*.css", "/**/*.png", "/**/*.gif", "/**/*.jpg", "/**/*.jpeg", "/**/fonts/*");
registry.addInterceptor(moduleMissingInterceptor)
.excludePathPatterns("/", "/doc-wiki", "/doc-db", "/doc-swagger-plus")
.excludePathPatterns("/**/*.js", "/**/*.css", "/**/*.png", "/**/*.gif", "/**/*.jpg", "/**/*.jpeg", "/**/fonts/*");
}
}

View File

@@ -1,9 +1,6 @@
package org.dromara.zyplayer.manage.framework.config;
import org.dromara.zyplayer.api.framework.config.EnableDocApi;
import org.dromara.zyplayer.db.framework.configuration.EnableDocDb;
import org.dromara.zyplayer.wiki.framework.config.EnableDocWiki;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.context.annotation.Configuration;
/**
@@ -18,17 +15,6 @@ import org.springframework.context.annotation.Configuration;
public class ZyplayerDocConfig {
@EnableDocWiki
@ConditionalOnProperty(prefix = "zyplayer.doc.manage.enable", name = "wiki", matchIfMissing = true)
public static class enableWiki {
}
@EnableDocDb
@ConditionalOnProperty(prefix = "zyplayer.doc.manage.enable", name = "db", matchIfMissing = true)
public static class enableDb {
}
@EnableDocApi
@ConditionalOnProperty(prefix = "zyplayer.doc.manage.enable", name = "api", matchIfMissing = true)
public static class enableApi {
}
}

View File

@@ -1,59 +0,0 @@
package org.dromara.zyplayer.manage.framework.config;
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.context.annotation.Configuration;
import java.util.HashMap;
/**
* 按照类加载的情况获取模块的加载状态
*
* @author Sh1yu
* @since 2023年6月15日
*/
@Configuration
public class ZyplayerModuleKeeper implements ApplicationContextAware {
final HashMap<String, Boolean> moduleInfo = new HashMap<>();
private ApplicationContext applicationContext;
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
this.applicationContext = applicationContext;
}
//获取模块是否启动
public boolean ismoduleStarted(Class<?> clazz) {
if (moduleInfo.isEmpty()) {
getmoduleInfo();
}
return moduleInfo.get(clazz.getName().split("\\$")[1]);
}
//提供模块开启状态数组,给前端控制页面展示
public HashMap<String, Boolean> getmoduleInfo() {
if (moduleInfo.isEmpty()) {
synchronized (ZyplayerModuleKeeper.class) {
Class<? extends ZyplayerDocConfig> clazz = ZyplayerDocConfig.class;
Class<?>[] innerClasses = clazz.getClasses();
for (Class<?> innerClass : innerClasses) {
moduleInfo.put(innerClass.getName().split("\\$")[1], ismoduleConfigLoadUp(innerClass));
}
}
}
return moduleInfo;
}
private Boolean ismoduleConfigLoadUp(Class<?> innerClass) {
Object bean = null;
try {
bean = applicationContext.getBean(innerClass);
} catch (BeansException e) {
return false;
}
return true;
}
}

View File

@@ -1,40 +0,0 @@
package org.dromara.zyplayer.manage.framework.console;
import org.dromara.zyplayer.core.util.ZyplayerDocVersion;
import org.springframework.core.env.Environment;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.net.InetAddress;
import java.util.Optional;
/**
* 启动后打印应用信息
*
* @author Sh1yu
* @since 2023年6月16日
*/
@Component
public class ApplicationInfoConsolePrint implements IConsolePrint {
@Resource
Environment environment;
@Override
public void buildPrintInfo(StringBuilder printInfo) throws Exception {
String contextPath = environment.getProperty("server.servlet.context-path");
contextPath = Optional.ofNullable(contextPath).orElse("").replaceFirst("/", "");
contextPath = (contextPath.isEmpty() || contextPath.endsWith("/")) ? contextPath : contextPath + "/";
String hostAddress = InetAddress.getLocalHost().getHostAddress();
String serverPort = environment.getProperty("server.port");
String urlCtx = hostAddress + ":" + serverPort + "/" + contextPath;
printInfo.append("\t zyplayer-doc启动完成当前版本")
.append(ZyplayerDocVersion.version)
.append("\n\t访问地址http://")
.append(urlCtx);
}
@Override
public int getOrder() {
return -1;
}
}

View File

@@ -1,13 +0,0 @@
package org.dromara.zyplayer.manage.framework.console;
import org.springframework.core.Ordered;
/**
* 启动后打印信息接口
*
* @author Sh1yu
* @since 2023年6月16日
*/
public interface IConsolePrint extends Ordered {
void buildPrintInfo(StringBuilder printInfo) throws Exception;
}

View File

@@ -1,51 +0,0 @@
package org.dromara.zyplayer.manage.framework.console;
import org.dromara.zyplayer.manage.framework.config.ZyplayerModuleKeeper;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.util.HashMap;
import java.util.Map;
/**
* 启动后打印模块信息
*
* @author Sh1yu
* @since 2023年6月16日
*/
@Component
public class ModuleInfoConsolePrint implements IConsolePrint {
@Resource
ZyplayerModuleKeeper moduleKeeper;
@Override
public void buildPrintInfo(StringBuilder printInfo) {
printInfo.append("\n\n\t\t\t\t↓zyplayer-doc模块的启动情况\n")
.append("\t\t\t\t------------------------\n");
HashMap<String, Boolean> moduleInfoMap = moduleKeeper.getmoduleInfo();
for (Map.Entry<String, Boolean> moduleInfo : moduleInfoMap.entrySet()) {
printInfo.append(getPerfectPosString(moduleInfo.getKey()))
.append("模块启动情况为:")
.append(moduleInfo.getValue() ? "启动成功\n" : "未启动\n");
}
}
private String getPerfectPosString(String beforeOption) {
final int rightOffsetMax = 19;
String afterOption = beforeOption.replace("enable", "");
int length = afterOption.length();
int rightOffset = rightOffsetMax - length;
StringBuilder stringBuilder = new StringBuilder();
for (int i = 0; i < rightOffset; i++) {
stringBuilder.append(" ");
}
stringBuilder.append(afterOption);
return stringBuilder.toString();
}
@Override
public int getOrder() {
return 1;
}
}

View File

@@ -1,52 +0,0 @@
package org.dromara.zyplayer.manage.framework.console;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.ObjectProvider;
import org.springframework.boot.CommandLineRunner;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.util.Comparator;
import java.util.List;
import java.util.stream.Collectors;
/**
* 程序启动后内容打印新增打印内容只需要继承IConsolePrint
*
* @author 暮光:城中城
* @author Sh1yu
* @See IConsolePrint
* @since 2023年6月15日
*/
@Component
public class ZyplayerConsolePrint implements CommandLineRunner {
private static final Logger logger = LoggerFactory.getLogger(ZyplayerConsolePrint.class);
final StringBuilder logInfoHolder = new StringBuilder();
@Resource
ObjectProvider<List<IConsolePrint>> consolePrintListProvider;
public void run(String... args) throws Exception {
if (!logger.isInfoEnabled()) {
return;
}
List<IConsolePrint> consolePrintList = consolePrintListProvider.getIfAvailable();
if (consolePrintList.isEmpty()) {
return;
}
logInfoHolder.append("\n--------------------------------------------------------------\n\t");
List<IConsolePrint> collect = consolePrintList.stream()
.sorted(Comparator.comparingInt(IConsolePrint::getOrder))
.collect(Collectors.toList());
for (IConsolePrint consolePrint : collect) {
consolePrint.buildPrintInfo(logInfoHolder);
}
logInfoHolder.append("--------------------------------------------------------------\n\t");
logger.info(logInfoHolder.toString());
}
}

View File

@@ -1,66 +0,0 @@
package org.dromara.zyplayer.manage.framework.interceptor;
import org.dromara.zyplayer.core.json.DocResponseJson;
import org.dromara.zyplayer.manage.framework.config.ZyplayerDocConfig;
import org.dromara.zyplayer.manage.framework.config.ZyplayerModuleKeeper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* 模块未开启时判定失败响应拦截器
*
* @author Sh1yu
* @since 2023年6月15日
*/
@Component
public class ModuleMissingInterceptor implements HandlerInterceptor {
private static final Logger logger = LoggerFactory.getLogger(ModuleMissingInterceptor.class);
private static boolean enableWiki = true;
private static boolean enableDb = true;
private static boolean enableApi = true;
public ModuleMissingInterceptor(ZyplayerModuleKeeper zyplayerModuleKeeper){
enableWiki= zyplayerModuleKeeper.ismoduleStarted(ZyplayerDocConfig.enableWiki.class);
enableDb= zyplayerModuleKeeper.ismoduleStarted(ZyplayerDocConfig.enableDb.class);
enableApi= zyplayerModuleKeeper.ismoduleStarted(ZyplayerDocConfig.enableApi.class);
}
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
String requestURI = request.getRequestURI();
String simplemoduleUri = requestURI.replace("/zyplayer-doc/", "");
if (simplemoduleUri.startsWith("zyplayer-doc-wiki") && !enableWiki) {
doFailResponse(response, "wiki模块未开启无法提供相应功能");
return false;
}
if (simplemoduleUri.startsWith("zyplayer-doc-db") && !enableDb) {
doFailResponse(response, "db模块未开启无法提供相应功能");
return false;
}
if (simplemoduleUri.startsWith("zyplayer-doc-api") && !enableApi) {
doFailResponse(response, "api模块未开启无法提供相应功能");
return false;
}
return true;
}
public boolean validate(String simpleModuleUri,String uriPrefix,boolean moduleEnabled,HttpServletResponse response,String failMsg){
if (simpleModuleUri.startsWith(uriPrefix) && !moduleEnabled) {
doFailResponse(response, failMsg);
return false;
}
return true;
}
public void doFailResponse(HttpServletResponse response, String msg) {
DocResponseJson.warn(msg).send(response);
}
}

View File

@@ -15,5 +15,4 @@ public class UpgradeInfo {
private String upgradeContent;
private String upgradeUrl;
private String nextStep;
}

View File

@@ -3,16 +3,15 @@ package org.dromara.zyplayer.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 org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.ibatis.session.SqlSessionFactory;
import org.dromara.zyplayer.core.enums.SystemConfigEnum;
import org.dromara.zyplayer.core.util.UpgradeInfo;
import org.dromara.zyplayer.core.util.ZyplayerDocVersion;
import org.dromara.zyplayer.data.repository.manage.mapper.UserInfoMapper;
import org.dromara.zyplayer.data.service.manage.SystemConfigService;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.core.io.ClassPathResource;
@@ -144,7 +143,6 @@ public class UpgradeSystemDdlTask {
if (!"mysql".equals(databaseId)) {
sql = loadDDLFile("sql/upgrade/" + databaseId + "/" + version + ".sql");
}
if (StringUtils.isBlank(sql)) {
logger.info("未找到当前版本的DDL脚本" + version);
return;

View File

@@ -2,15 +2,11 @@ package org.dromara.zyplayer.manage.web;
import org.dromara.zyplayer.core.json.DocResponseJson;
import org.dromara.zyplayer.core.json.ResponseJson;
import org.dromara.zyplayer.manage.framework.config.ZyplayerModuleKeeper;
import org.dromara.zyplayer.manage.framework.upgrade.UpgradeUtil;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
/**
* 系统信息控制器
*
@@ -22,17 +18,8 @@ import javax.annotation.Resource;
@RequestMapping("/system/info")
public class SystemInfoController {
@Resource
ZyplayerModuleKeeper moduleKeeper;
@PostMapping("/upgrade")
public ResponseJson<Object> upgradeInfo() {
return DocResponseJson.ok(UpgradeUtil.upgradeInfo);
}
@GetMapping("/module")
public ResponseJson<Object> moduleInfo() {
return DocResponseJson.ok(moduleKeeper.getmoduleInfo());
}
}

View File

@@ -23,13 +23,6 @@ zyplayer:
url: jdbc:mysql://${DATASOURCE_HOST_PORT:127.0.0.1:3306}/${DATASOURCE_DATABASE:zyplayer_doc}?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&autoReconnect=true&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true
username: ${DATASOURCE_USER:root}
password: ${DATASOURCE_PASSWORD:root}
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
@@ -40,14 +33,6 @@ zyplayer:
upload-path: ${WIKI_UPLOAD_PATH:D:/zyplayerDoc/wikiFiles}
# 是否检查目录有被系统定期清理的风险,建议开启
upload-path-check: true
# ------数据库相关配置------
db:
# 最大允许导出的行数,设置的过大有可能会导致内存溢出
download-max-row: 100000
swagger:
proxy-request:
# 允许代理请求的域名,正则表达式,多个使用 ; 分割,必须设置,防止通过代理接口访问到内部资源,实在觉得没必要可设置为:.+
white-domain: .+
spring:
application: