diff --git a/README.md b/README.md
index da92014..da22618 100644
--- a/README.md
+++ b/README.md
@@ -1,2 +1,32 @@
-# SpringBoot-Integration
-SpringBoot简单集成示例
+# SpringBoot 整合教程
+- SpringBoot-shiro 整合mybatis和shiro的一个简单实例
+- SpringBoot-swagger 整合swagger的简单实例
+- SpringBoot-aop 调取接口的时候,打印一条输出语句到控制台
+- SpringBoot-jwt (JSON Web Token) 使用拦截器对接口进行授权
+- SpringBoot-slf4j 对日志进行分批存储和打印
+- SpringBoot-easyExcel 简单使用easyExcel进行Web excel的上传和下载
+- SpringBoot-scheduling SpringBoot定时任务简单实例
+- SpringBoot-threadPool SpringBoot线程池
+
+### SpringBoot线程池
+> SpringBoot线程池详解:https://www.jianshu.com/p/c82cacd6e356
+> 线程状态详解:https://www.jianshu.com/p/b09392baddfd
+
+### scheduling定时任务详解
+> 默认情况下,如果什么都不进行配置,就会导致一个问题,系统中所有的定时任务都是使用的一个线程去执行的,也就是说,如果如果同一个时刻有2个定时任务需要执行,那么只可能有一个定时任务在执行,如果要解决这个问题可以定义一个自定的任务调度线程池即可。
+
+> cron表达式详解:https://help.aliyun.com/document_detail/169784.html?spm=5176.13910061.sslink.4.10607fbbHfhVrM
+
+### jwt注意事项
+> jwt详解:https://www.ruanyifeng.com/blog/2018/07/json_web_token-tutorial.html
+
+### swagger注意事项
+> 导入Swagger依赖之后,在配置类中配置swagger的基础信息,需要注意的是要注明接口扫描方式apis() swagger 访问路径: */swagger-ui/index.html
+
+### aop注意事项
+> 这里需要注意的是切点方法test()并不会执行,环绕方法需要手动proceed(),不然被切入方法不会执行
+
+### shiro授权流程
+> 1. shiro会根据ShiroFilterFactoryBean此处的过滤器配置,在SpringBoot初始化的时候创建过滤器。
+> 2. Web应用通过接口进行认证授权,(1.获取当前用户SecurityUtils.getSubject,2.UsernamePasswordToken生成Token
+> 3. subject.login 执行认证,之后如果过滤器里设置了要走授权,那么认证方法走完后还需要走授权方法)
\ No newline at end of file
diff --git a/SpringBoot-aop/pom.xml b/SpringBoot-aop/pom.xml
new file mode 100644
index 0000000..5be2cac
--- /dev/null
+++ b/SpringBoot-aop/pom.xml
@@ -0,0 +1,27 @@
+
+
+ 4.0.0
+
+ com.ming
+ SpringBoot-Integration
+ 1.0-SNAPSHOT
+
+
+ SpringBoot-aop
+
+
+ 8
+ 8
+ UTF-8
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-aop
+
+
+
+
\ No newline at end of file
diff --git a/SpringBoot-aop/src/main/java/com/ming/aop/AOPApplication.java b/SpringBoot-aop/src/main/java/com/ming/aop/AOPApplication.java
new file mode 100644
index 0000000..1f16680
--- /dev/null
+++ b/SpringBoot-aop/src/main/java/com/ming/aop/AOPApplication.java
@@ -0,0 +1,11 @@
+package com.ming.aop;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+
+@SpringBootApplication
+public class AOPApplication {
+ public static void main(String[] args) {
+ SpringApplication.run(AOPApplication.class);
+ }
+}
diff --git a/SpringBoot-aop/src/main/java/com/ming/aop/config/AOPAdvice.java b/SpringBoot-aop/src/main/java/com/ming/aop/config/AOPAdvice.java
new file mode 100644
index 0000000..ab15499
--- /dev/null
+++ b/SpringBoot-aop/src/main/java/com/ming/aop/config/AOPAdvice.java
@@ -0,0 +1,48 @@
+package com.ming.aop.config;
+
+import org.aspectj.lang.ProceedingJoinPoint;
+import org.aspectj.lang.annotation.*;
+import org.springframework.stereotype.Component;
+
+
+@Aspect
+@Component
+public class AOPAdvice {
+ /**
+ * execution:在方法执行时触发
+ * 第一个 * :返回任意类型
+ * 第二个 * :任意类
+ * 第三个 * :任意方法
+ * 第四个 * :方法里传任意参数
+ * 这里需要注意的是test方法并不会执行,环绕方法需要手动proceed(),不然被切入的类或方法不会执行
+ */
+ @Pointcut("execution(* com.ming.aop.controller.*.*(..))")
+ public String test(){
+ System.out.println("test");
+ return "test";
+ }
+
+
+ @Before("test()")
+ public void beforeAdvice(){
+ System.out.println("before");
+ }
+
+
+ @After("test()")
+ public void afterAdvice(){
+ System.out.println("after");
+ }
+
+ @Around("test()")
+ public void aroundAdvice(ProceedingJoinPoint proceedingJoinPoint){
+ System.out.println("before");
+ try {
+ Object proceed = proceedingJoinPoint.proceed();
+ System.out.println(proceed);
+ } catch (Throwable e) {
+ throw new RuntimeException(e);
+ }
+ System.out.println("after");
+ }
+}
diff --git a/SpringBoot-aop/src/main/java/com/ming/aop/controller/AOPController.java b/SpringBoot-aop/src/main/java/com/ming/aop/controller/AOPController.java
new file mode 100644
index 0000000..90dba65
--- /dev/null
+++ b/SpringBoot-aop/src/main/java/com/ming/aop/controller/AOPController.java
@@ -0,0 +1,15 @@
+package com.ming.aop.controller;
+
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+@RestController
+@RequestMapping("aop")
+public class AOPController {
+
+ @GetMapping("/testAop")
+ public String testAop(){
+ return "aop";
+ }
+}
diff --git a/SpringBoot-aop/src/main/resources/application.yml b/SpringBoot-aop/src/main/resources/application.yml
new file mode 100644
index 0000000..47fbb02
--- /dev/null
+++ b/SpringBoot-aop/src/main/resources/application.yml
@@ -0,0 +1,2 @@
+server:
+ port: 8080
\ No newline at end of file
diff --git a/SpringBoot-aop/target/classes/application.yml b/SpringBoot-aop/target/classes/application.yml
new file mode 100644
index 0000000..47fbb02
--- /dev/null
+++ b/SpringBoot-aop/target/classes/application.yml
@@ -0,0 +1,2 @@
+server:
+ port: 8080
\ No newline at end of file
diff --git a/SpringBoot-easyExcel/pom.xml b/SpringBoot-easyExcel/pom.xml
new file mode 100644
index 0000000..a5c72e6
--- /dev/null
+++ b/SpringBoot-easyExcel/pom.xml
@@ -0,0 +1,34 @@
+
+
+ 4.0.0
+
+ com.ming
+ SpringBoot-Integration
+ 1.0-SNAPSHOT
+
+
+ SpringBoot-easyExcel
+
+
+ 8
+ 8
+ UTF-8
+
+
+
+
+ com.alibaba
+ easyexcel
+ 3.1.5
+
+
+
+ org.projectlombok
+ lombok
+ 1.18.24
+
+
+
+
\ No newline at end of file
diff --git a/SpringBoot-easyExcel/src/main/java/com/ming/easyExcel/EasyExcelApplication.java b/SpringBoot-easyExcel/src/main/java/com/ming/easyExcel/EasyExcelApplication.java
new file mode 100644
index 0000000..3ccc161
--- /dev/null
+++ b/SpringBoot-easyExcel/src/main/java/com/ming/easyExcel/EasyExcelApplication.java
@@ -0,0 +1,18 @@
+package com.ming.easyExcel;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+
+/**
+ * @ClassName: EasyExcelApplication
+ * @Description: TODO
+ * @Author: ECRZ
+ * @Date: 2023/1/10
+ */
+
+@SpringBootApplication
+public class EasyExcelApplication {
+ public static void main(String[] args) {
+ SpringApplication.run(EasyExcelApplication.class);
+ }
+}
diff --git a/SpringBoot-easyExcel/src/main/java/com/ming/easyExcel/controller/UserController.java b/SpringBoot-easyExcel/src/main/java/com/ming/easyExcel/controller/UserController.java
new file mode 100644
index 0000000..1723c81
--- /dev/null
+++ b/SpringBoot-easyExcel/src/main/java/com/ming/easyExcel/controller/UserController.java
@@ -0,0 +1,36 @@
+package com.ming.easyExcel.controller;
+
+import com.ming.easyExcel.service.UserService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+
+/**
+ * @ClassName: UserController
+ * @Description: Excel的上传和下载
+ * @Author: ECRZ
+ * @Date: 2023/1/10
+ */
+@RestController
+@RequestMapping("excel")
+public class UserController {
+
+ // 不建议字段注入
+ @Autowired
+ private UserService userService;
+
+ @GetMapping("download")
+ public void download(HttpServletResponse response) throws IOException {
+ userService.download(response);
+ }
+
+ @PostMapping("upload")
+ public String upload(@RequestParam("file")MultipartFile file) throws IOException {
+ return userService.upload(file);
+ }
+
+
+}
diff --git a/SpringBoot-easyExcel/src/main/java/com/ming/easyExcel/dto/UserDTO.java b/SpringBoot-easyExcel/src/main/java/com/ming/easyExcel/dto/UserDTO.java
new file mode 100644
index 0000000..dd4a5fc
--- /dev/null
+++ b/SpringBoot-easyExcel/src/main/java/com/ming/easyExcel/dto/UserDTO.java
@@ -0,0 +1,25 @@
+package com.ming.easyExcel.dto;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import lombok.Data;
+
+/**
+ * @ClassName: UserDTO
+ * @Description: TODO
+ * @Author: ECRZ
+ * @Date: 2023/1/10
+ */
+@Data
+public class UserDTO {
+ @ExcelProperty(value = "用户id")
+ private String userId;
+
+ @ExcelProperty(value = "用户名称")
+ private String userName;
+
+ @ExcelProperty(value = "用户密码")
+ private String userPassword;
+
+ @ExcelProperty(value = "用户类型")
+ private int userType;
+}
diff --git a/SpringBoot-easyExcel/src/main/java/com/ming/easyExcel/service/UserService.java b/SpringBoot-easyExcel/src/main/java/com/ming/easyExcel/service/UserService.java
new file mode 100644
index 0000000..7bfabfc
--- /dev/null
+++ b/SpringBoot-easyExcel/src/main/java/com/ming/easyExcel/service/UserService.java
@@ -0,0 +1,53 @@
+package com.ming.easyExcel.service;
+
+import com.alibaba.excel.EasyExcel;
+import com.alibaba.excel.util.ListUtils;
+import com.ming.easyExcel.dto.UserDTO;
+import com.ming.easyExcel.utils.EasyExcelReadUtils;
+import org.springframework.stereotype.Service;
+import org.springframework.web.multipart.MultipartFile;
+
+
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.net.URLEncoder;
+import java.util.List;
+import java.util.UUID;
+
+/**
+ * @ClassName: UserService
+ * @Description: TODO
+ * @Author: ECRZ
+ * @Date: 2023/1/10
+ */
+@Service
+public class UserService {
+
+ private List data() {
+ List list = ListUtils.newArrayList();
+ for (int i = 0; i < 10; i++) {
+ UserDTO user = new UserDTO();
+ user.setUserId(String.valueOf(UUID.randomUUID()));
+ user.setUserName("张三");
+ user.setUserPassword("999999999");
+
+ list.add(user);
+ }
+ return list;
+ }
+
+ public void download(HttpServletResponse response) throws IOException {
+ // 这里注意 有同学反应使用swagger 会导致各种问题,请直接用浏览器或者用postman
+ response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
+ response.setCharacterEncoding("utf-8");
+ // 这里URLEncoder.encode可以防止中文乱码 当然和easyExcel没有关系
+ String fileName = URLEncoder.encode("测试", "UTF-8").replaceAll("\\+", "%20");
+ response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileName + ".xlsx");
+ EasyExcel.write(response.getOutputStream(), UserDTO.class).sheet("模板").doWrite(data());
+ }
+
+ public String upload(MultipartFile file) throws IOException {
+ EasyExcel.read(file.getInputStream(), UserDTO.class, new EasyExcelReadUtils()).sheet().doRead();
+ return "success";
+ }
+}
diff --git a/SpringBoot-easyExcel/src/main/java/com/ming/easyExcel/utils/EasyExcelReadUtils.java b/SpringBoot-easyExcel/src/main/java/com/ming/easyExcel/utils/EasyExcelReadUtils.java
new file mode 100644
index 0000000..a8756e0
--- /dev/null
+++ b/SpringBoot-easyExcel/src/main/java/com/ming/easyExcel/utils/EasyExcelReadUtils.java
@@ -0,0 +1,34 @@
+package com.ming.easyExcel.utils;
+
+import com.alibaba.excel.context.AnalysisContext;
+import com.alibaba.excel.read.listener.ReadListener;
+import com.ming.easyExcel.dto.UserDTO;
+
+/**
+ * @ClassName: EasyExcelUtils
+ * @Description: 工具主要实现读、写方法
+ * @Author: ECRZ
+ * @Date: 2023/1/10
+ */
+public class EasyExcelReadUtils implements ReadListener {
+
+ /**
+ * @Description: 每一条数据解析都会来调用
+ * @Author: ECRZ
+ * @Date: 2023/1/10
+ */
+ @Override
+ public void invoke(UserDTO userDTO, AnalysisContext analysisContext) {
+ System.out.println(userDTO.toString());
+ }
+
+ /**
+ * @Description: 所有数据解析完成了都会来调用
+ * @Author: ECRZ
+ * @Date: 2023/1/10
+ */
+ @Override
+ public void doAfterAllAnalysed(AnalysisContext analysisContext) {
+
+ }
+}
diff --git a/SpringBoot-easyExcel/src/main/resources/application.yml b/SpringBoot-easyExcel/src/main/resources/application.yml
new file mode 100644
index 0000000..84c6fb1
--- /dev/null
+++ b/SpringBoot-easyExcel/src/main/resources/application.yml
@@ -0,0 +1,2 @@
+server:
+ port: 8888
\ No newline at end of file
diff --git a/SpringBoot-easyExcel/src/main/resources/lombok.config b/SpringBoot-easyExcel/src/main/resources/lombok.config
new file mode 100644
index 0000000..50dfe61
--- /dev/null
+++ b/SpringBoot-easyExcel/src/main/resources/lombok.config
@@ -0,0 +1,2 @@
+lombok.toString.callSuper = CALL
+lombok.equalsAndHashCode.callSuper= CALL
\ No newline at end of file
diff --git a/SpringBoot-easyExcel/target/classes/application.yml b/SpringBoot-easyExcel/target/classes/application.yml
new file mode 100644
index 0000000..84c6fb1
--- /dev/null
+++ b/SpringBoot-easyExcel/target/classes/application.yml
@@ -0,0 +1,2 @@
+server:
+ port: 8888
\ No newline at end of file
diff --git a/SpringBoot-easyExcel/target/classes/lombok.config b/SpringBoot-easyExcel/target/classes/lombok.config
new file mode 100644
index 0000000..50dfe61
--- /dev/null
+++ b/SpringBoot-easyExcel/target/classes/lombok.config
@@ -0,0 +1,2 @@
+lombok.toString.callSuper = CALL
+lombok.equalsAndHashCode.callSuper= CALL
\ No newline at end of file
diff --git a/SpringBoot-jwt/pom.xml b/SpringBoot-jwt/pom.xml
new file mode 100644
index 0000000..fe058a7
--- /dev/null
+++ b/SpringBoot-jwt/pom.xml
@@ -0,0 +1,42 @@
+
+
+ 4.0.0
+
+ com.ming
+ SpringBoot-Integration
+ 1.0-SNAPSHOT
+
+
+ com.ming.jwt
+ SpringBoot-jwt
+
+
+ 8
+ 8
+ UTF-8
+
+
+
+
+ com.auth0
+ java-jwt
+ 4.2.1
+
+
+
+ io.jsonwebtoken
+ jjwt
+ 0.9.1
+
+
+
+ com.alibaba.fastjson2
+ fastjson2
+ 2.0.22
+
+
+
+
+
\ No newline at end of file
diff --git a/SpringBoot-jwt/src/main/java/com/ming/jwt/JWTApplication.java b/SpringBoot-jwt/src/main/java/com/ming/jwt/JWTApplication.java
new file mode 100644
index 0000000..5265a19
--- /dev/null
+++ b/SpringBoot-jwt/src/main/java/com/ming/jwt/JWTApplication.java
@@ -0,0 +1,17 @@
+package com.ming.jwt;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+
+/**
+ * @ClassName: JWTApplication
+ * @Description: TODO
+ * @Author: ECRZ
+ * @Date: 2023/1/11
+ */
+@SpringBootApplication
+public class JWTApplication {
+ public static void main(String[] args) {
+ SpringApplication.run(JWTApplication.class);
+ }
+}
diff --git a/SpringBoot-jwt/src/main/java/com/ming/jwt/config/JWTConfig.java b/SpringBoot-jwt/src/main/java/com/ming/jwt/config/JWTConfig.java
new file mode 100644
index 0000000..aa1fb2c
--- /dev/null
+++ b/SpringBoot-jwt/src/main/java/com/ming/jwt/config/JWTConfig.java
@@ -0,0 +1,35 @@
+package com.ming.jwt.config;
+
+import com.ming.jwt.interceptor.JWTInterceptor;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
+import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @ClassName: JWTConfig
+ * @Description: SpringBoot配置拦截器
+ * @Author: ECRZ
+ * @Date: 2023/1/11
+ */
+@Configuration
+public class JWTConfig implements WebMvcConfigurer {
+ @Autowired
+ private JWTInterceptor jwtInterceptor;
+
+ @Override
+ public void addInterceptors(InterceptorRegistry registry) {
+ List pathPatterns=new ArrayList<>();
+ pathPatterns.add("/jwt/**");
+
+ List excludePathPatterns=new ArrayList<>();
+ excludePathPatterns.add("/jwt/generateToken");
+
+ registry.addInterceptor(jwtInterceptor) //添加拦截器
+ .addPathPatterns(pathPatterns) //添加拦截url
+ .excludePathPatterns(excludePathPatterns); //添加不拦截url
+ }
+}
diff --git a/SpringBoot-jwt/src/main/java/com/ming/jwt/controller/JWTController.java b/SpringBoot-jwt/src/main/java/com/ming/jwt/controller/JWTController.java
new file mode 100644
index 0000000..86aedc2
--- /dev/null
+++ b/SpringBoot-jwt/src/main/java/com/ming/jwt/controller/JWTController.java
@@ -0,0 +1,32 @@
+package com.ming.jwt.controller;
+
+import com.ming.jwt.pojo.User;
+import com.ming.jwt.service.JWTService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.*;
+
+/**
+ * @ClassName: JWTController
+ * @Description: JWT接口定义
+ * @Author: ECRZ
+ * @Date: 2023/1/11
+ */
+@RestController
+@CrossOrigin
+@RequestMapping("jwt")
+public class JWTController {
+ @Autowired
+ private JWTService jwtService;
+
+ @GetMapping("/generateToken")
+ public String generateToken(){
+ return jwtService.generateToken();
+ }
+
+ @GetMapping("/parseToken")
+ public ResponseEntity parseToken(@RequestParam(value = "token") String token){
+ return jwtService.parseToken(token);
+ }
+
+}
diff --git a/SpringBoot-jwt/src/main/java/com/ming/jwt/interceptor/JWTInterceptor.java b/SpringBoot-jwt/src/main/java/com/ming/jwt/interceptor/JWTInterceptor.java
new file mode 100644
index 0000000..3127a67
--- /dev/null
+++ b/SpringBoot-jwt/src/main/java/com/ming/jwt/interceptor/JWTInterceptor.java
@@ -0,0 +1,68 @@
+package com.ming.jwt.interceptor;
+
+import com.alibaba.fastjson2.JSON;
+import io.jsonwebtoken.*;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
+import org.springframework.stereotype.Component;
+import org.springframework.web.bind.annotation.CrossOrigin;
+import org.springframework.web.servlet.HandlerInterceptor;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.io.PrintWriter;
+
+/**
+ * @ClassName: JWTInterceptor
+ * @Description: SpringBoot创建拦截器
+ * @Author: ECRZ
+ * @Date: 2023/1/11
+ */
+@Component
+@CrossOrigin
+public class JWTInterceptor implements HandlerInterceptor {
+ @Value("${SECURITY}")
+ private String SECURITY;
+ @Override
+ public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
+ // 获取请求方法
+ String method = request.getMethod();
+
+ if ("OPTIONS".equals(method)){
+ return true;
+ }
+
+ String token = request.getHeader("token");
+ if (token != null && token != ""){
+ try {
+ JwtParser jwtParser = Jwts.parser();
+ jwtParser.setSigningKey(SECURITY);
+ Jws claimsJws = jwtParser.parseClaimsJws(token);
+ return true;
+ }catch (ExpiredJwtException e){
+ doResponse(response,"Token已过期,请重新登陆!");
+ return false;
+ }catch(JwtException e){
+ doResponse(response,"Token异常,请重新登陆!");
+ return false;
+ }
+ }
+ doResponse(response,"Token不存在,请重新登陆获取!");
+ return false;
+ }
+
+ public void doResponse(HttpServletResponse response,String info) throws IOException {
+ response.setContentType("application/json");
+ response.setCharacterEncoding("utf-8");
+
+ PrintWriter writer = response.getWriter();
+ ResponseEntity responseEntity=new ResponseEntity<>(info, HttpStatus.NOT_ACCEPTABLE);
+ String json = JSON.toJSONString(responseEntity);
+ writer.write(json);
+ writer.flush();
+ writer.close();
+ }
+
+}
diff --git a/SpringBoot-jwt/src/main/java/com/ming/jwt/pojo/User.java b/SpringBoot-jwt/src/main/java/com/ming/jwt/pojo/User.java
new file mode 100644
index 0000000..75b46a1
--- /dev/null
+++ b/SpringBoot-jwt/src/main/java/com/ming/jwt/pojo/User.java
@@ -0,0 +1,20 @@
+package com.ming.jwt.pojo;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * @ClassName: User
+ * @Description: User实体类
+ * @Author: ECRZ
+ * @Date: 2023/1/11
+ */
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+public class User {
+ private int id;
+ private String name;
+ private String password;
+}
diff --git a/SpringBoot-jwt/src/main/java/com/ming/jwt/service/JWTService.java b/SpringBoot-jwt/src/main/java/com/ming/jwt/service/JWTService.java
new file mode 100644
index 0000000..607fcc4
--- /dev/null
+++ b/SpringBoot-jwt/src/main/java/com/ming/jwt/service/JWTService.java
@@ -0,0 +1,63 @@
+package com.ming.jwt.service;
+
+import com.alibaba.fastjson2.JSON;
+import com.ming.jwt.pojo.User;
+import io.jsonwebtoken.*;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
+import org.springframework.stereotype.Service;
+
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * @ClassName: JWTService
+ * @Description: JWT 服务类
+ * @Author: ECRZ
+ * @Date: 2023/1/11
+ */
+@Service
+public class JWTService {
+ @Value("${SECURITY}")
+ private String SECURITY;
+
+ public String generateToken(){
+ User user = new User(1,"张三","123456");
+ String js = new String(JSON.toJSONString(user));
+ JwtBuilder jwtBuilder = Jwts.builder();
+
+ Map claim = new HashMap<>();
+
+ claim.put("key",js);
+ String token = jwtBuilder.setSubject("hello") //设置用户数据
+ .setIssuedAt(new Date()) //设置jwt生成时间
+ .setId("1") //设置token id为1
+ .setClaims(claim)
+ .setExpiration(new Date(System.currentTimeMillis() + 50000000)) // 设置token过期时间
+ .signWith(SignatureAlgorithm.HS256,SECURITY) //设置加密方式和密钥
+ .compact();
+ return token;
+ }
+
+ public ResponseEntity parseToken(String token){
+ if (token!=null && token != ""){
+ JwtParser jwtParser= Jwts.parser(); //获取jwt解析器
+ jwtParser.setSigningKey(SECURITY);
+
+ try {
+ Jws claimsJws = jwtParser.parseClaimsJws(token);
+ Claims body = claimsJws.getBody();//获取body
+ String subject = body.getSubject();//获取body中subject中的值
+ String key = body.get("key", String.class);//获取Claims中map的值
+ User user = JSON.parseObject(key, User.class);//反序列化user
+ return new ResponseEntity(user, HttpStatus.OK);
+ }catch (Exception e){
+ e.printStackTrace();
+ return new ResponseEntity(new User(),HttpStatus.NOT_ACCEPTABLE);
+ }
+ }
+ return new ResponseEntity(new User(),HttpStatus.NOT_ACCEPTABLE);
+ }
+}
diff --git a/SpringBoot-jwt/src/main/resources/application.yml b/SpringBoot-jwt/src/main/resources/application.yml
new file mode 100644
index 0000000..9ea80a2
--- /dev/null
+++ b/SpringBoot-jwt/src/main/resources/application.yml
@@ -0,0 +1,5 @@
+server:
+ port: 8888
+
+# 配置JWT密钥
+SECURITY: securityKey
\ No newline at end of file
diff --git a/SpringBoot-jwt/src/test/java/com/ming/jwt/JWTServiceTest.java b/SpringBoot-jwt/src/test/java/com/ming/jwt/JWTServiceTest.java
new file mode 100644
index 0000000..305992d
--- /dev/null
+++ b/SpringBoot-jwt/src/test/java/com/ming/jwt/JWTServiceTest.java
@@ -0,0 +1,20 @@
+package com.ming.jwt;
+
+import org.junit.jupiter.api.Test;
+import org.springframework.boot.test.context.SpringBootTest;
+
+import java.util.Date;
+
+/**
+ * @ClassName: JWTServiceTest
+ * @Description: TODO
+ * @Author: ECRZ
+ * @Date: 2023/1/11
+ */
+@SpringBootTest
+public class JWTServiceTest {
+ @Test
+ public void test(){
+ System.out.println(new Date());
+ }
+}
diff --git a/SpringBoot-jwt/target/classes/application.yml b/SpringBoot-jwt/target/classes/application.yml
new file mode 100644
index 0000000..9ea80a2
--- /dev/null
+++ b/SpringBoot-jwt/target/classes/application.yml
@@ -0,0 +1,5 @@
+server:
+ port: 8888
+
+# 配置JWT密钥
+SECURITY: securityKey
\ No newline at end of file
diff --git a/SpringBoot-scheduling/pom.xml b/SpringBoot-scheduling/pom.xml
new file mode 100644
index 0000000..9ae670f
--- /dev/null
+++ b/SpringBoot-scheduling/pom.xml
@@ -0,0 +1,20 @@
+
+
+ 4.0.0
+
+ com.ming
+ SpringBoot-Integration
+ 1.0-SNAPSHOT
+
+
+ SpringBoot-scheduling
+
+
+ 8
+ 8
+ UTF-8
+
+
+
\ No newline at end of file
diff --git a/SpringBoot-scheduling/src/main/java/com/ming/scheduling/SchedulingApplication.java b/SpringBoot-scheduling/src/main/java/com/ming/scheduling/SchedulingApplication.java
new file mode 100644
index 0000000..084e733
--- /dev/null
+++ b/SpringBoot-scheduling/src/main/java/com/ming/scheduling/SchedulingApplication.java
@@ -0,0 +1,19 @@
+package com.ming.scheduling;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.scheduling.annotation.EnableScheduling;
+
+/**
+ * @ClassName: SchedulingApplication
+ * @Description: 定时任务
+ * @Author: ECRZ
+ * @Date: 2023/1/11
+ */
+@SpringBootApplication
+@EnableScheduling
+public class SchedulingApplication {
+ public static void main(String[] args) {
+ SpringApplication.run(SchedulingApplication.class);
+ }
+}
diff --git a/SpringBoot-scheduling/src/main/java/com/ming/scheduling/config/ScheduleConfig.java b/SpringBoot-scheduling/src/main/java/com/ming/scheduling/config/ScheduleConfig.java
new file mode 100644
index 0000000..f23d283
--- /dev/null
+++ b/SpringBoot-scheduling/src/main/java/com/ming/scheduling/config/ScheduleConfig.java
@@ -0,0 +1,24 @@
+package com.ming.scheduling.config;
+
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.scheduling.TaskScheduler;
+import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;
+
+/**
+ * @ClassName: ScheduleConfig
+ * @Description: 配置定时任务的线程池
+ * @Author: ECRZ
+ * @Date: 2023/1/11
+ * @Notes: 注意此处的Configuration表示当前类是一个配置类,即使用注解来实现bean.xml中的bean注册 详情请看:https://www.jianshu.com/p/6408efea50fa
+ */
+@Configuration
+public class ScheduleConfig {
+ @Bean
+ public TaskScheduler scheduleThreadPool(){
+ ThreadPoolTaskScheduler schedulerPool = new ThreadPoolTaskScheduler();
+ schedulerPool.setPoolSize(10);
+ schedulerPool.setThreadNamePrefix("scheduling-pool");
+ return schedulerPool;
+ }
+}
diff --git a/SpringBoot-scheduling/src/main/java/com/ming/scheduling/schedule/TaskSchedule.java b/SpringBoot-scheduling/src/main/java/com/ming/scheduling/schedule/TaskSchedule.java
new file mode 100644
index 0000000..57f120d
--- /dev/null
+++ b/SpringBoot-scheduling/src/main/java/com/ming/scheduling/schedule/TaskSchedule.java
@@ -0,0 +1,48 @@
+package com.ming.scheduling.schedule;
+
+import org.springframework.scheduling.annotation.Scheduled;
+
+import java.util.Date;
+import java.util.concurrent.TimeUnit;
+
+/**
+ * @ClassName: TaskSchedule
+ * @Description: TODO
+ * @Author: ECRZ
+ * @Date: 2023/1/11
+ */
+
+public class TaskSchedule {
+ // 秒 分钟 小时 日期 月份 星期
+ /**
+ * @Description: 根据cron表达式执行
+ * @Author: ECRZ
+ * @Date: 2023/1/11
+ */
+ @Scheduled(cron = "0/5 * * * * ?")
+ public void task01(){
+ System.out.println("task 01 ,current date:" + new Date());
+ }
+
+ /**
+ * @Description: fixedRate 固定间隔后执行,在此期间即使是方法没有执行完,也会开始执行下一个定时任务
+ * @Author: ECRZ
+ * @Date: 2023/1/11
+ */
+ @Scheduled(fixedRate = 1000*1)
+ public void task02() throws InterruptedException {
+ TimeUnit.SECONDS.sleep(3);
+ System.out.println("task 02 ,current date:" + new Date());
+ }
+
+ /**
+ * @Description: fixedDelay 固定间隔后执行,在此期间定时任务会等待方法执行完,再执行下一个定时任务
+ * @Author: ECRZ
+ * @Date: 2023/1/11
+ */
+ @Scheduled(fixedDelay = 1000*1)
+ public void task03() throws InterruptedException {
+ TimeUnit.SECONDS.sleep(3);
+ System.out.println("task 03 ,current date:" + new Date());
+ }
+}
diff --git a/SpringBoot-scheduling/src/main/java/com/ming/scheduling/schedule/TaskScheduleThread.java b/SpringBoot-scheduling/src/main/java/com/ming/scheduling/schedule/TaskScheduleThread.java
new file mode 100644
index 0000000..17df6b3
--- /dev/null
+++ b/SpringBoot-scheduling/src/main/java/com/ming/scheduling/schedule/TaskScheduleThread.java
@@ -0,0 +1,28 @@
+package com.ming.scheduling.schedule;
+
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+/**
+ * @ClassName: TaskScheduleThread
+ * @Description: 任务调度线程池
+ * @Author: ECRZ
+ * @Date: 2023/1/11
+ */
+@Component
+public class TaskScheduleThread {
+ @Scheduled(cron = "0/5 * * * * ?")
+ public void task01Thread(){
+ System.out.println(Thread.currentThread().getName() + "-------> task01Thread");
+ }
+
+ @Scheduled(cron = "0/3 * * * * ?")
+ public void task02Thread(){
+ System.out.println(Thread.currentThread().getName() + "-------> task02Thread");
+ }
+
+ @Scheduled(cron = "0/3 * * * * ?")
+ public void task03Thread(){
+ System.out.println(Thread.currentThread().getName() + "-------> task03Thread");
+ }
+}
diff --git a/SpringBoot-scheduling/src/main/resources/application.yml b/SpringBoot-scheduling/src/main/resources/application.yml
new file mode 100644
index 0000000..84c6fb1
--- /dev/null
+++ b/SpringBoot-scheduling/src/main/resources/application.yml
@@ -0,0 +1,2 @@
+server:
+ port: 8888
\ No newline at end of file
diff --git a/SpringBoot-scheduling/target/classes/application.yml b/SpringBoot-scheduling/target/classes/application.yml
new file mode 100644
index 0000000..84c6fb1
--- /dev/null
+++ b/SpringBoot-scheduling/target/classes/application.yml
@@ -0,0 +1,2 @@
+server:
+ port: 8888
\ No newline at end of file
diff --git a/SpringBoot-shiro/pom.xml b/SpringBoot-shiro/pom.xml
new file mode 100644
index 0000000..368b5f9
--- /dev/null
+++ b/SpringBoot-shiro/pom.xml
@@ -0,0 +1,43 @@
+
+
+
+ SpringBoot-Integration
+ com.ming
+ 1.0-SNAPSHOT
+
+ 4.0.0
+
+ SpringBoot-shiro
+
+
+
+ mysql
+ mysql-connector-java
+
+
+
+
+ com.baomidou
+ mybatisplus-spring-boot-starter
+ ${mybatisplus-spring-boot-starter.version}
+
+
+
+ com.baomidou
+ mybatis-plus
+ ${mybatisplus.version}
+
+
+
+
+
+ org.apache.shiro
+ shiro-spring
+ 1.4.1
+
+
+
+
+
\ No newline at end of file
diff --git a/SpringBoot-shiro/src/main/java/com/ming/shiro/ShiroApplication.java b/SpringBoot-shiro/src/main/java/com/ming/shiro/ShiroApplication.java
new file mode 100644
index 0000000..2d5ec29
--- /dev/null
+++ b/SpringBoot-shiro/src/main/java/com/ming/shiro/ShiroApplication.java
@@ -0,0 +1,19 @@
+package com.ming.shiro;
+
+import org.mybatis.spring.annotation.MapperScan;
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+
+/**
+ * @ClassName: ShiroApplication
+ * @Description: TODO
+ * @Author: ECRZ
+ * @Date: 2022/12/28
+ */
+@SpringBootApplication
+@MapperScan("com.ming.shiro.dao")
+public class ShiroApplication {
+ public static void main(String[] args) {
+ SpringApplication.run(ShiroApplication.class);
+ }
+}
diff --git a/SpringBoot-shiro/src/main/java/com/ming/shiro/config/MybatisPlusConfig.java b/SpringBoot-shiro/src/main/java/com/ming/shiro/config/MybatisPlusConfig.java
new file mode 100644
index 0000000..7a6f9cd
--- /dev/null
+++ b/SpringBoot-shiro/src/main/java/com/ming/shiro/config/MybatisPlusConfig.java
@@ -0,0 +1,20 @@
+package com.ming.shiro.config;
+
+
+import com.baomidou.mybatisplus.plugins.PaginationInterceptor;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+/**
+ * @ClassName: MybatisPlusConfig
+ * @Description: MybatisPlus配置分页插件
+ * @Author: ECRZ
+ * @Date: 2022/12/28
+ */
+@Configuration
+public class MybatisPlusConfig{
+ @Bean
+ public PaginationInterceptor createPaginationInterceptor() {
+ return new PaginationInterceptor();
+ }
+}
diff --git a/SpringBoot-shiro/src/main/java/com/ming/shiro/config/ShiroConfig.java b/SpringBoot-shiro/src/main/java/com/ming/shiro/config/ShiroConfig.java
new file mode 100644
index 0000000..5546dcb
--- /dev/null
+++ b/SpringBoot-shiro/src/main/java/com/ming/shiro/config/ShiroConfig.java
@@ -0,0 +1,72 @@
+package com.ming.shiro.config;
+
+import org.apache.shiro.spring.web.ShiroFilterFactoryBean;
+import org.apache.shiro.web.mgt.DefaultWebSecurityManager;
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+import java.util.LinkedHashMap;
+import java.util.Map;
+
+/**
+ * @ClassName: ShiroConfig
+ * @Description: TODO
+ * @Author: ECRZ
+ * @Date: 2022/12/29
+ */
+@Configuration
+public class ShiroConfig {
+
+ /**
+ * 使用权限管理器创建过滤器
+ * @param securityManager
+ * @return
+ */
+ @Bean
+ public ShiroFilterFactoryBean getShiroFilterFactoryBean(@Qualifier("securityManager") DefaultWebSecurityManager securityManager) {
+ ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean();
+ //设置安全管理器
+ shiroFilterFactoryBean.setSecurityManager(securityManager);
+ /* 添加Shiro内置过滤器,常用的有如下过滤器:
+ anon: 无需认证就可以访问
+ authc: 必须认证才可以访问
+ user: 如果使用了记住我功能就可以直接访问
+ perms: 拥有某个资源权限才可以访问
+ role: 拥有某个角色权限才可以访问
+ */
+ Map filterMap = new LinkedHashMap();
+ // filterMap.put("/user/queryByName","authc");
+
+ // 普通用户接口
+ filterMap.put("/user/queryAllUser","perms[user:queryAllUser]");
+
+ // 管理员接口
+ filterMap.put("/user/queryByName","perms[admin:queryByName]");
+ shiroFilterFactoryBean.setFilterChainDefinitionMap(filterMap);
+
+ return shiroFilterFactoryBean;
+ }
+
+ /**
+ * 创建权限管理器
+ * @param userRealm
+ * @return
+ */
+ @Bean("securityManager")
+ public DefaultWebSecurityManager getDefaultWebSecurityManager(@Qualifier("shiroConfigUserRealm") ShiroConfigUserRealm userRealm) {
+ DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager();
+ //关联Realm
+ securityManager.setRealm(userRealm);
+ return securityManager;
+ }
+
+ /**
+ * 创建realm对象
+ * @return
+ */
+ @Bean("shiroConfigUserRealm")
+ public ShiroConfigUserRealm shiroConfigUserRealm() {
+ return new ShiroConfigUserRealm();
+ }
+}
diff --git a/SpringBoot-shiro/src/main/java/com/ming/shiro/config/ShiroConfigUserRealm.java b/SpringBoot-shiro/src/main/java/com/ming/shiro/config/ShiroConfigUserRealm.java
new file mode 100644
index 0000000..960304b
--- /dev/null
+++ b/SpringBoot-shiro/src/main/java/com/ming/shiro/config/ShiroConfigUserRealm.java
@@ -0,0 +1,66 @@
+package com.ming.shiro.config;
+
+import com.ming.shiro.pojo.User;
+import com.ming.shiro.pojo.UserPermission;
+import com.ming.shiro.service.UserPermissionService;
+import com.ming.shiro.service.UserService;
+import org.apache.shiro.SecurityUtils;
+import org.apache.shiro.authc.*;
+import org.apache.shiro.authz.AuthorizationInfo;
+import org.apache.shiro.authz.SimpleAuthorizationInfo;
+import org.apache.shiro.realm.AuthorizingRealm;
+import org.apache.shiro.subject.PrincipalCollection;
+import org.apache.shiro.subject.Subject;
+import org.springframework.beans.factory.annotation.Autowired;
+
+import java.util.Arrays;
+
+/**
+ * @ClassName: ShiroConfigUserRealm
+ * @Description: TODO
+ * @Author: ECRZ
+ * @Date: 2022/12/29
+ */
+
+public class ShiroConfigUserRealm extends AuthorizingRealm {
+ @Autowired
+ private UserService userService;
+
+ @Autowired
+ private UserPermissionService userPermissionService;
+
+ /**
+ * 执行授权逻辑
+ * @param principalCollection
+ * @return
+ */
+ @Override
+ protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) {
+ System.out.println("执行了=>授权逻辑PrincipalCollection");
+ SimpleAuthorizationInfo simpleAuthorizationInfo = new SimpleAuthorizationInfo();
+ Subject subject = SecurityUtils.getSubject();
+ User user = (User) subject.getPrincipal();
+ UserPermission permission = userPermissionService.getPermission(user.getUser_type());
+ String role_permission = permission.getRole_permission();
+ String[] permissionList = role_permission.split(",");
+ Arrays.stream(permissionList).forEach(s -> simpleAuthorizationInfo.addStringPermission(s));
+ return simpleAuthorizationInfo;
+ }
+
+ /**
+ * 执行认证逻辑
+ * @param authenticationToken
+ * @return
+ * @throws AuthenticationException
+ */
+ @Override
+ protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authenticationToken) throws AuthenticationException {
+ System.out.println("执行了=>认证逻辑AuthenticationToken");
+ UsernamePasswordToken token = (UsernamePasswordToken) authenticationToken;
+ User user = userService.queryByName(token.getUsername());
+ if (user == null) {
+ return null;
+ }
+ return new SimpleAuthenticationInfo(user, user.getUser_password(), "");
+ }
+}
diff --git a/SpringBoot-shiro/src/main/java/com/ming/shiro/controller/UserController.java b/SpringBoot-shiro/src/main/java/com/ming/shiro/controller/UserController.java
new file mode 100644
index 0000000..7f2a56b
--- /dev/null
+++ b/SpringBoot-shiro/src/main/java/com/ming/shiro/controller/UserController.java
@@ -0,0 +1,38 @@
+package com.ming.shiro.controller;
+
+import com.ming.shiro.pojo.User;
+import com.ming.shiro.service.UserService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * @ClassName: UserController
+ * @Description: TODO
+ * @Author: ECRZ
+ * @Date: 2022/12/28
+ */
+@RestController
+@RequestMapping("user")
+@CrossOrigin
+public class UserController {
+
+ @Autowired
+ private UserService userService;
+
+ @GetMapping("/queryByName")
+ public User queryById(String name){
+ return userService.queryByName(name);
+ }
+
+ @GetMapping("/queryAllUser")
+ public List queryAllUser(){
+ return userService.queryAllUser();
+ }
+
+ @GetMapping("/login")
+ public String login(String name,String password){
+ return userService.login(name,password);
+ }
+}
diff --git a/SpringBoot-shiro/src/main/java/com/ming/shiro/dao/UserDao.java b/SpringBoot-shiro/src/main/java/com/ming/shiro/dao/UserDao.java
new file mode 100644
index 0000000..6932c97
--- /dev/null
+++ b/SpringBoot-shiro/src/main/java/com/ming/shiro/dao/UserDao.java
@@ -0,0 +1,22 @@
+package com.ming.shiro.dao;
+
+import com.baomidou.mybatisplus.mapper.BaseMapper;
+import com.ming.shiro.pojo.User;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Select;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+
+/**
+ * @ClassName: UserDao
+ * @Description: TODO
+ * @Author: ECRZ
+ * @Date: 2022/12/29
+ */
+@Mapper
+@Repository
+public interface UserDao extends BaseMapper {
+ @Select("SELECT * FROM user")
+ List queryAllUser();
+}
diff --git a/SpringBoot-shiro/src/main/java/com/ming/shiro/dao/UserPermissionDao.java b/SpringBoot-shiro/src/main/java/com/ming/shiro/dao/UserPermissionDao.java
new file mode 100644
index 0000000..2619bec
--- /dev/null
+++ b/SpringBoot-shiro/src/main/java/com/ming/shiro/dao/UserPermissionDao.java
@@ -0,0 +1,11 @@
+package com.ming.shiro.dao;
+
+import com.baomidou.mybatisplus.mapper.BaseMapper;
+import com.ming.shiro.pojo.UserPermission;
+import org.apache.ibatis.annotations.Mapper;
+import org.springframework.stereotype.Repository;
+
+@Mapper
+@Repository
+public interface UserPermissionDao extends BaseMapper {
+}
diff --git a/SpringBoot-shiro/src/main/java/com/ming/shiro/pojo/User.java b/SpringBoot-shiro/src/main/java/com/ming/shiro/pojo/User.java
new file mode 100644
index 0000000..6ad3428
--- /dev/null
+++ b/SpringBoot-shiro/src/main/java/com/ming/shiro/pojo/User.java
@@ -0,0 +1,52 @@
+package com.ming.shiro.pojo;
+import com.baomidou.mybatisplus.annotations.TableName;
+
+/**
+ * @ClassName: User
+ * @Description: 创建实体类User,此处需要注意的是,bean的字段名称尽量和表字段一致
+ * @Author: ECRZ
+ * @Date: 2022/12/28
+ */
+@TableName("user")
+public class User {
+
+ private String user_id;
+
+ private String user_name;
+
+ private String user_password;
+
+ private String user_type;
+
+ public String getUser_id() {
+ return user_id;
+ }
+
+ public void setUser_id(String user_id) {
+ this.user_id = user_id;
+ }
+
+ public String getUser_name() {
+ return user_name;
+ }
+
+ public void setUser_name(String user_name) {
+ this.user_name = user_name;
+ }
+
+ public String getUser_password() {
+ return user_password;
+ }
+
+ public void setUser_password(String user_password) {
+ this.user_password = user_password;
+ }
+
+ public String getUser_type() {
+ return user_type;
+ }
+
+ public void setUser_type(String user_type) {
+ this.user_type = user_type;
+ }
+}
diff --git a/SpringBoot-shiro/src/main/java/com/ming/shiro/pojo/UserPermission.java b/SpringBoot-shiro/src/main/java/com/ming/shiro/pojo/UserPermission.java
new file mode 100644
index 0000000..84aaba7
--- /dev/null
+++ b/SpringBoot-shiro/src/main/java/com/ming/shiro/pojo/UserPermission.java
@@ -0,0 +1,31 @@
+package com.ming.shiro.pojo;
+
+import com.baomidou.mybatisplus.annotations.TableName;
+
+/**
+ * @ClassName: UserPermission
+ * @Description: TODO
+ * @Author: ECRZ
+ * @Date: 2022/12/29
+ */
+@TableName("user_permission")
+public class UserPermission {
+ private String role_type;
+ private String role_permission;
+
+ public String getRole_type() {
+ return role_type;
+ }
+
+ public void setRole_type(String role_type) {
+ this.role_type = role_type;
+ }
+
+ public String getRole_permission() {
+ return role_permission;
+ }
+
+ public void setRole_permission(String role_permission) {
+ this.role_permission = role_permission;
+ }
+}
diff --git a/SpringBoot-shiro/src/main/java/com/ming/shiro/service/UserPermissionService.java b/SpringBoot-shiro/src/main/java/com/ming/shiro/service/UserPermissionService.java
new file mode 100644
index 0000000..420356d
--- /dev/null
+++ b/SpringBoot-shiro/src/main/java/com/ming/shiro/service/UserPermissionService.java
@@ -0,0 +1,24 @@
+package com.ming.shiro.service;
+
+import com.ming.shiro.dao.UserPermissionDao;
+import com.ming.shiro.pojo.UserPermission;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+/**
+ * @ClassName: UserPermissionService
+ * @Description: TODO
+ * @Author: ECRZ
+ * @Date: 2022/12/29
+ */
+@Service
+public class UserPermissionService {
+ @Autowired
+ private UserPermissionDao userPermissionDao;
+
+ public UserPermission getPermission(String userType){
+ UserPermission userPermission = new UserPermission();
+ userPermission.setRole_type(userType);
+ return userPermissionDao.selectOne(userPermission);
+ }
+}
diff --git a/SpringBoot-shiro/src/main/java/com/ming/shiro/service/UserService.java b/SpringBoot-shiro/src/main/java/com/ming/shiro/service/UserService.java
new file mode 100644
index 0000000..bb4c484
--- /dev/null
+++ b/SpringBoot-shiro/src/main/java/com/ming/shiro/service/UserService.java
@@ -0,0 +1,49 @@
+package com.ming.shiro.service;
+
+import com.ming.shiro.dao.UserDao;
+import com.ming.shiro.pojo.User;
+import org.apache.shiro.SecurityUtils;
+import org.apache.shiro.authc.IncorrectCredentialsException;
+import org.apache.shiro.authc.UnknownAccountException;
+import org.apache.shiro.authc.UsernamePasswordToken;
+import org.apache.shiro.subject.Subject;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+
+/**
+ * @ClassName: UserService
+ * @Description: TODO
+ * @Author: ECRZ
+ * @Date: 2022/12/28
+ */
+@Service
+public class UserService {
+ @Autowired
+ private UserDao userDao;
+
+ public User queryByName(String name){
+ User user = new User();
+ user.setUser_name(name);
+ return userDao.selectOne(user);
+ }
+
+ public List queryAllUser(){
+ return userDao.queryAllUser();
+ }
+
+ public String login(String name,String password){
+ Subject subject = SecurityUtils.getSubject();
+ UsernamePasswordToken token = new UsernamePasswordToken(name, password);
+ try {
+ subject.login(token);
+ return "登陆成功";
+ }catch (UnknownAccountException e){
+ return "用户不存在";
+ }catch (IncorrectCredentialsException e){
+ return "密码错误";
+ }
+ }
+}
diff --git a/SpringBoot-shiro/src/main/resources/application.yml b/SpringBoot-shiro/src/main/resources/application.yml
new file mode 100644
index 0000000..234492a
--- /dev/null
+++ b/SpringBoot-shiro/src/main/resources/application.yml
@@ -0,0 +1,22 @@
+server:
+ port: 8888
+
+spring:
+ datasource:
+ driver-class-name: com.mysql.cj.jdbc.Driver
+ url: jdbc:mysql://localhost:3306/ssm_db?characterEncoding=utf-8&serverTimezone=GMT%2B8
+ username: root
+ password: MS1997..
+
+mybatis-plus:
+ typeAliasesPackage: com.ming.shiro.pojo
+ global-config:
+ id-type: 1 #0:数据库ID自增 1:用户输入id
+ db-column-underline: false
+ refresh-mapper: true
+ configuration:
+ map-underscore-to-camel-case: false #下划线转驼峰
+ cache-enabled: true #配置的缓存的全局开关
+ lazyLoadingEnabled: true #延时加载的开关
+ multipleResultSetsEnabled: true #开启延时加载,否则按需加载属性
+ log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #打印sql语句,调试用
\ No newline at end of file
diff --git a/SpringBoot-shiro/src/main/resources/user.sql b/SpringBoot-shiro/src/main/resources/user.sql
new file mode 100644
index 0000000..c645719
--- /dev/null
+++ b/SpringBoot-shiro/src/main/resources/user.sql
@@ -0,0 +1,46 @@
+/*
+ Navicat Premium Data Transfer
+
+ Source Server : Local-MySQL-5.7
+ Source Server Type : MySQL
+ Source Server Version : 50740 (5.7.40-log)
+ Source Host : localhost:3306
+ Source Schema : ssm_db
+
+ Target Server Type : MySQL
+ Target Server Version : 50740 (5.7.40-log)
+ File Encoding : 65001
+
+ Date: 29/12/2022 15:09:19
+*/
+
+SET NAMES utf8mb4;
+SET FOREIGN_KEY_CHECKS = 0;
+
+-- ----------------------------
+-- Table structure for user
+-- ----------------------------
+DROP TABLE IF EXISTS `user`;
+CREATE TABLE `user` (
+ `user_id` varchar(64) CHARACTER SET ascii COLLATE ascii_bin NOT NULL COMMENT '用户id',
+ `user_name` varchar(255) CHARACTER SET ascii COLLATE ascii_bin NULL DEFAULT NULL COMMENT '用户姓名',
+ `user_password` varchar(255) CHARACTER SET ascii COLLATE ascii_bin NULL DEFAULT NULL COMMENT '用户密码',
+ `user_type` int(1) NULL DEFAULT NULL COMMENT '用户类型:0:管理员,1:普通用户',
+ PRIMARY KEY (`user_id`) USING BTREE
+) ENGINE = InnoDB CHARACTER SET = ascii COLLATE = ascii_bin ROW_FORMAT = Dynamic;
+
+-- ----------------------------
+-- Records of user
+-- ----------------------------
+INSERT INTO `user` VALUES ('0fcbc970-a880-26e2-ac1f-89badc01eb86', 'Virginia Alvarez', 'WqADhvp2FR', 0);
+INSERT INTO `user` VALUES ('2da0428d-c1a9-9df3-2d50-6a54d6fe16fe', 'Debra Watson', 'ZEUGXOCAeY', 1);
+INSERT INTO `user` VALUES ('332302ab-29ad-d8b0-756b-479b9f79301f', 'Eva Fernandez', 'DLCLpcfoGp', 1);
+INSERT INTO `user` VALUES ('39d1008b-a480-5488-cd21-d77834b1789e', 'Debra Mills', 'm16xQwfEWf', 1);
+INSERT INTO `user` VALUES ('3e7583fd-ec79-e0a5-d325-45a957f89fa0', 'Kimberly Mendoza', 'Upqlahz4om', 0);
+INSERT INTO `user` VALUES ('7cf1317d-b2dd-6c18-1424-b01847d577d9', 'Shannon Coleman', 'r8lVj6Pckg', 1);
+INSERT INTO `user` VALUES ('83f85287-43d4-c422-676c-fbb29513579c', 'Patrick Gomez', 'Krp68aFABo', 1);
+INSERT INTO `user` VALUES ('86ed7b78-b6cd-fea4-1e61-b19af6af952c', 'Richard Powell', 'lZIXUYy5mB', 1);
+INSERT INTO `user` VALUES ('c1c8efa8-418d-4cfc-fd82-724956f0361c', 'Gerald Hunt', '0Vni8C87Qd', 0);
+INSERT INTO `user` VALUES ('e20fee34-c343-987c-7337-410fe05d97dd', 'Leslie Tran', 'k9Xap3A5Zv', 1);
+
+SET FOREIGN_KEY_CHECKS = 1;
diff --git a/SpringBoot-shiro/src/main/resources/user_permission.sql b/SpringBoot-shiro/src/main/resources/user_permission.sql
new file mode 100644
index 0000000..7548770
--- /dev/null
+++ b/SpringBoot-shiro/src/main/resources/user_permission.sql
@@ -0,0 +1,36 @@
+/*
+ Navicat Premium Data Transfer
+
+ Source Server : Local-MySQL-5.7
+ Source Server Type : MySQL
+ Source Server Version : 50740 (5.7.40-log)
+ Source Host : localhost:3306
+ Source Schema : ssm_db
+
+ Target Server Type : MySQL
+ Target Server Version : 50740 (5.7.40-log)
+ File Encoding : 65001
+
+ Date: 29/12/2022 15:09:26
+*/
+
+SET NAMES utf8mb4;
+SET FOREIGN_KEY_CHECKS = 0;
+
+-- ----------------------------
+-- Table structure for user_permission
+-- ----------------------------
+DROP TABLE IF EXISTS `user_permission`;
+CREATE TABLE `user_permission` (
+ `role_type` varchar(255) CHARACTER SET ascii COLLATE ascii_bin NOT NULL,
+ `role_permission` varchar(255) CHARACTER SET ascii COLLATE ascii_bin NULL DEFAULT NULL,
+ PRIMARY KEY (`role_type`) USING BTREE
+) ENGINE = InnoDB CHARACTER SET = ascii COLLATE = ascii_bin ROW_FORMAT = Dynamic;
+
+-- ----------------------------
+-- Records of user_permission
+-- ----------------------------
+INSERT INTO `user_permission` VALUES ('0', 'admin:queryByName,user:queryAllUser');
+INSERT INTO `user_permission` VALUES ('1', 'user:queryAllUser');
+
+SET FOREIGN_KEY_CHECKS = 1;
diff --git a/SpringBoot-shiro/target/classes/application.yml b/SpringBoot-shiro/target/classes/application.yml
new file mode 100644
index 0000000..234492a
--- /dev/null
+++ b/SpringBoot-shiro/target/classes/application.yml
@@ -0,0 +1,22 @@
+server:
+ port: 8888
+
+spring:
+ datasource:
+ driver-class-name: com.mysql.cj.jdbc.Driver
+ url: jdbc:mysql://localhost:3306/ssm_db?characterEncoding=utf-8&serverTimezone=GMT%2B8
+ username: root
+ password: MS1997..
+
+mybatis-plus:
+ typeAliasesPackage: com.ming.shiro.pojo
+ global-config:
+ id-type: 1 #0:数据库ID自增 1:用户输入id
+ db-column-underline: false
+ refresh-mapper: true
+ configuration:
+ map-underscore-to-camel-case: false #下划线转驼峰
+ cache-enabled: true #配置的缓存的全局开关
+ lazyLoadingEnabled: true #延时加载的开关
+ multipleResultSetsEnabled: true #开启延时加载,否则按需加载属性
+ log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #打印sql语句,调试用
\ No newline at end of file
diff --git a/SpringBoot-shiro/target/classes/user.sql b/SpringBoot-shiro/target/classes/user.sql
new file mode 100644
index 0000000..c645719
--- /dev/null
+++ b/SpringBoot-shiro/target/classes/user.sql
@@ -0,0 +1,46 @@
+/*
+ Navicat Premium Data Transfer
+
+ Source Server : Local-MySQL-5.7
+ Source Server Type : MySQL
+ Source Server Version : 50740 (5.7.40-log)
+ Source Host : localhost:3306
+ Source Schema : ssm_db
+
+ Target Server Type : MySQL
+ Target Server Version : 50740 (5.7.40-log)
+ File Encoding : 65001
+
+ Date: 29/12/2022 15:09:19
+*/
+
+SET NAMES utf8mb4;
+SET FOREIGN_KEY_CHECKS = 0;
+
+-- ----------------------------
+-- Table structure for user
+-- ----------------------------
+DROP TABLE IF EXISTS `user`;
+CREATE TABLE `user` (
+ `user_id` varchar(64) CHARACTER SET ascii COLLATE ascii_bin NOT NULL COMMENT '用户id',
+ `user_name` varchar(255) CHARACTER SET ascii COLLATE ascii_bin NULL DEFAULT NULL COMMENT '用户姓名',
+ `user_password` varchar(255) CHARACTER SET ascii COLLATE ascii_bin NULL DEFAULT NULL COMMENT '用户密码',
+ `user_type` int(1) NULL DEFAULT NULL COMMENT '用户类型:0:管理员,1:普通用户',
+ PRIMARY KEY (`user_id`) USING BTREE
+) ENGINE = InnoDB CHARACTER SET = ascii COLLATE = ascii_bin ROW_FORMAT = Dynamic;
+
+-- ----------------------------
+-- Records of user
+-- ----------------------------
+INSERT INTO `user` VALUES ('0fcbc970-a880-26e2-ac1f-89badc01eb86', 'Virginia Alvarez', 'WqADhvp2FR', 0);
+INSERT INTO `user` VALUES ('2da0428d-c1a9-9df3-2d50-6a54d6fe16fe', 'Debra Watson', 'ZEUGXOCAeY', 1);
+INSERT INTO `user` VALUES ('332302ab-29ad-d8b0-756b-479b9f79301f', 'Eva Fernandez', 'DLCLpcfoGp', 1);
+INSERT INTO `user` VALUES ('39d1008b-a480-5488-cd21-d77834b1789e', 'Debra Mills', 'm16xQwfEWf', 1);
+INSERT INTO `user` VALUES ('3e7583fd-ec79-e0a5-d325-45a957f89fa0', 'Kimberly Mendoza', 'Upqlahz4om', 0);
+INSERT INTO `user` VALUES ('7cf1317d-b2dd-6c18-1424-b01847d577d9', 'Shannon Coleman', 'r8lVj6Pckg', 1);
+INSERT INTO `user` VALUES ('83f85287-43d4-c422-676c-fbb29513579c', 'Patrick Gomez', 'Krp68aFABo', 1);
+INSERT INTO `user` VALUES ('86ed7b78-b6cd-fea4-1e61-b19af6af952c', 'Richard Powell', 'lZIXUYy5mB', 1);
+INSERT INTO `user` VALUES ('c1c8efa8-418d-4cfc-fd82-724956f0361c', 'Gerald Hunt', '0Vni8C87Qd', 0);
+INSERT INTO `user` VALUES ('e20fee34-c343-987c-7337-410fe05d97dd', 'Leslie Tran', 'k9Xap3A5Zv', 1);
+
+SET FOREIGN_KEY_CHECKS = 1;
diff --git a/SpringBoot-shiro/target/classes/user_permission.sql b/SpringBoot-shiro/target/classes/user_permission.sql
new file mode 100644
index 0000000..7548770
--- /dev/null
+++ b/SpringBoot-shiro/target/classes/user_permission.sql
@@ -0,0 +1,36 @@
+/*
+ Navicat Premium Data Transfer
+
+ Source Server : Local-MySQL-5.7
+ Source Server Type : MySQL
+ Source Server Version : 50740 (5.7.40-log)
+ Source Host : localhost:3306
+ Source Schema : ssm_db
+
+ Target Server Type : MySQL
+ Target Server Version : 50740 (5.7.40-log)
+ File Encoding : 65001
+
+ Date: 29/12/2022 15:09:26
+*/
+
+SET NAMES utf8mb4;
+SET FOREIGN_KEY_CHECKS = 0;
+
+-- ----------------------------
+-- Table structure for user_permission
+-- ----------------------------
+DROP TABLE IF EXISTS `user_permission`;
+CREATE TABLE `user_permission` (
+ `role_type` varchar(255) CHARACTER SET ascii COLLATE ascii_bin NOT NULL,
+ `role_permission` varchar(255) CHARACTER SET ascii COLLATE ascii_bin NULL DEFAULT NULL,
+ PRIMARY KEY (`role_type`) USING BTREE
+) ENGINE = InnoDB CHARACTER SET = ascii COLLATE = ascii_bin ROW_FORMAT = Dynamic;
+
+-- ----------------------------
+-- Records of user_permission
+-- ----------------------------
+INSERT INTO `user_permission` VALUES ('0', 'admin:queryByName,user:queryAllUser');
+INSERT INTO `user_permission` VALUES ('1', 'user:queryAllUser');
+
+SET FOREIGN_KEY_CHECKS = 1;
diff --git a/SpringBoot-slf4j/pom.xml b/SpringBoot-slf4j/pom.xml
new file mode 100644
index 0000000..16d156a
--- /dev/null
+++ b/SpringBoot-slf4j/pom.xml
@@ -0,0 +1,35 @@
+
+
+ 4.0.0
+
+ com.ming
+ SpringBoot-Integration
+ 1.0-SNAPSHOT
+
+
+ SpringBoot-slf4j
+
+
+ 8
+ 8
+ UTF-8
+
+
+
+
+ org.slf4j
+ slf4j-api
+ 2.0.5
+
+
+
+ org.slf4j
+ slf4j-log4j12
+ 2.0.6
+
+
+
+
+
\ No newline at end of file
diff --git a/SpringBoot-slf4j/src/main/java/com/ming/slf4j/Slf4jApplication.java b/SpringBoot-slf4j/src/main/java/com/ming/slf4j/Slf4jApplication.java
new file mode 100644
index 0000000..0c74778
--- /dev/null
+++ b/SpringBoot-slf4j/src/main/java/com/ming/slf4j/Slf4jApplication.java
@@ -0,0 +1,17 @@
+package com.ming.slf4j;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+
+/**
+ * @ClassName: Slf4jApplication
+ * @Description: TODO
+ * @Author: ECRZ
+ * @Date: 2023/1/10
+ */
+@SpringBootApplication
+public class Slf4jApplication {
+ public static void main(String[] args) {
+ SpringApplication.run(Slf4jApplication.class);
+ }
+}
diff --git a/SpringBoot-slf4j/src/main/java/com/ming/slf4j/controller/LogController.java b/SpringBoot-slf4j/src/main/java/com/ming/slf4j/controller/LogController.java
new file mode 100644
index 0000000..9201c72
--- /dev/null
+++ b/SpringBoot-slf4j/src/main/java/com/ming/slf4j/controller/LogController.java
@@ -0,0 +1,32 @@
+package com.ming.slf4j.controller;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * @ClassName: LogController
+ * @Description: TODO
+ * @Author: ECRZ
+ * @Date: 2023/1/10
+ */
+@RestController
+@RequestMapping("log")
+public class LogController {
+ private final static Logger logger = LoggerFactory.getLogger(LogController.class);
+ @RequestMapping("/testLog")
+ public String testLog() {
+ logger.debug("=====测试日志debug级别打印====");
+ logger.info("======测试日志info级别打印=====");
+ logger.error("=====测试日志error级别打印====");
+ logger.warn("======测试日志warn级别打印=====");
+
+ // 可以使用占位符打印出一些参数信息
+ String str1 = "blog.itcodai.com";
+ String str2 = "blog.csdn.net/eson_15";
+ logger.info("======这是用占位符输出的日志", str1, str2);
+
+ return "success";
+ }
+}
diff --git a/SpringBoot-slf4j/src/main/resources/application.yml b/SpringBoot-slf4j/src/main/resources/application.yml
new file mode 100644
index 0000000..9d8b0a2
--- /dev/null
+++ b/SpringBoot-slf4j/src/main/resources/application.yml
@@ -0,0 +1,3 @@
+server:
+ port: 8888
+
diff --git a/SpringBoot-slf4j/src/main/resources/log4j.properties b/SpringBoot-slf4j/src/main/resources/log4j.properties
new file mode 100644
index 0000000..4755d1c
--- /dev/null
+++ b/SpringBoot-slf4j/src/main/resources/log4j.properties
@@ -0,0 +1,37 @@
+log4j.rootLogger=info,error,info,warn,stdout,console
+# stdout????
+log4j.appender.stdout=org.apache.log4j.ConsoleAppender
+log4j.appender.stdout.Target=System.out
+log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
+log4j.appender.stdout.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss}-[%p:%X{traceID}]-(%C:%L) %m%n
+# warn????
+log4j.appender.warn=org.apache.log4j.DailyRollingFileAppender
+log4j.appender.tracking.Encoding=utf-8
+log4j.appender.warn.layout=org.apache.log4j.PatternLayout
+log4j.appender.warn.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss}-[%p]-(%C:%L) %m%n
+log4j.appender.warn.File=log/warn/warn
+log4j.appender.warn.DatePattern='.'yyyy-MM-dd-HH
+log4j.appender.warn.Threshold=WARN
+# error????
+log4j.appender.error=org.apache.log4j.DailyRollingFileAppender
+log4j.appender.error.layout=org.apache.log4j.PatternLayout
+log4j.appender.error.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss}-[%p]-(%C:%L) %m%n
+log4j.appender.error.File=log/error/error
+log4j.appender.error.DatePattern='.'yyyy-MM-dd-HH
+log4j.appender.error.Threshold=ERROR
+# info????
+log4j.appender.info=org.apache.log4j.DailyRollingFileAppender
+log4j.appender.info.layout=org.apache.log4j.PatternLayout
+log4j.appender.info.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss}-[%p:%X{traceID}]-(%C:%L) %m%n
+# ????????????????????
+log4j.appender.info.File=log/info/info
+# DailyRollingFileAppender ????????????????????????????info????????????lofo.yyyy-MM-dd-HH?????
+log4j.appender.info.DatePattern='.'yyyy-MM-dd-HH-mm
+log4j.appender.info.ImmediateFlush=true
+
+# Log4j?????????????OFF?FATAL?ERROR?WARN?INFO?DEBUG?ALL
+# ????????appender?Threshold?WARN????appender?????????WARN????WARN??????
+# ??????????
+# ??????Threshold???DEBUG???????FATAL?ERROR?WARN?INFO?DEBUG ?????
+
+
diff --git a/SpringBoot-slf4j/target/classes/application.yml b/SpringBoot-slf4j/target/classes/application.yml
new file mode 100644
index 0000000..9d8b0a2
--- /dev/null
+++ b/SpringBoot-slf4j/target/classes/application.yml
@@ -0,0 +1,3 @@
+server:
+ port: 8888
+
diff --git a/SpringBoot-slf4j/target/classes/log4j.properties b/SpringBoot-slf4j/target/classes/log4j.properties
new file mode 100644
index 0000000..1fb729d
--- /dev/null
+++ b/SpringBoot-slf4j/target/classes/log4j.properties
@@ -0,0 +1,38 @@
+log4j.rootLogger=info,error,info,warn,stdout,console
+# stdout????
+log4j.appender.stdout=org.apache.log4j.ConsoleAppender
+log4j.appender.stdout.Target=System.out
+log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
+log4j.appender.stdout.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss}-[%p:%X{traceID}]-(%C:%L) %m%n
+# warn????
+log4j.appender.warn=org.apache.log4j.DailyRollingFileAppender
+log4j.appender.tracking.Encoding=utf-8
+log4j.appender.warn.layout=org.apache.log4j.PatternLayout
+log4j.appender.warn.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss}-[%p]-(%C:%L) %m%n
+log4j.appender.warn.File=log/warn/warn
+log4j.appender.warn.DatePattern='.'yyyy-MM-dd-HH
+log4j.appender.warn.Threshold=WARN
+# error????
+log4j.appender.error=org.apache.log4j.DailyRollingFileAppender
+log4j.appender.error.layout=org.apache.log4j.PatternLayout
+log4j.appender.error.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss}-[%p]-(%C:%L) %m%n
+log4j.appender.error.File=log/error/error
+log4j.appender.error.DatePattern='.'yyyy-MM-dd-HH
+log4j.appender.error.Threshold=ERROR
+# info????
+log4j.appender.info=org.apache.log4j.DailyRollingFileAppender
+log4j.appender.info.layout=org.apache.log4j.PatternLayout
+log4j.appender.info.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss}-[%p:%X{traceID}]-(%C:%L) %m%n
+#????????????????????
+log4j.appender.info.File=log/info/info
+# DailyRollingFileAppender ????????????????????????????info????????????lofo.yyyy-MM-dd-HH?????
+log4j.appender.info.DatePattern='.'yyyy-MM-dd-HH-mm
+log4j.appender.info.ImmediateFlush=true
+
+#??????????
+log4j.appender.console = org.apache.log4j.ConsoleAppender
+log4j.appender.console.Target = System.out
+log4j.appender.console.Threshold=DEBUG
+log4j.appender.console.layout = org.apache.log4j.PatternLayout
+log4j.appender.console.layout.ConversionPattern=[%c]-%m%n
+
diff --git a/SpringBoot-swagger/pom.xml b/SpringBoot-swagger/pom.xml
new file mode 100644
index 0000000..8116c46
--- /dev/null
+++ b/SpringBoot-swagger/pom.xml
@@ -0,0 +1,29 @@
+
+
+
+ SpringBoot-Integration
+ com.ming
+ 1.0-SNAPSHOT
+
+ 4.0.0
+
+ SpringBoot-swagger
+
+
+ 8
+ 8
+
+
+
+
+
+ io.springfox
+ springfox-boot-starter
+ 3.0.0
+
+
+
+
+
\ No newline at end of file
diff --git a/SpringBoot-swagger/src/main/java/com/ming/swagger/SwaggerApplication.java b/SpringBoot-swagger/src/main/java/com/ming/swagger/SwaggerApplication.java
new file mode 100644
index 0000000..8716075
--- /dev/null
+++ b/SpringBoot-swagger/src/main/java/com/ming/swagger/SwaggerApplication.java
@@ -0,0 +1,20 @@
+package com.ming.swagger;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import springfox.documentation.oas.annotations.EnableOpenApi;
+
+
+/**
+ * @ClassName: SwaggerApplication
+ * @Description: TODO
+ * @Author: ECRZ
+ * @Date: 2022/12/30
+ */
+@SpringBootApplication
+@EnableOpenApi
+public class SwaggerApplication {
+ public static void main(String[] args) {
+ SpringApplication.run(SwaggerApplication.class);
+ }
+}
diff --git a/SpringBoot-swagger/src/main/java/com/ming/swagger/config/SwaggerConfig.java b/SpringBoot-swagger/src/main/java/com/ming/swagger/config/SwaggerConfig.java
new file mode 100644
index 0000000..286762d
--- /dev/null
+++ b/SpringBoot-swagger/src/main/java/com/ming/swagger/config/SwaggerConfig.java
@@ -0,0 +1,52 @@
+package com.ming.swagger.config;
+
+import io.swagger.annotations.ApiOperation;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.core.env.Environment;
+import org.springframework.core.env.Profiles;
+import springfox.documentation.builders.ApiInfoBuilder;
+import springfox.documentation.builders.PathSelectors;
+import springfox.documentation.builders.RequestHandlerSelectors;
+import springfox.documentation.oas.annotations.EnableOpenApi;
+import springfox.documentation.service.ApiInfo;
+import springfox.documentation.spi.DocumentationType;
+import springfox.documentation.spring.web.plugins.Docket;
+
+/**
+ * @ClassName: SwaggerConfig
+ * @Description: TODO
+ * @Author: ECRZ
+ * @Date: 2022/12/30
+ */
+@Configuration
+@EnableOpenApi
+public class SwaggerConfig {
+
+ @Bean
+ public Docket docket(Environment environment) {
+ // 配置swagger的docket的bean实例
+ Profiles profiles = Profiles.of("dev", "test");
+ // 通过environment.acceptsProfiles()判断是否指定的环境中,是,则为true
+ boolean flag = environment.acceptsProfiles(profiles);
+
+ return new Docket(DocumentationType.OAS_30)
+ .apiInfo(apiInfo())
+ .enable(flag)
+ .groupName("dev")
+ .select()
+ .apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class))
+ .paths(PathSelectors.any())
+ .build();
+ }
+
+ // swagger文档信息
+ public ApiInfo apiInfo() {
+ return new ApiInfoBuilder()
+ .title("ming swagger")
+ .description("用户接口文档")
+ .version("1.0")
+ .build();
+ }
+
+}
diff --git a/SpringBoot-swagger/src/main/java/com/ming/swagger/controller/UserController.java b/SpringBoot-swagger/src/main/java/com/ming/swagger/controller/UserController.java
new file mode 100644
index 0000000..a5bd72a
--- /dev/null
+++ b/SpringBoot-swagger/src/main/java/com/ming/swagger/controller/UserController.java
@@ -0,0 +1,38 @@
+package com.ming.swagger.controller;
+
+import com.ming.swagger.pojo.User;
+import com.ming.swagger.service.UserService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * @ClassName: UserController
+ * @Description: TODO
+ * @Author: ECRZ
+ * @Date: 2022/12/30
+ */
+@RestController
+@RequestMapping("user")
+@Api(value = "用户接口")
+public class UserController {
+ @Autowired
+ private UserService userService;
+
+ @ApiOperation(value = "查询所有用户",notes = "查询所有的用户信息")
+ @GetMapping("/queryAllUser")
+ public String queryAllUser(){
+ return userService.queryAllUser();
+ }
+
+ @ApiOperation(value = "新增用户",notes = "参数为用户实体")
+ @PostMapping ("/addUser")
+ public int addUser(@ApiParam(value = "") User user){
+ return userService.addUser(user);
+ }
+}
diff --git a/SpringBoot-swagger/src/main/java/com/ming/swagger/pojo/User.java b/SpringBoot-swagger/src/main/java/com/ming/swagger/pojo/User.java
new file mode 100644
index 0000000..574cbff
--- /dev/null
+++ b/SpringBoot-swagger/src/main/java/com/ming/swagger/pojo/User.java
@@ -0,0 +1,42 @@
+package com.ming.swagger.pojo;
+
+import io.swagger.annotations.ApiParam;
+
+/**
+ * @ClassName: User
+ * @Description: TODO
+ * @Author: ECRZ
+ * @Date: 2022/12/30
+ */
+public class User {
+ @ApiParam(value = "用户id")
+ private String id;
+ @ApiParam(value = "用户姓名")
+ private String name;
+ @ApiParam(value = "用户密码")
+ private String password;
+
+ public String getId() {
+ return id;
+ }
+
+ public void setId(String id) {
+ this.id = id;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public String getPassword() {
+ return password;
+ }
+
+ public void setPassword(String password) {
+ this.password = password;
+ }
+}
diff --git a/SpringBoot-swagger/src/main/java/com/ming/swagger/service/UserService.java b/SpringBoot-swagger/src/main/java/com/ming/swagger/service/UserService.java
new file mode 100644
index 0000000..da57388
--- /dev/null
+++ b/SpringBoot-swagger/src/main/java/com/ming/swagger/service/UserService.java
@@ -0,0 +1,21 @@
+package com.ming.swagger.service;
+
+import com.ming.swagger.pojo.User;
+import org.springframework.stereotype.Service;
+
+/**
+ * @ClassName: UserService
+ * @Description: TODO
+ * @Author: ECRZ
+ * @Date: 2022/12/30
+ */
+@Service
+public class UserService {
+ public String queryAllUser() {
+ return "query success!";
+ }
+
+ public int addUser(User user) {
+ return 1;
+ }
+}
diff --git a/SpringBoot-swagger/src/main/resources/application-dev.yml b/SpringBoot-swagger/src/main/resources/application-dev.yml
new file mode 100644
index 0000000..84aef9c
--- /dev/null
+++ b/SpringBoot-swagger/src/main/resources/application-dev.yml
@@ -0,0 +1,6 @@
+server:
+ port: 8888
+spring:
+ mvc:
+ pathmatch:
+ matching-strategy: ant_path_matcher
diff --git a/SpringBoot-swagger/src/main/resources/application.yml b/SpringBoot-swagger/src/main/resources/application.yml
new file mode 100644
index 0000000..caf4dfc
--- /dev/null
+++ b/SpringBoot-swagger/src/main/resources/application.yml
@@ -0,0 +1,3 @@
+spring:
+ profiles:
+ active: dev
\ No newline at end of file
diff --git a/SpringBoot-swagger/target/classes/application-dev.yml b/SpringBoot-swagger/target/classes/application-dev.yml
new file mode 100644
index 0000000..84aef9c
--- /dev/null
+++ b/SpringBoot-swagger/target/classes/application-dev.yml
@@ -0,0 +1,6 @@
+server:
+ port: 8888
+spring:
+ mvc:
+ pathmatch:
+ matching-strategy: ant_path_matcher
diff --git a/SpringBoot-swagger/target/classes/application.yml b/SpringBoot-swagger/target/classes/application.yml
new file mode 100644
index 0000000..caf4dfc
--- /dev/null
+++ b/SpringBoot-swagger/target/classes/application.yml
@@ -0,0 +1,3 @@
+spring:
+ profiles:
+ active: dev
\ No newline at end of file
diff --git a/SpringBoot-threadPool/pom.xml b/SpringBoot-threadPool/pom.xml
new file mode 100644
index 0000000..2f85c9b
--- /dev/null
+++ b/SpringBoot-threadPool/pom.xml
@@ -0,0 +1,20 @@
+
+
+ 4.0.0
+
+ com.ming
+ SpringBoot-Integration
+ 1.0-SNAPSHOT
+
+
+ SpringBoot-threadPool
+
+
+ 8
+ 8
+ UTF-8
+
+
+
\ No newline at end of file
diff --git a/SpringBoot-threadPool/src/main/java/com/ming/threadPool/ThreadPoolApplication.java b/SpringBoot-threadPool/src/main/java/com/ming/threadPool/ThreadPoolApplication.java
new file mode 100644
index 0000000..8939f46
--- /dev/null
+++ b/SpringBoot-threadPool/src/main/java/com/ming/threadPool/ThreadPoolApplication.java
@@ -0,0 +1,18 @@
+package com.ming.threadPool;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+
+/**
+ * @ClassName: ThreadPoolApplication
+ * @Description: SpringBoot 线程池引用
+ * @Author: ECRZ
+ * @Date: 2023/1/11
+ * @Notes: TODO
+ */
+@SpringBootApplication
+public class ThreadPoolApplication {
+ public static void main(String[] args) {
+ SpringApplication.run(ThreadPoolApplication.class);
+ }
+}
diff --git a/SpringBoot-threadPool/src/main/java/com/ming/threadPool/config/ThreadPoolConfig.java b/SpringBoot-threadPool/src/main/java/com/ming/threadPool/config/ThreadPoolConfig.java
new file mode 100644
index 0000000..778a02a
--- /dev/null
+++ b/SpringBoot-threadPool/src/main/java/com/ming/threadPool/config/ThreadPoolConfig.java
@@ -0,0 +1,93 @@
+package com.ming.threadPool.config;
+
+import lombok.Data;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
+
+import java.util.concurrent.ThreadPoolExecutor;
+
+/**
+ * @ClassName: ThreadPoolConfig
+ * @Description: TODO
+ * @Author: ECRZ
+ * @Date: 2023/1/11
+ * @Notes: TODO
+ */
+@Configuration
+public class ThreadPoolConfig {
+
+ ThreadPoolProperties properties = new ThreadPoolProperties();
+ @Bean(name = "taskExecutor")
+ public ThreadPoolTaskExecutor taskExecutor() {
+ ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
+ executor.setCorePoolSize(properties.getCorePoolSize());
+ executor.setMaxPoolSize(properties.getMaxPoolSize());
+ executor.setQueueCapacity(properties.getQueueCapacity());
+ executor.setThreadNamePrefix(properties.getThreadNamePrefix());
+ // 设置线程保持活跃的时间(默认:60)
+ executor.setKeepAliveSeconds(properties.getKeepAliveTime());
+ // 当任务完成后,长时间无待处理任务时,销毁线程池
+ executor.setWaitForTasksToCompleteOnShutdown(properties.isWaitForTasksToCompleteOnShutdown());
+ executor.setAwaitTerminationSeconds(properties.getAwaitTerminationSeconds());
+ // 设置任务拒绝策略
+ /**
+ * 4种
+ * ThreadPoolExecutor类有几个内部实现类来处理这类情况:
+ - AbortPolicy 丢弃任务,抛RejectedExecutionException
+ - CallerRunsPolicy 由该线程调用线程运行。直接调用Runnable的run方法运行。
+ - DiscardPolicy 抛弃策略,直接丢弃这个新提交的任务
+ - DiscardOldestPolicy 抛弃旧任务策略,从队列中踢出最先进入队列(最后一个执行)的任务
+ * 实现RejectedExecutionHandler接口,可自定义处理器
+ */
+ executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
+ return executor;
+ }
+
+
+ @Data
+ class ThreadPoolProperties {
+
+ /**
+ * 核心线程数(默认是1):若是IO密集型,cpu核心数*2,若是cpu密集型,cpu核心数
+ * 核心线程会一直存活,及时没有任务需要执行
+ * 设置allowCoreThreadTimeout=true(默认false)时,核心线程会超时关闭
+ * 注意:当线程数小于核心线程数时,即使有线程空闲,线程池也会优先创建新线程处理
+ */
+ private int corePoolSize = 8;
+ /**
+ * 最大线程数,系统默认Integer.MAX_VALUE
+ */
+ private int maxPoolSize = 20;
+ /**
+ * 允许线程空闲时间(单位:默认为秒,默认60S)
+ * 当线程空闲时间达到keepAliveTime时,线程会退出,直到线程数量=corePoolSize
+ * 如果allowCoreThreadTimeout=true,则会直到线程数量=0
+ */
+ private int keepAliveTime;
+ /**
+ * 缓冲队列大小,系统默认Integer.MAX_VALUE
+ * 注意:这个值肯定要改小,不然任务陡增时,都堆在队列中(队列值大),
+ * 核心线程数就那几个,无法很快执行队列中的任务,
+ * 就会延长响应时间,阻塞任务
+ */
+ private int queueCapacity = 6;
+ /**
+ * 线程池名前缀,用于监控识别
+ */
+ private String threadNamePrefix = "thread-";
+
+ /**
+ * 允许核心线程超时(默认false)
+ */
+ private boolean allowCoreThreadTimeout = false;
+
+ /**
+ * 当任务完成后,长时间无待处理任务时,销毁线程池
+ */
+ private boolean waitForTasksToCompleteOnShutdown = false;
+
+ private int awaitTerminationSeconds;
+
+ }
+}
diff --git a/SpringBoot-threadPool/src/main/java/com/ming/threadPool/controller/ThreadPoolController.java b/SpringBoot-threadPool/src/main/java/com/ming/threadPool/controller/ThreadPoolController.java
new file mode 100644
index 0000000..75cdcbe
--- /dev/null
+++ b/SpringBoot-threadPool/src/main/java/com/ming/threadPool/controller/ThreadPoolController.java
@@ -0,0 +1,30 @@
+package com.ming.threadPool.controller;
+
+import com.ming.threadPool.service.ThreadPoolService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * @ClassName: ThreadPoolController
+ * @Description: TODO
+ * @Author: ECRZ
+ * @Date: 2023/1/11
+ * @Notes: TODO
+ */
+@RestController
+@RequestMapping("thread")
+public class ThreadPoolController {
+ @Autowired
+ private ThreadPoolService threadPoolService;
+ @GetMapping("/testThread")
+ public String testThread() throws InterruptedException {
+ return threadPoolService.thread01();
+ }
+
+ @GetMapping("/singleThread")
+ public String singleThread() throws InterruptedException {
+ return threadPoolService.singleThread();
+ }
+}
diff --git a/SpringBoot-threadPool/src/main/java/com/ming/threadPool/service/ThreadPoolService.java b/SpringBoot-threadPool/src/main/java/com/ming/threadPool/service/ThreadPoolService.java
new file mode 100644
index 0000000..f7b42e2
--- /dev/null
+++ b/SpringBoot-threadPool/src/main/java/com/ming/threadPool/service/ThreadPoolService.java
@@ -0,0 +1,31 @@
+package com.ming.threadPool.service;
+
+import org.springframework.scheduling.annotation.Async;
+import org.springframework.scheduling.annotation.EnableAsync;
+import org.springframework.stereotype.Service;
+
+import java.util.Date;
+import java.util.concurrent.TimeUnit;
+
+/**
+ * @ClassName: ThreadPoolService
+ * @Description: TODO
+ * @Author: ECRZ
+ * @Date: 2023/1/11
+ * @Notes: TODO
+ */
+@Service
+@EnableAsync
+public class ThreadPoolService{
+ @Async("taskExecutor")
+ public String thread01() throws InterruptedException {
+ TimeUnit.SECONDS.sleep(1);
+ // System.out.println("current time:" + new Date() + ",thread name:" +Thread.currentThread().getName());
+ return "current time:" + new Date() + ",thread name:" +Thread.currentThread().getName();
+ }
+
+ public String singleThread() throws InterruptedException {
+ TimeUnit.SECONDS.sleep(1);
+ return "current time:" + new Date() + ",thread name:" +Thread.currentThread().getName();
+ }
+}
diff --git a/SpringBoot-threadPool/src/main/resources/application.yml b/SpringBoot-threadPool/src/main/resources/application.yml
new file mode 100644
index 0000000..84c6fb1
--- /dev/null
+++ b/SpringBoot-threadPool/src/main/resources/application.yml
@@ -0,0 +1,2 @@
+server:
+ port: 8888
\ No newline at end of file
diff --git a/SpringBoot-threadPool/src/test/java/DataTest.java b/SpringBoot-threadPool/src/test/java/DataTest.java
new file mode 100644
index 0000000..1189a06
--- /dev/null
+++ b/SpringBoot-threadPool/src/test/java/DataTest.java
@@ -0,0 +1,18 @@
+import org.junit.jupiter.api.Test;
+
+import java.util.Date;
+
+/**
+ * @ClassName: DataTest
+ * @Description: TODO
+ * @Author: ECRZ
+ * @Date: 2023/1/11
+ * @Notes: TODO
+ */
+public class DataTest {
+ @Test
+ public void test(){
+
+ System.out.println(new Date());
+ }
+}
diff --git a/SpringBoot-threadPool/target/classes/application.yml b/SpringBoot-threadPool/target/classes/application.yml
new file mode 100644
index 0000000..84c6fb1
--- /dev/null
+++ b/SpringBoot-threadPool/target/classes/application.yml
@@ -0,0 +1,2 @@
+server:
+ port: 8888
\ No newline at end of file
diff --git a/log/error/error b/log/error/error
new file mode 100644
index 0000000..36e1464
--- /dev/null
+++ b/log/error/error
@@ -0,0 +1,4 @@
+2023-01-10 16:33:47-[ERROR]-(com.ming.slf4j.controller.LogController:22) =====测试日志error级别打印====
+2023-01-10 16:50:10-[ERROR]-(com.ming.slf4j.controller.LogController:22) =====测试日志error级别打印====
+2023-01-10 16:53:16-[ERROR]-(com.ming.slf4j.controller.LogController:22) =====测试日志error级别打印====
+2023-01-10 16:54:27-[ERROR]-(com.ming.slf4j.controller.LogController:22) =====测试日志error级别打印====
diff --git a/log/info/info b/log/info/info
new file mode 100644
index 0000000..498b78b
--- /dev/null
+++ b/log/info/info
@@ -0,0 +1,7 @@
+2023-01-10 16:54:27-[INFO:]-(org.apache.juli.logging.DirectJDKLog:173) Initializing Spring DispatcherServlet 'dispatcherServlet'
+2023-01-10 16:54:27-[INFO:]-(org.springframework.web.servlet.FrameworkServlet:525) Initializing Servlet 'dispatcherServlet'
+2023-01-10 16:54:27-[INFO:]-(org.springframework.web.servlet.FrameworkServlet:547) Completed initialization in 1 ms
+2023-01-10 16:54:27-[INFO:]-(com.ming.slf4j.controller.LogController:21) ======测试日志info级别打印=====
+2023-01-10 16:54:27-[ERROR:]-(com.ming.slf4j.controller.LogController:22) =====测试日志error级别打印====
+2023-01-10 16:54:27-[WARN:]-(com.ming.slf4j.controller.LogController:23) ======测试日志warn级别打印=====
+2023-01-10 16:54:27-[INFO:]-(com.ming.slf4j.controller.LogController:28) ======这是用占位符输出的日志
diff --git a/log/info/info.2023-01-10-16-33 b/log/info/info.2023-01-10-16-33
new file mode 100644
index 0000000..5e5dc3a
--- /dev/null
+++ b/log/info/info.2023-01-10-16-33
@@ -0,0 +1,16 @@
+2023-01-10 16:33:26-[INFO:]-(org.springframework.boot.StartupInfoLogger:55) Starting Slf4jApplication using Java 1.8.0_221 on DESKTOP-IOI4DOA with PID 32704 (D:\ECRZ\Project\Java\SpringBoot-Integration\SpringBoot-slf4j\target\classes started by 86943 in D:\ECRZ\Project\Java\SpringBoot-Integration)
+2023-01-10 16:33:26-[INFO:]-(org.springframework.boot.SpringApplication:634) No active profile set, falling back to 1 default profile: "default"
+2023-01-10 16:33:27-[INFO:]-(org.springframework.boot.web.embedded.tomcat.TomcatWebServer:108) Tomcat initialized with port(s): 8888 (http)
+2023-01-10 16:33:27-[INFO:]-(org.apache.juli.logging.DirectJDKLog:173) Starting service [Tomcat]
+2023-01-10 16:33:27-[INFO:]-(org.apache.juli.logging.DirectJDKLog:173) Starting Servlet engine: [Apache Tomcat/9.0.64]
+2023-01-10 16:33:27-[INFO:]-(org.apache.juli.logging.DirectJDKLog:173) Initializing Spring embedded WebApplicationContext
+2023-01-10 16:33:27-[INFO:]-(org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext:292) Root WebApplicationContext: initialization completed in 866 ms
+2023-01-10 16:33:27-[INFO:]-(org.springframework.boot.web.embedded.tomcat.TomcatWebServer:220) Tomcat started on port(s): 8888 (http) with context path ''
+2023-01-10 16:33:27-[INFO:]-(org.springframework.boot.StartupInfoLogger:61) Started Slf4jApplication in 1.626 seconds (JVM running for 2.828)
+2023-01-10 16:33:47-[INFO:]-(org.apache.juli.logging.DirectJDKLog:173) Initializing Spring DispatcherServlet 'dispatcherServlet'
+2023-01-10 16:33:47-[INFO:]-(org.springframework.web.servlet.FrameworkServlet:525) Initializing Servlet 'dispatcherServlet'
+2023-01-10 16:33:47-[INFO:]-(org.springframework.web.servlet.FrameworkServlet:547) Completed initialization in 1 ms
+2023-01-10 16:33:47-[INFO:]-(com.ming.slf4j.controller.LogController:21) ======测试日志info级别打印=====
+2023-01-10 16:33:47-[ERROR:]-(com.ming.slf4j.controller.LogController:22) =====测试日志error级别打印====
+2023-01-10 16:33:47-[WARN:]-(com.ming.slf4j.controller.LogController:23) ======测试日志warn级别打印=====
+2023-01-10 16:33:47-[INFO:]-(com.ming.slf4j.controller.LogController:28) ======这是用占位符输出的日志
diff --git a/log/info/info.2023-01-10-16-42 b/log/info/info.2023-01-10-16-42
new file mode 100644
index 0000000..c6e8da8
--- /dev/null
+++ b/log/info/info.2023-01-10-16-42
@@ -0,0 +1,9 @@
+2023-01-10 16:42:24-[INFO:]-(org.springframework.boot.StartupInfoLogger:55) Starting Slf4jApplication using Java 1.8.0_221 on DESKTOP-IOI4DOA with PID 55472 (D:\ECRZ\Project\Java\SpringBoot-Integration\SpringBoot-slf4j\target\classes started by 86943 in D:\ECRZ\Project\Java\SpringBoot-Integration)
+2023-01-10 16:42:24-[INFO:]-(org.springframework.boot.SpringApplication:634) No active profile set, falling back to 1 default profile: "default"
+2023-01-10 16:42:24-[INFO:]-(org.springframework.boot.web.embedded.tomcat.TomcatWebServer:108) Tomcat initialized with port(s): 8888 (http)
+2023-01-10 16:42:24-[INFO:]-(org.apache.juli.logging.DirectJDKLog:173) Starting service [Tomcat]
+2023-01-10 16:42:24-[INFO:]-(org.apache.juli.logging.DirectJDKLog:173) Starting Servlet engine: [Apache Tomcat/9.0.64]
+2023-01-10 16:42:25-[INFO:]-(org.apache.juli.logging.DirectJDKLog:173) Initializing Spring embedded WebApplicationContext
+2023-01-10 16:42:25-[INFO:]-(org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext:292) Root WebApplicationContext: initialization completed in 864 ms
+2023-01-10 16:42:25-[INFO:]-(org.springframework.boot.web.embedded.tomcat.TomcatWebServer:220) Tomcat started on port(s): 8888 (http) with context path ''
+2023-01-10 16:42:25-[INFO:]-(org.springframework.boot.StartupInfoLogger:61) Started Slf4jApplication in 1.611 seconds (JVM running for 2.857)
diff --git a/log/info/info.2023-01-10-16-50 b/log/info/info.2023-01-10-16-50
new file mode 100644
index 0000000..0d6ea2a
--- /dev/null
+++ b/log/info/info.2023-01-10-16-50
@@ -0,0 +1,16 @@
+2023-01-10 16:50:02-[INFO:]-(org.springframework.boot.StartupInfoLogger:55) Starting Slf4jApplication using Java 1.8.0_221 on DESKTOP-IOI4DOA with PID 41544 (D:\ECRZ\Project\Java\SpringBoot-Integration\SpringBoot-slf4j\target\classes started by 86943 in D:\ECRZ\Project\Java\SpringBoot-Integration)
+2023-01-10 16:50:02-[INFO:]-(org.springframework.boot.SpringApplication:634) No active profile set, falling back to 1 default profile: "default"
+2023-01-10 16:50:03-[INFO:]-(org.springframework.boot.web.embedded.tomcat.TomcatWebServer:108) Tomcat initialized with port(s): 8888 (http)
+2023-01-10 16:50:03-[INFO:]-(org.apache.juli.logging.DirectJDKLog:173) Starting service [Tomcat]
+2023-01-10 16:50:03-[INFO:]-(org.apache.juli.logging.DirectJDKLog:173) Starting Servlet engine: [Apache Tomcat/9.0.64]
+2023-01-10 16:50:03-[INFO:]-(org.apache.juli.logging.DirectJDKLog:173) Initializing Spring embedded WebApplicationContext
+2023-01-10 16:50:03-[INFO:]-(org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext:292) Root WebApplicationContext: initialization completed in 880 ms
+2023-01-10 16:50:03-[INFO:]-(org.springframework.boot.web.embedded.tomcat.TomcatWebServer:220) Tomcat started on port(s): 8888 (http) with context path ''
+2023-01-10 16:50:03-[INFO:]-(org.springframework.boot.StartupInfoLogger:61) Started Slf4jApplication in 1.598 seconds (JVM running for 2.739)
+2023-01-10 16:50:10-[INFO:]-(org.apache.juli.logging.DirectJDKLog:173) Initializing Spring DispatcherServlet 'dispatcherServlet'
+2023-01-10 16:50:10-[INFO:]-(org.springframework.web.servlet.FrameworkServlet:525) Initializing Servlet 'dispatcherServlet'
+2023-01-10 16:50:10-[INFO:]-(org.springframework.web.servlet.FrameworkServlet:547) Completed initialization in 0 ms
+2023-01-10 16:50:10-[INFO:]-(com.ming.slf4j.controller.LogController:21) ======测试日志info级别打印=====
+2023-01-10 16:50:10-[ERROR:]-(com.ming.slf4j.controller.LogController:22) =====测试日志error级别打印====
+2023-01-10 16:50:10-[WARN:]-(com.ming.slf4j.controller.LogController:23) ======测试日志warn级别打印=====
+2023-01-10 16:50:10-[INFO:]-(com.ming.slf4j.controller.LogController:28) ======这是用占位符输出的日志
diff --git a/log/info/info.2023-01-10-16-53 b/log/info/info.2023-01-10-16-53
new file mode 100644
index 0000000..90ed569
--- /dev/null
+++ b/log/info/info.2023-01-10-16-53
@@ -0,0 +1,13 @@
+2023-01-10 16:53:16-[INFO:]-(com.ming.slf4j.controller.LogController:21) ======测试日志info级别打印=====
+2023-01-10 16:53:16-[ERROR:]-(com.ming.slf4j.controller.LogController:22) =====测试日志error级别打印====
+2023-01-10 16:53:16-[WARN:]-(com.ming.slf4j.controller.LogController:23) ======测试日志warn级别打印=====
+2023-01-10 16:53:16-[INFO:]-(com.ming.slf4j.controller.LogController:28) ======这是用占位符输出的日志
+2023-01-10 16:53:34-[INFO:]-(org.springframework.boot.StartupInfoLogger:55) Starting Slf4jApplication using Java 1.8.0_221 on DESKTOP-IOI4DOA with PID 54856 (D:\ECRZ\Project\Java\SpringBoot-Integration\SpringBoot-slf4j\target\classes started by 86943 in D:\ECRZ\Project\Java\SpringBoot-Integration)
+2023-01-10 16:53:34-[INFO:]-(org.springframework.boot.SpringApplication:634) No active profile set, falling back to 1 default profile: "default"
+2023-01-10 16:53:35-[INFO:]-(org.springframework.boot.web.embedded.tomcat.TomcatWebServer:108) Tomcat initialized with port(s): 8888 (http)
+2023-01-10 16:53:35-[INFO:]-(org.apache.juli.logging.DirectJDKLog:173) Starting service [Tomcat]
+2023-01-10 16:53:35-[INFO:]-(org.apache.juli.logging.DirectJDKLog:173) Starting Servlet engine: [Apache Tomcat/9.0.64]
+2023-01-10 16:53:35-[INFO:]-(org.apache.juli.logging.DirectJDKLog:173) Initializing Spring embedded WebApplicationContext
+2023-01-10 16:53:35-[INFO:]-(org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext:292) Root WebApplicationContext: initialization completed in 838 ms
+2023-01-10 16:53:36-[INFO:]-(org.springframework.boot.web.embedded.tomcat.TomcatWebServer:220) Tomcat started on port(s): 8888 (http) with context path ''
+2023-01-10 16:53:36-[INFO:]-(org.springframework.boot.StartupInfoLogger:61) Started Slf4jApplication in 1.593 seconds (JVM running for 3.026)
diff --git a/log/warn/warn b/log/warn/warn
new file mode 100644
index 0000000..5941c39
--- /dev/null
+++ b/log/warn/warn
@@ -0,0 +1,8 @@
+2023-01-10 16:33:47-[ERROR]-(com.ming.slf4j.controller.LogController:22) =====测试日志error级别打印====
+2023-01-10 16:33:47-[WARN]-(com.ming.slf4j.controller.LogController:23) ======测试日志warn级别打印=====
+2023-01-10 16:50:10-[ERROR]-(com.ming.slf4j.controller.LogController:22) =====测试日志error级别打印====
+2023-01-10 16:50:10-[WARN]-(com.ming.slf4j.controller.LogController:23) ======测试日志warn级别打印=====
+2023-01-10 16:53:16-[ERROR]-(com.ming.slf4j.controller.LogController:22) =====测试日志error级别打印====
+2023-01-10 16:53:16-[WARN]-(com.ming.slf4j.controller.LogController:23) ======测试日志warn级别打印=====
+2023-01-10 16:54:27-[ERROR]-(com.ming.slf4j.controller.LogController:22) =====测试日志error级别打印====
+2023-01-10 16:54:27-[WARN]-(com.ming.slf4j.controller.LogController:23) ======测试日志warn级别打印=====
diff --git a/pom.xml b/pom.xml
new file mode 100644
index 0000000..3104a04
--- /dev/null
+++ b/pom.xml
@@ -0,0 +1,59 @@
+
+
+ 4.0.0
+
+ com.ming
+ SpringBoot-Integration
+ pom
+ 1.0-SNAPSHOT
+
+ SpringBoot-shiro
+ SpringBoot-swagger
+ SpringBoot-aop
+ SpringBoot-easyExcel
+ SpringBoot-slf4j
+ SpringBoot-jwt
+ SpringBoot-scheduling
+ SpringBoot-threadPool
+
+
+
+ org.springframework.boot
+ spring-boot-starter-parent
+ 2.7.1
+
+
+
+
+
+ UTF-8
+ UTF-8
+ 1.8
+ 1.8
+ 1.8
+ 1.0.5
+ 2.2.0
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+
+
+
+ org.springframework.boot
+ spring-boot-starter-test
+ test
+
+
+
+ org.projectlombok
+ lombok
+ 1.18.24
+
+
+
+
\ No newline at end of file