From 0ac21c60aacbacfbc957ca278e757fcbc4f35405 Mon Sep 17 00:00:00 2001 From: "ming.mu" Date: Thu, 9 Mar 2023 20:16:37 +0800 Subject: [PATCH] Init --- README.md | 34 ++++++- SpringBoot-aop/pom.xml | 27 ++++++ .../java/com/ming/aop/AOPApplication.java | 11 +++ .../java/com/ming/aop/config/AOPAdvice.java | 48 ++++++++++ .../ming/aop/controller/AOPController.java | 15 +++ .../src/main/resources/application.yml | 2 + SpringBoot-aop/target/classes/application.yml | 2 + SpringBoot-easyExcel/pom.xml | 34 +++++++ .../ming/easyExcel/EasyExcelApplication.java | 18 ++++ .../easyExcel/controller/UserController.java | 36 +++++++ .../java/com/ming/easyExcel/dto/UserDTO.java | 25 +++++ .../ming/easyExcel/service/UserService.java | 53 +++++++++++ .../easyExcel/utils/EasyExcelReadUtils.java | 34 +++++++ .../src/main/resources/application.yml | 2 + .../src/main/resources/lombok.config | 2 + .../target/classes/application.yml | 2 + .../target/classes/lombok.config | 2 + SpringBoot-jwt/pom.xml | 42 +++++++++ .../java/com/ming/jwt/JWTApplication.java | 17 ++++ .../java/com/ming/jwt/config/JWTConfig.java | 35 +++++++ .../ming/jwt/controller/JWTController.java | 32 +++++++ .../ming/jwt/interceptor/JWTInterceptor.java | 68 ++++++++++++++ .../src/main/java/com/ming/jwt/pojo/User.java | 20 ++++ .../java/com/ming/jwt/service/JWTService.java | 63 +++++++++++++ .../src/main/resources/application.yml | 5 + .../java/com/ming/jwt/JWTServiceTest.java | 20 ++++ SpringBoot-jwt/target/classes/application.yml | 5 + SpringBoot-scheduling/pom.xml | 20 ++++ .../scheduling/SchedulingApplication.java | 19 ++++ .../scheduling/config/ScheduleConfig.java | 24 +++++ .../scheduling/schedule/TaskSchedule.java | 48 ++++++++++ .../schedule/TaskScheduleThread.java | 28 ++++++ .../src/main/resources/application.yml | 2 + .../target/classes/application.yml | 2 + SpringBoot-shiro/pom.xml | 43 +++++++++ .../java/com/ming/shiro/ShiroApplication.java | 19 ++++ .../ming/shiro/config/MybatisPlusConfig.java | 20 ++++ .../com/ming/shiro/config/ShiroConfig.java | 72 ++++++++++++++ .../shiro/config/ShiroConfigUserRealm.java | 66 +++++++++++++ .../ming/shiro/controller/UserController.java | 38 ++++++++ .../main/java/com/ming/shiro/dao/UserDao.java | 22 +++++ .../com/ming/shiro/dao/UserPermissionDao.java | 11 +++ .../main/java/com/ming/shiro/pojo/User.java | 52 +++++++++++ .../com/ming/shiro/pojo/UserPermission.java | 31 +++++++ .../shiro/service/UserPermissionService.java | 24 +++++ .../com/ming/shiro/service/UserService.java | 49 ++++++++++ .../src/main/resources/application.yml | 22 +++++ SpringBoot-shiro/src/main/resources/user.sql | 46 +++++++++ .../src/main/resources/user_permission.sql | 36 +++++++ .../target/classes/application.yml | 22 +++++ SpringBoot-shiro/target/classes/user.sql | 46 +++++++++ .../target/classes/user_permission.sql | 36 +++++++ SpringBoot-slf4j/pom.xml | 35 +++++++ .../java/com/ming/slf4j/Slf4jApplication.java | 17 ++++ .../ming/slf4j/controller/LogController.java | 32 +++++++ .../src/main/resources/application.yml | 3 + .../src/main/resources/log4j.properties | 37 ++++++++ .../target/classes/application.yml | 3 + .../target/classes/log4j.properties | 38 ++++++++ SpringBoot-swagger/pom.xml | 29 ++++++ .../com/ming/swagger/SwaggerApplication.java | 20 ++++ .../ming/swagger/config/SwaggerConfig.java | 52 +++++++++++ .../swagger/controller/UserController.java | 38 ++++++++ .../main/java/com/ming/swagger/pojo/User.java | 42 +++++++++ .../com/ming/swagger/service/UserService.java | 21 +++++ .../src/main/resources/application-dev.yml | 6 ++ .../src/main/resources/application.yml | 3 + .../target/classes/application-dev.yml | 6 ++ .../target/classes/application.yml | 3 + SpringBoot-threadPool/pom.xml | 20 ++++ .../threadPool/ThreadPoolApplication.java | 18 ++++ .../threadPool/config/ThreadPoolConfig.java | 93 +++++++++++++++++++ .../controller/ThreadPoolController.java | 30 ++++++ .../threadPool/service/ThreadPoolService.java | 31 +++++++ .../src/main/resources/application.yml | 2 + .../src/test/java/DataTest.java | 18 ++++ .../target/classes/application.yml | 2 + log/error/error | 4 + log/info/info | 7 ++ log/info/info.2023-01-10-16-33 | 16 ++++ log/info/info.2023-01-10-16-42 | 9 ++ log/info/info.2023-01-10-16-50 | 16 ++++ log/info/info.2023-01-10-16-53 | 13 +++ log/warn/warn | 8 ++ pom.xml | 59 ++++++++++++ 85 files changed, 2181 insertions(+), 2 deletions(-) create mode 100644 SpringBoot-aop/pom.xml create mode 100644 SpringBoot-aop/src/main/java/com/ming/aop/AOPApplication.java create mode 100644 SpringBoot-aop/src/main/java/com/ming/aop/config/AOPAdvice.java create mode 100644 SpringBoot-aop/src/main/java/com/ming/aop/controller/AOPController.java create mode 100644 SpringBoot-aop/src/main/resources/application.yml create mode 100644 SpringBoot-aop/target/classes/application.yml create mode 100644 SpringBoot-easyExcel/pom.xml create mode 100644 SpringBoot-easyExcel/src/main/java/com/ming/easyExcel/EasyExcelApplication.java create mode 100644 SpringBoot-easyExcel/src/main/java/com/ming/easyExcel/controller/UserController.java create mode 100644 SpringBoot-easyExcel/src/main/java/com/ming/easyExcel/dto/UserDTO.java create mode 100644 SpringBoot-easyExcel/src/main/java/com/ming/easyExcel/service/UserService.java create mode 100644 SpringBoot-easyExcel/src/main/java/com/ming/easyExcel/utils/EasyExcelReadUtils.java create mode 100644 SpringBoot-easyExcel/src/main/resources/application.yml create mode 100644 SpringBoot-easyExcel/src/main/resources/lombok.config create mode 100644 SpringBoot-easyExcel/target/classes/application.yml create mode 100644 SpringBoot-easyExcel/target/classes/lombok.config create mode 100644 SpringBoot-jwt/pom.xml create mode 100644 SpringBoot-jwt/src/main/java/com/ming/jwt/JWTApplication.java create mode 100644 SpringBoot-jwt/src/main/java/com/ming/jwt/config/JWTConfig.java create mode 100644 SpringBoot-jwt/src/main/java/com/ming/jwt/controller/JWTController.java create mode 100644 SpringBoot-jwt/src/main/java/com/ming/jwt/interceptor/JWTInterceptor.java create mode 100644 SpringBoot-jwt/src/main/java/com/ming/jwt/pojo/User.java create mode 100644 SpringBoot-jwt/src/main/java/com/ming/jwt/service/JWTService.java create mode 100644 SpringBoot-jwt/src/main/resources/application.yml create mode 100644 SpringBoot-jwt/src/test/java/com/ming/jwt/JWTServiceTest.java create mode 100644 SpringBoot-jwt/target/classes/application.yml create mode 100644 SpringBoot-scheduling/pom.xml create mode 100644 SpringBoot-scheduling/src/main/java/com/ming/scheduling/SchedulingApplication.java create mode 100644 SpringBoot-scheduling/src/main/java/com/ming/scheduling/config/ScheduleConfig.java create mode 100644 SpringBoot-scheduling/src/main/java/com/ming/scheduling/schedule/TaskSchedule.java create mode 100644 SpringBoot-scheduling/src/main/java/com/ming/scheduling/schedule/TaskScheduleThread.java create mode 100644 SpringBoot-scheduling/src/main/resources/application.yml create mode 100644 SpringBoot-scheduling/target/classes/application.yml create mode 100644 SpringBoot-shiro/pom.xml create mode 100644 SpringBoot-shiro/src/main/java/com/ming/shiro/ShiroApplication.java create mode 100644 SpringBoot-shiro/src/main/java/com/ming/shiro/config/MybatisPlusConfig.java create mode 100644 SpringBoot-shiro/src/main/java/com/ming/shiro/config/ShiroConfig.java create mode 100644 SpringBoot-shiro/src/main/java/com/ming/shiro/config/ShiroConfigUserRealm.java create mode 100644 SpringBoot-shiro/src/main/java/com/ming/shiro/controller/UserController.java create mode 100644 SpringBoot-shiro/src/main/java/com/ming/shiro/dao/UserDao.java create mode 100644 SpringBoot-shiro/src/main/java/com/ming/shiro/dao/UserPermissionDao.java create mode 100644 SpringBoot-shiro/src/main/java/com/ming/shiro/pojo/User.java create mode 100644 SpringBoot-shiro/src/main/java/com/ming/shiro/pojo/UserPermission.java create mode 100644 SpringBoot-shiro/src/main/java/com/ming/shiro/service/UserPermissionService.java create mode 100644 SpringBoot-shiro/src/main/java/com/ming/shiro/service/UserService.java create mode 100644 SpringBoot-shiro/src/main/resources/application.yml create mode 100644 SpringBoot-shiro/src/main/resources/user.sql create mode 100644 SpringBoot-shiro/src/main/resources/user_permission.sql create mode 100644 SpringBoot-shiro/target/classes/application.yml create mode 100644 SpringBoot-shiro/target/classes/user.sql create mode 100644 SpringBoot-shiro/target/classes/user_permission.sql create mode 100644 SpringBoot-slf4j/pom.xml create mode 100644 SpringBoot-slf4j/src/main/java/com/ming/slf4j/Slf4jApplication.java create mode 100644 SpringBoot-slf4j/src/main/java/com/ming/slf4j/controller/LogController.java create mode 100644 SpringBoot-slf4j/src/main/resources/application.yml create mode 100644 SpringBoot-slf4j/src/main/resources/log4j.properties create mode 100644 SpringBoot-slf4j/target/classes/application.yml create mode 100644 SpringBoot-slf4j/target/classes/log4j.properties create mode 100644 SpringBoot-swagger/pom.xml create mode 100644 SpringBoot-swagger/src/main/java/com/ming/swagger/SwaggerApplication.java create mode 100644 SpringBoot-swagger/src/main/java/com/ming/swagger/config/SwaggerConfig.java create mode 100644 SpringBoot-swagger/src/main/java/com/ming/swagger/controller/UserController.java create mode 100644 SpringBoot-swagger/src/main/java/com/ming/swagger/pojo/User.java create mode 100644 SpringBoot-swagger/src/main/java/com/ming/swagger/service/UserService.java create mode 100644 SpringBoot-swagger/src/main/resources/application-dev.yml create mode 100644 SpringBoot-swagger/src/main/resources/application.yml create mode 100644 SpringBoot-swagger/target/classes/application-dev.yml create mode 100644 SpringBoot-swagger/target/classes/application.yml create mode 100644 SpringBoot-threadPool/pom.xml create mode 100644 SpringBoot-threadPool/src/main/java/com/ming/threadPool/ThreadPoolApplication.java create mode 100644 SpringBoot-threadPool/src/main/java/com/ming/threadPool/config/ThreadPoolConfig.java create mode 100644 SpringBoot-threadPool/src/main/java/com/ming/threadPool/controller/ThreadPoolController.java create mode 100644 SpringBoot-threadPool/src/main/java/com/ming/threadPool/service/ThreadPoolService.java create mode 100644 SpringBoot-threadPool/src/main/resources/application.yml create mode 100644 SpringBoot-threadPool/src/test/java/DataTest.java create mode 100644 SpringBoot-threadPool/target/classes/application.yml create mode 100644 log/error/error create mode 100644 log/info/info create mode 100644 log/info/info.2023-01-10-16-33 create mode 100644 log/info/info.2023-01-10-16-42 create mode 100644 log/info/info.2023-01-10-16-50 create mode 100644 log/info/info.2023-01-10-16-53 create mode 100644 log/warn/warn create mode 100644 pom.xml 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