Commit 91ca8b04 by luocong

project init

parents
HELP.md
target/
!.mvn/wrapper/maven-wrapper.jar
!**/src/main/**/target/
!**/src/test/**/target/
### STS ###
.apt_generated
.classpath
.factorypath
.project
.settings
.springBeans
.sts4-cache
### IntelliJ IDEA ###
.idea
*.iws
*.iml
*.ipr
### NetBeans ###
/nbproject/private/
/nbbuild/
/dist/
/nbdist/
/.nb-gradle/
build/
!**/src/main/**/build/
!**/src/test/**/build/
### VS Code ###
.vscode/
2024-09-13 15:23:55,713 INFO (StartupInfoLogger.java:55)- Starting DjmDataReportApplication using Java 1.8.0_371 on DESKTOP-I3C8QM2 with PID 24924 (G:\luocong\work\djm-data-report\target\classes started by luocong in G:\luocong\work\djm-data-report)
2024-09-13 15:23:55,716 DEBUG (StartupInfoLogger.java:56)- Running with Spring Boot v2.7.6, Spring v5.3.24
2024-09-13 15:23:55,716 INFO (SpringApplication.java:637)- The following 1 profile is active: "test"
2024-09-13 15:23:58,852 INFO (StartupInfoLogger.java:61)- Started DjmDataReportApplication in 3.652 seconds (JVM running for 5.246)
2024-09-13 15:23:58,854 INFO (DjmDataReportApplication.java:15)- __ __
/ \~~~/ \
,----( .. )
/ \__ __/
/| (\ |(
^ \ /___\ /\ |
|__| |__|-"
---------------djm-data-report------------start------->>>>>--------
2024-09-13 15:24:37,820 INFO (StartupInfoLogger.java:55)- Starting DjmDataReportApplication using Java 1.8.0_371 on DESKTOP-I3C8QM2 with PID 19968 (G:\luocong\work\djm-data-report\target\classes started by luocong in G:\luocong\work\djm-data-report)
2024-09-13 15:24:37,823 DEBUG (StartupInfoLogger.java:56)- Running with Spring Boot v2.7.6, Spring v5.3.24
2024-09-13 15:24:37,823 INFO (SpringApplication.java:637)- The following 1 profile is active: "test"
2024-09-13 15:24:41,220 INFO (StartupInfoLogger.java:61)- Started DjmDataReportApplication in 4.185 seconds (JVM running for 5.192)
2024-09-13 15:24:41,222 INFO (DjmDataReportApplication.java:15)- __ __
/ \~~~/ \
,----( .. )
/ \__ __/
/| (\ |(
^ \ /___\ /\ |
|__| |__|-"
---------------djm-data-report------------start------->>>>>--------
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.7.6</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.dr</groupId>
<artifactId>djm-data-report</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>djm-data-report</name>
<description>小程序数据报告</description>
<url/>
<licenses>
<license/>
</licenses>
<developers>
<developer/>
</developers>
<scm>
<connection/>
<developerConnection/>
<tag/>
<url/>
</scm>
<properties>
<java.version>1.8</java.version>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<mybatisplus.version>3.5.3.1</mybatisplus.version>
<hutool.version>5.8.25</hutool.version>
<commons.version>3.10</commons.version>
<mysql.version>8.2.0</mysql.version>
<fastjson.version>2.0.23</fastjson.version>
<easyexcel.version>3.3.2</easyexcel.version>
<aliyun-sdk-oss.version>3.17.4</aliyun-sdk-oss.version>
<knife4j.version>3.0.3</knife4j.version>
<!-- <logback.version>1.5.6</logback.version>-->
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!--mysql依赖-->
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
<version>${mysql.version}</version>
<scope>runtime</scope>
</dependency>
<!--mybatisplus-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>${mybatisplus.version}</version>
</dependency>
<!--redis-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
<!--hutool工具类-->
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>${hutool.version}</version>
</dependency>
<!--commons包-->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>${commons.version}</version>
</dependency>
<!--junit-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
</dependency>
<!-- https://mvnrepository.com/artifact/com.alibaba.fastjson2/fastjson2 -->
<dependency>
<groupId>com.alibaba.fastjson2</groupId>
<artifactId>fastjson2</artifactId>
<version>${fastjson.version}</version>
</dependency>
<!-- excel -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>${easyexcel.version}</version>
</dependency>
<dependency>
<groupId>com.github.xiaoymin</groupId>
<artifactId>knife4j-spring-boot-starter</artifactId>
<version>${knife4j.version}</version>
</dependency>
<!-- <dependency>-->
<!-- <groupId>org.slf4j</groupId>-->
<!-- <artifactId>slf4j-api</artifactId>-->
<!-- <version>${slf4j.version}</version>-->
<!-- </dependency>-->
<!-- <dependency>-->
<!-- <groupId>org.slf4j</groupId>-->
<!-- <artifactId>slf4j-simple</artifactId>-->
<!-- <version>${slf4j.version}</version>-->
<!-- &lt;!&ndash; 注意,若无type为jar则报错&ndash;&gt;-->
<!-- <type>jar</type>-->
<!-- </dependency>-->
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<excludes>
<exclude>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</exclude>
</excludes>
</configuration>
</plugin>
</plugins>
</build>
<profiles>
<profile>
<id>test</id>
<properties>
<profileActive>test</profileActive>
<fname>test</fname>
</properties>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
</profile>
<profile>
<id>pro</id>
<properties>
<profileActive>pro</profileActive>
<fname>pro</fname>
</properties>
</profile>
</profiles>
</project>
package com.dr;
import lombok.extern.slf4j.Slf4j;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@Slf4j
@MapperScan(basePackages = {"com.dr.mapper"})
@SpringBootApplication
public class DjmDataReportApplication {
public static void main(String[] args) {
SpringApplication.run(DjmDataReportApplication.class, args);
log.info(" __ __\n" +
" / \\~~~/ \\\n" +
" ,----( .. )\n" +
" / \\__ __/\n" +
" /| (\\ |(\n" +
" ^ \\ /___\\ /\\ | \n" +
" |__| |__|-\" \n" +
"\n" +
"---------------djm-data-report------------start------->>>>>--------");
}
}
package com.dr.aspect;
import com.alibaba.fastjson2.JSON;
import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.springframework.stereotype.Component;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
/**
* 请求参数输出 AOP
*
* @author luocong
* @since 2024/3/11 10:15
**/
@Aspect
@Component
@Slf4j
public class RequestParamsAspect {
/**
* 执行拦截
*/
@Before("execution(* com.dr.controller.*.*.*(..))")
public void doInterceptor(JoinPoint joinPoint) {
HttpServletRequest request = ((ServletRequestAttributes) Objects.requireNonNull(RequestContextHolder.getRequestAttributes())).getRequest();
String url = request.getRequestURI();
//请求参数
Object[] args = joinPoint.getArgs();
List<Object> argsList=new ArrayList<>();
for (Object arg : args) {
// 如果参数类型是请求和响应的http,则不需要拼接
if (arg instanceof HttpServletRequest || arg instanceof HttpServletResponse || arg instanceof MultipartFile) {
continue;
}
argsList.add(arg);
}
log.info("Request url:{}, Request parameters:{}", url, JSON.toJSONString(argsList));
}
}
\ No newline at end of file
package com.dr.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
/**
* @description knife4j配置
* @author luocong
* @date 2024/9/13 13:43
* @version 1.0
*/
@Configuration
public class KnifeConfig {
@Bean
public Docket defaultApi2() {
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(new ApiInfoBuilder()
.title("小程序数据报告")
.description("接口开发")
.version("1.0")
.build())
.select()
// 指定 Controller 扫描包路径
.apis(RequestHandlerSelectors
.basePackage("com.dr.controller"))
.paths(PathSelectors.any())
.build();
}
}
package com.dr.config;
import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import lombok.extern.slf4j.Slf4j;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.stereotype.Component;
import java.time.LocalDateTime;
/**
* @description mybatisplus配置
* @author luocong
* @since 2023-01-29 14:24:53
*/
@Slf4j
@Component
public class MyMetaObjectHandler implements MetaObjectHandler {
@Override
public void insertFill(MetaObject metaObject) {
log.info("start insert fill ....");
// 起始版本 3.3.3(推荐)
this.strictInsertFill(metaObject, "createTime", LocalDateTime::now, LocalDateTime.class);
this.strictInsertFill(metaObject, "deleted", Integer.class,0);
}
@Override
public void updateFill(MetaObject metaObject) {
log.info("start update fill ....");
// 起始版本 3.3.3(推荐)
this.strictUpdateFill(metaObject, "updateTime", LocalDateTime::now, LocalDateTime.class);
}
}
\ No newline at end of file
package com.dr.config;
import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.BlockAttackInnerInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.OptimisticLockerInnerInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* @description mybatisplus配置
* @author luocong
* @since 2023-01-29 14:24:53
*/
@Configuration
public class MybatisPlusConfig {
/**
* 新的分页插件,一缓和二缓遵循mybatis的规则,需要设置 MybatisConfiguration#useDeprecatedExecutor = false 避免缓存出现问题(该属性会在旧插件移除后一同移除)
*/
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
interceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor());
interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
interceptor.addInnerInterceptor(new BlockAttackInnerInterceptor());
return interceptor;
}
}
\ No newline at end of file
package com.dr.config;
import io.lettuce.core.SocketOptions;
import io.lettuce.core.cluster.ClusterClientOptions;
import io.lettuce.core.cluster.ClusterTopologyRefreshOptions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.autoconfigure.data.redis.LettuceClientConfigurationBuilderCustomizer;
import org.springframework.boot.autoconfigure.data.redis.RedisProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisOperations;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;
/**
* @description redis配置
* @author luocong
* @since 2023-01-29 14:24:53
*/
@Configuration
@ConditionalOnClass(RedisOperations.class)
public class RedisConfig {
@Bean
@ConditionalOnMissingBean(name = "redisTemplate")
public RedisTemplate<Object, Object> redisTemplate(
RedisConnectionFactory redisConnectionFactory) {
RedisTemplate<Object, Object> template = new RedisTemplate<>();
//使用jackson序列化
Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer<>(Object.class);
// value值的序列化采用Jackson2JsonRedisSerializer
template.setValueSerializer(jackson2JsonRedisSerializer);
template.setHashValueSerializer(jackson2JsonRedisSerializer);
// key的序列化采用StringRedisSerializer
template.setKeySerializer(new StringRedisSerializer());
template.setHashKeySerializer(new StringRedisSerializer());
template.setConnectionFactory(redisConnectionFactory);
return template;
}
@Bean
@ConditionalOnMissingBean(StringRedisTemplate.class)
public StringRedisTemplate stringRedisTemplate(
RedisConnectionFactory redisConnectionFactory) {
StringRedisTemplate template = new StringRedisTemplate();
template.setConnectionFactory(redisConnectionFactory);
return template;
}
@Bean
public LettuceClientConfigurationBuilderCustomizer lettuceClientConfigurationBuilderCustomizer(@Autowired RedisProperties redisProperties) {
return clientConfigurationBuilder -> {
ClusterClientOptions.Builder builder = ClusterClientOptions.builder();
RedisProperties.Lettuce.Cluster.Refresh refreshProperties = redisProperties.getLettuce().getCluster().getRefresh();
ClusterTopologyRefreshOptions.Builder refreshBuilder = ClusterTopologyRefreshOptions.builder();
if (refreshProperties.getPeriod() != null) {
refreshBuilder.enablePeriodicRefresh(refreshProperties.getPeriod());
}
if (refreshProperties.isAdaptive()) {
refreshBuilder.enableAllAdaptiveRefreshTriggers();
}
builder.topologyRefreshOptions(refreshBuilder.build());
builder.socketOptions(SocketOptions.builder().keepAlive(true).build());
clientConfigurationBuilder.clientOptions(builder.build());
};
}
}
\ No newline at end of file
package com.dr.config;
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializerProvider;
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.http.converter.StringHttpMessageConverter;
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.util.List;
/**
* @description web配置
* @author songyouyu
* @date 2023/1/30 11:22
*/
@Configuration
public class WebConfig implements WebMvcConfigurer {
// @Override
// public void addCorsMappings(CorsRegistry registry) {
// registry.addMapping("/**")
// .allowedOrigins("*") // 允许所有来源
// .allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS")
// .allowedHeaders("*")
// .allowCredentials(true)
// .maxAge(3600);
// }
@Override
public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
ObjectMapper objectMapper = new ObjectMapper();
JavaTimeModule javaTimeModule = new JavaTimeModule();
javaTimeModule.addSerializer(LocalDateTime.class, new LocalDateTimeSerializer());
objectMapper.registerModule(javaTimeModule);
objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
converter.setObjectMapper(objectMapper);
converters.add(0, converter);
converters.add(stringHttpMessageConverter());
}
@Bean
public StringHttpMessageConverter stringHttpMessageConverter() {
return new StringHttpMessageConverter(StandardCharsets.UTF_8);
}
/**
* 序列化实现
*/
public static class LocalDateTimeSerializer extends JsonSerializer<LocalDateTime> {
@Override
public void serialize(LocalDateTime value, JsonGenerator gen, SerializerProvider serializers)
throws IOException {
if (value != null) {
long timestamp = value.atZone(ZoneId.systemDefault()).toInstant().toEpochMilli();
gen.writeNumber(timestamp);
}
}
}
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("doc.html").addResourceLocations("classpath:/META-INF/resources/");
registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/");
registry.addResourceHandler("/swagger-ui/**").addResourceLocations("classpath:/META-INF/resources/");
registry.addResourceHandler("/**").addResourceLocations("classpath:/static/");
}
}
package com.dr.constant;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;
import java.io.Serializable;
/**
* @author luocong
* @since 2023-01-29 14:24:53
*/
@ToString
@AllArgsConstructor
@NoArgsConstructor
@Data
public class CodeMsg implements Serializable {
private static final long serialVersionUID = 9116840345586813365L;
private int code;
private String msg;
/**
* 正常返回
*/
public static final CodeMsg SUCCESS = new CodeMsg(0, "ok");
/**
* 通用的错误码
*/
public static final CodeMsg SERVER_ERROR = new CodeMsg(-2, "Server Error");
public static final CodeMsg TOKEN_ERROR = new CodeMsg(-1, "当前会话已失效,请重新登录");
public static final CodeMsg PARAMETER_VALIDATOR = new CodeMsg(1, "Invalid Parameter");
public static final CodeMsg BAD_REQUEST = new CodeMsg(2, "Bad Request");
}
\ No newline at end of file
package com.dr.controller;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* @description 测试一下
* @author luocong
* @date 2024/9/13 14:37
* @version 1.0
*/
@Slf4j
@RestController
public class TestController {
@RequestMapping("/test")
public String test(){
log.info("ok");
return "ok";
}
}
package com.dr.exception;
import com.dr.constant.CodeMsg;
import com.dr.util.Results;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;
/**
* @author luocong
* @since 2023-01-29 14:24:53
*/
@RestControllerAdvice
@Slf4j
public class GlobalExceptionHandler {
@ExceptionHandler(value = Exception.class)
public Object exceptionHandler(Exception e) {
log.error("异常信息{}", e.getMessage(), e);
return Results.error(CodeMsg.SERVER_ERROR);
}
}
package com.dr.util;
import com.dr.constant.CodeMsg;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
/**
* @author luocong
* @since 2023-01-29 14:24:53
*/
@Schema(description = "返回结果对象")
@Data
public class Results<T> {
@Schema(description = "返回状态码 0-成功,其他-失败")
private int code;
@Schema(description = "提示信息")
private String msg;
@Schema(description = "token")
private String token;
@Schema(description = "响应数据")
private T data;
public Results() {
}
private Results(T data, String token) {
this.data = data;
this.token = token;
this.code = CodeMsg.SUCCESS.getCode();
this.msg = CodeMsg.SUCCESS.getMsg();
}
private Results(int code, String msg) {
this.code = code;
this.msg = msg;
}
private Results(T data) {
this.data = data;
this.code = CodeMsg.SUCCESS.getCode();
this.msg = CodeMsg.SUCCESS.getMsg();
}
private Results(int code, String msg, String token) {
this.token = token;
this.code = CodeMsg.SUCCESS.getCode();
this.msg = CodeMsg.SUCCESS.getMsg();
}
private Results(CodeMsg codeMsg, String token) {
if (codeMsg != null) {
this.code = codeMsg.getCode();
this.msg = codeMsg.getMsg();
this.token = token;
}
}
private Results(CodeMsg codeMsg) {
if (codeMsg != null) {
this.code = codeMsg.getCode();
this.msg = codeMsg.getMsg();
}
}
/**
* 成功时候的调用
*
* @return <T>
*/
public static <T> Results<T> success(T data) {
return new Results<T>(data);
}
/**
* 成功时候的调用
*
* @return <T>
*/
public static <T> Results<T> success() {
return new Results<T>((T) null);
}
/**
* 成功时候的调用
*
* @return <T>
*/
public static <T> Results<T> success(T data, String token) {
return new Results<T>(data, token);
}
/**
* 失败时候的调用
*
* @return <T>
*/
public static <T> Results<T> error(CodeMsg codeMsg, String token) {
return new Results<T>(codeMsg, token);
}
/**
* 失败时候的调用
*
* @return <T>
*/
public static <T> Results<T> error(CodeMsg codeMsg) {
return new Results<T>(codeMsg);
}
public static <T> Results<T> error(int code, String msg) {
return new Results<T>(code, msg);
}
}
\ No newline at end of file
server:
port: 8290
spring:
datasource:
type: com.zaxxer.hikari.HikariDataSource
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://127.0.0.1:3308/aiot?useUnicode=true&allowMultiQueries=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai
username: root
password: 123456
hikari:
# 是客户端等待连接池连接的最大毫秒数
connection-timeout: 30000
# 是允许连接在连接池中空闲的最长时间
minimum-idle: 10
# 配置最大池大小
maximum-pool-size: 30
# 是允许连接在连接池中空闲的最长时间(以毫秒为单位)
idle-timeout: 60000
# 池中连接关闭后的最长生命周期(以毫秒为单位)
max-lifetime: 600000
# 配置从池返回的连接的默认自动提交行为。默认值为true。
auto-commit: true
# 连接池的名称
pool-name: MyHikariCP
# 开启连接监测泄露
leak-detection-threshold: 5000
# redis配置
redis:
host: 192.168.1.66
port: 6379
database: 2
password: DJm#2021&iot
timeout: 20000ms
lettuce:
pool:
max-active: 50
max-wait: 10000ms
max-idle: 25
min-idle: 10
#knife4j配置
knife4j:
enable: false
#日志
logging:
level:
root: info
mybatis-plus:
mapper-locations: classpath:/mapper/*.xml
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
# true 映射时开启驼峰法 false 关闭驼峰法映射s
map-underscore-to-camel-case: true
# 逻辑删除
global-config:
db-config:
# 全局逻辑删除的实体字段名(since 3.3.0,配置后可以忽略不配置步骤2)
logic-delete-field: deleted
# 逻辑已删除值(默认为 1)
logic-delete-value: 1
# 逻辑未删除值(默认为 0)
logic-not-delete-value: 0
type-aliases-package: com.dr.domain.entity
\ No newline at end of file
server:
port: 8290
spring:
datasource:
type: com.zaxxer.hikari.HikariDataSource
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://192.168.1.72:3308/aiot?useUnicode=true&allowMultiQueries=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai
username: root
password: 123456
hikari:
# 是客户端等待连接池连接的最大毫秒数
connection-timeout: 30000
# 是允许连接在连接池中空闲的最长时间
minimum-idle: 10
# 配置最大池大小
maximum-pool-size: 30
# 是允许连接在连接池中空闲的最长时间(以毫秒为单位)
idle-timeout: 60000
# 池中连接关闭后的最长生命周期(以毫秒为单位)
max-lifetime: 600000
# 配置从池返回的连接的默认自动提交行为。默认值为true。
auto-commit: true
# 连接池的名称
pool-name: MyHikariCP
# 开启连接监测泄露
leak-detection-threshold: 5000
# redis配置
redis:
host: 192.168.1.66
port: 6379
database: 2
password: DJm#2021&iot
timeout: 20000ms
lettuce:
pool:
max-active: 50
max-wait: 10000ms
max-idle: 25
min-idle: 10
#knife4j配置
knife4j:
enable: true
#日志
logging:
level:
root: info
mybatis-plus:
mapper-locations: classpath:/mapper/*.xml
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
# true 映射时开启驼峰法 false 关闭驼峰法映射s
map-underscore-to-camel-case: true
# 逻辑删除
global-config:
db-config:
# 全局逻辑删除的实体字段名(since 3.3.0,配置后可以忽略不配置步骤2)
logic-delete-field: deleted
# 逻辑已删除值(默认为 1)
logic-delete-value: 1
# 逻辑未删除值(默认为 0)
logic-not-delete-value: 0
type-aliases-package: com.dr.domain.entity
spring:
application:
name: djm-data-report
profiles:
active: @profileActive@
mvc:
throw-exception-if-no-handler-found: true
static-path-pattern: /statics/**
# \u652F\u6301 swagger3
pathmatch:
matching-strategy: ant_path_matcher
main:
allow-circular-references: true
servlet:
multipart:
max-file-size: 100MB
max-request-size: 100MB
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<include
resource="org/springframework/boot/logging/logback/base.xml" />
<logger
name="org.springframework.web"
level="INFO" />
<logger
name="org.springboot.sample"
level="TRACE" />
<property name="LOG_HOME" value="logs" />
<!-- 开发、测试环境 ,开发和测试环境都打印DEBUG日志,方便找bug-->
<springProfile name="test">
<logger
name="org.springframework.web"
level="INFO" />
<logger
name="org.springboot.sample"
level="INFO" />
<logger
name="com.dr"
level="DEBUG" />
</springProfile>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d %p (%file:%line\)- %m%n</pattern>
<!-- 控制台也要使用UTF-8,不要使用GBK,否则会中文乱码 -->
<charset>UTF-8</charset>
</encoder>
</appender>
<!-- RollingFileAppender:滚动记录文件,先将日志记录到指定文件,当符合某个条件时,将日志记录到其他文件 -->
<!-- 以下的大概意思是:1.先按日期存日志,日期变了,将前一天的日志文件名重命名为XXX%日期%索引,新的日志仍然是managementPlatform.log -->
<!-- 2.如果日期没有发生变化,但是当前日志的文件大小超过10M时,对当前日志进行分割 重命名-->
<appender name="logs" class="ch.qos.logback.core.rolling.RollingFileAppender">
<File>${LOG_HOME}/djm-data-report.log</File>
<!-- rollingPolicy:当发生滚动时,决定 RollingFileAppender 的行为,涉及文件移动和重命名。 -->
<!-- TimeBasedRollingPolicy: 最常用的滚动策略,它根据时间来制定滚动策略,既负责滚动也负责出发滚动 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 活动文件的名字会根据fileNamePattern的值,每隔一段时间改变一次 -->
<!-- 文件名:log/managementPlatform.2017-12-05.0.log -->
<fileNamePattern>${LOG_HOME}/djm-data-report.%d.%i.log</fileNamePattern>
<!-- 每产生一个日志文件,该日志文件的保存期限为30天 -->
<maxHistory>90</maxHistory>
<!-- 如果磁盘空间有限,又需要保留指定时间的日志,这时指定每天的日志文件上限,如果超过上限,将删除当前日志文件的旧日志 -->
<!--<totalSizeCap>1GB</totalSizeCap>-->
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<!-- maxFileSize:这是活动文件的大小,默认值是10MB,测试时可改成1KB看效果 -->
<maxFileSize>20MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
<encoder>
<!-- pattern节点,用来设置日志的输入格式 -->
<pattern>
%d %p (%file:%line\)- %m%n
</pattern>
<!-- 记录日志的编码:此处设置字符集 - -->
<charset>UTF-8</charset>
</encoder>
</appender>
<logger name="com.dr" level="DEBUG">
<appender-ref ref="logs" />
</logger>
<!-- 日志级别由低到高 ALL 最低的的日志级别什么都打印,OFF最高的日志级别关闭所有的日志打印-->
<!-- ALL<<TRACE<<DEBUG<<INFO<<WARN<<ERROR<<FATAL<<>OFF -->
<!-- 生产环境 ,打印INFO级别日志,初期项目上线的时候可以打DEBUG-->
<springProfile name="pro">
<logger
name="org.springframework.web"
level="INFO" />
<logger
name="org.springboot.sample"
level="INFO" />
<logger
name="com.dr"
level="INFO" />
</springProfile>
</configuration>
package com.dr;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
class DjmDataReportApplicationTests {
@Test
void contextLoads() {
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment