init project
This commit is contained in:
8
.idea/.gitignore
generated
vendored
8
.idea/.gitignore
generated
vendored
@@ -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/
|
||||
6
.idea/compiler.xml
generated
6
.idea/compiler.xml
generated
@@ -1,6 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="CompilerConfiguration">
|
||||
<bytecodeTargetLevel target="8" />
|
||||
</component>
|
||||
</project>
|
||||
6
.idea/dictionaries
generated
6
.idea/dictionaries
generated
@@ -1,6 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="ProjectDictionaryState">
|
||||
<dictionary name="mima0000" />
|
||||
</component>
|
||||
</project>
|
||||
37
.idea/inspectionProfiles/Project_Default.xml
generated
37
.idea/inspectionProfiles/Project_Default.xml
generated
@@ -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>
|
||||
8
.idea/modules.xml
generated
8
.idea/modules.xml
generated
@@ -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>
|
||||
9
.idea/nl-sso-server.iml
generated
9
.idea/nl-sso-server.iml
generated
@@ -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>
|
||||
6
.idea/vcs.xml
generated
6
.idea/vcs.xml
generated
@@ -1,6 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="VcsDirectoryMappings">
|
||||
<mapping directory="" vcs="Git" />
|
||||
</component>
|
||||
</project>
|
||||
2
nladmin-system/.gitignore
vendored
2
nladmin-system/.gitignore
vendored
@@ -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/
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -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 "";
|
||||
}
|
||||
}
|
||||
}
|
||||
*/
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
@@ -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();
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -30,7 +30,6 @@ import java.util.Map;
|
||||
public class ParamController {
|
||||
|
||||
private final ParamService paramService;
|
||||
|
||||
@GetMapping
|
||||
@Log("查询系统参数")
|
||||
@ApiOperation("查询系统参数")
|
||||
|
||||
@@ -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));
|
||||
|
||||
@@ -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){
|
||||
|
||||
@@ -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
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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();
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
|
||||
@@ -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
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
@@ -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
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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>
|
||||
|
||||
|
||||
@@ -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>
|
||||
|
||||
Reference in New Issue
Block a user