修改模块化加载,可以通过配置文件控制加载哪些模块,同时前端有对应显示

This commit is contained in:
Sh1yu
2023-06-15 15:48:56 +08:00
parent 87e41e91c1
commit 270886a3ab
11 changed files with 185 additions and 24 deletions

View File

@@ -22,11 +22,16 @@ import java.util.Optional;
* 程序启动器
*
* @author 暮光:城中城
* @author Sh1yu 2023年6月15日
* @since 2018-11-27
*/
@EnableScheduling
@SpringBootApplication
@ComponentScan(basePackages = {"com.zyplayer.doc"})
@ComponentScan(basePackages = {
"com.zyplayer.doc.manage",
"com.zyplayer.doc.data",
"com.zyplayer.doc.core"
})
public class Application extends SpringBootServletInitializer {
private static Logger logger = LoggerFactory.getLogger(Application.class);

View File

@@ -3,6 +3,7 @@ package com.zyplayer.doc.manage.framework.config;
import com.alibaba.fastjson.serializer.SerializerFeature;
import com.alibaba.fastjson.support.config.FastJsonConfig;
import com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter;
import com.zyplayer.doc.manage.framework.interceptor.MoudleMissingInterceptor;
import com.zyplayer.doc.manage.framework.interceptor.UserLoginInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@@ -24,6 +25,7 @@ import java.util.List;
* WEB控制相关配置
*
* @author 暮光:城中城
* @author Sh1yu 2023年6月15日
* @since 2018年11月27日
*/
@Component
@@ -32,6 +34,8 @@ public class WebMvcConfig implements WebMvcConfigurer {
@Resource
UserLoginInterceptor userLoginInterceptor;
@Resource
MoudleMissingInterceptor moudleMissingInterceptor;
@Override
public void addFormatters(FormatterRegistry registry) {
@@ -65,6 +69,9 @@ 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(moudleMissingInterceptor)
.excludePathPatterns("/", "/doc-wiki", "/doc-db", "/doc-swagger-plus")
.excludePathPatterns("/**/*.js", "/**/*.css", "/**/*.png", "/**/*.gif", "/**/*.jpg", "/**/*.jpeg", "/**/fonts/*");
}
}

View File

@@ -3,26 +3,81 @@ package com.zyplayer.doc.manage.framework.config;
import com.zyplayer.doc.api.framework.config.EnableDocApi;
import com.zyplayer.doc.db.framework.configuration.EnableDocDb;
import com.zyplayer.doc.wiki.framework.config.EnableDocWiki;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.context.annotation.Configuration;
import java.util.HashMap;
/**
* 按需开启zyplayer-doc所有的服务
*
* @author 暮光:城中城
* @author Sh1yu 2023年6月15日
* @since 2019年3月31日
*/
@Configuration
public class ZyplayerDocConfig {
@EnableDocWiki
public class enableDocWiki {
}
@EnableDocDb
public class enableDocDb {
}
@EnableDocApi
public class enableDocApi {
}
//wiki模块的开启配置
@Value("${zyplayer.doc.manage.enable.wiki:true}")
private boolean enableWiki;
//db模块的开启配置
@Value("${zyplayer.doc.manage.enable.db:true}")
private boolean enableDb;
//api模块的开启配置
@Value("${zyplayer.doc.manage.enable.api:true}")
private boolean enableApi;
@EnableDocWiki
//wiki模块加载注解条件化配合配置文件决定是否加载
@ConditionalOnProperty(prefix = "zyplayer.doc.manage.enable", name = "wiki", matchIfMissing = true)
public class enableDocWiki {
}
@EnableDocDb
//db模块加载注解条件化配合配置文件决定是否加载
@ConditionalOnProperty(prefix = "zyplayer.doc.manage.enable", name = "db", matchIfMissing = true)
public class enableDocDb {
}
@EnableDocApi
//api模块加载注解条件化配合配置文件决定是否加载
@ConditionalOnProperty(prefix = "zyplayer.doc.manage.enable", name = "api", matchIfMissing = true)
public class enableDocApi {
}
public boolean isEnableWiki() {
return enableWiki;
}
public void setEnableWiki(boolean enableWiki) {
this.enableWiki = enableWiki;
}
public boolean isEnableDb() {
return enableDb;
}
public void setEnableDb(boolean enableDb) {
this.enableDb = enableDb;
}
public boolean isEnableApi() {
return enableApi;
}
public void setEnableApi(boolean enableApi) {
this.enableApi = enableApi;
}
//提供模块开启状态数组,给前端控制页面展示
public HashMap<String,Boolean> getMoudleInfo(){
HashMap<String,Boolean> moudleInfo = new HashMap<>();
moudleInfo.put("enableWiki",this.enableWiki);
moudleInfo.put("enableDb",this.enableDb);
moudleInfo.put("enableApi",this.enableApi);
return moudleInfo;
}
}

View File

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

View File

@@ -2,24 +2,37 @@ package com.zyplayer.doc.manage.web;
import com.zyplayer.doc.core.json.DocResponseJson;
import com.zyplayer.doc.core.json.ResponseJson;
import com.zyplayer.doc.manage.framework.config.ZyplayerDocConfig;
import com.zyplayer.doc.manage.task.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;
/**
* 系统信息控制器
*
* @author 暮光:城中城
* @author Sh1yu 2023年6月15日
* @since 2019-04-21
*/
@RestController
@RequestMapping("/system/info")
public class SystemInfoController {
@PostMapping("/upgrade")
public ResponseJson<Object> upgradeInfo() {
return DocResponseJson.ok(UpgradeUtil.upgradeInfo);
}
@Resource
ZyplayerDocConfig zyplayerDocConfig;
@PostMapping("/upgrade")
public ResponseJson<Object> upgradeInfo() {
return DocResponseJson.ok(UpgradeUtil.upgradeInfo);
}
@GetMapping("/moudle")
public ResponseJson<Object> moudleInfo() {
return DocResponseJson.ok(zyplayerDocConfig.getMoudleInfo());
}
}