管道基础大数据平台系统开发-【后端】-Server
1
13693261870
2022-09-28 ca9817461a504049e289c154939454a6e5a37089
1
已添加3个文件
已修改5个文件
已删除2个文件
346 ■■■■■ 文件已修改
.gitignore 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pom.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/lf/server/aspect/LogAspect.java 79 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/lf/server/config/PropertiesConfig.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/lf/server/config/RestTemplateConfig.java 98 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/lf/server/config/ShiroConfig.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/lf/server/config/WebMvcConfigurer.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/application.yml 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/log4j.properties 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/logback-spring.xml 106 ●●●●● 补丁 | 查看 | 原始文档 | 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>