diff --git a/.idea/.gitignore b/.idea/.gitignore deleted file mode 100644 index 73f69e0..0000000 --- a/.idea/.gitignore +++ /dev/null @@ -1,8 +0,0 @@ -# Default ignored files -/shelf/ -/workspace.xml -# Datasource local storage ignored files -/dataSources/ -/dataSources.local.xml -# Editor-based HTTP Client requests -/httpRequests/ diff --git a/.idea/compiler.xml b/.idea/compiler.xml deleted file mode 100644 index 38d573b..0000000 --- a/.idea/compiler.xml +++ /dev/null @@ -1,6 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<project version="4"> - <component name="CompilerConfiguration"> - <bytecodeTargetLevel target="8" /> - </component> -</project> \ No newline at end of file diff --git a/.idea/dictionaries b/.idea/dictionaries deleted file mode 100644 index dee037e..0000000 --- a/.idea/dictionaries +++ /dev/null @@ -1,6 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<project version="4"> - <component name="ProjectDictionaryState"> - <dictionary name="mima0000" /> - </component> -</project> \ No newline at end of file diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml deleted file mode 100644 index 9b6c85f..0000000 --- a/.idea/inspectionProfiles/Project_Default.xml +++ /dev/null @@ -1,37 +0,0 @@ -<component name="InspectionProjectProfileManager"> - <profile version="1.0"> - <option name="myName" value="Project Default" /> - <inspection_tool class="Eslint" enabled="true" level="WARNING" enabled_by_default="true" /> - <inspection_tool class="JavaDoc" enabled="true" level="WARNING" enabled_by_default="true"> - <option name="TOP_LEVEL_CLASS_OPTIONS"> - <value> - <option name="ACCESS_JAVADOC_REQUIRED_FOR" value="none" /> - <option name="REQUIRED_TAGS" value="" /> - </value> - </option> - <option name="INNER_CLASS_OPTIONS"> - <value> - <option name="ACCESS_JAVADOC_REQUIRED_FOR" value="none" /> - <option name="REQUIRED_TAGS" value="" /> - </value> - </option> - <option name="METHOD_OPTIONS"> - <value> - <option name="ACCESS_JAVADOC_REQUIRED_FOR" value="none" /> - <option name="REQUIRED_TAGS" value="@return@param@throws or @exception" /> - </value> - </option> - <option name="FIELD_OPTIONS"> - <value> - <option name="ACCESS_JAVADOC_REQUIRED_FOR" value="none" /> - <option name="REQUIRED_TAGS" value="" /> - </value> - </option> - <option name="IGNORE_DEPRECATED" value="false" /> - <option name="IGNORE_JAVADOC_PERIOD" value="true" /> - <option name="IGNORE_DUPLICATED_THROWS" value="false" /> - <option name="IGNORE_POINT_TO_ITSELF" value="false" /> - <option name="myAdditionalJavadocTags" value="date" /> - </inspection_tool> - </profile> -</component> \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml deleted file mode 100644 index 731bc8e..0000000 --- a/.idea/modules.xml +++ /dev/null @@ -1,8 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<project version="4"> - <component name="ProjectModuleManager"> - <modules> - <module fileurl="file://$PROJECT_DIR$/.idea/nl-sso-server.iml" filepath="$PROJECT_DIR$/.idea/nl-sso-server.iml" /> - </modules> - </component> -</project> \ No newline at end of file diff --git a/.idea/nl-sso-server.iml b/.idea/nl-sso-server.iml deleted file mode 100644 index d6ebd48..0000000 --- a/.idea/nl-sso-server.iml +++ /dev/null @@ -1,9 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<module type="JAVA_MODULE" version="4"> - <component name="NewModuleRootManager" inherit-compiler-output="true"> - <exclude-output /> - <content url="file://$MODULE_DIR$" /> - <orderEntry type="inheritedJdk" /> - <orderEntry type="sourceFolder" forTests="false" /> - </component> -</module> \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml deleted file mode 100644 index 35eb1dd..0000000 --- a/.idea/vcs.xml +++ /dev/null @@ -1,6 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<project version="4"> - <component name="VcsDirectoryMappings"> - <mapping directory="" vcs="Git" /> - </component> -</project> \ No newline at end of file diff --git a/nladmin-system/.gitignore b/nladmin-system/.gitignore index 8c1a75b..54ef48a 100644 --- a/nladmin-system/.gitignore +++ b/nladmin-system/.gitignore @@ -7,3 +7,5 @@ /.gradle/ /target/* */application-dev.yml +nlsso-server/src/main/java/org/nl/common/constant/ +nlsso-server/src/main/java/org/nl/common/core/ diff --git a/nladmin-system/nlsso-server/pom.xml b/nladmin-system/nlsso-server/pom.xml index 6e390d7..02a32e4 100644 --- a/nladmin-system/nlsso-server/pom.xml +++ b/nladmin-system/nlsso-server/pom.xml @@ -32,6 +32,59 @@ </properties> <dependencies> + <dependency> + <groupId>cn.dynamictp</groupId> + <artifactId>dynamic-tp-spring-boot-starter-common</artifactId> + <version>1.0.9</version> + </dependency> + <dependency> + <groupId>cn.dynamictp</groupId> + <artifactId>dynamic-tp-spring-boot-starter-adapter-webserver</artifactId> + <version>1.0.9</version> + </dependency> + + <dependency> + <groupId>org.springframework.boot</groupId> + <artifactId>spring-boot-starter-actuator</artifactId> + </dependency> + + + <!-- 数据库版本管理--> + <dependency> + <groupId>org.flywaydb</groupId> + <artifactId>flyway-core</artifactId> + </dependency> + + <!--日志管理--> + <dependency> + <groupId>com.plumelog</groupId> + <artifactId>plumelog-lite-spring-boot-starter</artifactId> + <version>3.5.3</version> + <exclusions> + <exclusion> + <artifactId>plumelog-core</artifactId> + <groupId>com.plumelog</groupId> + </exclusion> + </exclusions> + </dependency> + + <dependency> + <groupId>com.plumelog</groupId> + <artifactId>plumelog-trace</artifactId> + <version>3.5.2</version> + </dependency> + + <dependency> + <groupId>org.redisson</groupId> + <artifactId>redisson-spring-boot-starter</artifactId> + <version>3.12.3</version> + <exclusions> + <exclusion> + <artifactId>spring-boot-starter-actuator</artifactId> + <groupId>org.springframework.boot</groupId> + </exclusion> + </exclusions> + </dependency> <!--工具包--> @@ -389,13 +442,6 @@ <version>5.0.1</version> </dependency> - <!--loki--> - <!-- https://loki4j.github.io/loki-logback-appender/#quick-start --> - <dependency> - <groupId>com.github.loki4j</groupId> - <artifactId>loki-logback-appender-jdk8</artifactId> - <version>1.3.2</version> - </dependency> <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId> diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/AppRun.java b/nladmin-system/nlsso-server/src/main/java/org/nl/AppRun.java index bbb8639..d929138 100644 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/AppRun.java +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/AppRun.java @@ -28,7 +28,8 @@ import org.springframework.web.bind.annotation.RestController; @RestController @Api(hidden = true) @SpringBootApplication(exclude = { - org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration.class + org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration.class, + org.springframework.boot.autoconfigure.quartz.QuartzAutoConfiguration.class }) @ServletComponentScan //https://blog.csdn.net/qq_36850813/article/details/101194250 @EnableTransactionManagement @@ -38,7 +39,6 @@ import org.springframework.web.bind.annotation.RestController; public class AppRun { public static void main(String[] args) { - SpringApplication.run(AppRun.class, args); } diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/config/DtpConfig.java b/nladmin-system/nlsso-server/src/main/java/org/nl/config/DtpConfig.java new file mode 100644 index 0000000..d1597e7 --- /dev/null +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/config/DtpConfig.java @@ -0,0 +1,42 @@ +package org.nl.config; + +import com.dtp.core.support.ThreadPoolBuilder; +import com.dtp.core.support.ThreadPoolCreator; +import com.dtp.core.thread.DtpExecutor; +import org.springframework.boot.web.servlet.server.ServletWebServerFactory; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * @author ldjun + * @version 1.0 + * @date 2023年01月13日 14:30 + * @desc desc + */ +@Configuration +public class DtpConfig { + + /** + * 通过{@link ThreadPoolCreator} 快速创建一些简单配置的动态线程池 + * tips: 建议直接在配置中心配置就行,不用@Bean声明 + * + * @return 线程池实例 + */ + @Bean + public DtpExecutor dtpExecutor1() { + + return ThreadPoolBuilder.newBuilder() + .threadPoolName("dtpExecutor1") + .corePoolSize(1) + .maximumPoolSize(1) + .queueCapacity(1) + .ioIntensive(true) + .buildDynamic(); + } + @Bean + public Object tomcatServletWebServerFactory(ServletWebServerFactory webServerFactory) { + return new Object(); + } + + +} diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/modules/logging/aspect/LogAspect.java b/nladmin-system/nlsso-server/src/main/java/org/nl/modules/logging/aspect/LogAspect.java index 0e45788..2ac447b 100644 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/modules/logging/aspect/LogAspect.java +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/modules/logging/aspect/LogAspect.java @@ -12,8 +12,7 @@ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. - *//* - + */ package org.nl.modules.logging.aspect; import cn.hutool.core.util.StrUtil; @@ -27,18 +26,13 @@ import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Pointcut; import org.aspectj.lang.reflect.MethodSignature; import org.nl.modules.common.utils.RequestHolder; -import org.nl.modules.common.utils.SecurityUtils; -import org.nl.modules.common.utils.StringUtils; import org.nl.modules.common.utils.ThrowableUtil; import org.nl.modules.logging.domain.Log; import org.springframework.stereotype.Component; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.context.request.RequestContextHolder; -import org.springframework.web.context.request.ServletRequestAttributes; import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; import java.lang.reflect.Method; import java.lang.reflect.Parameter; import java.util.ArrayList; @@ -46,57 +40,43 @@ import java.util.HashMap; import java.util.List; import java.util.Map; -*/ /** * @author Zheng Jie * @date 2018-11-24 - *//* - + */ @Component @Aspect @Slf4j public class LogAspect { - private final LogService logService; +// private final LogService logService; ThreadLocal<Long> currentTime = new ThreadLocal<>(); - public LogAspect(LogService logService) { - this.logService = logService; - } +// public LogAspect(LogService logService) { +// this.logService = logService; +// } - */ -/** + /** * 配置切入点 - *//* - + */ @Pointcut("@annotation(org.nl.modules.logging.annotation.Log)") public void logPointcut() { // 该方法无方法体,主要为了让同类中其他方法使用此切入点 } - */ -/** + /** * 配置环绕通知,使用在方法logPointcut()上注册的切入点 * * @param joinPoint join point for advice - *//* - + */ @Around("logPointcut()") public Object logAround(ProceedingJoinPoint joinPoint) throws Throwable { - ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes(); - HttpServletRequest request = attributes.getRequest(); - HttpServletResponse response = attributes.getResponse(); -// HttpServletRequest request = RequestHolder.getHttpServletRequest(); - - MethodSignature signature = (MethodSignature) joinPoint.getSignature(); Method method = signature.getMethod(); // 方法路径 String methodName = joinPoint.getTarget().getClass().getName() + "." + signature.getName() + "()"; String params=getParameter(method, joinPoint.getArgs()); - - log.info("请求uri:{}", request.getRequestURI()); log.info("请求方法:{}",methodName); log.info("请求方法参数:{}",params); @@ -105,16 +85,14 @@ public class LogAspect { result = joinPoint.proceed(); Log log = new Log("INFO",System.currentTimeMillis() - currentTime.get()); currentTime.remove(); - - logService.save(getUsername(), StringUtils.getBrowser(request), StringUtils.getIp(request),joinPoint, log); + HttpServletRequest request = RequestHolder.getHttpServletRequest(); +// logService.save(getUsername(), StringUtils.getBrowser(request), StringUtils.getIp(request),joinPoint, log); return result; } - */ -/** + /** * 根据方法和传入的参数获取请求参数 - *//* - + */ private String getParameter(Method method, Object[] args) { List<Object> argList = new ArrayList<>(); Parameter[] parameters = method.getParameters(); @@ -142,29 +120,27 @@ public class LogAspect { return argList.size() == 1 ? JSONUtil.toJsonStr(argList.get(0)) : JSONUtil.toJsonStr(argList); } - */ -/** + /** * 配置异常通知 * * @param joinPoint join point for advice * @param e exception - *//* - + */ @AfterThrowing(pointcut = "logPointcut()", throwing = "e") public void logAfterThrowing(JoinPoint joinPoint, Throwable e) { Log log = new Log("ERROR",System.currentTimeMillis() - currentTime.get()); currentTime.remove(); log.setExceptionDetail(ThrowableUtil.getStackTrace(e).getBytes()); HttpServletRequest request = RequestHolder.getHttpServletRequest(); - logService.save(getUsername(), StringUtils.getBrowser(request), StringUtils.getIp(request), (ProceedingJoinPoint)joinPoint, log); +// logService.save(getUsername(), StringUtils.getBrowser(request), StringUtils.getIp(request), (ProceedingJoinPoint)joinPoint, log); } public String getUsername() { try { - return SecurityUtils.getCurrentUsername(); + return "默认用户名"; +// return SecurityUtils.getCurrentUsername(); }catch (Exception e){ return ""; } } } -*/ diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/modules/loki/rest/LokiController.java b/nladmin-system/nlsso-server/src/main/java/org/nl/modules/loki/rest/LokiController.java deleted file mode 100644 index e498cb6..0000000 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/modules/loki/rest/LokiController.java +++ /dev/null @@ -1,40 +0,0 @@ -package org.nl.modules.loki.rest; - -import com.alibaba.fastjson.JSONObject; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.nl.modules.common.annotation.RateLimiter; -import org.nl.modules.loki.service.LokiService; -import org.springframework.http.HttpStatus; -import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.*; - -/** - * @Author: lyd - * @Description: 日志监控 - * @Date: 2022-08-15 - */ -@RestController -@RequiredArgsConstructor -@Api(tags = "日志监控") -@RequestMapping("/api/loki") -@Slf4j -public class LokiController { - - private final LokiService lokiService; - - @GetMapping("/labels/values") - @ApiOperation("获取标签") - public ResponseEntity<Object> labelsValues() { - return new ResponseEntity<>(lokiService.getLabelsValues(), HttpStatus.OK); - } - - @PostMapping("/logs") - @ApiOperation("获取日志") - @RateLimiter(value = 1, timeout = 300) // 限流 - public ResponseEntity<Object> getLogData(@RequestBody JSONObject json) { - return new ResponseEntity<>(lokiService.getLogData(json), HttpStatus.OK); - } -} diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/modules/loki/service/LokiService.java b/nladmin-system/nlsso-server/src/main/java/org/nl/modules/loki/service/LokiService.java deleted file mode 100644 index 10101c9..0000000 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/modules/loki/service/LokiService.java +++ /dev/null @@ -1,25 +0,0 @@ -package org.nl.modules.loki.service; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; - -/** - * @Author: lyd - * @Description: 服务类 - * @Date: 2022-08-15 - */ -public interface LokiService { - - /** - * 获取日志信息 - * @param json - * @return - */ - JSONObject getLogData(JSONObject json); - - /** - * 获取labels和values树 - * @return - */ - JSONArray getLabelsValues(); -} diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/modules/loki/service/impl/LokiServiceImpl.java b/nladmin-system/nlsso-server/src/main/java/org/nl/modules/loki/service/impl/LokiServiceImpl.java deleted file mode 100644 index f6eeb49..0000000 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/modules/loki/service/impl/LokiServiceImpl.java +++ /dev/null @@ -1,113 +0,0 @@ -package org.nl.modules.loki.service.impl; - -import cn.hutool.core.util.CharsetUtil; -import cn.hutool.http.HttpUtil; -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import lombok.RequiredArgsConstructor; -import org.nl.modules.loki.service.LokiService; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.stereotype.Service; - -/** - * @Author: lyd - * @Description: 实现类 - * @Date: 2022-08-15 - */ -@Service -@RequiredArgsConstructor -public class LokiServiceImpl implements LokiService { - - @Value("${loki.url}") - private String lokiUrl; - - @Value("${loki.systemName}") - private String systemName; - - @Override - public JSONObject getLogData(JSONObject json) { - String logLabel = ""; - String logLabelValue = ""; - Long start = 0L; - Long end = 0L; - String text = ""; - String limit = "100"; - String direction = "backward"; - if (json.get("logLabel") != null) logLabel = json.getString("logLabel"); - if (json.get("logLabelValue") != null) logLabelValue = json.getString("logLabelValue"); - if (json.get("text") != null) text = json.getString("text"); - if (json.get("start") != null) start = json.getLong("start"); - if (json.get("end") != null) end = json.getLong("end"); - if (json.get("limits") != null) limit = json.getString("limits"); - if (json.get("direction") != null) direction = json.getString("direction"); - /** - * 组织参数 - * 纳秒数 - * 1660037391880000000 - * 1641453208415000000 - * http://localhost:3100/loki/api/v1/query_range?query={host="localhost"} |= ``&limit=1500&start=1641453208415000000&end=1660027623419419002 - */ - JSONObject parse = null; - String query = lokiUrl + "/query_range?query={system=\"" + systemName + "\", " + logLabel + "=\"" + logLabelValue + "\"} |= `" + text + "`"; - String result = ""; - if (start==0L) { - result = HttpUtil.get(query + "&limit=" + limit + "&direction=" + direction, CharsetUtil.CHARSET_UTF_8); - } else { - result = HttpUtil.get(query + "&limit=" + limit + "&start=" + start + "&end=" + end + "&direction=" + direction, CharsetUtil.CHARSET_UTF_8); - } - try { - parse = (JSONObject) JSONObject.parse(result); - } catch (Exception e) { -// reslut的值可能为:too many outstanding requests,无法转化成Json - System.out.println("reslut:" + result); -// e.printStackTrace(); - } - return parse; - } - - /** - * 获取labels和values树 - * - * @return - */ - @Override - public JSONArray getLabelsValues() { - /** - * [{ - * label: - * value: - * children:[{ - * label - * value - * }] - * }] - */ - JSONArray result = new JSONArray(); - // 获取所有标签 - String labelString = HttpUtil.get(lokiUrl + "/labels", CharsetUtil.CHARSET_UTF_8); - JSONObject parse = (JSONObject) JSONObject.parse(labelString); - JSONArray labels = parse.getJSONArray("data"); - for (int i=0; i<labels.size(); i++) { - // 获取标签下的所有值 - String valueString = HttpUtil.get(lokiUrl + "/label/" + labels.getString(i) + "/values", CharsetUtil.CHARSET_UTF_8); - JSONObject parse2 = (JSONObject) JSONObject.parse(valueString); - JSONArray values = parse2.getJSONArray("data"); - JSONArray children = new JSONArray(); - // 组成树形状态 两级 - for (int j=0; j<values.size(); j++) { - JSONObject leaf = new JSONObject(); - leaf.put("label", values.getString(j)); - leaf.put("value", values.getString(j)); - children.add(leaf); - } - - JSONObject node = new JSONObject(); - node.put("label", labels.getString(i)); - node.put("value", labels.getString(i)); - node.put("children", children); - result.add(node); - } - return result; - } - -} diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/modules/system/rest/ParamController.java b/nladmin-system/nlsso-server/src/main/java/org/nl/modules/system/rest/ParamController.java index 318f291..f76c6d1 100644 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/modules/system/rest/ParamController.java +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/modules/system/rest/ParamController.java @@ -30,7 +30,6 @@ import java.util.Map; public class ParamController { private final ParamService paramService; - @GetMapping @Log("查询系统参数") @ApiOperation("查询系统参数") diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/modules/system/service/impl/UserRelateServiceImpl.java b/nladmin-system/nlsso-server/src/main/java/org/nl/modules/system/service/impl/UserRelateServiceImpl.java index c701a20..efeeccb 100644 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/modules/system/service/impl/UserRelateServiceImpl.java +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/modules/system/service/impl/UserRelateServiceImpl.java @@ -1,5 +1,6 @@ package org.nl.modules.system.service.impl; +import com.esotericsoftware.minlog.Log; import org.nl.modules.system.service.UserRelateService; import org.nl.modules.tools.MapOf; import org.nl.modules.wql.core.bean.WQLObject; @@ -30,6 +31,7 @@ public class UserRelateServiceImpl implements UserRelateService { @Override @Transactional public void inserRoleRelate(Long user, Set<Long> RoleIds) { + Log.info(""); if (user !=null && !CollectionUtils.isEmpty(RoleIds)){ for (Long roleid : RoleIds) { WQLObject.getWQLObject("sys_users_roles").insert(MapOf.of("user_id",user,"role_id",roleid)); diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/system/controller/user/UserController.java b/nladmin-system/nlsso-server/src/main/java/org/nl/system/controller/user/UserController.java index 26d7f5a..a203bdd 100644 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/system/controller/user/UserController.java +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/system/controller/user/UserController.java @@ -17,8 +17,6 @@ package org.nl.system.controller.user; import cn.dev33.satoken.secure.SaSecureUtil; import cn.dev33.satoken.stp.StpUtil; -import cn.hutool.core.util.ObjectUtil; -import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import io.swagger.annotations.Api; @@ -31,19 +29,15 @@ import org.nl.modules.common.exception.BadRequestException; import org.nl.modules.common.utils.RsaUtils; import org.nl.modules.common.utils.SecurityUtils; import org.nl.modules.logging.annotation.Log; -import org.nl.modules.tools.IdUtil; import org.nl.system.service.user.ISysUserService; import org.nl.system.service.user.dao.SysUser; -import org.nl.system.service.user.dto.SysUserDetail; import org.nl.system.service.user.dto.UserQuery; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; -import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; -import java.util.List; import java.util.Map; import java.util.Set; @@ -60,7 +54,6 @@ public class UserController { @Autowired ISysUserService userService; - @ApiOperation("查询用户") @GetMapping public ResponseEntity<Object> query(UserQuery query, PageQuery page){ diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/quartz/SimpleThreadPool.java b/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/quartz/SimpleThreadPool.java new file mode 100644 index 0000000..533d91a --- /dev/null +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/quartz/SimpleThreadPool.java @@ -0,0 +1,585 @@ +package org.nl.system.service.quartz; + +import org.quartz.SchedulerConfigException; +import org.quartz.spi.ThreadPool; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.Iterator; +import java.util.LinkedList; +import java.util.List; +import java.util.concurrent.atomic.AtomicBoolean; + +/** + * quartz自定义线程池 + */ +public class SimpleThreadPool implements ThreadPool { + + /* + * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + * + * Data members. + * + * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + */ + + private int count = -1; + + private int prio = Thread.NORM_PRIORITY; + + private boolean isShutdown = false; + private boolean handoffPending = false; + + private boolean inheritLoader = false; + + private boolean inheritGroup = true; + + private boolean makeThreadsDaemons = false; + + private ThreadGroup threadGroup; + + private final Object nextRunnableLock = new Object(); + + private List<WorkerThread> workers; + private LinkedList<WorkerThread> availWorkers = new LinkedList<WorkerThread>(); + private LinkedList<WorkerThread> busyWorkers = new LinkedList<WorkerThread>(); + + private String threadNamePrefix; + + private final Logger log = LoggerFactory.getLogger(getClass()); + + private String schedulerInstanceName; + + /* + * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + * + * Constructors. + * + * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + */ + + /** + * <p> + * Create a new (unconfigured) <code>SimpleThreadPool</code>. + * </p> + * + * @see #setThreadCount(int) + * @see #setThreadPriority(int) + */ + public SimpleThreadPool() { + } + + /** + * <p> + * Create a new <code>SimpleThreadPool</code> with the specified number + * of <code>Thread</code> s that have the given priority. + * </p> + * + * @param threadCount + * the number of worker <code>Threads</code> in the pool, must + * be > 0. + * @param threadPriority + * the thread priority for the worker threads. + * + * @see Thread + */ + public SimpleThreadPool(int threadCount, int threadPriority) { + setThreadCount(threadCount); + setThreadPriority(threadPriority); + } + + /* + * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + * + * Interface. + * + * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + */ + + public Logger getLog() { + return log; + } + + public int getPoolSize() { + return getThreadCount(); + } + + /** + * <p> + * Set the number of worker threads in the pool - has no effect after + * <code>initialize()</code> has been called. + * </p> + */ + public void setThreadCount(int count) { + this.count = count; + } + + /** + * <p> + * Get the number of worker threads in the pool. + * </p> + */ + public int getThreadCount() { + return count; + } + + /** + * <p> + * Set the thread priority of worker threads in the pool - has no effect + * after <code>initialize()</code> has been called. + * </p> + */ + public void setThreadPriority(int prio) { + this.prio = prio; + } + + /** + * <p> + * Get the thread priority of worker threads in the pool. + * </p> + */ + public int getThreadPriority() { + return prio; + } + + public void setThreadNamePrefix(String prfx) { + this.threadNamePrefix = prfx; + } + + public String getThreadNamePrefix() { + return threadNamePrefix; + } + + /** + * @return Returns the + * threadsInheritContextClassLoaderOfInitializingThread. + */ + public boolean isThreadsInheritContextClassLoaderOfInitializingThread() { + return inheritLoader; + } + + /** + * @param inheritLoader + * The threadsInheritContextClassLoaderOfInitializingThread to + * set. + */ + public void setThreadsInheritContextClassLoaderOfInitializingThread( + boolean inheritLoader) { + this.inheritLoader = inheritLoader; + } + + public boolean isThreadsInheritGroupOfInitializingThread() { + return inheritGroup; + } + + public void setThreadsInheritGroupOfInitializingThread( + boolean inheritGroup) { + this.inheritGroup = inheritGroup; + } + + + /** + * @return Returns the value of makeThreadsDaemons. + */ + public boolean isMakeThreadsDaemons() { + return makeThreadsDaemons; + } + + /** + * @param makeThreadsDaemons + * The value of makeThreadsDaemons to set. + */ + public void setMakeThreadsDaemons(boolean makeThreadsDaemons) { + this.makeThreadsDaemons = makeThreadsDaemons; + } + + public void setInstanceId(String schedInstId) { + } + + public void setInstanceName(String schedName) { + schedulerInstanceName = schedName; + } + + public void initialize() throws SchedulerConfigException { + + if(workers != null && workers.size() > 0) // already initialized... + return; + + if (count <= 0) { + throw new SchedulerConfigException( + "Thread count must be > 0"); + } + if (prio <= 0 || prio > 9) { + throw new SchedulerConfigException( + "Thread priority must be > 0 and <= 9"); + } + + if(isThreadsInheritGroupOfInitializingThread()) { + threadGroup = Thread.currentThread().getThreadGroup(); + } else { + // follow the threadGroup tree to the root thread group. + threadGroup = Thread.currentThread().getThreadGroup(); + ThreadGroup parent = threadGroup; + while ( !parent.getName().equals("main") ) { + threadGroup = parent; + parent = threadGroup.getParent(); + } + threadGroup = new ThreadGroup(parent, schedulerInstanceName + "-SimpleThreadPool"); + if (isMakeThreadsDaemons()) { + threadGroup.setDaemon(true); + } + } + + + if (isThreadsInheritContextClassLoaderOfInitializingThread()) { + getLog().info( + "Job execution threads will use class loader of thread: " + + Thread.currentThread().getName()); + } + + // create the worker threads and start them + Iterator<WorkerThread> workerThreads = createWorkerThreads(count).iterator(); + while(workerThreads.hasNext()) { + WorkerThread wt = workerThreads.next(); + wt.start(); + availWorkers.add(wt); + } + } + + protected List<WorkerThread> createWorkerThreads(int createCount) { + workers = new LinkedList<WorkerThread>(); + for (int i = 1; i<= createCount; ++i) { + String threadPrefix = getThreadNamePrefix(); + if (threadPrefix == null) { + threadPrefix = schedulerInstanceName + "_Worker"; + } + WorkerThread wt = new WorkerThread(this, threadGroup, + threadPrefix + "-" + i, + getThreadPriority(), + isMakeThreadsDaemons()); + if (isThreadsInheritContextClassLoaderOfInitializingThread()) { + wt.setContextClassLoader(Thread.currentThread() + .getContextClassLoader()); + } + workers.add(wt); + } + + return workers; + } + + /** + * <p> + * Terminate any worker threads in this thread group. + * </p> + * + * <p> + * Jobs currently in progress will complete. + * </p> + */ + public void shutdown() { + shutdown(true); + } + + /** + * <p> + * Terminate any worker threads in this thread group. + * </p> + * + * <p> + * Jobs currently in progress will complete. + * </p> + */ + public void shutdown(boolean waitForJobsToComplete) { + + synchronized (nextRunnableLock) { + getLog().debug("Shutting down threadpool..."); + + isShutdown = true; + + if(workers == null) // case where the pool wasn't even initialize()ed + return; + + // signal each worker thread to shut down + Iterator<WorkerThread> workerThreads = workers.iterator(); + while(workerThreads.hasNext()) { + WorkerThread wt = workerThreads.next(); + wt.shutdown(); + availWorkers.remove(wt); + } + + // Give waiting (wait(1000)) worker threads a chance to shut down. + // Active worker threads will shut down after finishing their + // current job. + nextRunnableLock.notifyAll(); + + if (waitForJobsToComplete == true) { + + boolean interrupted = false; + try { + // wait for hand-off in runInThread to complete... + while(handoffPending) { + try { + nextRunnableLock.wait(100); + } catch(InterruptedException _) { + interrupted = true; + } + } + + // Wait until all worker threads are shut down + while (busyWorkers.size() > 0) { + WorkerThread wt = (WorkerThread) busyWorkers.getFirst(); + try { + getLog().debug( + "Waiting for thread " + wt.getName() + + " to shut down"); + + // note: with waiting infinite time the + // application may appear to 'hang'. + nextRunnableLock.wait(2000); + } catch (InterruptedException _) { + interrupted = true; + } + } + + workerThreads = workers.iterator(); + while(workerThreads.hasNext()) { + WorkerThread wt = (WorkerThread) workerThreads.next(); + try { + wt.join(); + workerThreads.remove(); + } catch (InterruptedException _) { + interrupted = true; + } + } + } finally { + if (interrupted) { + Thread.currentThread().interrupt(); + } + } + + getLog().debug("No executing jobs remaining, all threads stopped."); + } + getLog().debug("Shutdown of threadpool complete."); + } + } + + /** + * <p> + * Run the given <code>Runnable</code> object in the next available + * <code>Thread</code>. If while waiting the thread pool is asked to + * shut down, the Runnable is executed immediately within a new additional + * thread. + * </p> + * + * @param runnable + * the <code>Runnable</code> to be added. + */ + public boolean runInThread(Runnable runnable) { + if (runnable == null) { + return false; + } + + synchronized (nextRunnableLock) { + + handoffPending = true; + + // Wait until a worker thread is available + while ((availWorkers.size() < 1) && !isShutdown) { + try { + nextRunnableLock.wait(500); + } catch (InterruptedException ignore) { + } + } + + if (!isShutdown) { + WorkerThread wt = (WorkerThread)availWorkers.removeFirst(); + busyWorkers.add(wt); + wt.run(runnable); + } else { + // If the thread pool is going down, execute the Runnable + // within a new additional worker thread (no thread from the pool). + WorkerThread wt = new WorkerThread(this, threadGroup, + "WorkerThread-LastJob", prio, isMakeThreadsDaemons(), runnable); + busyWorkers.add(wt); + workers.add(wt); + wt.start(); + } + nextRunnableLock.notifyAll(); + handoffPending = false; + } + + return true; + } + + public int blockForAvailableThreads() { + synchronized(nextRunnableLock) { + + while((availWorkers.size() < 1 || handoffPending) && !isShutdown) { + try { + nextRunnableLock.wait(500); + } catch (InterruptedException ignore) { + } + } + + return availWorkers.size(); + } + } + + protected void makeAvailable(WorkerThread wt) { + synchronized(nextRunnableLock) { + if(!isShutdown) { + availWorkers.add(wt); + } + busyWorkers.remove(wt); + nextRunnableLock.notifyAll(); + } + } + + protected void clearFromBusyWorkersList(WorkerThread wt) { + synchronized(nextRunnableLock) { + busyWorkers.remove(wt); + nextRunnableLock.notifyAll(); + } + } + + /* + * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + * + * WorkerThread Class. + * + * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + */ + + /** + * <p> + * A Worker loops, waiting to execute tasks. + * </p> + */ + class WorkerThread extends Thread { + + private final Object lock = new Object(); + + // A flag that signals the WorkerThread to terminate. + private AtomicBoolean run = new AtomicBoolean(true); + + private SimpleThreadPool tp; + + private Runnable runnable = null; + + private boolean runOnce = false; + + /** + * <p> + * Create a worker thread and start it. Waiting for the next Runnable, + * executing it, and waiting for the next Runnable, until the shutdown + * flag is set. + * </p> + */ + WorkerThread(SimpleThreadPool tp, ThreadGroup threadGroup, String name, + int prio, boolean isDaemon) { + + this(tp, threadGroup, name, prio, isDaemon, null); + } + + /** + * <p> + * Create a worker thread, start it, execute the runnable and terminate + * the thread (one time execution). + * </p> + */ + WorkerThread(SimpleThreadPool tp, ThreadGroup threadGroup, String name, + int prio, boolean isDaemon, Runnable runnable) { + + super(threadGroup, name); + this.tp = tp; + this.runnable = runnable; + if(runnable != null) + runOnce = true; + setPriority(prio); + setDaemon(isDaemon); + } + + /** + * <p> + * Signal the thread that it should terminate. + * </p> + */ + void shutdown() { + run.set(false); + } + + public void run(Runnable newRunnable) { + synchronized(lock) { + if(runnable != null) { + throw new IllegalStateException("Already running a Runnable!"); + } + + runnable = newRunnable; + lock.notifyAll(); + } + } + + /** + * <p> + * Loop, executing targets as they are received. + * </p> + */ + @Override + public void run() { + boolean ran = false; + + while (run.get()) { + try { + synchronized(lock) { + while (runnable == null && run.get()) { + lock.wait(500); + } + + if (runnable != null) { + ran = true; + runnable.run(); + } + } + } catch (InterruptedException unblock) { + // do nothing (loop will terminate if shutdown() was called + try { + getLog().error("Worker thread was interrupt()'ed.", unblock); + } catch(Exception e) { + // ignore to help with a tomcat glitch + } + } catch (Throwable exceptionInRunnable) { + try { + getLog().error("Error while executing the Runnable: ", + exceptionInRunnable); + } catch(Exception e) { + // ignore to help with a tomcat glitch + } + } finally { + synchronized(lock) { + runnable = null; + } + // repair the thread in case the runnable mucked it up... + if(getPriority() != tp.getThreadPriority()) { + setPriority(tp.getThreadPriority()); + } + + if (runOnce) { + run.set(false); + clearFromBusyWorkersList(this); + } else if(ran) { + ran = false; + makeAvailable(this); + } + + } + } + + //if (log.isDebugEnabled()) + try { + getLog().debug("WorkerThread is shut down."); + } catch(Exception e) { + // ignore to help with a tomcat glitch + } + } + } +} \ No newline at end of file diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/quartz/config/QuartzConfig.java b/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/quartz/config/QuartzConfig.java index c00c0f3..a6a6526 100644 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/quartz/config/QuartzConfig.java +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/quartz/config/QuartzConfig.java @@ -1,5 +1,6 @@ package org.nl.system.service.quartz.config; +import com.dtp.core.thread.DtpExecutor; import org.quartz.Scheduler; import org.quartz.spi.TriggerFiredBundle; import org.springframework.beans.factory.config.AutowireCapableBeanFactory; @@ -21,7 +22,7 @@ public class QuartzConfig { * 解决Job中注入Spring Bean为null的问题 */ @Component("quartzJobFactory") - public static class QuartzJobFactory extends AdaptableJobFactory { + public class QuartzJobFactory extends AdaptableJobFactory { private final AutowireCapableBeanFactory capableBeanFactory; @@ -46,8 +47,9 @@ public class QuartzConfig { * @throws Exception / */ @Bean(name = "scheduler") - public Scheduler scheduler(QuartzJobFactory quartzJobFactory) throws Exception { + public Scheduler scheduler(QuartzJobFactory quartzJobFactory, DtpExecutor e) throws Exception { SchedulerFactoryBean factoryBean=new SchedulerFactoryBean(); + factoryBean.setTaskExecutor(e); factoryBean.setJobFactory(quartzJobFactory); factoryBean.afterPropertiesSet(); Scheduler scheduler=factoryBean.getScheduler(); diff --git a/nladmin-system/nlsso-server/src/main/resources/application.yml b/nladmin-system/nlsso-server/src/main/resources/application.yml deleted file mode 100644 index df46a2c..0000000 --- a/nladmin-system/nlsso-server/src/main/resources/application.yml +++ /dev/null @@ -1,120 +0,0 @@ -# 端口 -server: - port: 9000 - -# Sa-Token 配置 -sa-token: - # ------- SSO-模式一相关配置 (非模式一不需要配置) - -# 配置 Cookie 作用域 - -# ------- SSO-模式二相关配置 - sso: - # Ticket有效期 (单位: 秒),默认五分钟 - ticket-timeout: 300 - # 所有允许的授权回调地址比较重要 - allow-url: "*" - # 是否打开单点注销功能 - is-slo: true - # ------- SSO-模式三相关配置 (下面的配置在SSO模式三并且 is-slo=true 时打开) -# # 是否打开模式三 - isHttp: true -# # 接口调用秘钥(用于SSO模式三的单点注销功能) - secretkey: kQwIOrYvnXmSDkwEiFngrKidMcdrgKor - token-name: EL-ADMIN-TOEKN -# # ---- 除了以上配置项,你还需要为 Sa-Token 配置http请求处理器(文档有步骤说明) -# -spring: - #配置 Jpa - jpa: - hibernate: - ddl-auto: none - open-in-view: true - properties: - hibernate: - dialect: org.hibernate.dialect.MySQL5InnoDBDialect - enable_lazy_load_no_trans: true - # 数据源 - datasource: - druid: - db-type: com.alibaba.druid.pool.DruidDataSource - driverClassName: com.mysql.cj.jdbc.Driver - # url: jdbc:log4jdbc:mysql://${DB_HOST:localhost}:${DB_PORT:3306}/${DB_NAME:whxr_test}?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&useOldAliasMetadataBehavior=true - url: jdbc:mysql://${DB_HOST:47.111.78.178}:${DB_PORT:3306}/${DB_NAME:whxr}?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&useOldAliasMetadataBehavior=true - username: ${DB_USER:root} - password: ${DB_PWD:P@ssw0rd} - # username: ${DB_USER:root} - # password: ${DB_PWD:root} - # 初始连接数 - initial-size: 5 - # 最小连接数 - min-idle: 15 - # 最大连接数 - max-active: 30 - # 是否自动回收超时连接 - remove-abandoned: true - # 超时时间(以秒数为单位) - remove-abandoned-timeout: 180 - # 获取连接超时时间 - max-wait: 300 - # 连接有效性检测时间 - time-between-eviction-runs-millis: 60000 - # 连接在池中最小生存的时间 - min-evictable-idle-time-millis: 300000 - # 连接在池中最大生存的时间 - max-evictable-idle-time-millis: 900000 - # 指明连接是否被空闲连接回收器(如果有)进行检验.如果检测失败,则连接将被从池中去除 - test-while-idle: true - # 指明是否在从池中取出连接前进行检验,如果检验失败, 则从池中去除连接并尝试取出另一个 - test-on-borrow: true - # 是否在归还到池中前进行检验 - test-on-return: false - # 检测连接是否有效 - validation-query: select 1 - # 配置监控统计 -# webStatFilter: -# enabled: true -# stat-view-servlet: -# enabled: true -# url-pattern: /druid/* -# reset-enable: false -# filter: -# stat: -# enabled: true -# # 记录慢SQL -# log-slow-sql: true -# slow-sql-millis: 1000 -# merge-sql: true -# wall: -# config: -# multi-statement-allow: true - - # Redis配置 (SSO模式一和模式二使用Redis来同步会话) - redis: - # Redis数据库索引(默认为0) - database: 1 - # Redis服务器地址 - host: 47.96.133.178 - # Redis服务器连接端口 - port: 6479 - # Redis服务器连接密码(默认为空) - password: 942464Yy - # 连接超时时间 - timeout: 10s - lettuce: - pool: - # 连接池最大连接数 - max-active: 200 - # 连接池最大阻塞等待时间(使用负值表示没有限制) - max-wait: -1ms - # 连接池中的最大空闲连接 - max-idle: 10 - # 连接池中的最小空闲连接 - min-idle: 0 - -forest: - # 关闭 forest 请求日志打印 - log-enabled: false - - - diff --git a/nladmin-system/nlsso-server/src/main/resources/config/application-dev.yml b/nladmin-system/nlsso-server/src/main/resources/config/application-dev.yml index 321b80f..6d8589b 100644 --- a/nladmin-system/nlsso-server/src/main/resources/config/application-dev.yml +++ b/nladmin-system/nlsso-server/src/main/resources/config/application-dev.yml @@ -6,10 +6,10 @@ spring: druid: db-type: com.alibaba.druid.pool.DruidDataSource driverClassName: net.sf.log4jdbc.sql.jdbcapi.DriverSpy - url: jdbc:log4jdbc:mysql://${DB_HOST:192.168.81.252}:${DB_PORT:3306}/${DB_NAME:nl-sso-server}?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&useOldAliasMetadataBehavior=true -# url: jdbc:log4jdbc:mysql://${DB_HOST:127.0.0.1}:${DB_PORT:3306}/${DB_NAME:yongyu_lms2}?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&useOldAliasMetadataBehavior=true +# url: jdbc:log4jdbc:mysql://${DB_HOST:192.168.81.252}:${DB_PORT:3306}/${DB_NAME:nl-sso-server}?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&useOldAliasMetadataBehavior=true + url: jdbc:log4jdbc:mysql://${DB_HOST:127.0.0.1}:${DB_PORT:3306}/${DB_NAME:nl_platform}?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&useOldAliasMetadataBehavior=true username: ${DB_USER:root} - password: ${DB_PWD:Root.123456} + password: ${DB_PWD:root} # password: ${DB_PWD:12356} # 初始连接数 initial-size: 5 @@ -57,8 +57,75 @@ spring: database: ${REDIS_DB:2} host: ${REDIS_HOST:127.0.0.1} port: ${REDIS_PORT:6379} - password: ${REDIS_PWD:} - + flyway: # flyway 数据库 DDL 版本控制 + enabled: true # 正式环境才开启 + clean-disabled: true # 禁用数据库清理 + encoding: UTF-8 + locations: classpath:db + # flyway 会在库中创建此名称元数据表,用于记录所有版本演化和状态,同一个库不同项目可能冲突,每个项目一张表来记录 + table: flyway_schema_history_nl_platform #TODO 值的后缀指定为当前项目名称 + baseline-version: 1 # 基线版本默认开始序号 默认为 1 + baseline-on-migrate: true # 针对非空数据库是否默认调用基线版本,为空的话默认会调用基线版本 + placeholders: # 定义 afterMigrateError.sql 要清理的元数据表表名 + flyway-table: ${spring.flyway.table} + dynamic: + tp: + enabled: true + enabledBanner: true # 是否开启banner打印,默认true + enabledCollect: true # 是否开启监控指标采集,默认false + collectorTypes: micrometer,logging # 监控数据采集器类型(logging | micrometer | internal_logging),默认micrometer + logPath: /home/logs888 # 监控日志数据路径,默认 ${user.home}/logs + monitorInterval: 5 # 监控时间间隔(报警判断、指标采集),默认5s + tomcatTp: # tomcat web server线程池配置 + corePoolSize: 100 + maximumPoolSize: 400 + keepAliveTime: 60 + executors: # 动态线程池配置,都有默认值,采用默认值的可以不配置该项,减少配置量 + - threadPoolName: dtpExecutor1 + executorType: common # 线程池类型common、eager:适用于io密集型 + corePoolSize: 6 + maximumPoolSize: 8 + queueCapacity: 200 + queueType: VariableLinkedBlockingQueue # 任务队列,查看源码QueueTypeEnum枚举类 + rejectedHandlerType: CallerRunsPolicy # 拒绝策略,查看RejectedTypeEnum枚举类 + keepAliveTime: 50 + allowCoreThreadTimeOut: false # 是否允许核心线程池超时 + threadNamePrefix: test # 线程名前缀 + waitForTasksToCompleteOnShutdown: false # 参考spring线程池设计,优雅关闭线程池 + awaitTerminationSeconds: 5 # 单位(s) + preStartAllCoreThreads: false # 是否预热所有核心线程,默认false + runTimeout: 200 # 任务执行超时阈值,目前只做告警用,单位(ms) + queueTimeout: 100 # 任务在队列等待超时阈值,目前只做告警用,单位(ms) + taskWrapperNames: [ "ttl" ] # 任务包装器名称,集成TaskWrapper接口 + notifyItems: # 报警项,不配置自动会按默认值配置(变更通知、容量报警、活性报警、拒绝报警、任务超时报警) + - type: capacity # 报警项类型,查看源码 NotifyTypeEnum枚举类 + enabled: true + threshold: 80 # 报警阈值 + platforms: [ ding,wechat ] # 可选配置,不配置默认拿上层platforms配置的所以平台 + interval: 120 # 报警间隔(单位:s) + - type: change + enabled: true + - type: liveness + enabled: true + threshold: 80 + - type: reject + enabled: true + threshold: 1 + - type: run_timeout + enabled: true + threshold: 1 + - type: queue_timeout + enabled: true + threshold: 1 + quartz: + properties: + org: + quartz: + jobStore: + threadPool: + threadCount: 14 + class: org.nl.system.service.quartz.SimpleThreadPool + scheduler-name: scheduler # 登录相关配置 login: # 登录缓存 @@ -160,9 +227,4 @@ sa-token: # Redis服务器连接密码(默认为空) password: # 连接超时时间 - timeout: 10s - - -loki: - url: http://localhost:3100/loki/api/v1 - systemName: acs + timeout: 10s \ No newline at end of file diff --git a/nladmin-system/nlsso-server/src/main/resources/config/application-prod.yml b/nladmin-system/nlsso-server/src/main/resources/config/application-prod.yml index 1d3bb43..1a7570b 100644 --- a/nladmin-system/nlsso-server/src/main/resources/config/application-prod.yml +++ b/nladmin-system/nlsso-server/src/main/resources/config/application-prod.yml @@ -56,7 +56,6 @@ spring: database: ${REDIS_DB:15} host: ${REDIS_HOST:127.0.0.1} port: ${REDIS_PORT:6379} - password: ${REDIS_PWD:} #连接超时时间 timeout: 5000 # 登录相关配置 @@ -159,7 +158,3 @@ sa-token: token-prefix: Bearer is-read-cookie: false is-read-body: false - -loki: - url: http://localhost:3100/loki/api/v1 - systemName: lms diff --git a/nladmin-system/nlsso-server/src/main/resources/config/application-test.yml b/nladmin-system/nlsso-server/src/main/resources/config/application-test.yml index d5f3408..59bc8ff 100644 --- a/nladmin-system/nlsso-server/src/main/resources/config/application-test.yml +++ b/nladmin-system/nlsso-server/src/main/resources/config/application-test.yml @@ -156,8 +156,4 @@ sa-token: is-log: false jwt-secret-key: opsjajisdnnca0sdkksdfaaasdfwwq # token 前缀 - token-prefix: Bearer - -loki: - url: http://localhost:3100/loki/api/v1 - systemName: lms + token-prefix: Bearer \ No newline at end of file diff --git a/nladmin-system/nlsso-server/src/main/resources/config/application.yml b/nladmin-system/nlsso-server/src/main/resources/config/application.yml index 2878f27..16b80c0 100644 --- a/nladmin-system/nlsso-server/src/main/resources/config/application.yml +++ b/nladmin-system/nlsso-server/src/main/resources/config/application.yml @@ -9,44 +9,22 @@ spring: redis: repositories: enabled: false - - #配置 Jpa - jpa: - hibernate: - ddl-auto: none - open-in-view: true - properties: - hibernate: - dialect: org.hibernate.dialect.MySQL5InnoDBDialect - enable_lazy_load_no_trans: true +#密码加密传输,前端公钥加密,后端私钥解密 +rsa: + private_key: MIIBUwIBADANBgkqhkiG9w0BAQEFAASCAT0wggE5AgEAAkEA0vfvyTdGJkdbHkB8mp0f3FE0GYP3AYPaJF7jUd1M0XxFSE2ceK3k2kw20YvQ09NJKk+OMjWQl9WitG9pB6tSCQIDAQABAkA2SimBrWC2/wvauBuYqjCFwLvYiRYqZKThUS3MZlebXJiLB+Ue/gUifAAKIg1avttUZsHBHrop4qfJCwAI0+YRAiEA+W3NK/RaXtnRqmoUUkb59zsZUBLpvZgQPfj1MhyHDz0CIQDYhsAhPJ3mgS64NbUZmGWuuNKp5coY2GIj/zYDMJp6vQIgUueLFXv/eZ1ekgz2Oi67MNCk5jeTF2BurZqNLR3MSmUCIFT3Q6uHMtsB9Eha4u7hS31tj1UWE+D+ADzp59MGnoftAiBeHT7gDMuqeJHPL4b+kC+gzV4FGTfhR9q3tTbklZkD2A== +logging: + config: classpath:logback-spring.xml +# sa-token白名单配置 task: pool: # 核心线程池大小 - core-pool-size: 10 + core-pool-size: 12 # 最大线程数 max-pool-size: 30 # 活跃时间 keep-alive-seconds: 60 # 队列容量 queue-capacity: 50 - -#七牛云 -qiniu: - # 文件大小 /M - max-size: 15 - -#邮箱验证码有效时间/秒 -code: - expiration: 300 - -#密码加密传输,前端公钥加密,后端私钥解密 -rsa: - private_key: MIIBUwIBADANBgkqhkiG9w0BAQEFAASCAT0wggE5AgEAAkEA0vfvyTdGJkdbHkB8mp0f3FE0GYP3AYPaJF7jUd1M0XxFSE2ceK3k2kw20YvQ09NJKk+OMjWQl9WitG9pB6tSCQIDAQABAkA2SimBrWC2/wvauBuYqjCFwLvYiRYqZKThUS3MZlebXJiLB+Ue/gUifAAKIg1avttUZsHBHrop4qfJCwAI0+YRAiEA+W3NK/RaXtnRqmoUUkb59zsZUBLpvZgQPfj1MhyHDz0CIQDYhsAhPJ3mgS64NbUZmGWuuNKp5coY2GIj/zYDMJp6vQIgUueLFXv/eZ1ekgz2Oi67MNCk5jeTF2BurZqNLR3MSmUCIFT3Q6uHMtsB9Eha4u7hS31tj1UWE+D+ADzp59MGnoftAiBeHT7gDMuqeJHPL4b+kC+gzV4FGTfhR9q3tTbklZkD2A== -logging: - file: - path: C:\log\wms - config: classpath:logback-spring.xml -# sa-token白名单配置 security: # 排除路径 excludes: @@ -80,12 +58,35 @@ security: - /api/localStorage/pictures # 参数 - /api/param/getValueByCode + - /plumelog/** mybatis-plus: configuration: map-underscore-to-camel-case: true - log-impl: org.apache.ibatis.logging.stdout.StdOutImpl + log-impl: org.apache.ibatis.logging.nologging.NoLoggingImpl mapper-locations: - classpath:org.nl.**.mapper/*.xml global-config: db-config: id-type: INPUT +plumelog: + model: redis #值为4种 redis,kafka,rest,restServer,lite + lite: + log: + path: /lucene2 +redisson: + # redis key前缀 + keyPrefix: + # 线程池数量 + threads: 4 + # Netty线程池数量 + nettyThreads: 8 + # 单节点配置 + singleServerConfig: + # 最小空闲连接数 + connectionMinimumIdleSize: 4 + # 连接池大小 + connectionPoolSize: 8 + # 连接空闲超时,单位:毫秒 + idleConnectionTimeout: 10000 + # 命令等待超时,单位:毫秒 + timeout: 3000 diff --git a/nladmin-system/nlsso-server/src/main/resources/db/V1.0.0__初始化.sql b/nladmin-system/nlsso-server/src/main/resources/db/V1.0.0__初始化.sql new file mode 100644 index 0000000..b50bd3c --- /dev/null +++ b/nladmin-system/nlsso-server/src/main/resources/db/V1.0.0__初始化.sql @@ -0,0 +1,8 @@ +CREATE TABLE `t_javastack` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键', + `name` varchar(20) NOT NULL COMMENT '姓名', + `age` int(5) DEFAULT NULL COMMENT '年龄', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; + + diff --git a/nladmin-system/nlsso-server/src/main/resources/db/V2.0.0__初始化.sql b/nladmin-system/nlsso-server/src/main/resources/db/V2.0.0__初始化.sql new file mode 100644 index 0000000..b50bd3c --- /dev/null +++ b/nladmin-system/nlsso-server/src/main/resources/db/V2.0.0__初始化.sql @@ -0,0 +1,8 @@ +CREATE TABLE `t_javastack` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键', + `name` varchar(20) NOT NULL COMMENT '姓名', + `age` int(5) DEFAULT NULL COMMENT '年龄', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; + + diff --git a/nladmin-system/nlsso-server/src/main/resources/db/V3.0.0__初始化.sql b/nladmin-system/nlsso-server/src/main/resources/db/V3.0.0__初始化.sql new file mode 100644 index 0000000..4ee4b27 --- /dev/null +++ b/nladmin-system/nlsso-server/src/main/resources/db/V3.0.0__初始化.sql @@ -0,0 +1,8 @@ +CREATE TABLE `t2_javastack` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键', + `name` varchar(20) NOT NULL COMMENT '姓名', + `age` int(5) DEFAULT NULL COMMENT '年龄', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; + + diff --git a/nladmin-system/nlsso-server/src/main/resources/logback-spring.xml b/nladmin-system/nlsso-server/src/main/resources/logback-spring.xml index 3e68ee7..41a3f04 100644 --- a/nladmin-system/nlsso-server/src/main/resources/logback-spring.xml +++ b/nladmin-system/nlsso-server/src/main/resources/logback-spring.xml @@ -14,9 +14,6 @@ https://juejin.cn/post/6844903775631572999 <property name="log.pattern" value="%black(%contextName-) %red(%d{yyyy-MM-dd HH:mm:ss.SSS}) %green([%thread]) %highlight(%-5level) %boldMagenta(%logger{36}) - %gray(%msg%n)"/> <springProperty scope="context" name="logPath" source="logging.file.path" defaultValue="logs"/> - <springProperty scope="context" name="lokiUrl" source="loki.url"/> - <springProperty scope="context" name="systemName" source="loki.systemName"/> - <property name="LOKI_URL" value="${lokiUrl}"/> <property name="SYSTEM_NAME" value="${systemName}"/> <property name="LOG_HOME" value="${logPath}"/> <!--引入默认的一些设置--> @@ -58,28 +55,20 @@ https://juejin.cn/post/6844903775631572999 <appender-ref ref="FILE"/> </appender> - <!--添加loki--> - <appender name="lokiAppender" class="com.github.loki4j.logback.Loki4jAppender"> - <batchTimeoutMs>1000</batchTimeoutMs> - <http class="com.github.loki4j.logback.ApacheHttpSender"> - <url>${LOKI_URL}/push</url> - </http> - <format> - <label> - <pattern>system=${SYSTEM_NAME},level=%level,logType=%X{log_file_type:-logType}</pattern> - </label> - <message> - <pattern>${log.pattern}</pattern> - </message> - <sortByTime>true</sortByTime> - </format> + <appender name="plumelog" class="com.plumelog.lite.logback.appender.LiteAppender"> + <appName>plumelog</appName> + <!-- 日志存储位置 --> + <logPath>/plumelog/lite</logPath> + <!-- 日志保留天数 --> + <keepDay>30</keepDay> + <expand>sleuth</expand> </appender> <!--开发环境:打印控制台--> <springProfile name="dev"> <root level="debug"> <appender-ref ref="CONSOLE"/> - <appender-ref ref="lokiAppender" /> + <appender-ref ref="plumelog" /> </root> <logger name="org.springframework" level="ERROR" additivity="false"> <appender-ref ref="CONSOLE"/> @@ -124,55 +113,55 @@ https://juejin.cn/post/6844903775631572999 <springProfile name="prod"> <root level="debug"> <appender-ref ref="asyncFileAppender"/> - <appender-ref ref="lokiAppender"/> + <appender-ref ref="plumelog"/> </root> <logger name="org.springframework" level="ERROR" additivity="false"> <appender-ref ref="asyncFileAppender"/> - <appender-ref ref="lokiAppender"/> + <appender-ref ref="plumelog"/> </logger> <logger name="org.apache" level="ERROR" additivity="false"> <appender-ref ref="asyncFileAppender"/> - <appender-ref ref="lokiAppender"/> + <appender-ref ref="plumelog"/> </logger> <logger name="org.hibernate" level="ERROR" additivity="false"> <appender-ref ref="asyncFileAppender"/> - <appender-ref ref="lokiAppender"/> + <appender-ref ref="plumelog"/> </logger> <logger name="io.netty" level="ERROR" additivity="false"> <appender-ref ref="asyncFileAppender"/> - <appender-ref ref="lokiAppender"/> + <appender-ref ref="plumelog"/> </logger> <logger name="jdbc" level="ERROR" additivity="false"> <appender-ref ref="asyncFileAppender"/> - <appender-ref ref="lokiAppender"/> + <appender-ref ref="plumelog"/> </logger> <logger name="io.lettuce" level="ERROR" additivity="false"> <appender-ref ref="asyncFileAppender"/> - <appender-ref ref="lokiAppender"/> + <appender-ref ref="plumelog"/> </logger> <logger name="com.fasterxml" level="ERROR" additivity="false"> <appender-ref ref="asyncFileAppender"/> - <appender-ref ref="lokiAppender"/> + <appender-ref ref="plumelog"/> </logger> <logger name="org.quartz" level="ERROR" additivity="false"> <appender-ref ref="asyncFileAppender"/> - <appender-ref ref="lokiAppender"/> + <appender-ref ref="plumelog"/> </logger> <logger name="com.google" level="ERROR" additivity="false"> <appender-ref ref="asyncFileAppender"/> - <appender-ref ref="lokiAppender"/> + <appender-ref ref="plumelog"/> </logger> <logger name="springfox" level="ERROR" additivity="false"> <appender-ref ref="asyncFileAppender"/> - <appender-ref ref="lokiAppender"/> + <appender-ref ref="plumelog"/> </logger> <logger name="log4jdbc" level="ERROR" additivity="false"> <appender-ref ref="asyncFileAppender"/> - <appender-ref ref="lokiAppender"/> + <appender-ref ref="plumelog"/> </logger> <logger name="nl.basjes" level="ERROR" additivity="false"> <appender-ref ref="asyncFileAppender"/> - <appender-ref ref="lokiAppender"/> + <appender-ref ref="plumelog"/> </logger> </springProfile> diff --git a/nladmin-system/pom.xml b/nladmin-system/pom.xml index 7a21fba..cfdd1df 100644 --- a/nladmin-system/pom.xml +++ b/nladmin-system/pom.xml @@ -11,7 +11,6 @@ <modules> <module>nlsso-server</module> - <module>nlsso-client</module> </modules> <packaging>pom</packaging> <groupId>org.nl</groupId> @@ -22,9 +21,6 @@ <sa-token.version>1.31.0</sa-token.version> </properties> - <dependencies> - - </dependencies> </project>