.gitignore | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
pom.xml | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/lf/server/aspect/LogAspect.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/lf/server/config/PropertiesConfig.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/lf/server/config/RestTemplateConfig.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/lf/server/config/ShiroConfig.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/lf/server/config/WebMvcConfigurer.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/resources/application.yml | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/resources/log4j.properties | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/resources/logback-spring.xml | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
.gitignore
@@ -32,3 +32,4 @@ ### VS Code ### .vscode/ /data/*.backup /src.zip pom.xml
@@ -148,6 +148,11 @@ <artifactId>springfox-swagger-ui</artifactId> <version>2.9.2</version> </dependency> <!-- httpclient --> <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId> </dependency> <!--<dependency> <groupId>org.thymeleaf.extras</groupId> <artifactId>thymeleaf-extras-springsecurity5</artifactId> src/main/java/com/lf/server/aspect/LogAspect.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,79 @@ package com.lf.server.aspect; import org.apache.shiro.SecurityUtils; import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.Around; import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Pointcut; import org.aspectj.lang.reflect.MethodSignature; import org.springframework.stereotype.Component; import javax.servlet.http.HttpServletRequest; import java.lang.reflect.Method; /** * LogAspect * @author WWW */ @Aspect @Component public class LogAspect { @Pointcut("") public void logPointCut() { } @Around("logPointCut()") public Object around(ProceedingJoinPoint point) throws Throwable { long beginTime = System.currentTimeMillis(); //æ§è¡æ¹æ³ Object result = point.proceed(); //æ§è¡æ¶é¿(毫ç§) long time = System.currentTimeMillis() - beginTime; //System.out.println("time"+time); //ä¿åæ¥å¿ saveLogAction(point, time); return result; } private void saveLogAction(ProceedingJoinPoint joinPoint, long time) { MethodSignature signature = (MethodSignature) joinPoint.getSignature(); Method method = signature.getMethod(); /*LogAction logAction = new LogAction(); com.landtool.lanbase.common.annotation.LogAction log = method.getAnnotation(com.landtool.lanbase.common.annotation.LogAction.class); if(log != null){ //注解ä¸çæè¿° String[] list = log.value().split(","); logAction.setLargemodel(list[0]); //大模å logAction.setSmallmodel(list[1]);//å°æ¨¡å logAction.setRemark(list[2]); //夿³¨ logAction.setActiontype(list[3]);//æä½ç±»å // logAction.setRemark(log.value()); // logAction.setActiontype(log.value()); } //è·årequest HttpServletRequest request = HttpContextUtils.getHttpServletRequest(); String url=request.getServletPath(); logAction.setRequesturl(url); //设置IPå°å logAction.setRequestip(IPUtils.getIpAddr(request)); //ç¨æ·å Long userid = ((OrgUser) SecurityUtils.getSubject().getPrincipal()).getUserid(); logAction.setUserid(userid); logAction.setAppid(loginConfig.getAppId()); // logAction.setLargemodel(loginConfig.getAppFullName()); //ä¿åç³»ç»æ¥å¿ logActionService.save(logAction);*/ } } src/main/java/com/lf/server/config/PropertiesConfig.java
@@ -1,5 +1,6 @@ package com.lf.server.config; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; /** @@ -8,4 +9,14 @@ */ @Component public class PropertiesConfig { @Value("${sys.path}") private String path; public String getPath() { return path; } public void setPath(String path) { this.path = path; } } src/main/java/com/lf/server/config/RestTemplateConfig.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,98 @@ package com.lf.server.config; import org.apache.http.client.HttpClient; import org.apache.http.impl.client.HttpClientBuilder; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.http.client.ClientHttpRequestFactory; import org.springframework.http.client.HttpComponentsClientHttpRequestFactory; import org.springframework.http.client.SimpleClientHttpRequestFactory; import org.springframework.http.converter.HttpMessageConverter; import org.springframework.http.converter.StringHttpMessageConverter; import org.springframework.web.client.RestTemplate; import java.nio.charset.StandardCharsets; import java.util.List; /** * RestTemplateConfig * @author WWW */ @Configuration @ConditionalOnClass(value = {RestTemplate.class, HttpClient.class}) public class RestTemplateConfig { /** * è¿æ¥æ± çæå¤§è¿æ¥æ°é»è®¤ä¸º0 */ @Value("${remote.maxTotalConnect:0}") private int maxTotalConnect; /** * å个主æºçæå¤§è¿æ¥æ° */ @Value("${remote.maxConnectPerRoute:1000}") private int maxConnectPerRoute; /** * è¿æ¥è¶ æ¶é»è®¤5s */ @Value("${remote.connectTimeout:5000}") private int connectTimeout; /** * 读åè¶ æ¶é»è®¤30s */ @Value("${remote.readTimeout:30000}") private int readTimeout; /** * å建HTTP客æ·ç«¯å·¥å * * @return 客æ·ç«¯å·¥å */ private ClientHttpRequestFactory createFactory() { if (this.maxTotalConnect <= 0) { SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory(); factory.setConnectTimeout(this.connectTimeout); factory.setReadTimeout(this.readTimeout); return factory; } HttpClient httpClient = HttpClientBuilder.create().setMaxConnTotal(this.maxTotalConnect).setMaxConnPerRoute(this.maxConnectPerRoute).build(); HttpComponentsClientHttpRequestFactory factory = new HttpComponentsClientHttpRequestFactory(httpClient); factory.setConnectTimeout(this.connectTimeout); factory.setReadTimeout(this.readTimeout); return factory; } /** * åå§åRestTemplate,å¹¶å å ¥springçBeanå·¥åï¼ç±springç»ä¸ç®¡ç * å¿ é¡»å æ³¨è§£@LoadBalanced * * @return */ @Bean @ConditionalOnMissingBean(RestTemplate.class) public RestTemplate getRestTemplate() { RestTemplate restTemplate = new RestTemplate(this.createFactory()); List<HttpMessageConverter<?>> converterList = restTemplate.getMessageConverters(); // éæ°è®¾ç½®StringHttpMessageConverterå符é为UTF-8ï¼è§£å³ä¸æä¹±ç é®é¢ HttpMessageConverter<?> converterTarget = null; for (HttpMessageConverter<?> item : converterList) { if (StringHttpMessageConverter.class == item.getClass()) { converterTarget = item; break; } } if (null != converterTarget) { converterList.remove(converterTarget); } converterList.add(1, new StringHttpMessageConverter(StandardCharsets.UTF_8)); return restTemplate; } } src/main/java/com/lf/server/config/ShiroConfig.java
@@ -21,7 +21,7 @@ /** * ShiroConfig * @author * @author WWW */ @SuppressWarnings("ALL") //@Configuration src/main/java/com/lf/server/config/WebMvcConfigurer.java
ÎļþÒÑɾ³ý src/main/resources/application.yml
@@ -2,7 +2,10 @@ tomcat: uri-encoding: UTF-8 port: 12316 context-path: /land #servlet: # context-path: /land application: name: land spring: datasource: @@ -34,7 +37,24 @@ port: 6379 password: database: 1 jackson: time-zone: GMT+8 date-format: yyyy-MM-dd HH:mm:ss mybatis: type-aliases-package: com.terra.land.mapper mapper-locations: classpath:mapper/**/*.xml logging: config: classpath:log/logback-spring.xml # RestTemplate config remote: maxTotalConnect: 0 maxConnectPerRoute: 1000 connectTimeout: 5000 readTimeout: 30000 # ç³»ç»é ç½® sys: path: E:\\Test\\LF\\ src/main/resources/log4j.properties
ÎļþÒÑɾ³ý src/main/resources/logback-spring.xml
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,106 @@ <?xml version="1.0" encoding="UTF-8"?> <!-- scan é ç½®æä»¶å¦æåçæ¹åï¼å°ä¼è¢«éæ°å è½½ scanPeriod æ£æµé´éæ¶é´--> <configuration scan="true" scanPeriod="60 seconds" debug="false"> <contextName>jcpimserver</contextName> <!-- æä»¶åç§° --> <property name="log.name.info" value="info" /> <property name="log.name.error" value="error" /> <!-- info å°å --> <property name="log.path.info" value="logs/" /> <property name="log.file.info" value="logs/info.log" /> <!-- errr,éè¯¯è·¯å¾ --> <property name="log.path.error" value="logs/" /> <property name="log.file.error" value="logs/error.log" /> <include resource="org/springframework/boot/logging/logback/base.xml"/> <!-- æ®éæ¥å¿ --> <appender name="INFO_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${log.file.info}</file> <!-- å¾ªç¯æ¿çï¼åºäºæ¶é´å建æ¥å¿æä»¶ --> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <!-- æ¥å¿å½å:å个æä»¶å¤§äº256MB æç §æ¶é´+èªå¢i çælogæä»¶ --> <fileNamePattern>${log.path.info}${log.name.info}-%d{yyyy-MM-dd}.%i.log</fileNamePattern> <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> <maxFileSize>256MB</maxFileSize> </timeBasedFileNamingAndTriggeringPolicy> <!-- æå¤§ä¿åæ¶é´ï¼30天--> <maxHistory>30</maxHistory> </rollingPolicy> <append>true</append> <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %logger Line:%-3L - %msg%n</pattern> <charset>utf-8</charset> </encoder> <!-- æ¥å¿çº§å«è¿æ»¤å¨ --> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <!-- è¿æ»¤ççº§å« --> <level>INFO</level> <!-- å¹é æ¶çæä½ï¼æ¥æ¶ï¼è®°å½ï¼ --> <onMatch>ACCEPT</onMatch> <!-- ä¸å¹é æ¶çæä½ï¼æç»ï¼ä¸è®°å½ï¼ --> <onMismatch>DENY</onMismatch> </filter> </appender> <!-- é误æ¥å¿ --> <appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${log.file.error}</file> <!-- å¾ªç¯æ¿çï¼åºäºæ¶é´å建æ¥å¿æä»¶ --> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <!-- æ¥å¿å½å:å个æä»¶å¤§äº128MB æç §æ¶é´+èªå¢i çælogæä»¶ --> <fileNamePattern>${log.path.error}${log.name.error}-%d{yyyy-MM-dd}.%i.log</fileNamePattern> <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> <maxFileSize>128MB</maxFileSize> </timeBasedFileNamingAndTriggeringPolicy> <!-- æå¤§ä¿åæ¶é´ï¼180天--> <maxHistory>180</maxHistory> </rollingPolicy> <append>true</append> <!-- æ¥å¿æ ¼å¼ --> <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %logger Line:%-3L - %msg%n</pattern> <charset>utf-8</charset> </encoder> <!-- æ¥å¿çº§å«è¿æ»¤å¨ --> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <!-- è¿æ»¤ççº§å« --> <level>ERROR</level> <!-- å¹é æ¶çæä½ï¼æ¥æ¶ï¼è®°å½ï¼ --> <onMatch>ACCEPT</onMatch> <!-- ä¸å¹é æ¶çæä½ï¼æç»ï¼ä¸è®°å½ï¼ --> <onMismatch>DENY</onMismatch> </filter> </appender> <!-- æ§å¶å° --> <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> <!-- æ¥å¿æ ¼å¼ --> <encoder> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %logger Line:%-3L - %msg%n</pattern> <charset>utf-8</charset> </encoder> <!--æ¤æ¥å¿appenderæ¯ä¸ºå¼å使ç¨ï¼åªé ç½®æåºçº§å«ï¼æ§å¶å°è¾åºçæ¥å¿çº§å«æ¯å¤§äºæçäºæ¤çº§å«çæ¥å¿ä¿¡æ¯--> <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> <!-- åªæè¿ä¸ªæ¥å¿æéæè½çï¼sqlè¯å¥ --> <level>DEBUG</level> </filter> </appender> <!-- è¾åºsqlæ¥å¿ --> <logger name="com.apache.ibatis" level="DEBUG"></logger> <!-- additivity:æ¯å¦å¨ç¶(è¿é为rootèç¹)è¾åº, é»è®¤ true; --> <logger name="com.jcpim" level="INFO" additivity="true"> <appender-ref ref="INFO_FILE"/> <appender-ref ref="ERROR_FILE"/> </logger> <root level="INFO"> <appender-ref ref="STDOUT" /> </root> </configuration>