tubinyan 5 lat temu
commit
9e02cc91b2
70 zmienionych plików z 5504 dodań i 0 usunięć
  1. 33 0
      .gitignore
  2. 118 0
      .mvn/wrapper/MavenWrapperDownloader.java
  3. BIN
      .mvn/wrapper/maven-wrapper.jar
  4. 2 0
      .mvn/wrapper/maven-wrapper.properties
  5. 31 0
      README.md
  6. 1987 0
      courselearning.log
  7. 310 0
      mvnw
  8. 182 0
      mvnw.cmd
  9. 94 0
      pom.xml
  10. 314 0
      sql/courselearning.sql
  11. 12 0
      src/main/java/cn/seecoder/courselearning/CourseLearningApplication.java
  12. 27 0
      src/main/java/cn/seecoder/courselearning/config/CorsConfig.java
  13. 89 0
      src/main/java/cn/seecoder/courselearning/config/DataSourceConfig.java
  14. 22 0
      src/main/java/cn/seecoder/courselearning/config/WebResourceConfig.java
  15. 118 0
      src/main/java/cn/seecoder/courselearning/controller/CourseController.java
  16. 38 0
      src/main/java/cn/seecoder/courselearning/controller/CourseOrderController.java
  17. 46 0
      src/main/java/cn/seecoder/courselearning/controller/CourseWareController.java
  18. 24 0
      src/main/java/cn/seecoder/courselearning/controller/FileController.java
  19. 37 0
      src/main/java/cn/seecoder/courselearning/controller/UserController.java
  20. 17 0
      src/main/java/cn/seecoder/courselearning/enums/ExceptionType.java
  21. 7 0
      src/main/java/cn/seecoder/courselearning/enums/UserRole.java
  22. 17 0
      src/main/java/cn/seecoder/courselearning/exception/MyException.java
  23. 24 0
      src/main/java/cn/seecoder/courselearning/mapperservice/CourseMapper.java
  24. 20 0
      src/main/java/cn/seecoder/courselearning/mapperservice/CourseOrderMapper.java
  25. 18 0
      src/main/java/cn/seecoder/courselearning/mapperservice/CourseWareMapper.java
  26. 16 0
      src/main/java/cn/seecoder/courselearning/mapperservice/RechargeOrderMapper.java
  27. 24 0
      src/main/java/cn/seecoder/courselearning/mapperservice/UserMapper.java
  28. 133 0
      src/main/java/cn/seecoder/courselearning/po/Course.java
  29. 91 0
      src/main/java/cn/seecoder/courselearning/po/CourseOrder.java
  30. 123 0
      src/main/java/cn/seecoder/courselearning/po/CourseWare.java
  31. 56 0
      src/main/java/cn/seecoder/courselearning/po/RechargeOrder.java
  32. 101 0
      src/main/java/cn/seecoder/courselearning/po/User.java
  33. 17 0
      src/main/java/cn/seecoder/courselearning/service/CourseOrderService.java
  34. 23 0
      src/main/java/cn/seecoder/courselearning/service/CourseService.java
  35. 16 0
      src/main/java/cn/seecoder/courselearning/service/CourseWareService.java
  36. 9 0
      src/main/java/cn/seecoder/courselearning/service/FileService.java
  37. 18 0
      src/main/java/cn/seecoder/courselearning/service/UserService.java
  38. 79 0
      src/main/java/cn/seecoder/courselearning/serviceimpl/CourseOrderServiceImpl.java
  39. 106 0
      src/main/java/cn/seecoder/courselearning/serviceimpl/CourseServiceImpl.java
  40. 56 0
      src/main/java/cn/seecoder/courselearning/serviceimpl/CourseWareServiceImpl.java
  41. 36 0
      src/main/java/cn/seecoder/courselearning/serviceimpl/FileServiceImpl.java
  42. 104 0
      src/main/java/cn/seecoder/courselearning/serviceimpl/UserServiceImpl.java
  43. 23 0
      src/main/java/cn/seecoder/courselearning/util/Constant.java
  44. 19 0
      src/main/java/cn/seecoder/courselearning/util/DateUtil.java
  45. 73 0
      src/main/java/cn/seecoder/courselearning/util/FileHelper.java
  46. 52 0
      src/main/java/cn/seecoder/courselearning/util/MyBatisGeneratorUtil.java
  47. 29 0
      src/main/java/cn/seecoder/courselearning/util/PageInfoUtil.java
  48. 37 0
      src/main/java/cn/seecoder/courselearning/vo/CourseOrderVO.java
  49. 70 0
      src/main/java/cn/seecoder/courselearning/vo/CourseVO.java
  50. 63 0
      src/main/java/cn/seecoder/courselearning/vo/CourseWareVO.java
  51. 16 0
      src/main/java/cn/seecoder/courselearning/vo/FileInfoVO.java
  52. 27 0
      src/main/java/cn/seecoder/courselearning/vo/RechargeOrderVO.java
  53. 29 0
      src/main/java/cn/seecoder/courselearning/vo/ResultVO.java
  54. 9 0
      src/main/java/cn/seecoder/courselearning/vo/UserFormVO.java
  55. 40 0
      src/main/java/cn/seecoder/courselearning/vo/UserVO.java
  56. 31 0
      src/main/resources/application.yml
  57. 48 0
      src/main/resources/generatorConfig.xml
  58. 88 0
      src/main/resources/mapper/CourseMapper.xml
  59. 55 0
      src/main/resources/mapper/CourseOrderMapper.xml
  60. 60 0
      src/main/resources/mapper/CourseWareMapper.xml
  61. 42 0
      src/main/resources/mapper/RechargeOrderMapper.xml
  62. 59 0
      src/main/resources/mapper/UserMapper.xml
  63. 22 0
      src/main/resources/mybatis-config.xml
  64. BIN
      src/main/resources/static/course1.png
  65. BIN
      src/main/resources/static/course2.png
  66. BIN
      src/main/resources/static/course3.png
  67. BIN
      src/main/resources/static/course4.png
  68. BIN
      src/main/resources/static/no.png
  69. 4 0
      src/main/resources/url.properties
  70. 13 0
      src/test/java/cn/seecoder/courselearning/CourselearningApplicationTests.java

+ 33 - 0
.gitignore

@@ -0,0 +1,33 @@
+HELP.md
+target/
+!.mvn/wrapper/maven-wrapper.jar
+!**/src/main/**/target/
+!**/src/test/**/target/
+
+### STS ###
+.apt_generated
+.classpath
+.factorypath
+.project
+.settings
+.springBeans
+.sts4-cache
+
+### IntelliJ IDEA ###
+.idea
+*.iws
+*.iml
+*.ipr
+
+### NetBeans ###
+/nbproject/private/
+/nbbuild/
+/dist/
+/nbdist/
+/.nb-gradle/
+build/
+!**/src/main/**/build/
+!**/src/test/**/build/
+
+### VS Code ###
+.vscode/

+ 118 - 0
.mvn/wrapper/MavenWrapperDownloader.java

@@ -0,0 +1,118 @@
+/*
+ * Copyright 2007-present the original author or authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      https://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import java.net.*;
+import java.io.*;
+import java.nio.channels.*;
+import java.util.Properties;
+
+public class MavenWrapperDownloader {
+
+    private static final String WRAPPER_VERSION = "0.5.6";
+    /**
+     * Default URL to download the maven-wrapper.jar from, if no 'downloadUrl' is provided.
+     */
+    private static final String DEFAULT_DOWNLOAD_URL = "https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/"
+            + WRAPPER_VERSION + "/maven-wrapper-" + WRAPPER_VERSION + ".jar";
+
+    /**
+     * Path to the maven-wrapper.properties file, which might contain a downloadUrl property to
+     * use instead of the default one.
+     */
+    private static final String MAVEN_WRAPPER_PROPERTIES_PATH =
+            ".mvn/wrapper/maven-wrapper.properties";
+
+    /**
+     * Path where the maven-wrapper.jar will be saved to.
+     */
+    private static final String MAVEN_WRAPPER_JAR_PATH =
+            ".mvn/wrapper/maven-wrapper.jar";
+
+    /**
+     * Name of the property which should be used to override the default download url for the wrapper.
+     */
+    private static final String PROPERTY_NAME_WRAPPER_URL = "wrapperUrl";
+
+    public static void main(String args[]) {
+        System.out.println("- Downloader started");
+        File baseDirectory = new File(args[0]);
+        System.out.println("- Using base directory: " + baseDirectory.getAbsolutePath());
+
+        // If the maven-wrapper.properties exists, read it and check if it contains a custom
+        // wrapperUrl parameter.
+        File mavenWrapperPropertyFile = new File(baseDirectory, MAVEN_WRAPPER_PROPERTIES_PATH);
+        String url = DEFAULT_DOWNLOAD_URL;
+        if (mavenWrapperPropertyFile.exists()) {
+            FileInputStream mavenWrapperPropertyFileInputStream = null;
+            try {
+                mavenWrapperPropertyFileInputStream = new FileInputStream(mavenWrapperPropertyFile);
+                Properties mavenWrapperProperties = new Properties();
+                mavenWrapperProperties.load(mavenWrapperPropertyFileInputStream);
+                url = mavenWrapperProperties.getProperty(PROPERTY_NAME_WRAPPER_URL, url);
+            } catch (IOException e) {
+                System.out.println("- ERROR loading '" + MAVEN_WRAPPER_PROPERTIES_PATH + "'");
+            } finally {
+                try {
+                    if (mavenWrapperPropertyFileInputStream != null) {
+                        mavenWrapperPropertyFileInputStream.close();
+                    }
+                } catch (IOException e) {
+                    // Ignore ...
+                }
+            }
+        }
+        System.out.println("- Downloading from: " + url);
+
+        File outputFile = new File(baseDirectory.getAbsolutePath(), MAVEN_WRAPPER_JAR_PATH);
+        if (!outputFile.getParentFile().exists()) {
+            if (!outputFile.getParentFile().mkdirs()) {
+                System.out.println(
+                        "- ERROR creating output directory '" + outputFile.getParentFile().getAbsolutePath() + "'");
+            }
+        }
+        System.out.println("- Downloading to: " + outputFile.getAbsolutePath());
+        try {
+            downloadFileFromURL(url, outputFile);
+            System.out.println("Done");
+            System.exit(0);
+        } catch (Throwable e) {
+            System.out.println("- Error downloading");
+            e.printStackTrace();
+            System.exit(1);
+        }
+    }
+
+    private static void downloadFileFromURL(String urlString, File destination) throws Exception {
+        if (System.getenv("MVNW_USERNAME") != null && System.getenv("MVNW_PASSWORD") != null) {
+            String username = System.getenv("MVNW_USERNAME");
+            char[] password = System.getenv("MVNW_PASSWORD").toCharArray();
+            Authenticator.setDefault(new Authenticator() {
+                @Override
+                protected PasswordAuthentication getPasswordAuthentication() {
+                    return new PasswordAuthentication(username, password);
+                }
+            });
+        }
+        URL website = new URL(urlString);
+        ReadableByteChannel rbc;
+        rbc = Channels.newChannel(website.openStream());
+        FileOutputStream fos = new FileOutputStream(destination);
+        fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE);
+        fos.close();
+        rbc.close();
+    }
+
+}

BIN
.mvn/wrapper/maven-wrapper.jar


+ 2 - 0
.mvn/wrapper/maven-wrapper.properties

@@ -0,0 +1,2 @@
+distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.6.3/apache-maven-3.6.3-bin.zip
+wrapperUrl=https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar

+ 31 - 0
README.md

@@ -0,0 +1,31 @@
+### 项目说明
+
+这是 courselearning 后端项目,使用了MySQL数据库。
+
+#### 部分数据结构说明
+
+项目中使用了 com.github.pagehelper 分页插件,其中 PageInfo 重要的属性如下所示:
+
+public class PageInfo<T> {
+    // 当前页码(无论请求中传入的页码数有多大,在返回结果中,pageNum 都是不超过总页数的)
+    private int pageNum;
+    // 每页包含的最大记录数
+    private int pageSize;
+    // 当前页包含的记录数
+    private int size;
+    // 总记录数
+    private long total;
+    // 总页数
+    private int pages;
+    // 结果集
+    private List<T> list;
+    ... ....
+}
+
+#### 文件说明
+
+SpringBoot的配置文件可参考 /src/main/resouces/application.yml 以及 代码部分 /src/main/java/cn.seecoder.courselearning/config/*,请根据实际情况调整。
+
+/src/main/resouces/static 目录下存储了部分课程的图片文件,建议可以将static目录内的图片文件全部拷贝至服务器上传文件的目录(在application.yml定义的)。
+
+/sql/courselearning.sql 存储了项目初始化需要的sql文件(包含了用于展示的部分数据),初次使用时,可将该文件内的所有sql语句在mysql命令行内执行后初始化数据库。

+ 1987 - 0
courselearning.log

@@ -0,0 +1,1987 @@
+2021-03-09 11:09:35.130  INFO 7004 --- [main] c.s.c.CourseLearningApplication          : Starting CourseLearningApplication using Java 1.8.0_251 on LAPTOP-408U5MVM with PID 7004 (C:\Users\tubinyan\IdeaProjects\courselearning\target\classes started by tubinyan in C:\Users\tubinyan\IdeaProjects\courselearning)
+2021-03-09 11:09:35.132  INFO 7004 --- [main] c.s.c.CourseLearningApplication          : No active profile set, falling back to default profiles: default
+2021-03-09 11:09:36.067  INFO 7004 --- [main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port(s): 8081 (http)
+2021-03-09 11:09:36.075  INFO 7004 --- [main] o.apache.catalina.core.StandardService   : Starting service [Tomcat]
+2021-03-09 11:09:36.075  INFO 7004 --- [main] org.apache.catalina.core.StandardEngine  : Starting Servlet engine: [Apache Tomcat/9.0.41]
+2021-03-09 11:09:36.167  INFO 7004 --- [main] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
+2021-03-09 11:09:36.168  INFO 7004 --- [main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 998 ms
+2021-03-09 11:09:36.255  INFO 7004 --- [MLog-Init-Reporter] com.mchange.v2.log.MLog                  : MLog clients using slf4j logging.
+2021-03-09 11:09:36.280  INFO 7004 --- [main] com.mchange.v2.c3p0.C3P0Registry         : Initializing c3p0-0.9.5.2 [built 08-December-2015 22:06:04 -0800; debug? true; trace: 10]
+2021-03-09 11:09:37.436  INFO 7004 --- [main] o.s.s.concurrent.ThreadPoolTaskExecutor  : Initializing ExecutorService 'applicationTaskExecutor'
+2021-03-09 11:09:37.601  INFO 7004 --- [main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 8081 (http) with context path ''
+2021-03-09 11:09:37.609  INFO 7004 --- [main] c.s.c.CourseLearningApplication          : Started CourseLearningApplication in 2.873 seconds (JVM running for 3.699)
+2021-03-09 11:10:15.964  INFO 1816 --- [main] c.s.c.CourseLearningApplication          : Starting CourseLearningApplication using Java 1.8.0_251 on LAPTOP-408U5MVM with PID 1816 (C:\Users\tubinyan\IdeaProjects\courselearning\target\classes started by tubinyan in C:\Users\tubinyan\IdeaProjects\courselearning)
+2021-03-09 11:10:15.965  INFO 1816 --- [main] c.s.c.CourseLearningApplication          : No active profile set, falling back to default profiles: default
+2021-03-09 11:10:16.777  INFO 1816 --- [main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port(s): 8081 (http)
+2021-03-09 11:10:16.784  INFO 1816 --- [main] o.apache.catalina.core.StandardService   : Starting service [Tomcat]
+2021-03-09 11:10:16.784  INFO 1816 --- [main] org.apache.catalina.core.StandardEngine  : Starting Servlet engine: [Apache Tomcat/9.0.41]
+2021-03-09 11:10:16.874  INFO 1816 --- [main] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
+2021-03-09 11:10:16.874  INFO 1816 --- [main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 872 ms
+2021-03-09 11:10:16.956  INFO 1816 --- [MLog-Init-Reporter] com.mchange.v2.log.MLog                  : MLog clients using slf4j logging.
+2021-03-09 11:10:16.974  INFO 1816 --- [main] com.mchange.v2.c3p0.C3P0Registry         : Initializing c3p0-0.9.5.2 [built 08-December-2015 22:06:04 -0800; debug? true; trace: 10]
+2021-03-09 11:10:18.039  INFO 1816 --- [main] o.s.s.concurrent.ThreadPoolTaskExecutor  : Initializing ExecutorService 'applicationTaskExecutor'
+2021-03-09 11:10:18.194  INFO 1816 --- [main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 8081 (http) with context path ''
+2021-03-09 11:10:18.202  INFO 1816 --- [main] c.s.c.CourseLearningApplication          : Started CourseLearningApplication in 2.579 seconds (JVM running for 3.298)
+2021-03-09 11:17:49.146  INFO 17612 --- [main] c.s.c.CourseLearningApplication          : Starting CourseLearningApplication using Java 1.8.0_251 on LAPTOP-408U5MVM with PID 17612 (C:\Users\tubinyan\IdeaProjects\courselearning\target\classes started by tubinyan in C:\Users\tubinyan\IdeaProjects\courselearning)
+2021-03-09 11:17:49.149  INFO 17612 --- [main] c.s.c.CourseLearningApplication          : No active profile set, falling back to default profiles: default
+2021-03-09 11:17:50.050  INFO 17612 --- [main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port(s): 8081 (http)
+2021-03-09 11:17:50.057  INFO 17612 --- [main] o.apache.catalina.core.StandardService   : Starting service [Tomcat]
+2021-03-09 11:17:50.057  INFO 17612 --- [main] org.apache.catalina.core.StandardEngine  : Starting Servlet engine: [Apache Tomcat/9.0.41]
+2021-03-09 11:17:50.146  INFO 17612 --- [main] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
+2021-03-09 11:17:50.146  INFO 17612 --- [main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 958 ms
+2021-03-09 11:17:50.219  INFO 17612 --- [MLog-Init-Reporter] com.mchange.v2.log.MLog                  : MLog clients using slf4j logging.
+2021-03-09 11:17:50.237  INFO 17612 --- [main] com.mchange.v2.c3p0.C3P0Registry         : Initializing c3p0-0.9.5.2 [built 08-December-2015 22:06:04 -0800; debug? true; trace: 10]
+2021-03-09 11:17:51.310  INFO 17612 --- [main] o.s.s.concurrent.ThreadPoolTaskExecutor  : Initializing ExecutorService 'applicationTaskExecutor'
+2021-03-09 11:17:51.473  INFO 17612 --- [main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 8081 (http) with context path ''
+2021-03-09 11:17:51.481  INFO 17612 --- [main] c.s.c.CourseLearningApplication          : Started CourseLearningApplication in 2.66 seconds (JVM running for 3.42)
+2021-03-09 11:18:22.124  INFO 17612 --- [http-nio-8081-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring DispatcherServlet 'dispatcherServlet'
+2021-03-09 11:18:22.124  INFO 17612 --- [http-nio-8081-exec-1] o.s.web.servlet.DispatcherServlet        : Initializing Servlet 'dispatcherServlet'
+2021-03-09 11:18:22.125  INFO 17612 --- [http-nio-8081-exec-1] o.s.web.servlet.DispatcherServlet        : Completed initialization in 1 ms
+2021-03-09 11:18:22.201  INFO 17612 --- [http-nio-8081-exec-1] c.m.v.c.i.AbstractPoolBackedDataSource   : Initializing c3p0 pool... com.mchange.v2.c3p0.ComboPooledDataSource [ acquireIncrement -> 3, acquireRetryAttempts -> 30, acquireRetryDelay -> 1000, autoCommitOnClose -> false, automaticTestTable -> null, breakAfterAcquireFailure -> false, checkoutTimeout -> 0, connectionCustomizerClassName -> null, connectionTesterClassName -> com.mchange.v2.c3p0.impl.DefaultConnectionTester, contextClassLoaderSource -> caller, dataSourceName -> 1hgf9xdag5to5qw16gn56b|2b87581, debugUnreturnedConnectionStackTraces -> false, description -> null, driverClass -> com.mysql.cj.jdbc.Driver, extensions -> {}, factoryClassLocation -> null, forceIgnoreUnresolvedTransactions -> false, forceSynchronousCheckins -> false, forceUseNamedDriverClass -> false, identityToken -> 1hgf9xdag5to5qw16gn56b|2b87581, idleConnectionTestPeriod -> 0, initialPoolSize -> 3, jdbcUrl -> jdbc:mysql://localhost:3306/courselearning?setUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8&allowPublicKeyRetrieval=true, maxAdministrativeTaskTime -> 0, maxConnectionAge -> 0, maxIdleTime -> 0, maxIdleTimeExcessConnections -> 0, maxPoolSize -> 15, maxStatements -> 0, maxStatementsPerConnection -> 0, minPoolSize -> 3, numHelperThreads -> 3, preferredTestQuery -> null, privilegeSpawnedThreads -> false, properties -> {user=******, password=******}, propertyCycle -> 0, statementCacheNumDeferredCloseThreads -> 0, testConnectionOnCheckin -> false, testConnectionOnCheckout -> false, unreturnedConnectionTimeout -> 0, userOverrides -> {}, usesTraditionalReflectiveProxies -> false ]
+2021-03-09 11:18:22.367 DEBUG 17612 --- [http-nio-8081-exec-1] c.s.c.m.CourseMapper.selectByPrimaryKey  : ==>  Preparing: select id, name, type, intro, picture, provider, create_time, delete_time, cost from course where id = ?
+2021-03-09 11:18:22.384 DEBUG 17612 --- [http-nio-8081-exec-1] c.s.c.m.CourseMapper.selectByPrimaryKey  : ==> Parameters: 1(Integer)
+2021-03-09 11:18:22.434 DEBUG 17612 --- [http-nio-8081-exec-1] c.s.c.m.CourseMapper.selectByPrimaryKey  : <==      Total: 1
+2021-03-09 11:19:17.125  INFO 19504 --- [main] c.s.c.CourseLearningApplication          : Starting CourseLearningApplication using Java 1.8.0_251 on LAPTOP-408U5MVM with PID 19504 (C:\Users\tubinyan\IdeaProjects\courselearning\target\classes started by tubinyan in C:\Users\tubinyan\IdeaProjects\courselearning)
+2021-03-09 11:19:17.128  INFO 19504 --- [main] c.s.c.CourseLearningApplication          : No active profile set, falling back to default profiles: default
+2021-03-09 11:19:17.988  INFO 19504 --- [main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port(s): 8081 (http)
+2021-03-09 11:19:17.994  INFO 19504 --- [main] o.apache.catalina.core.StandardService   : Starting service [Tomcat]
+2021-03-09 11:19:17.995  INFO 19504 --- [main] org.apache.catalina.core.StandardEngine  : Starting Servlet engine: [Apache Tomcat/9.0.41]
+2021-03-09 11:19:18.092  INFO 19504 --- [main] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
+2021-03-09 11:19:18.092  INFO 19504 --- [main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 921 ms
+2021-03-09 11:19:18.173  INFO 19504 --- [MLog-Init-Reporter] com.mchange.v2.log.MLog                  : MLog clients using slf4j logging.
+2021-03-09 11:19:18.192  INFO 19504 --- [main] com.mchange.v2.c3p0.C3P0Registry         : Initializing c3p0-0.9.5.2 [built 08-December-2015 22:06:04 -0800; debug? true; trace: 10]
+2021-03-09 11:19:19.257  INFO 19504 --- [main] o.s.s.concurrent.ThreadPoolTaskExecutor  : Initializing ExecutorService 'applicationTaskExecutor'
+2021-03-09 11:19:19.422  INFO 19504 --- [main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 8081 (http) with context path ''
+2021-03-09 11:19:19.430  INFO 19504 --- [main] c.s.c.CourseLearningApplication          : Started CourseLearningApplication in 2.637 seconds (JVM running for 3.36)
+2021-03-09 11:19:26.322  INFO 19504 --- [http-nio-8081-exec-3] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring DispatcherServlet 'dispatcherServlet'
+2021-03-09 11:19:26.322  INFO 19504 --- [http-nio-8081-exec-3] o.s.web.servlet.DispatcherServlet        : Initializing Servlet 'dispatcherServlet'
+2021-03-09 11:19:26.323  INFO 19504 --- [http-nio-8081-exec-3] o.s.web.servlet.DispatcherServlet        : Completed initialization in 1 ms
+2021-03-09 11:19:26.393  INFO 19504 --- [http-nio-8081-exec-3] c.m.v.c.i.AbstractPoolBackedDataSource   : Initializing c3p0 pool... com.mchange.v2.c3p0.ComboPooledDataSource [ acquireIncrement -> 3, acquireRetryAttempts -> 30, acquireRetryDelay -> 1000, autoCommitOnClose -> false, automaticTestTable -> null, breakAfterAcquireFailure -> false, checkoutTimeout -> 0, connectionCustomizerClassName -> null, connectionTesterClassName -> com.mchange.v2.c3p0.impl.DefaultConnectionTester, contextClassLoaderSource -> caller, dataSourceName -> 1hgf9xdag5tq1m3bwup2|286b39c2, debugUnreturnedConnectionStackTraces -> false, description -> null, driverClass -> com.mysql.cj.jdbc.Driver, extensions -> {}, factoryClassLocation -> null, forceIgnoreUnresolvedTransactions -> false, forceSynchronousCheckins -> false, forceUseNamedDriverClass -> false, identityToken -> 1hgf9xdag5tq1m3bwup2|286b39c2, idleConnectionTestPeriod -> 0, initialPoolSize -> 3, jdbcUrl -> jdbc:mysql://localhost:3306/courselearning?setUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8&allowPublicKeyRetrieval=true, maxAdministrativeTaskTime -> 0, maxConnectionAge -> 0, maxIdleTime -> 0, maxIdleTimeExcessConnections -> 0, maxPoolSize -> 15, maxStatements -> 0, maxStatementsPerConnection -> 0, minPoolSize -> 3, numHelperThreads -> 3, preferredTestQuery -> null, privilegeSpawnedThreads -> false, properties -> {user=******, password=******}, propertyCycle -> 0, statementCacheNumDeferredCloseThreads -> 0, testConnectionOnCheckin -> false, testConnectionOnCheckout -> false, unreturnedConnectionTimeout -> 0, userOverrides -> {}, usesTraditionalReflectiveProxies -> false ]
+2021-03-09 11:19:26.495 DEBUG 19504 --- [http-nio-8081-exec-3] c.s.c.m.CourseMapper.selectByPrimaryKey  : ==>  Preparing: select id, name, type, intro, picture, provider, create_time, delete_time, cost from course where id = ?
+2021-03-09 11:19:26.511 DEBUG 19504 --- [http-nio-8081-exec-3] c.s.c.m.CourseMapper.selectByPrimaryKey  : ==> Parameters: 1(Integer)
+2021-03-09 11:19:26.525 DEBUG 19504 --- [http-nio-8081-exec-3] c.s.c.m.CourseMapper.selectByPrimaryKey  : <==      Total: 1
+2021-03-09 11:21:10.572  INFO 12536 --- [main] c.s.c.CourseLearningApplication          : Starting CourseLearningApplication using Java 1.8.0_251 on LAPTOP-408U5MVM with PID 12536 (C:\Users\tubinyan\IdeaProjects\courselearning\target\classes started by tubinyan in C:\Users\tubinyan\IdeaProjects\courselearning)
+2021-03-09 11:21:10.575 DEBUG 12536 --- [main] c.s.c.CourseLearningApplication          : Running with Spring Boot v2.4.1, Spring v5.3.2
+2021-03-09 11:21:10.575  INFO 12536 --- [main] c.s.c.CourseLearningApplication          : No active profile set, falling back to default profiles: default
+2021-03-09 11:21:10.575 DEBUG 12536 --- [main] o.s.boot.SpringApplication               : Loading source class cn.seecoder.courselearning.CourseLearningApplication
+2021-03-09 11:21:10.608 DEBUG 12536 --- [main] ConfigServletWebServerApplicationContext : Refreshing org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext@53976f5c
+2021-03-09 11:21:10.628 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Creating shared instance of singleton bean 'org.springframework.context.annotation.internalConfigurationAnnotationProcessor'
+2021-03-09 11:21:10.639 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Creating shared instance of singleton bean 'org.springframework.boot.autoconfigure.internalCachingMetadataReaderFactory'
+2021-03-09 11:21:10.698 DEBUG 12536 --- [main] o.s.c.a.ClassPathBeanDefinitionScanner   : Identified candidate component class: file [C:\Users\tubinyan\IdeaProjects\courselearning\target\classes\cn\seecoder\courselearning\config\CorsConfig.class]
+2021-03-09 11:21:10.703 DEBUG 12536 --- [main] o.s.c.a.ClassPathBeanDefinitionScanner   : Identified candidate component class: file [C:\Users\tubinyan\IdeaProjects\courselearning\target\classes\cn\seecoder\courselearning\config\DataSourceConfig.class]
+2021-03-09 11:21:10.710 DEBUG 12536 --- [main] o.s.c.a.ClassPathBeanDefinitionScanner   : Identified candidate component class: file [C:\Users\tubinyan\IdeaProjects\courselearning\target\classes\cn\seecoder\courselearning\controller\CourseController.class]
+2021-03-09 11:21:10.712 DEBUG 12536 --- [main] o.s.c.a.ClassPathBeanDefinitionScanner   : Identified candidate component class: file [C:\Users\tubinyan\IdeaProjects\courselearning\target\classes\cn\seecoder\courselearning\controller\CourseOrderController.class]
+2021-03-09 11:21:10.713 DEBUG 12536 --- [main] o.s.c.a.ClassPathBeanDefinitionScanner   : Identified candidate component class: file [C:\Users\tubinyan\IdeaProjects\courselearning\target\classes\cn\seecoder\courselearning\controller\CourseWareController.class]
+2021-03-09 11:21:10.714 DEBUG 12536 --- [main] o.s.c.a.ClassPathBeanDefinitionScanner   : Identified candidate component class: file [C:\Users\tubinyan\IdeaProjects\courselearning\target\classes\cn\seecoder\courselearning\controller\NotifyController.class]
+2021-03-09 11:21:10.715 DEBUG 12536 --- [main] o.s.c.a.ClassPathBeanDefinitionScanner   : Identified candidate component class: file [C:\Users\tubinyan\IdeaProjects\courselearning\target\classes\cn\seecoder\courselearning\controller\UserController.class]
+2021-03-09 11:21:10.716 DEBUG 12536 --- [main] o.s.c.a.ClassPathBeanDefinitionScanner   : Identified candidate component class: file [C:\Users\tubinyan\IdeaProjects\courselearning\target\classes\cn\seecoder\courselearning\controller\UserTokenController.class]
+2021-03-09 11:21:10.753 DEBUG 12536 --- [main] o.s.c.a.ClassPathBeanDefinitionScanner   : Identified candidate component class: file [C:\Users\tubinyan\IdeaProjects\courselearning\target\classes\cn\seecoder\courselearning\serviceimpl\CourseOrderServiceImpl.class]
+2021-03-09 11:21:10.754 DEBUG 12536 --- [main] o.s.c.a.ClassPathBeanDefinitionScanner   : Identified candidate component class: file [C:\Users\tubinyan\IdeaProjects\courselearning\target\classes\cn\seecoder\courselearning\serviceimpl\CourseServiceImpl.class]
+2021-03-09 11:21:10.755 DEBUG 12536 --- [main] o.s.c.a.ClassPathBeanDefinitionScanner   : Identified candidate component class: file [C:\Users\tubinyan\IdeaProjects\courselearning\target\classes\cn\seecoder\courselearning\serviceimpl\CourseWareServiceImpl.class]
+2021-03-09 11:21:10.757 DEBUG 12536 --- [main] o.s.c.a.ClassPathBeanDefinitionScanner   : Identified candidate component class: file [C:\Users\tubinyan\IdeaProjects\courselearning\target\classes\cn\seecoder\courselearning\serviceimpl\SendNotifyServiceImpl.class]
+2021-03-09 11:21:10.758 DEBUG 12536 --- [main] o.s.c.a.ClassPathBeanDefinitionScanner   : Identified candidate component class: file [C:\Users\tubinyan\IdeaProjects\courselearning\target\classes\cn\seecoder\courselearning\serviceimpl\UserServiceImpl.class]
+2021-03-09 11:21:10.759 DEBUG 12536 --- [main] o.s.c.a.ClassPathBeanDefinitionScanner   : Identified candidate component class: file [C:\Users\tubinyan\IdeaProjects\courselearning\target\classes\cn\seecoder\courselearning\serviceimpl\UserTokenServiceImpl.class]
+2021-03-09 11:21:10.814 DEBUG 12536 --- [RMI TCP Connection(1)-192.168.228.1] sun.rmi.transport.tcp                    : RMI TCP Connection(1)-192.168.228.1: accepted socket from [192.168.228.1:50556]
+2021-03-09 11:21:10.815 DEBUG 12536 --- [RMI TCP Connection(1)-192.168.228.1] sun.rmi.transport.tcp                    : RMI TCP Connection(1)-192.168.228.1: (port 50554) op = 80
+2021-03-09 11:21:10.819 DEBUG 12536 --- [RMI TCP Connection(1)-192.168.228.1] sun.rmi.loader                           : RMI TCP Connection(1)-192.168.228.1: name = "[Ljava.rmi.server.ObjID;", codebase = "", defaultLoader = sun.misc.Launcher$ExtClassLoader@5a42bbf4
+2021-03-09 11:21:10.821 DEBUG 12536 --- [RMI TCP Connection(1)-192.168.228.1] sun.rmi.loader                           : RMI TCP Connection(1)-192.168.228.1: name = "java.rmi.server.ObjID", codebase = "", defaultLoader = sun.misc.Launcher$ExtClassLoader@5a42bbf4
+2021-03-09 11:21:10.822 DEBUG 12536 --- [RMI TCP Connection(1)-192.168.228.1] sun.rmi.loader                           : RMI TCP Connection(1)-192.168.228.1: name = "java.rmi.server.UID", codebase = "", defaultLoader = sun.misc.Launcher$ExtClassLoader@5a42bbf4
+2021-03-09 11:21:10.823 DEBUG 12536 --- [RMI TCP Connection(1)-192.168.228.1] sun.rmi.loader                           : RMI TCP Connection(1)-192.168.228.1: name = "java.rmi.dgc.Lease", codebase = "", defaultLoader = sun.misc.Launcher$ExtClassLoader@5a42bbf4
+2021-03-09 11:21:10.824 DEBUG 12536 --- [RMI TCP Connection(1)-192.168.228.1] sun.rmi.loader                           : RMI TCP Connection(1)-192.168.228.1: name = "java.rmi.dgc.VMID", codebase = "", defaultLoader = sun.misc.Launcher$ExtClassLoader@5a42bbf4
+2021-03-09 11:21:10.825 DEBUG 12536 --- [RMI TCP Connection(1)-192.168.228.1] sun.rmi.loader                           : RMI TCP Connection(1)-192.168.228.1: name = "[B", codebase = "", defaultLoader = sun.misc.Launcher$ExtClassLoader@5a42bbf4
+2021-03-09 11:21:10.827 DEBUG 12536 --- [RMI TCP Connection(1)-192.168.228.1] sun.rmi.transport.tcp                    : RMI TCP Connection(1)-192.168.228.1: (port 50554) op = 80
+2021-03-09 11:21:10.832 DEBUG 12536 --- [RMI TCP Connection(1)-192.168.228.1] sun.rmi.transport.tcp                    : RMI TCP Connection(1)-192.168.228.1: (port 50554) op = 80
+2021-03-09 11:21:10.832 DEBUG 12536 --- [RMI TCP Connection(1)-192.168.228.1] sun.rmi.loader                           : RMI TCP Connection(1)-192.168.228.1: name = "[Ljava.rmi.server.ObjID;", codebase = "", defaultLoader = sun.misc.Launcher$ExtClassLoader@5a42bbf4
+2021-03-09 11:21:10.833 DEBUG 12536 --- [RMI TCP Connection(1)-192.168.228.1] sun.rmi.loader                           : RMI TCP Connection(1)-192.168.228.1: name = "java.rmi.server.ObjID", codebase = "", defaultLoader = sun.misc.Launcher$ExtClassLoader@5a42bbf4
+2021-03-09 11:21:10.833 DEBUG 12536 --- [RMI TCP Connection(1)-192.168.228.1] sun.rmi.loader                           : RMI TCP Connection(1)-192.168.228.1: name = "java.rmi.server.UID", codebase = "", defaultLoader = sun.misc.Launcher$ExtClassLoader@5a42bbf4
+2021-03-09 11:21:10.834 DEBUG 12536 --- [RMI TCP Connection(1)-192.168.228.1] sun.rmi.loader                           : RMI TCP Connection(1)-192.168.228.1: name = "java.rmi.dgc.Lease", codebase = "", defaultLoader = sun.misc.Launcher$ExtClassLoader@5a42bbf4
+2021-03-09 11:21:10.834 DEBUG 12536 --- [RMI TCP Connection(1)-192.168.228.1] sun.rmi.loader                           : RMI TCP Connection(1)-192.168.228.1: name = "java.rmi.dgc.VMID", codebase = "", defaultLoader = sun.misc.Launcher$ExtClassLoader@5a42bbf4
+2021-03-09 11:21:10.834 DEBUG 12536 --- [RMI TCP Connection(1)-192.168.228.1] sun.rmi.loader                           : RMI TCP Connection(1)-192.168.228.1: name = "[B", codebase = "", defaultLoader = sun.misc.Launcher$ExtClassLoader@5a42bbf4
+2021-03-09 11:21:10.835 DEBUG 12536 --- [RMI TCP Connection(1)-192.168.228.1] sun.rmi.transport.tcp                    : RMI TCP Connection(1)-192.168.228.1: (port 50554) op = 84
+2021-03-09 11:21:10.835 DEBUG 12536 --- [RMI TCP Connection(1)-192.168.228.1] sun.rmi.transport.tcp                    : RMI TCP Connection(1)-192.168.228.1: (port 50554) op = 80
+2021-03-09 11:21:10.836 DEBUG 12536 --- [RMI TCP Connection(1)-192.168.228.1] sun.rmi.transport.tcp                    : RMI TCP Connection(1)-192.168.228.1: (port 50554) op = 80
+2021-03-09 11:21:10.836 DEBUG 12536 --- [RMI TCP Connection(1)-192.168.228.1] sun.rmi.loader                           : RMI TCP Connection(1)-192.168.228.1: name = "javax.management.ObjectName", codebase = ""
+2021-03-09 11:21:10.853 DEBUG 12536 --- [RMI TCP Connection(1)-192.168.228.1] sun.rmi.server.call                      : RMI TCP Connection(1)-192.168.228.1: [192.168.228.1] exception: 
+
+javax.management.InstanceNotFoundException: org.springframework.boot:type=Admin,name=SpringApplication
+	at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.getMBean(DefaultMBeanServerInterceptor.java:1095) ~[na:1.8.0_251]
+	at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.getAttribute(DefaultMBeanServerInterceptor.java:643) ~[na:1.8.0_251]
+	at com.sun.jmx.mbeanserver.JmxMBeanServer.getAttribute(JmxMBeanServer.java:678) ~[na:1.8.0_251]
+	at javax.management.remote.rmi.RMIConnectionImpl.doOperation(RMIConnectionImpl.java:1445) ~[na:1.8.0_251]
+	at javax.management.remote.rmi.RMIConnectionImpl.access$300(RMIConnectionImpl.java:76) ~[na:1.8.0_251]
+	at javax.management.remote.rmi.RMIConnectionImpl$PrivilegedOperation.run(RMIConnectionImpl.java:1309) ~[na:1.8.0_251]
+	at javax.management.remote.rmi.RMIConnectionImpl.doPrivilegedOperation(RMIConnectionImpl.java:1401) ~[na:1.8.0_251]
+	at javax.management.remote.rmi.RMIConnectionImpl.getAttribute(RMIConnectionImpl.java:639) ~[na:1.8.0_251]
+	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_251]
+	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_251]
+	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_251]
+	at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_251]
+	at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:357) ~[na:1.8.0_251]
+	at sun.rmi.transport.Transport$1.run(Transport.java:200) [na:1.8.0_251]
+	at sun.rmi.transport.Transport$1.run(Transport.java:197) [na:1.8.0_251]
+	at java.security.AccessController.doPrivileged(Native Method) [na:1.8.0_251]
+	at sun.rmi.transport.Transport.serviceCall(Transport.java:196) [na:1.8.0_251]
+	at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:573) [na:1.8.0_251]
+	at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:834) [na:1.8.0_251]
+	at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.lambda$run$0(TCPTransport.java:688) [na:1.8.0_251]
+	at java.security.AccessController.doPrivileged(Native Method) [na:1.8.0_251]
+	at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:687) [na:1.8.0_251]
+	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) ~[na:1.8.0_251]
+	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) ~[na:1.8.0_251]
+	at java.lang.Thread.run(Thread.java:748) ~[na:1.8.0_251]
+
+2021-03-09 11:21:10.858 DEBUG 12536 --- [RMI TCP Connection(1)-192.168.228.1] sun.rmi.transport.tcp                    : RMI TCP Connection(1)-192.168.228.1: (port 50554) op = 80
+2021-03-09 11:21:10.953 DEBUG 12536 --- [main] o.s.c.e.PropertySourcesPropertyResolver  : Found key 'spring.jmx.enabled' in PropertySource 'configurationProperties' with value of type String
+2021-03-09 11:21:10.955 DEBUG 12536 --- [main] o.s.c.e.PropertySourcesPropertyResolver  : Found key 'spring.datasource.url' in PropertySource 'configurationProperties' with value of type String
+2021-03-09 11:21:10.966 DEBUG 12536 --- [main] o.s.c.e.PropertySourcesPropertyResolver  : Found key 'spring.jmx.enabled' in PropertySource 'configurationProperties' with value of type String
+2021-03-09 11:21:10.968 DEBUG 12536 --- [main] o.s.c.e.PropertySourcesPropertyResolver  : Found key 'spring.application.admin.enabled' in PropertySource 'configurationProperties' with value of type String
+2021-03-09 11:21:11.078 DEBUG 12536 --- [RMI TCP Connection(1)-192.168.228.1] sun.rmi.transport.tcp                    : RMI TCP Connection(1)-192.168.228.1: (port 50554) connection closed
+2021-03-09 11:21:11.078 DEBUG 12536 --- [RMI TCP Connection(1)-192.168.228.1] sun.rmi.transport.tcp                    : RMI TCP Connection(1)-192.168.228.1: close connection
+2021-03-09 11:21:11.095 DEBUG 12536 --- [main] o.s.c.e.PropertySourcesPropertyResolver  : Found key 'spring.jmx.enabled' in PropertySource 'configurationProperties' with value of type String
+2021-03-09 11:21:11.098 DEBUG 12536 --- [main] o.s.c.e.PropertySourcesPropertyResolver  : Found key 'spring.application.admin.enabled' in PropertySource 'configurationProperties' with value of type String
+2021-03-09 11:21:11.152 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Creating shared instance of singleton bean 'cn.seecoder.courselearning.config.DataSourceConfig#MapperScannerRegistrar#0'
+2021-03-09 11:21:11.159 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Creating shared instance of singleton bean 'propertySourcesPlaceholderConfigurer'
+2021-03-09 11:21:11.167 DEBUG 12536 --- [main] org.apache.ibatis.logging.LogFactory     : Logging initialized using 'class org.apache.ibatis.logging.slf4j.Slf4jImpl' adapter.
+2021-03-09 11:21:11.169 DEBUG 12536 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Identified candidate component class: file [C:\Users\tubinyan\IdeaProjects\courselearning\target\classes\cn\seecoder\courselearning\mapperservice\CourseMapper.class]
+2021-03-09 11:21:11.169 DEBUG 12536 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Identified candidate component class: file [C:\Users\tubinyan\IdeaProjects\courselearning\target\classes\cn\seecoder\courselearning\mapperservice\CourseOrderMapper.class]
+2021-03-09 11:21:11.169 DEBUG 12536 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Identified candidate component class: file [C:\Users\tubinyan\IdeaProjects\courselearning\target\classes\cn\seecoder\courselearning\mapperservice\CourseWareMapper.class]
+2021-03-09 11:21:11.169 DEBUG 12536 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Identified candidate component class: file [C:\Users\tubinyan\IdeaProjects\courselearning\target\classes\cn\seecoder\courselearning\mapperservice\RechargeOrderMapper.class]
+2021-03-09 11:21:11.169 DEBUG 12536 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Identified candidate component class: file [C:\Users\tubinyan\IdeaProjects\courselearning\target\classes\cn\seecoder\courselearning\mapperservice\UserMapper.class]
+2021-03-09 11:21:11.169 DEBUG 12536 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Identified candidate component class: file [C:\Users\tubinyan\IdeaProjects\courselearning\target\classes\cn\seecoder\courselearning\mapperservice\UserTokenMapper.class]
+2021-03-09 11:21:11.170 DEBUG 12536 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Creating MapperFactoryBean with name 'courseMapper' and 'cn.seecoder.courselearning.mapperservice.CourseMapper' mapperInterface
+2021-03-09 11:21:11.171 DEBUG 12536 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Creating MapperFactoryBean with name 'courseOrderMapper' and 'cn.seecoder.courselearning.mapperservice.CourseOrderMapper' mapperInterface
+2021-03-09 11:21:11.171 DEBUG 12536 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Creating MapperFactoryBean with name 'courseWareMapper' and 'cn.seecoder.courselearning.mapperservice.CourseWareMapper' mapperInterface
+2021-03-09 11:21:11.172 DEBUG 12536 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Creating MapperFactoryBean with name 'rechargeOrderMapper' and 'cn.seecoder.courselearning.mapperservice.RechargeOrderMapper' mapperInterface
+2021-03-09 11:21:11.172 DEBUG 12536 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Creating MapperFactoryBean with name 'userMapper' and 'cn.seecoder.courselearning.mapperservice.UserMapper' mapperInterface
+2021-03-09 11:21:11.172 DEBUG 12536 --- [main] o.m.s.mapper.ClassPathMapperScanner      : Creating MapperFactoryBean with name 'userTokenMapper' and 'cn.seecoder.courselearning.mapperservice.UserTokenMapper' mapperInterface
+2021-03-09 11:21:11.223 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Creating shared instance of singleton bean 'org.springframework.context.event.internalEventListenerProcessor'
+2021-03-09 11:21:11.223 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Creating shared instance of singleton bean 'preserveErrorControllerTargetClassPostProcessor'
+2021-03-09 11:21:11.224 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Creating shared instance of singleton bean 'org.springframework.context.event.internalEventListenerFactory'
+2021-03-09 11:21:11.224 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Creating shared instance of singleton bean 'org.springframework.transaction.config.internalTransactionalEventListenerFactory'
+2021-03-09 11:21:11.227 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Creating shared instance of singleton bean 'org.springframework.context.annotation.internalAutowiredAnnotationProcessor'
+2021-03-09 11:21:11.227 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Creating shared instance of singleton bean 'org.springframework.context.annotation.internalCommonAnnotationProcessor'
+2021-03-09 11:21:11.229 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Creating shared instance of singleton bean 'org.springframework.boot.context.properties.ConfigurationPropertiesBindingPostProcessor'
+2021-03-09 11:21:11.230 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Creating shared instance of singleton bean 'org.springframework.boot.context.internalConfigurationPropertiesBinder'
+2021-03-09 11:21:11.230 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Creating shared instance of singleton bean 'org.springframework.boot.context.internalConfigurationPropertiesBinderFactory'
+2021-03-09 11:21:11.232 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Creating shared instance of singleton bean 'dataSourceInitializerPostProcessor'
+2021-03-09 11:21:11.235 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Creating shared instance of singleton bean 'persistenceExceptionTranslationPostProcessor'
+2021-03-09 11:21:11.247 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Autowiring by type from bean name 'persistenceExceptionTranslationPostProcessor' via factory method to bean named 'environment'
+2021-03-09 11:21:11.252 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Creating shared instance of singleton bean 'org.springframework.aop.config.internalAutoProxyCreator'
+2021-03-09 11:21:11.261 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Creating shared instance of singleton bean 'webServerFactoryCustomizerBeanPostProcessor'
+2021-03-09 11:21:11.261 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Creating shared instance of singleton bean 'errorPageRegistrarBeanPostProcessor'
+2021-03-09 11:21:11.263 DEBUG 12536 --- [main] o.s.u.c.s.UiApplicationContextUtils      : Unable to locate ThemeSource with name 'themeSource': using default [org.springframework.ui.context.support.ResourceBundleThemeSource@410954b]
+2021-03-09 11:21:11.264 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Creating shared instance of singleton bean 'tomcatServletWebServerFactory'
+2021-03-09 11:21:11.264 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Creating shared instance of singleton bean 'org.springframework.boot.autoconfigure.web.servlet.ServletWebServerFactoryConfiguration$EmbeddedTomcat'
+2021-03-09 11:21:11.265 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Creating shared instance of singleton bean 'org.springframework.transaction.config.internalTransactionAdvisor'
+2021-03-09 11:21:11.265 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Creating shared instance of singleton bean 'org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration'
+2021-03-09 11:21:11.272 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Creating shared instance of singleton bean 'transactionAttributeSource'
+2021-03-09 11:21:11.275 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Creating shared instance of singleton bean 'transactionInterceptor'
+2021-03-09 11:21:11.276 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Autowiring by type from bean name 'transactionInterceptor' via factory method to bean named 'transactionAttributeSource'
+2021-03-09 11:21:11.280 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Autowiring by type from bean name 'org.springframework.transaction.config.internalTransactionAdvisor' via factory method to bean named 'transactionAttributeSource'
+2021-03-09 11:21:11.280 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Autowiring by type from bean name 'org.springframework.transaction.config.internalTransactionAdvisor' via factory method to bean named 'transactionInterceptor'
+2021-03-09 11:21:11.295 DEBUG 12536 --- [main] o.a.catalina.core.AprLifecycleListener   : The Apache Tomcat Native library could not be found using names [tcnative-1, libtcnative-1] on the java.library.path [C:\Program Files\Java\jdk1.8.0_251\bin;C:\WINDOWS\Sun\Java\bin;C:\WINDOWS\system32;C:\WINDOWS;C:\Program Files\Common Files\Oracle\Java\javapath;C:\Program Files (x86)\NetSarang\Xshell 6\;C:\Program Files (x86)\Common Files\Oracle\Java\javapath;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Windows\System32\OpenSSH\;C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common;C:\Program Files\NVIDIA Corporation\NVIDIA NvDLISR;C:\Program Files\Git\cmd;C:\Program Files\nodejs\;C:\Program Files\PuTTY\;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\;C:\WINDOWS\System32\OpenSSH\;C:\Program Files\Docker\Docker\resources\bin;C:\ProgramData\DockerDesktop\version-bin;C:\Program Files\Java\jdk1.8.0_251\bin;C:\Users\tubinyan\AppData\Local\Programs\Python\Python38\Scripts\;C:\Users\tubinyan\AppData\Local\Programs\Python\Python38\;C:\Program Files\MySQL\MySQL Shell 8.0\bin\;C:\Users\tubinyan\AppData\Local\Microsoft\WindowsApps;;C:\Users\tubinyan\AppData\Local\Programs\Microsoft VS Code\bin;C:\Users\tubinyan\AppData\Roaming\npm;C:\Program Files\Bandizip\;.]. The errors reported were [Can't load library: C:\Users\tubinyan\IdeaProjects\courselearning\bin\tcnative-1.dll, Can't load library: C:\Users\tubinyan\IdeaProjects\courselearning\bin\libtcnative-1.dll, no tcnative-1 in java.library.path, no libtcnative-1 in java.library.path]
+
+org.apache.tomcat.jni.LibraryNotFoundError: Can't load library: C:\Users\tubinyan\IdeaProjects\courselearning\bin\tcnative-1.dll, Can't load library: C:\Users\tubinyan\IdeaProjects\courselearning\bin\libtcnative-1.dll, no tcnative-1 in java.library.path, no libtcnative-1 in java.library.path
+	at org.apache.tomcat.jni.Library.<init>(Library.java:102) ~[tomcat-embed-core-9.0.41.jar:9.0.41]
+	at org.apache.tomcat.jni.Library.initialize(Library.java:206) ~[tomcat-embed-core-9.0.41.jar:9.0.41]
+	at org.apache.catalina.core.AprLifecycleListener.init(AprLifecycleListener.java:193) [tomcat-embed-core-9.0.41.jar:9.0.41]
+	at org.apache.catalina.core.AprLifecycleListener.isAprAvailable(AprLifecycleListener.java:102) [tomcat-embed-core-9.0.41.jar:9.0.41]
+	at org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory.getDefaultLifecycleListeners(TomcatServletWebServerFactory.java:174) [spring-boot-2.4.1.jar:2.4.1]
+	at org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory.<init>(TomcatServletWebServerFactory.java:121) [spring-boot-2.4.1.jar:2.4.1]
+	at org.springframework.boot.autoconfigure.web.servlet.ServletWebServerFactoryConfiguration$EmbeddedTomcat.tomcatServletWebServerFactory(ServletWebServerFactoryConfiguration.java:76) [spring-boot-autoconfigure-2.4.1.jar:2.4.1]
+	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_251]
+	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_251]
+	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_251]
+	at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_251]
+	at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:154) [spring-beans-5.3.2.jar:5.3.2]
+	at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:653) [spring-beans-5.3.2.jar:5.3.2]
+	at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:638) [spring-beans-5.3.2.jar:5.3.2]
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1336) [spring-beans-5.3.2.jar:5.3.2]
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1179) [spring-beans-5.3.2.jar:5.3.2]
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:571) [spring-beans-5.3.2.jar:5.3.2]
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:531) [spring-beans-5.3.2.jar:5.3.2]
+	at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) [spring-beans-5.3.2.jar:5.3.2]
+	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[spring-beans-5.3.2.jar:5.3.2]
+	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) [spring-beans-5.3.2.jar:5.3.2]
+	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:213) [spring-beans-5.3.2.jar:5.3.2]
+	at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.getWebServerFactory(ServletWebServerApplicationContext.java:216) ~[spring-boot-2.4.1.jar:2.4.1]
+	at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.createWebServer(ServletWebServerApplicationContext.java:179) ~[spring-boot-2.4.1.jar:2.4.1]
+	at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.onRefresh(ServletWebServerApplicationContext.java:159) ~[spring-boot-2.4.1.jar:2.4.1]
+	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:582) ~[spring-context-5.3.2.jar:5.3.2]
+	at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:144) ~[spring-boot-2.4.1.jar:2.4.1]
+	at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:767) ~[spring-boot-2.4.1.jar:2.4.1]
+	at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:759) ~[spring-boot-2.4.1.jar:2.4.1]
+	at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:426) ~[spring-boot-2.4.1.jar:2.4.1]
+	at org.springframework.boot.SpringApplication.run(SpringApplication.java:326) ~[spring-boot-2.4.1.jar:2.4.1]
+	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1309) ~[spring-boot-2.4.1.jar:2.4.1]
+	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1298) ~[spring-boot-2.4.1.jar:2.4.1]
+	at cn.seecoder.courselearning.CourseLearningApplication.main(CourseLearningApplication.java:9) ~[classes/:na]
+
+2021-03-09 11:21:11.303 DEBUG 12536 --- [RMI TCP Connection(2)-192.168.228.1] sun.rmi.transport.tcp                    : RMI TCP Connection(2)-192.168.228.1: accepted socket from [192.168.228.1:50557]
+2021-03-09 11:21:11.304 DEBUG 12536 --- [RMI TCP Connection(2)-192.168.228.1] sun.rmi.transport.tcp                    : RMI TCP Connection(2)-192.168.228.1: (port 50554) op = 80
+2021-03-09 11:21:11.304 DEBUG 12536 --- [RMI TCP Connection(2)-192.168.228.1] sun.rmi.loader                           : RMI TCP Connection(2)-192.168.228.1: name = "[Ljava.rmi.server.ObjID;", codebase = "", defaultLoader = sun.misc.Launcher$ExtClassLoader@5a42bbf4
+2021-03-09 11:21:11.304 DEBUG 12536 --- [RMI TCP Connection(2)-192.168.228.1] sun.rmi.loader                           : RMI TCP Connection(2)-192.168.228.1: name = "java.rmi.server.ObjID", codebase = "", defaultLoader = sun.misc.Launcher$ExtClassLoader@5a42bbf4
+2021-03-09 11:21:11.305 DEBUG 12536 --- [RMI TCP Connection(2)-192.168.228.1] sun.rmi.loader                           : RMI TCP Connection(2)-192.168.228.1: name = "java.rmi.server.UID", codebase = "", defaultLoader = sun.misc.Launcher$ExtClassLoader@5a42bbf4
+2021-03-09 11:21:11.305 DEBUG 12536 --- [RMI TCP Connection(2)-192.168.228.1] sun.rmi.loader                           : RMI TCP Connection(2)-192.168.228.1: name = "java.rmi.dgc.VMID", codebase = "", defaultLoader = sun.misc.Launcher$ExtClassLoader@5a42bbf4
+2021-03-09 11:21:11.305 DEBUG 12536 --- [RMI TCP Connection(2)-192.168.228.1] sun.rmi.loader                           : RMI TCP Connection(2)-192.168.228.1: name = "[B", codebase = "", defaultLoader = sun.misc.Launcher$ExtClassLoader@5a42bbf4
+2021-03-09 11:21:11.307 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Creating shared instance of singleton bean 'websocketServletWebServerCustomizer'
+2021-03-09 11:21:11.307 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Creating shared instance of singleton bean 'org.springframework.boot.autoconfigure.websocket.servlet.WebSocketServletAutoConfiguration$TomcatWebSocketConfiguration'
+2021-03-09 11:21:11.309 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Creating shared instance of singleton bean 'servletWebServerFactoryCustomizer'
+2021-03-09 11:21:11.309 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Creating shared instance of singleton bean 'org.springframework.boot.autoconfigure.web.servlet.ServletWebServerFactoryAutoConfiguration'
+2021-03-09 11:21:11.312 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Creating shared instance of singleton bean 'server-org.springframework.boot.autoconfigure.web.ServerProperties'
+2021-03-09 11:21:11.317 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Creating shared instance of singleton bean 'org.springframework.boot.context.properties.BoundConfigurationProperties'
+2021-03-09 11:21:11.323 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Autowiring by type from bean name 'servletWebServerFactoryCustomizer' via factory method to bean named 'server-org.springframework.boot.autoconfigure.web.ServerProperties'
+2021-03-09 11:21:11.324 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Creating shared instance of singleton bean 'tomcatServletWebServerFactoryCustomizer'
+2021-03-09 11:21:11.324 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Autowiring by type from bean name 'tomcatServletWebServerFactoryCustomizer' via factory method to bean named 'server-org.springframework.boot.autoconfigure.web.ServerProperties'
+2021-03-09 11:21:11.325 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Creating shared instance of singleton bean 'tomcatWebServerFactoryCustomizer'
+2021-03-09 11:21:11.325 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Creating shared instance of singleton bean 'org.springframework.boot.autoconfigure.web.embedded.EmbeddedWebServerFactoryCustomizerAutoConfiguration$TomcatWebServerFactoryCustomizerConfiguration'
+2021-03-09 11:21:11.326 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Autowiring by type from bean name 'tomcatWebServerFactoryCustomizer' via factory method to bean named 'environment'
+2021-03-09 11:21:11.326 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Autowiring by type from bean name 'tomcatWebServerFactoryCustomizer' via factory method to bean named 'server-org.springframework.boot.autoconfigure.web.ServerProperties'
+2021-03-09 11:21:11.327 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Creating shared instance of singleton bean 'localeCharsetMappingsCustomizer'
+2021-03-09 11:21:11.327 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Creating shared instance of singleton bean 'org.springframework.boot.autoconfigure.web.servlet.HttpEncodingAutoConfiguration'
+2021-03-09 11:21:11.327 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Autowiring by type from bean name 'org.springframework.boot.autoconfigure.web.servlet.HttpEncodingAutoConfiguration' via constructor to bean named 'server-org.springframework.boot.autoconfigure.web.ServerProperties'
+2021-03-09 11:21:11.345 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Creating shared instance of singleton bean 'errorPageCustomizer'
+2021-03-09 11:21:11.345 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Creating shared instance of singleton bean 'org.springframework.boot.autoconfigure.web.servlet.error.ErrorMvcAutoConfiguration'
+2021-03-09 11:21:11.345 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Autowiring by type from bean name 'org.springframework.boot.autoconfigure.web.servlet.error.ErrorMvcAutoConfiguration' via constructor to bean named 'server-org.springframework.boot.autoconfigure.web.ServerProperties'
+2021-03-09 11:21:11.347 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Creating shared instance of singleton bean 'dispatcherServletRegistration'
+2021-03-09 11:21:11.347 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Creating shared instance of singleton bean 'org.springframework.boot.autoconfigure.web.servlet.DispatcherServletAutoConfiguration$DispatcherServletRegistrationConfiguration'
+2021-03-09 11:21:11.348 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Creating shared instance of singleton bean 'dispatcherServlet'
+2021-03-09 11:21:11.348 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Creating shared instance of singleton bean 'org.springframework.boot.autoconfigure.web.servlet.DispatcherServletAutoConfiguration$DispatcherServletConfiguration'
+2021-03-09 11:21:11.349 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Creating shared instance of singleton bean 'spring.mvc-org.springframework.boot.autoconfigure.web.servlet.WebMvcProperties'
+2021-03-09 11:21:11.352 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Autowiring by type from bean name 'dispatcherServlet' via factory method to bean named 'spring.mvc-org.springframework.boot.autoconfigure.web.servlet.WebMvcProperties'
+2021-03-09 11:21:11.359 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Autowiring by type from bean name 'dispatcherServletRegistration' via factory method to bean named 'dispatcherServlet'
+2021-03-09 11:21:11.359 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Autowiring by type from bean name 'dispatcherServletRegistration' via factory method to bean named 'spring.mvc-org.springframework.boot.autoconfigure.web.servlet.WebMvcProperties'
+2021-03-09 11:21:11.361 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Creating shared instance of singleton bean 'multipartConfigElement'
+2021-03-09 11:21:11.361 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Creating shared instance of singleton bean 'org.springframework.boot.autoconfigure.web.servlet.MultipartAutoConfiguration'
+2021-03-09 11:21:11.362 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Creating shared instance of singleton bean 'spring.servlet.multipart-org.springframework.boot.autoconfigure.web.servlet.MultipartProperties'
+2021-03-09 11:21:11.365 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Autowiring by type from bean name 'org.springframework.boot.autoconfigure.web.servlet.MultipartAutoConfiguration' via constructor to bean named 'spring.servlet.multipart-org.springframework.boot.autoconfigure.web.servlet.MultipartProperties'
+2021-03-09 11:21:11.369 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Autowiring by type from bean name 'errorPageCustomizer' via factory method to bean named 'dispatcherServletRegistration'
+2021-03-09 11:21:11.378 DEBUG 12536 --- [main] o.apache.tomcat.util.compat.Jre9Compat   : Class not found so assuming code is running on a pre-Java 9 JVM
+
+java.lang.ClassNotFoundException: java.lang.reflect.InaccessibleObjectException
+	at java.net.URLClassLoader.findClass(URLClassLoader.java:382) ~[na:1.8.0_251]
+	at java.lang.ClassLoader.loadClass(ClassLoader.java:418) ~[na:1.8.0_251]
+	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:355) ~[na:1.8.0_251]
+	at java.lang.ClassLoader.loadClass(ClassLoader.java:351) ~[na:1.8.0_251]
+	at java.lang.Class.forName0(Native Method) ~[na:1.8.0_251]
+	at java.lang.Class.forName(Class.java:264) ~[na:1.8.0_251]
+	at org.apache.tomcat.util.compat.Jre9Compat.<clinit>(Jre9Compat.java:83) ~[tomcat-embed-core-9.0.41.jar:9.0.41]
+	at org.apache.tomcat.util.compat.JreCompat.<clinit>(JreCompat.java:55) [tomcat-embed-core-9.0.41.jar:9.0.41]
+	at org.apache.catalina.startup.Tomcat.<clinit>(Tomcat.java:1303) [tomcat-embed-core-9.0.41.jar:9.0.41]
+	at org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory.getWebServer(TomcatServletWebServerFactory.java:186) [spring-boot-2.4.1.jar:2.4.1]
+	at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.createWebServer(ServletWebServerApplicationContext.java:181) [spring-boot-2.4.1.jar:2.4.1]
+	at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.onRefresh(ServletWebServerApplicationContext.java:159) [spring-boot-2.4.1.jar:2.4.1]
+	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:582) [spring-context-5.3.2.jar:5.3.2]
+	at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:144) [spring-boot-2.4.1.jar:2.4.1]
+	at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:767) [spring-boot-2.4.1.jar:2.4.1]
+	at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:759) [spring-boot-2.4.1.jar:2.4.1]
+	at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:426) [spring-boot-2.4.1.jar:2.4.1]
+	at org.springframework.boot.SpringApplication.run(SpringApplication.java:326) [spring-boot-2.4.1.jar:2.4.1]
+	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1309) [spring-boot-2.4.1.jar:2.4.1]
+	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1298) [spring-boot-2.4.1.jar:2.4.1]
+	at cn.seecoder.courselearning.CourseLearningApplication.main(CourseLearningApplication.java:9) [classes/:na]
+
+2021-03-09 11:21:11.414 DEBUG 12536 --- [main] o.apache.tomcat.util.IntrospectionUtils  : IntrospectionUtils: setProperty(class org.apache.coyote.http11.Http11NioProtocol port=8081)
+2021-03-09 11:21:11.421 DEBUG 12536 --- [main] o.apache.tomcat.util.IntrospectionUtils  : IntrospectionUtils: setProperty(class org.apache.coyote.http11.Http11NioProtocol bindOnInit=false)
+2021-03-09 11:21:11.421 DEBUG 12536 --- [main] o.apache.tomcat.util.IntrospectionUtils  : IntrospectionUtils: setProperty(class org.apache.tomcat.util.net.NioEndpoint bindOnInit=false)
+2021-03-09 11:21:11.423 DEBUG 12536 --- [main] o.apache.tomcat.util.IntrospectionUtils  : IntrospectionUtils: setProperty(class org.apache.coyote.http11.Http11NioProtocol maxPostSize=2097152)
+2021-03-09 11:21:11.423 DEBUG 12536 --- [main] o.apache.tomcat.util.IntrospectionUtils  : IntrospectionUtils: setProperty(class org.apache.tomcat.util.net.NioEndpoint maxPostSize=2097152)
+2021-03-09 11:21:11.432 DEBUG 12536 --- [main] org.apache.catalina.core.ContainerBase   : Add child StandardHost[localhost] StandardEngine[Tomcat]
+2021-03-09 11:21:11.433 DEBUG 12536 --- [main] .s.b.w.e.t.TomcatServletWebServerFactory : Code archive: C:\Users\tubinyan\.m2\repository\org\springframework\boot\spring-boot\2.4.1\spring-boot-2.4.1.jar
+2021-03-09 11:21:11.433 DEBUG 12536 --- [main] .s.b.w.e.t.TomcatServletWebServerFactory : Code archive: C:\Users\tubinyan\.m2\repository\org\springframework\boot\spring-boot\2.4.1\spring-boot-2.4.1.jar
+2021-03-09 11:21:11.433 DEBUG 12536 --- [main] .s.b.w.e.t.TomcatServletWebServerFactory : None of the document roots [src/main/webapp, public, static] point to a directory and will be ignored.
+2021-03-09 11:21:11.447 DEBUG 12536 --- [main] org.apache.catalina.core.ContainerBase   : Add child TomcatEmbeddedContext[] StandardEngine[Tomcat].StandardHost[localhost]
+2021-03-09 11:21:11.449  INFO 12536 --- [main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port(s): 8081 (http)
+2021-03-09 11:21:11.455 DEBUG 12536 --- [main] o.apache.tomcat.util.IntrospectionUtils  : IntrospectionUtils: setProperty(class org.apache.coyote.http11.Http11NioProtocol parseBodyMethods=POST)
+2021-03-09 11:21:11.455 DEBUG 12536 --- [main] o.apache.tomcat.util.IntrospectionUtils  : IntrospectionUtils: setProperty(class org.apache.tomcat.util.net.NioEndpoint parseBodyMethods=POST)
+2021-03-09 11:21:11.456  INFO 12536 --- [main] o.apache.catalina.core.StandardService   : Starting service [Tomcat]
+2021-03-09 11:21:11.456  INFO 12536 --- [main] org.apache.catalina.core.StandardEngine  : Starting Servlet engine: [Apache Tomcat/9.0.41]
+2021-03-09 11:21:11.457 DEBUG 12536 --- [main] o.apache.catalina.core.StandardContext   : Starting ROOT
+2021-03-09 11:21:11.462 DEBUG 12536 --- [main] o.apache.catalina.core.StandardContext   : Configuring default Resources
+2021-03-09 11:21:11.516 DEBUG 12536 --- [main] o.apache.catalina.core.StandardContext   : Processing standard container startup
+2021-03-09 11:21:11.516 DEBUG 12536 --- [main] org.apache.catalina.loader.WebappLoader  : Starting this Loader
+2021-03-09 11:21:11.521 DEBUG 12536 --- [main] o.apache.tomcat.util.IntrospectionUtils  : IntrospectionUtils: setProperty(class org.springframework.boot.web.embedded.tomcat.TomcatEmbeddedWebappClassLoader clearReferencesRmiTargets=false)
+2021-03-09 11:21:11.522 DEBUG 12536 --- [main] o.apache.tomcat.util.IntrospectionUtils  : IntrospectionUtils: setProperty(class org.springframework.boot.web.embedded.tomcat.TomcatEmbeddedWebappClassLoader clearReferencesStopThreads=false)
+2021-03-09 11:21:11.522 DEBUG 12536 --- [main] o.apache.tomcat.util.IntrospectionUtils  : IntrospectionUtils: setProperty(class org.springframework.boot.web.embedded.tomcat.TomcatEmbeddedWebappClassLoader clearReferencesStopTimerThreads=false)
+2021-03-09 11:21:11.522 DEBUG 12536 --- [main] o.apache.tomcat.util.IntrospectionUtils  : IntrospectionUtils: setProperty(class org.springframework.boot.web.embedded.tomcat.TomcatEmbeddedWebappClassLoader clearReferencesHttpClientKeepAliveThread=true)
+2021-03-09 11:21:11.522 DEBUG 12536 --- [main] o.apache.tomcat.util.IntrospectionUtils  : IntrospectionUtils: setProperty(class org.springframework.boot.web.embedded.tomcat.TomcatEmbeddedWebappClassLoader clearReferencesObjectStreamClassCaches=false)
+2021-03-09 11:21:11.522 DEBUG 12536 --- [main] o.apache.tomcat.util.IntrospectionUtils  : IntrospectionUtils: setProperty(class org.springframework.boot.web.embedded.tomcat.TomcatEmbeddedWebappClassLoader clearReferencesObjectStreamClassCaches=false)
+2021-03-09 11:21:11.522 DEBUG 12536 --- [main] o.apache.tomcat.util.IntrospectionUtils  : IntrospectionUtils: setProperty(class org.springframework.boot.web.embedded.tomcat.TomcatEmbeddedWebappClassLoader clearReferencesThreadLocals=false)
+2021-03-09 11:21:11.538 DEBUG 12536 --- [main] o.a.c.authenticator.AuthenticatorBase    : No SingleSignOn Valve is present
+2021-03-09 11:21:11.539 DEBUG 12536 --- [main] o.apache.catalina.core.StandardContext   : No manager found. Checking if cluster manager should be used. Cluster configured: [false], Application distributable: [false]
+2021-03-09 11:21:11.542 DEBUG 12536 --- [main] o.apache.catalina.core.StandardContext   : Configured a manager of class [org.apache.catalina.session.StandardManager]
+2021-03-09 11:21:11.547  INFO 12536 --- [main] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
+2021-03-09 11:21:11.547 DEBUG 12536 --- [main] w.s.c.ServletWebServerApplicationContext : Published root WebApplicationContext as ServletContext attribute with name [org.springframework.web.context.WebApplicationContext.ROOT]
+2021-03-09 11:21:11.547  INFO 12536 --- [main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 939 ms
+2021-03-09 11:21:11.549 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Creating shared instance of singleton bean 'corsFilter'
+2021-03-09 11:21:11.549 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Creating shared instance of singleton bean 'corsConfig'
+2021-03-09 11:21:11.564 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Creating shared instance of singleton bean 'requestContextFilter'
+2021-03-09 11:21:11.565 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Creating shared instance of singleton bean 'formContentFilter'
+2021-03-09 11:21:11.566 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Creating shared instance of singleton bean 'org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration'
+2021-03-09 11:21:11.569 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Creating shared instance of singleton bean 'characterEncodingFilter'
+2021-03-09 11:21:11.575 DEBUG 12536 --- [main] o.s.b.w.s.ServletContextInitializerBeans : Mapping filters: characterEncodingFilter urls=[/*] order=-2147483648, formContentFilter urls=[/*] order=-9900, requestContextFilter urls=[/*] order=-105, corsFilter urls=[/*] order=2147483647
+2021-03-09 11:21:11.575 DEBUG 12536 --- [main] o.s.b.w.s.ServletContextInitializerBeans : Mapping servlets: dispatcherServlet urls=[/]
+2021-03-09 11:21:11.576 DEBUG 12536 --- [RMI TCP Connection(3)-192.168.228.1] sun.rmi.transport.tcp                    : RMI TCP Connection(3)-192.168.228.1: accepted socket from [192.168.228.1:50558]
+2021-03-09 11:21:11.576 DEBUG 12536 --- [main] org.apache.catalina.core.ContainerBase   : Add child StandardWrapper[dispatcherServlet] StandardEngine[Tomcat].StandardHost[localhost].TomcatEmbeddedContext[]
+2021-03-09 11:21:11.577 DEBUG 12536 --- [RMI TCP Connection(3)-192.168.228.1] sun.rmi.transport.tcp                    : RMI TCP Connection(3)-192.168.228.1: (port 50554) op = 80
+2021-03-09 11:21:11.577 DEBUG 12536 --- [RMI TCP Connection(3)-192.168.228.1] sun.rmi.loader                           : RMI TCP Connection(3)-192.168.228.1: name = "[Ljava.rmi.server.ObjID;", codebase = "", defaultLoader = sun.misc.Launcher$ExtClassLoader@5a42bbf4
+2021-03-09 11:21:11.577 DEBUG 12536 --- [RMI TCP Connection(3)-192.168.228.1] sun.rmi.loader                           : RMI TCP Connection(3)-192.168.228.1: name = "java.rmi.server.ObjID", codebase = "", defaultLoader = sun.misc.Launcher$ExtClassLoader@5a42bbf4
+2021-03-09 11:21:11.577 DEBUG 12536 --- [RMI TCP Connection(3)-192.168.228.1] sun.rmi.loader                           : RMI TCP Connection(3)-192.168.228.1: name = "java.rmi.server.UID", codebase = "", defaultLoader = sun.misc.Launcher$ExtClassLoader@5a42bbf4
+2021-03-09 11:21:11.577 DEBUG 12536 --- [RMI TCP Connection(3)-192.168.228.1] sun.rmi.loader                           : RMI TCP Connection(3)-192.168.228.1: name = "java.rmi.dgc.Lease", codebase = "", defaultLoader = sun.misc.Launcher$ExtClassLoader@5a42bbf4
+2021-03-09 11:21:11.578 DEBUG 12536 --- [RMI TCP Connection(3)-192.168.228.1] sun.rmi.loader                           : RMI TCP Connection(3)-192.168.228.1: name = "java.rmi.dgc.VMID", codebase = "", defaultLoader = sun.misc.Launcher$ExtClassLoader@5a42bbf4
+2021-03-09 11:21:11.578 DEBUG 12536 --- [RMI TCP Connection(3)-192.168.228.1] sun.rmi.loader                           : RMI TCP Connection(3)-192.168.228.1: name = "[B", codebase = "", defaultLoader = sun.misc.Launcher$ExtClassLoader@5a42bbf4
+2021-03-09 11:21:11.578 DEBUG 12536 --- [RMI TCP Connection(3)-192.168.228.1] sun.rmi.transport.tcp                    : RMI TCP Connection(3)-192.168.228.1: (port 50554) op = 80
+2021-03-09 11:21:11.579 DEBUG 12536 --- [RMI TCP Connection(3)-192.168.228.1] sun.rmi.transport.tcp                    : RMI TCP Connection(3)-192.168.228.1: (port 50554) op = 80
+2021-03-09 11:21:11.580 DEBUG 12536 --- [RMI TCP Connection(3)-192.168.228.1] sun.rmi.loader                           : RMI TCP Connection(3)-192.168.228.1: name = "[Ljava.rmi.server.ObjID;", codebase = "", defaultLoader = sun.misc.Launcher$ExtClassLoader@5a42bbf4
+2021-03-09 11:21:11.580 DEBUG 12536 --- [RMI TCP Connection(3)-192.168.228.1] sun.rmi.loader                           : RMI TCP Connection(3)-192.168.228.1: name = "java.rmi.server.ObjID", codebase = "", defaultLoader = sun.misc.Launcher$ExtClassLoader@5a42bbf4
+2021-03-09 11:21:11.580 DEBUG 12536 --- [RMI TCP Connection(3)-192.168.228.1] sun.rmi.loader                           : RMI TCP Connection(3)-192.168.228.1: name = "java.rmi.server.UID", codebase = "", defaultLoader = sun.misc.Launcher$ExtClassLoader@5a42bbf4
+2021-03-09 11:21:11.580 DEBUG 12536 --- [RMI TCP Connection(3)-192.168.228.1] sun.rmi.loader                           : RMI TCP Connection(3)-192.168.228.1: name = "java.rmi.dgc.Lease", codebase = "", defaultLoader = sun.misc.Launcher$ExtClassLoader@5a42bbf4
+2021-03-09 11:21:11.580 DEBUG 12536 --- [RMI TCP Connection(3)-192.168.228.1] sun.rmi.loader                           : RMI TCP Connection(3)-192.168.228.1: name = "java.rmi.dgc.VMID", codebase = "", defaultLoader = sun.misc.Launcher$ExtClassLoader@5a42bbf4
+2021-03-09 11:21:11.580 DEBUG 12536 --- [RMI TCP Connection(3)-192.168.228.1] sun.rmi.loader                           : RMI TCP Connection(3)-192.168.228.1: name = "[B", codebase = "", defaultLoader = sun.misc.Launcher$ExtClassLoader@5a42bbf4
+2021-03-09 11:21:11.581 DEBUG 12536 --- [RMI TCP Connection(3)-192.168.228.1] sun.rmi.transport.tcp                    : RMI TCP Connection(3)-192.168.228.1: (port 50554) op = 84
+2021-03-09 11:21:11.581 DEBUG 12536 --- [RMI TCP Connection(3)-192.168.228.1] sun.rmi.transport.tcp                    : RMI TCP Connection(3)-192.168.228.1: (port 50554) op = 80
+2021-03-09 11:21:11.581 DEBUG 12536 --- [RMI TCP Connection(3)-192.168.228.1] sun.rmi.transport.tcp                    : RMI TCP Connection(3)-192.168.228.1: (port 50554) op = 80
+2021-03-09 11:21:11.582 DEBUG 12536 --- [RMI TCP Connection(3)-192.168.228.1] sun.rmi.loader                           : RMI TCP Connection(3)-192.168.228.1: name = "javax.management.ObjectName", codebase = ""
+2021-03-09 11:21:11.582 DEBUG 12536 --- [RMI TCP Connection(3)-192.168.228.1] sun.rmi.server.call                      : RMI TCP Connection(3)-192.168.228.1: [192.168.228.1] exception: 
+
+javax.management.InstanceNotFoundException: org.springframework.boot:type=Admin,name=SpringApplication
+	at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.getMBean(DefaultMBeanServerInterceptor.java:1095) ~[na:1.8.0_251]
+	at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.getAttribute(DefaultMBeanServerInterceptor.java:643) ~[na:1.8.0_251]
+	at com.sun.jmx.mbeanserver.JmxMBeanServer.getAttribute(JmxMBeanServer.java:678) ~[na:1.8.0_251]
+	at javax.management.remote.rmi.RMIConnectionImpl.doOperation(RMIConnectionImpl.java:1445) ~[na:1.8.0_251]
+	at javax.management.remote.rmi.RMIConnectionImpl.access$300(RMIConnectionImpl.java:76) ~[na:1.8.0_251]
+	at javax.management.remote.rmi.RMIConnectionImpl$PrivilegedOperation.run(RMIConnectionImpl.java:1309) ~[na:1.8.0_251]
+	at javax.management.remote.rmi.RMIConnectionImpl.doPrivilegedOperation(RMIConnectionImpl.java:1401) ~[na:1.8.0_251]
+	at javax.management.remote.rmi.RMIConnectionImpl.getAttribute(RMIConnectionImpl.java:639) ~[na:1.8.0_251]
+	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_251]
+	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_251]
+	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_251]
+	at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_251]
+	at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:357) ~[na:1.8.0_251]
+	at sun.rmi.transport.Transport$1.run(Transport.java:200) [na:1.8.0_251]
+	at sun.rmi.transport.Transport$1.run(Transport.java:197) [na:1.8.0_251]
+	at java.security.AccessController.doPrivileged(Native Method) [na:1.8.0_251]
+	at sun.rmi.transport.Transport.serviceCall(Transport.java:196) [na:1.8.0_251]
+	at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:573) [na:1.8.0_251]
+	at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:834) [na:1.8.0_251]
+	at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.lambda$run$0(TCPTransport.java:688) [na:1.8.0_251]
+	at java.security.AccessController.doPrivileged(Native Method) [na:1.8.0_251]
+	at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:687) [na:1.8.0_251]
+	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) ~[na:1.8.0_251]
+	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) ~[na:1.8.0_251]
+	at java.lang.Thread.run(Thread.java:748) ~[na:1.8.0_251]
+
+2021-03-09 11:21:11.583 DEBUG 12536 --- [RMI TCP Connection(3)-192.168.228.1] sun.rmi.transport.tcp                    : RMI TCP Connection(3)-192.168.228.1: (port 50554) op = 80
+2021-03-09 11:21:11.590 DEBUG 12536 --- [main] o.apache.catalina.core.StandardContext   : Configuring application event listeners
+2021-03-09 11:21:11.590 DEBUG 12536 --- [main] o.a.c.c.C.[Tomcat].[localhost].[/]       : Sending application start events
+2021-03-09 11:21:11.591 DEBUG 12536 --- [main] o.a.catalina.session.StandardManager     : Start: Loading persisted sessions
+2021-03-09 11:21:11.591 DEBUG 12536 --- [main] o.a.catalina.session.StandardManager     : Loading persisted sessions from [SESSIONS.ser]
+2021-03-09 11:21:11.592 DEBUG 12536 --- [main] o.a.catalina.session.StandardManager     : No persisted data file found
+2021-03-09 11:21:11.592 DEBUG 12536 --- [main] o.a.c.c.C.[Tomcat].[localhost].[/]       : Starting filters
+2021-03-09 11:21:11.592 DEBUG 12536 --- [main] o.a.c.c.C.[Tomcat].[localhost].[/]       :  Starting filter 'requestContextFilter'
+2021-03-09 11:21:11.594 DEBUG 12536 --- [main] o.s.b.w.s.f.OrderedRequestContextFilter  : Filter 'requestContextFilter' configured for use
+2021-03-09 11:21:11.594 DEBUG 12536 --- [main] o.a.c.c.C.[Tomcat].[localhost].[/]       :  Starting filter 'Tomcat WebSocket (JSR356) Filter'
+2021-03-09 11:21:11.594 DEBUG 12536 --- [main] o.a.c.c.C.[Tomcat].[localhost].[/]       :  Starting filter 'corsFilter'
+2021-03-09 11:21:11.594 DEBUG 12536 --- [main] o.springframework.web.filter.CorsFilter  : Filter 'corsFilter' configured for use
+2021-03-09 11:21:11.595 DEBUG 12536 --- [main] o.a.c.c.C.[Tomcat].[localhost].[/]       :  Starting filter 'characterEncodingFilter'
+2021-03-09 11:21:11.595 DEBUG 12536 --- [main] s.b.w.s.f.OrderedCharacterEncodingFilter : Filter 'characterEncodingFilter' configured for use
+2021-03-09 11:21:11.595 DEBUG 12536 --- [main] o.a.c.c.C.[Tomcat].[localhost].[/]       :  Starting filter 'formContentFilter'
+2021-03-09 11:21:11.595 DEBUG 12536 --- [main] o.s.b.w.s.f.OrderedFormContentFilter     : Filter 'formContentFilter' configured for use
+2021-03-09 11:21:11.595 DEBUG 12536 --- [main] o.apache.catalina.core.StandardContext   : Starting completed
+2021-03-09 11:21:11.597 DEBUG 12536 --- [main] org.apache.catalina.mapper.Mapper        : Registered host [localhost]
+2021-03-09 11:21:11.597 DEBUG 12536 --- [main] o.apache.catalina.mapper.MapperListener  : Register Wrapper [dispatcherServlet] in Context [] for service [StandardService[Tomcat]]
+2021-03-09 11:21:11.598 DEBUG 12536 --- [main] o.apache.catalina.mapper.MapperListener  : Register Context [] for service [StandardService[Tomcat]]
+2021-03-09 11:21:11.598 DEBUG 12536 --- [main] o.apache.catalina.mapper.MapperListener  : Register host [localhost] at domain [null] for service [StandardService[Tomcat]]
+2021-03-09 11:21:11.603 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Creating shared instance of singleton bean 'courseLearningApplication'
+2021-03-09 11:21:11.604 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Creating shared instance of singleton bean 'dataSourceConfig'
+2021-03-09 11:21:11.605 DEBUG 12536 --- [main] o.s.c.e.PropertySourcesPropertyResolver  : Found key 'spring.datasource.url' in PropertySource 'configurationProperties' with value of type String
+2021-03-09 11:21:11.605 DEBUG 12536 --- [main] o.s.c.e.PropertySourcesPropertyResolver  : Found key 'spring.datasource.url' in PropertySource 'environmentProperties' with value of type String
+2021-03-09 11:21:11.606 DEBUG 12536 --- [main] o.s.c.e.PropertySourcesPropertyResolver  : Found key 'spring.datasource.username' in PropertySource 'configurationProperties' with value of type String
+2021-03-09 11:21:11.606 DEBUG 12536 --- [main] o.s.c.e.PropertySourcesPropertyResolver  : Found key 'spring.datasource.username' in PropertySource 'environmentProperties' with value of type String
+2021-03-09 11:21:11.607 DEBUG 12536 --- [main] o.s.c.e.PropertySourcesPropertyResolver  : Found key 'spring.datasource.password' in PropertySource 'configurationProperties' with value of type Integer
+2021-03-09 11:21:11.607 DEBUG 12536 --- [main] o.s.c.e.PropertySourcesPropertyResolver  : Found key 'spring.datasource.password' in PropertySource 'environmentProperties' with value of type String
+2021-03-09 11:21:11.607 DEBUG 12536 --- [main] o.s.c.e.PropertySourcesPropertyResolver  : Found key 'spring.datasource.driver-class-name' in PropertySource 'configurationProperties' with value of type String
+2021-03-09 11:21:11.607 DEBUG 12536 --- [main] o.s.c.e.PropertySourcesPropertyResolver  : Found key 'spring.datasource.driver-class-name' in PropertySource 'environmentProperties' with value of type String
+2021-03-09 11:21:11.608 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Creating shared instance of singleton bean 'courseController'
+2021-03-09 11:21:11.612 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Creating shared instance of singleton bean 'courseServiceImpl'
+2021-03-09 11:21:11.613 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Creating shared instance of singleton bean 'courseMapper'
+2021-03-09 11:21:11.617 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Creating shared instance of singleton bean 'testDsSqlSessionFactory'
+2021-03-09 11:21:11.618 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Creating shared instance of singleton bean 'testDataSource'
+2021-03-09 11:21:11.633  INFO 12536 --- [MLog-Init-Reporter] com.mchange.v2.log.MLog                  : MLog clients using slf4j logging.
+2021-03-09 11:21:11.636 DEBUG 12536 --- [MLog-Init-Reporter] com.mchange.v2.log.MLog                  : Reading VM config for path list /com/mchange/v2/log/default-mchange-log.properties, /mchange-commons.properties, /c3p0.properties, hocon:/reference,/application,/c3p0,/, /mchange-log.properties, /
+2021-03-09 11:21:11.636 DEBUG 12536 --- [MLog-Init-Reporter] com.mchange.v2.log.MLog                  : The configuration file for resource identifier '/mchange-commons.properties' could not be found. Skipping.
+2021-03-09 11:21:11.636 DEBUG 12536 --- [MLog-Init-Reporter] com.mchange.v2.log.MLog                  : The configuration file for resource identifier '/c3p0.properties' could not be found. Skipping.
+2021-03-09 11:21:11.636 DEBUG 12536 --- [MLog-Init-Reporter] com.mchange.v2.log.MLog                  : The configuration file for resource identifier 'hocon:/reference,/application,/c3p0,/' could not be found. Skipping.
+2021-03-09 11:21:11.636 DEBUG 12536 --- [MLog-Init-Reporter] com.mchange.v2.log.MLog                  : The configuration file for resource identifier '/mchange-log.properties' could not be found. Skipping.
+2021-03-09 11:21:11.638 DEBUG 12536 --- [main] com.mchange.v2.cfg.MConfig               : The configuration file for resource identifier '/mchange-commons.properties' could not be found. Skipping.
+2021-03-09 11:21:11.638 DEBUG 12536 --- [main] com.mchange.v2.cfg.MConfig               : The configuration file for resource identifier '/mchange-log.properties' could not be found. Skipping.
+2021-03-09 11:21:11.638 DEBUG 12536 --- [main] com.mchange.v2.cfg.MConfig               : The configuration file for resource identifier 'hocon:/reference,/application,/c3p0,/' could not be found. Skipping.
+2021-03-09 11:21:11.638 DEBUG 12536 --- [main] com.mchange.v2.cfg.MConfig               : The configuration file for resource identifier '/c3p0.properties' could not be found. Skipping.
+2021-03-09 11:21:11.652  INFO 12536 --- [main] com.mchange.v2.c3p0.C3P0Registry         : Initializing c3p0-0.9.5.2 [built 08-December-2015 22:06:04 -0800; debug? true; trace: 10]
+2021-03-09 11:21:11.665 DEBUG 12536 --- [main] .c.m.DynamicPooledDataSourceManagerMBean : MBean: com.mchange.v2.c3p0:type=PooledDataSource,identityToken=1hgf9xdag5tsh5q1ng0ml7|16fe9c29,name=1hgf9xdag5tsh5q1ng0ml7|16fe9c29 registered.
+2021-03-09 11:21:11.676 DEBUG 12536 --- [main] .c.m.DynamicPooledDataSourceManagerMBean : MBean: com.mchange.v2.c3p0:type=PooledDataSource,identityToken=1hgf9xdag5tsh5q1ng0ml7|16fe9c29,name=1hgf9xdag5tsh5q1ng0ml7|16fe9c29 unregistered, in order to be reregistered after update.
+2021-03-09 11:21:11.676 DEBUG 12536 --- [main] .c.m.DynamicPooledDataSourceManagerMBean : MBean: com.mchange.v2.c3p0:type=PooledDataSource,identityToken=1hgf9xdag5tsh5q1ng0ml7|16fe9c29,name=1hgf9xdag5tsh5q1ng0ml7|16fe9c29 registered.
+2021-03-09 11:21:11.683 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Creating shared instance of singleton bean 'org.springframework.boot.autoconfigure.jdbc.DataSourceInitializerInvoker'
+2021-03-09 11:21:11.684 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Creating shared instance of singleton bean 'spring.datasource-org.springframework.boot.autoconfigure.jdbc.DataSourceProperties'
+2021-03-09 11:21:11.692 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Autowiring by type from bean name 'org.springframework.boot.autoconfigure.jdbc.DataSourceInitializerInvoker' via constructor to bean named 'spring.datasource-org.springframework.boot.autoconfigure.jdbc.DataSourceProperties'
+2021-03-09 11:21:11.692 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Autowiring by type from bean name 'org.springframework.boot.autoconfigure.jdbc.DataSourceInitializerInvoker' via constructor to bean named 'org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext@53976f5c'
+2021-03-09 11:21:11.694 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Autowiring by type from bean name 'testDsSqlSessionFactory' via factory method to bean named 'testDataSource'
+2021-03-09 11:21:11.770 DEBUG 12536 --- [main] o.mybatis.spring.SqlSessionFactoryBean   : Registered plugin: 'com.github.pagehelper.PageInterceptor@7573e12f'
+2021-03-09 11:21:11.798 DEBUG 12536 --- [main] o.mybatis.spring.SqlSessionFactoryBean   : Parsed configuration file: 'class path resource [mybatis-config.xml]'
+2021-03-09 11:21:11.846 DEBUG 12536 --- [main] o.mybatis.spring.SqlSessionFactoryBean   : Parsed mapper file: 'file [C:\Users\tubinyan\IdeaProjects\courselearning\target\classes\mapper\CourseMapper.xml]'
+2021-03-09 11:21:11.855 DEBUG 12536 --- [main] o.mybatis.spring.SqlSessionFactoryBean   : Parsed mapper file: 'file [C:\Users\tubinyan\IdeaProjects\courselearning\target\classes\mapper\CourseOrderMapper.xml]'
+2021-03-09 11:21:11.864 DEBUG 12536 --- [main] o.mybatis.spring.SqlSessionFactoryBean   : Parsed mapper file: 'file [C:\Users\tubinyan\IdeaProjects\courselearning\target\classes\mapper\CourseWareMapper.xml]'
+2021-03-09 11:21:11.873 DEBUG 12536 --- [main] o.mybatis.spring.SqlSessionFactoryBean   : Parsed mapper file: 'file [C:\Users\tubinyan\IdeaProjects\courselearning\target\classes\mapper\RechargeOrderMapper.xml]'
+2021-03-09 11:21:11.881 DEBUG 12536 --- [main] o.mybatis.spring.SqlSessionFactoryBean   : Parsed mapper file: 'file [C:\Users\tubinyan\IdeaProjects\courselearning\target\classes\mapper\UserMapper.xml]'
+2021-03-09 11:21:11.887 DEBUG 12536 --- [main] o.mybatis.spring.SqlSessionFactoryBean   : Parsed mapper file: 'file [C:\Users\tubinyan\IdeaProjects\courselearning\target\classes\mapper\UserTokenMapper.xml]'
+2021-03-09 11:21:11.893 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Creating shared instance of singleton bean 'courseOrderMapper'
+2021-03-09 11:21:11.895 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Creating shared instance of singleton bean 'courseOrderController'
+2021-03-09 11:21:11.897 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Creating shared instance of singleton bean 'courseOrderServiceImpl'
+2021-03-09 11:21:11.897 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Creating shared instance of singleton bean 'userMapper'
+2021-03-09 11:21:11.898 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Creating shared instance of singleton bean 'courseWareController'
+2021-03-09 11:21:11.899 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Creating shared instance of singleton bean 'courseWareServiceImpl'
+2021-03-09 11:21:11.899 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Creating shared instance of singleton bean 'courseWareMapper'
+2021-03-09 11:21:11.901 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Creating shared instance of singleton bean 'notifyController'
+2021-03-09 11:21:11.901 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Creating shared instance of singleton bean 'sendNotifyServiceImpl'
+2021-03-09 11:21:11.971 DEBUG 12536 --- [main] jdk.event.security                       : X509Certificate: Alg:SHA1withDSA, Serial:40216811, Subject:CN=JCE Code Signing CA, OU=IBM Code Signing, O=IBM Corporation, C=US, Issuer:CN=JCE Code Signing CA, OU=IBM Code Signing, O=IBM Corporation, C=US, Key type:DSA, Length:1024, Cert Id:-1826632887, Valid from:Thu Feb 05 05:45:53 CST 2004, Valid until:Wed May 27 04:45:53 CST 2020
+2021-03-09 11:21:11.971 DEBUG 12536 --- [main] jdk.event.security                       : X509Certificate: Alg:SHA256withRSA, Serial:3c9eb1fc89f733d3, Subject:CN=JCE Code Signing CA, OU=Java Software Code Signing, O=Oracle Corporation, Issuer:CN=JCE Code Signing CA, OU=Java Software Code Signing, O=Oracle Corporation, Key type:RSA, Length:2048, Cert Id:-1250580323, Valid from:Thu Jul 07 07:48:44 CST 2016, Valid until:Tue Dec 31 08:00:00 CST 2030
+2021-03-09 11:21:12.087 DEBUG 12536 --- [RMI TCP Connection(3)-192.168.228.1] sun.rmi.transport.tcp                    : RMI TCP Connection(3)-192.168.228.1: (port 50554) op = 82
+2021-03-09 11:21:12.087 DEBUG 12536 --- [RMI TCP Connection(3)-192.168.228.1] sun.rmi.transport.tcp                    : RMI TCP Connection(3)-192.168.228.1: (port 50554) op = 80
+2021-03-09 11:21:12.088 DEBUG 12536 --- [RMI TCP Connection(3)-192.168.228.1] sun.rmi.transport.tcp                    : RMI TCP Connection(3)-192.168.228.1: (port 50554) op = 80
+2021-03-09 11:21:12.089 DEBUG 12536 --- [RMI TCP Connection(3)-192.168.228.1] sun.rmi.loader                           : RMI TCP Connection(3)-192.168.228.1: name = "[Ljava.rmi.server.ObjID;", codebase = "", defaultLoader = sun.misc.Launcher$ExtClassLoader@5a42bbf4
+2021-03-09 11:21:12.089 DEBUG 12536 --- [RMI TCP Connection(3)-192.168.228.1] sun.rmi.loader                           : RMI TCP Connection(3)-192.168.228.1: name = "java.rmi.server.ObjID", codebase = "", defaultLoader = sun.misc.Launcher$ExtClassLoader@5a42bbf4
+2021-03-09 11:21:12.089 DEBUG 12536 --- [RMI TCP Connection(3)-192.168.228.1] sun.rmi.loader                           : RMI TCP Connection(3)-192.168.228.1: name = "java.rmi.server.UID", codebase = "", defaultLoader = sun.misc.Launcher$ExtClassLoader@5a42bbf4
+2021-03-09 11:21:12.089 DEBUG 12536 --- [RMI TCP Connection(3)-192.168.228.1] sun.rmi.loader                           : RMI TCP Connection(3)-192.168.228.1: name = "java.rmi.dgc.Lease", codebase = "", defaultLoader = sun.misc.Launcher$ExtClassLoader@5a42bbf4
+2021-03-09 11:21:12.089 DEBUG 12536 --- [RMI TCP Connection(3)-192.168.228.1] sun.rmi.loader                           : RMI TCP Connection(3)-192.168.228.1: name = "java.rmi.dgc.VMID", codebase = "", defaultLoader = sun.misc.Launcher$ExtClassLoader@5a42bbf4
+2021-03-09 11:21:12.089 DEBUG 12536 --- [RMI TCP Connection(3)-192.168.228.1] sun.rmi.loader                           : RMI TCP Connection(3)-192.168.228.1: name = "[B", codebase = "", defaultLoader = sun.misc.Launcher$ExtClassLoader@5a42bbf4
+2021-03-09 11:21:12.090 DEBUG 12536 --- [RMI TCP Connection(3)-192.168.228.1] sun.rmi.transport.tcp                    : RMI TCP Connection(3)-192.168.228.1: (port 50554) op = 84
+2021-03-09 11:21:12.090 DEBUG 12536 --- [RMI TCP Connection(3)-192.168.228.1] sun.rmi.transport.tcp                    : RMI TCP Connection(3)-192.168.228.1: (port 50554) op = 80
+2021-03-09 11:21:12.091 DEBUG 12536 --- [RMI TCP Connection(3)-192.168.228.1] sun.rmi.transport.tcp                    : RMI TCP Connection(3)-192.168.228.1: (port 50554) op = 80
+2021-03-09 11:21:12.091 DEBUG 12536 --- [RMI TCP Connection(3)-192.168.228.1] sun.rmi.loader                           : RMI TCP Connection(3)-192.168.228.1: name = "javax.management.ObjectName", codebase = ""
+2021-03-09 11:21:12.091 DEBUG 12536 --- [RMI TCP Connection(3)-192.168.228.1] sun.rmi.server.call                      : RMI TCP Connection(3)-192.168.228.1: [192.168.228.1] exception: 
+
+javax.management.InstanceNotFoundException: org.springframework.boot:type=Admin,name=SpringApplication
+	at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.getMBean(DefaultMBeanServerInterceptor.java:1095) ~[na:1.8.0_251]
+	at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.getAttribute(DefaultMBeanServerInterceptor.java:643) ~[na:1.8.0_251]
+	at com.sun.jmx.mbeanserver.JmxMBeanServer.getAttribute(JmxMBeanServer.java:678) ~[na:1.8.0_251]
+	at javax.management.remote.rmi.RMIConnectionImpl.doOperation(RMIConnectionImpl.java:1445) ~[na:1.8.0_251]
+	at javax.management.remote.rmi.RMIConnectionImpl.access$300(RMIConnectionImpl.java:76) ~[na:1.8.0_251]
+	at javax.management.remote.rmi.RMIConnectionImpl$PrivilegedOperation.run(RMIConnectionImpl.java:1309) ~[na:1.8.0_251]
+	at javax.management.remote.rmi.RMIConnectionImpl.doPrivilegedOperation(RMIConnectionImpl.java:1401) ~[na:1.8.0_251]
+	at javax.management.remote.rmi.RMIConnectionImpl.getAttribute(RMIConnectionImpl.java:639) ~[na:1.8.0_251]
+	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_251]
+	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_251]
+	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_251]
+	at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_251]
+	at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:357) ~[na:1.8.0_251]
+	at sun.rmi.transport.Transport$1.run(Transport.java:200) [na:1.8.0_251]
+	at sun.rmi.transport.Transport$1.run(Transport.java:197) [na:1.8.0_251]
+	at java.security.AccessController.doPrivileged(Native Method) [na:1.8.0_251]
+	at sun.rmi.transport.Transport.serviceCall(Transport.java:196) [na:1.8.0_251]
+	at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:573) [na:1.8.0_251]
+	at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:834) [na:1.8.0_251]
+	at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.lambda$run$0(TCPTransport.java:688) [na:1.8.0_251]
+	at java.security.AccessController.doPrivileged(Native Method) [na:1.8.0_251]
+	at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:687) [na:1.8.0_251]
+	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) ~[na:1.8.0_251]
+	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) ~[na:1.8.0_251]
+	at java.lang.Thread.run(Thread.java:748) ~[na:1.8.0_251]
+
+2021-03-09 11:21:12.093 DEBUG 12536 --- [RMI TCP Connection(3)-192.168.228.1] sun.rmi.transport.tcp                    : RMI TCP Connection(3)-192.168.228.1: (port 50554) op = 80
+2021-03-09 11:21:12.200 DEBUG 12536 --- [main] jdk.event.security                       : X509Certificate: Alg:SHA1withDSA, Serial:37f939e5, Subject:CN=JCE Development, OU=Java Software, O=Sun Microsystems, L=Cupertino, ST=CA, C=US, Issuer:CN=JCE Development, OU=Java Software, O=Sun Microsystems, L=Cupertino, ST=CA, C=US, Key type:DSA, Length:1024, Cert Id:437846785, Valid from:Tue Oct 05 07:36:05 CST 1999, Valid until:Wed Oct 04 07:36:05 CST 2000
+2021-03-09 11:21:12.201 DEBUG 12536 --- [main] jdk.event.security                       : X509Certificate: Alg:MD5withRSA, Serial:1, Subject:CN=JCE Development, OU=Java Software, O=Sun Microsystems, L=Cupertino, ST=CA, C=US, Issuer:CN=JCE Development, OU=Java Software, O=Sun Microsystems, L=Cupertino, ST=CA, C=US, Key type:RSA, Length:512, Cert Id:-349125968, Valid from:Thu Oct 31 23:27:44 CST 2002, Valid until:Wed Oct 31 23:27:44 CST 2007
+2021-03-09 11:21:12.201 DEBUG 12536 --- [main] jdk.event.security                       : X509Certificate: Alg:MD5withRSA, Serial:2, Subject:CN=JCE Development, OU=Java Software, O=Sun Microsystems, L=Cupertino, ST=CA, C=US, Issuer:CN=JCE Development, OU=Java Software, O=Sun Microsystems, L=Cupertino, ST=CA, C=US, Key type:RSA, Length:512, Cert Id:1200127482, Valid from:Thu Oct 31 23:27:44 CST 2002, Valid until:Wed Oct 31 23:27:44 CST 2007
+2021-03-09 11:21:12.221 DEBUG 12536 --- [main] jdk.event.security                       : X509Certificate: Alg:SHA1withRSA, Serial:b92f60cc889fa17a4609b85b706c8aaf, Subject:OU=VeriSign Trust Network, OU="(c) 1998 VeriSign, Inc. - For authorized use only", OU=Class 2 Public Primary Certification Authority - G2, O="VeriSign, Inc.", C=US, Issuer:OU=VeriSign Trust Network, OU="(c) 1998 VeriSign, Inc. - For authorized use only", OU=Class 2 Public Primary Certification Authority - G2, O="VeriSign, Inc.", C=US, Key type:RSA, Length:1024, Cert Id:-1971861053, Valid from:Mon May 18 08:00:00 CST 1998, Valid until:Wed Aug 02 07:59:59 CST 2028
+2021-03-09 11:21:12.223 DEBUG 12536 --- [main] jdk.event.security                       : X509Certificate: Alg:SHA384withECDSA, Serial:ba15afa1ddfa0b54944afcd24a06cec, Subject:CN=DigiCert Assured ID Root G3, OU=www.digicert.com, O=DigiCert Inc, C=US, Issuer:CN=DigiCert Assured ID Root G3, OU=www.digicert.com, O=DigiCert Inc, C=US, Key type:EC, Length:384, Cert Id:-645537245, Valid from:Thu Aug 01 20:00:00 CST 2013, Valid until:Fri Jan 15 20:00:00 CST 2038
+2021-03-09 11:21:12.223 DEBUG 12536 --- [main] jdk.event.security                       : X509Certificate: Alg:SHA256withRSA, Serial:401ac46421b31321030ebbe4121ac51d, Subject:CN=VeriSign Universal Root Certification Authority, OU="(c) 2008 VeriSign, Inc. - For authorized use only", OU=VeriSign Trust Network, O="VeriSign, Inc.", C=US, Issuer:CN=VeriSign Universal Root Certification Authority, OU="(c) 2008 VeriSign, Inc. - For authorized use only", OU=VeriSign Trust Network, O="VeriSign, Inc.", C=US, Key type:RSA, Length:2048, Cert Id:-1976681486, Valid from:Wed Apr 02 08:00:00 CST 2008, Valid until:Wed Dec 02 07:59:59 CST 2037
+2021-03-09 11:21:12.223 DEBUG 12536 --- [main] jdk.event.security                       : X509Certificate: Alg:SHA384withRSA, Serial:59b1b579e8e2132e23907bda777755c, Subject:CN=DigiCert Trusted Root G4, OU=www.digicert.com, O=DigiCert Inc, C=US, Issuer:CN=DigiCert Trusted Root G4, OU=www.digicert.com, O=DigiCert Inc, C=US, Key type:RSA, Length:4096, Cert Id:1057369358, Valid from:Thu Aug 01 20:00:00 CST 2013, Valid until:Fri Jan 15 20:00:00 CST 2038
+2021-03-09 11:21:12.224 DEBUG 12536 --- [main] jdk.event.security                       : X509Certificate: Alg:SHA256withRSA, Serial:a7ea6df4b449eda6a24859ee6b815d3167fbbb1, Subject:CN=LuxTrust Global Root 2, O=LuxTrust S.A., C=LU, Issuer:CN=LuxTrust Global Root 2, O=LuxTrust S.A., C=LU, Key type:RSA, Length:4096, Cert Id:-1239330694, Valid from:Thu Mar 05 21:21:57 CST 2015, Valid until:Mon Mar 05 21:21:57 CST 2035
+2021-03-09 11:21:12.225 DEBUG 12536 --- [main] jdk.event.security                       : X509Certificate: Alg:SHA256withRSA, Serial:a0142800000014523cf467c00000002, Subject:CN=IdenTrust Public Sector Root CA 1, O=IdenTrust, C=US, Issuer:CN=IdenTrust Public Sector Root CA 1, O=IdenTrust, C=US, Key type:RSA, Length:4096, Cert Id:2123370772, Valid from:Fri Jan 17 01:53:32 CST 2014, Valid until:Tue Jan 17 01:53:32 CST 2034
+2021-03-09 11:21:12.226 DEBUG 12536 --- [main] jdk.event.security                       : X509Certificate: Alg:SHA1withRSA, Serial:44be0c8b500024b411d3362de0b35f1b, Subject:CN=UTN-USERFirst-Object, OU=http://www.usertrust.com, O=The USERTRUST Network, L=Salt Lake City, ST=UT, C=US, Issuer:CN=UTN-USERFirst-Object, OU=http://www.usertrust.com, O=The USERTRUST Network, L=Salt Lake City, ST=UT, C=US, Key type:RSA, Length:2048, Cert Id:-297053428, Valid from:Sat Jul 10 02:31:20 CST 1999, Valid until:Wed Jul 10 02:40:36 CST 2019
+2021-03-09 11:21:12.226 DEBUG 12536 --- [main] jdk.event.security                       : X509Certificate: Alg:SHA1withRSA, Serial:1, Subject:CN=GeoTrust Universal CA, O=GeoTrust Inc., C=US, Issuer:CN=GeoTrust Universal CA, O=GeoTrust Inc., C=US, Key type:RSA, Length:4096, Cert Id:313566089, Valid from:Thu Mar 04 13:00:00 CST 2004, Valid until:Sun Mar 04 13:00:00 CST 2029
+2021-03-09 11:21:12.227 DEBUG 12536 --- [main] jdk.event.security                       : X509Certificate: Alg:SHA384withECDSA, Serial:55556bcf25ea43535c3a40fd5ab4572, Subject:CN=DigiCert Global Root G3, OU=www.digicert.com, O=DigiCert Inc, C=US, Issuer:CN=DigiCert Global Root G3, OU=www.digicert.com, O=DigiCert Inc, C=US, Key type:EC, Length:384, Cert Id:-795968543, Valid from:Thu Aug 01 20:00:00 CST 2013, Valid until:Fri Jan 15 20:00:00 CST 2038
+2021-03-09 11:21:12.227 DEBUG 12536 --- [main] jdk.event.security                       : X509Certificate: Alg:SHA384withECDSA, Serial:a68b79290000000050d091f9, Subject:CN=Entrust Root Certification Authority - EC1, OU="(c) 2012 Entrust, Inc. - for authorized use only", OU=See www.entrust.net/legal-terms, O="Entrust, Inc.", C=US, Issuer:CN=Entrust Root Certification Authority - EC1, OU="(c) 2012 Entrust, Inc. - for authorized use only", OU=See www.entrust.net/legal-terms, O="Entrust, Inc.", C=US, Key type:EC, Length:384, Cert Id:924514073, Valid from:Tue Dec 18 23:25:36 CST 2012, Valid until:Fri Dec 18 23:55:36 CST 2037
+2021-03-09 11:21:12.228 DEBUG 12536 --- [main] jdk.event.security                       : X509Certificate: Alg:SHA1withRSA, Serial:0, Subject:OU=Security Communication RootCA1, O=SECOM Trust.net, C=JP, Issuer:OU=Security Communication RootCA1, O=SECOM Trust.net, C=JP, Key type:RSA, Length:2048, Cert Id:1802358121, Valid from:Tue Sep 30 12:20:49 CST 2003, Valid until:Sat Sep 30 12:20:49 CST 2023
+2021-03-09 11:21:12.228 DEBUG 12536 --- [main] jdk.event.security                       : X509Certificate: Alg:SHA1withRSA, Serial:400000000010f8626e60d, Subject:CN=GlobalSign, O=GlobalSign, OU=GlobalSign Root CA - R2, Issuer:CN=GlobalSign, O=GlobalSign, OU=GlobalSign Root CA - R2, Key type:RSA, Length:2048, Cert Id:7087067, Valid from:Fri Dec 15 16:00:00 CST 2006, Valid until:Wed Dec 15 16:00:00 CST 2021
+2021-03-09 11:21:12.229 DEBUG 12536 --- [main] jdk.event.security                       : X509Certificate: Alg:SHA1withRSA, Serial:44afb080d6a327ba893039862ef8406b, Subject:CN=DST Root CA X3, O=Digital Signature Trust Co., Issuer:CN=DST Root CA X3, O=Digital Signature Trust Co., Key type:RSA, Length:2048, Cert Id:1007302312, Valid from:Sun Oct 01 05:12:19 CST 2000, Valid until:Thu Sep 30 22:01:15 CST 2021
+2021-03-09 11:21:12.229 DEBUG 12536 --- [main] jdk.event.security                       : X509Certificate: Alg:SHA384withECDSA, Serial:1f47afaa62007050544c019e9b63992a, Subject:CN=COMODO ECC Certification Authority, O=COMODO CA Limited, L=Salford, ST=Greater Manchester, C=GB, Issuer:CN=COMODO ECC Certification Authority, O=COMODO CA Limited, L=Salford, ST=Greater Manchester, C=GB, Key type:EC, Length:384, Cert Id:1146488932, Valid from:Thu Mar 06 08:00:00 CST 2008, Valid until:Tue Jan 19 07:59:59 CST 2038
+2021-03-09 11:21:12.230 DEBUG 12536 --- [main] jdk.event.security                       : X509Certificate: Alg:SHA384withRSA, Serial:45e6bb038333c3856548e6ff4551, Subject:CN=GlobalSign, O=GlobalSign, OU=GlobalSign Root CA - R6, Issuer:CN=GlobalSign, O=GlobalSign, OU=GlobalSign Root CA - R6, Key type:RSA, Length:4096, Cert Id:-506627753, Valid from:Wed Dec 10 08:00:00 CST 2014, Valid until:Sun Dec 10 08:00:00 CST 2034
+2021-03-09 11:21:12.230 DEBUG 12536 --- [main] jdk.event.security                       : X509Certificate: Alg:SHA1withRSA, Serial:3863def8, Subject:CN=Entrust.net Certification Authority (2048), OU=(c) 1999 Entrust.net Limited, OU=www.entrust.net/CPS_2048 incorp. by ref. (limits liab.), O=Entrust.net, Issuer:CN=Entrust.net Certification Authority (2048), OU=(c) 1999 Entrust.net Limited, OU=www.entrust.net/CPS_2048 incorp. by ref. (limits liab.), O=Entrust.net, Key type:RSA, Length:2048, Cert Id:-328536082, Valid from:Sat Dec 25 01:50:51 CST 1999, Valid until:Tue Jul 24 22:15:12 CST 2029
+2021-03-09 11:21:12.231 DEBUG 12536 --- [main] jdk.event.security                       : X509Certificate: Alg:SHA1withRSA, Serial:1, Subject:CN=AddTrust External CA Root, OU=AddTrust External TTP Network, O=AddTrust AB, C=SE, Issuer:CN=AddTrust External CA Root, OU=AddTrust External TTP Network, O=AddTrust AB, C=SE, Key type:RSA, Length:2048, Cert Id:-326352672, Valid from:Tue May 30 18:48:38 CST 2000, Valid until:Sat May 30 18:48:38 CST 2020
+2021-03-09 11:21:12.231 DEBUG 12536 --- [main] jdk.event.security                       : X509Certificate: Alg:SHA256withECDSA, Serial:2a38a41c960a04de42b228a50be8349802, Subject:CN=GlobalSign, O=GlobalSign, OU=GlobalSign ECC Root CA - R4, Issuer:CN=GlobalSign, O=GlobalSign, OU=GlobalSign ECC Root CA - R4, Key type:EC, Length:256, Cert Id:-1923273545, Valid from:Tue Nov 13 08:00:00 CST 2012, Valid until:Tue Jan 19 11:14:07 CST 2038
+2021-03-09 11:21:12.231 DEBUG 12536 --- [main] jdk.event.security                       : X509Certificate: Alg:SHA384withRSA, Serial:1fd6d30fca3ca51a81bbc640e35032d, Subject:CN=USERTrust RSA Certification Authority, O=The USERTRUST Network, L=Jersey City, ST=New Jersey, C=US, Issuer:CN=USERTrust RSA Certification Authority, O=The USERTRUST Network, L=Jersey City, ST=New Jersey, C=US, Key type:RSA, Length:4096, Cert Id:-347365895, Valid from:Mon Feb 01 08:00:00 CST 2010, Valid until:Tue Jan 19 07:59:59 CST 2038
+2021-03-09 11:21:12.232 DEBUG 12536 --- [main] jdk.event.security                       : X509Certificate: Alg:SHA1withRSA, Serial:ce7e0e517d846fe8fe560fc1bf03039, Subject:CN=DigiCert Assured ID Root CA, OU=www.digicert.com, O=DigiCert Inc, C=US, Issuer:CN=DigiCert Assured ID Root CA, OU=www.digicert.com, O=DigiCert Inc, C=US, Key type:RSA, Length:2048, Cert Id:-860404528, Valid from:Fri Nov 10 08:00:00 CST 2006, Valid until:Mon Nov 10 08:00:00 CST 2031
+2021-03-09 11:21:12.232 DEBUG 12536 --- [main] jdk.event.security                       : X509Certificate: Alg:SHA256withRSA, Serial:33af1e6a711a9a0bb2864b11d09fae5, Subject:CN=DigiCert Global Root G2, OU=www.digicert.com, O=DigiCert Inc, C=US, Issuer:CN=DigiCert Global Root G2, OU=www.digicert.com, O=DigiCert Inc, C=US, Key type:RSA, Length:2048, Cert Id:1136084297, Valid from:Thu Aug 01 20:00:00 CST 2013, Valid until:Fri Jan 15 20:00:00 CST 2038
+2021-03-09 11:21:12.232 DEBUG 12536 --- [main] jdk.event.security                       : X509Certificate: Alg:SHA256withRSA, Serial:570a119742c4e3cc, Subject:CN=Actalis Authentication Root CA, O=Actalis S.p.A./03358520967, L=Milan, C=IT, Issuer:CN=Actalis Authentication Root CA, O=Actalis S.p.A./03358520967, L=Milan, C=IT, Key type:RSA, Length:4096, Cert Id:1729119956, Valid from:Thu Sep 22 19:22:02 CST 2011, Valid until:Sun Sep 22 19:22:02 CST 2030
+2021-03-09 11:21:12.233 DEBUG 12536 --- [main] jdk.event.security                       : X509Certificate: Alg:SHA256withRSA, Serial:b931c3ad63967ea6723bfc3af9af44b, Subject:CN=DigiCert Assured ID Root G2, OU=www.digicert.com, O=DigiCert Inc, C=US, Issuer:CN=DigiCert Assured ID Root G2, OU=www.digicert.com, O=DigiCert Inc, C=US, Key type:RSA, Length:2048, Cert Id:-385398383, Valid from:Thu Aug 01 20:00:00 CST 2013, Valid until:Fri Jan 15 20:00:00 CST 2038
+2021-03-09 11:21:12.233 DEBUG 12536 --- [main] jdk.event.security                       : X509Certificate: Alg:SHA384withECDSA, Serial:66c9fd7c1bb104c2943e5717b7b2cc81ac10e, Subject:CN=Amazon Root CA 4, O=Amazon, C=US, Issuer:CN=Amazon Root CA 4, O=Amazon, C=US, Key type:EC, Length:384, Cert Id:-1654272513, Valid from:Tue May 26 08:00:00 CST 2015, Valid until:Sat May 26 08:00:00 CST 2040
+2021-03-09 11:21:12.233 DEBUG 12536 --- [main] jdk.event.security                       : X509Certificate: Alg:SHA1withRSA, Serial:bb401c43f55e4fb0, Subject:CN=SwissSign Gold CA - G2, O=SwissSign AG, C=CH, Issuer:CN=SwissSign Gold CA - G2, O=SwissSign AG, C=CH, Key type:RSA, Length:4096, Cert Id:1516221943, Valid from:Wed Oct 25 16:30:35 CST 2006, Valid until:Sat Oct 25 16:30:35 CST 2036
+2021-03-09 11:21:12.234 DEBUG 12536 --- [main] jdk.event.security                       : X509Certificate: Alg:SHA256withRSA, Serial:4a538c28, Subject:CN=Entrust Root Certification Authority - G2, OU="(c) 2009 Entrust, Inc. - for authorized use only", OU=See www.entrust.net/legal-terms, O="Entrust, Inc.", C=US, Issuer:CN=Entrust Root Certification Authority - G2, OU="(c) 2009 Entrust, Inc. - for authorized use only", OU=See www.entrust.net/legal-terms, O="Entrust, Inc.", C=US, Key type:RSA, Length:2048, Cert Id:1936920337, Valid from:Wed Jul 08 01:25:54 CST 2009, Valid until:Sun Dec 08 01:55:54 CST 2030
+2021-03-09 11:21:12.234 DEBUG 12536 --- [main] jdk.event.security                       : X509Certificate: Alg:SHA256withRSA, Serial:445734245b81899b35f2ceb82b3b5ba726f07528, Subject:CN=QuoVadis Root CA 2 G3, O=QuoVadis Limited, C=BM, Issuer:CN=QuoVadis Root CA 2 G3, O=QuoVadis Limited, C=BM, Key type:RSA, Length:4096, Cert Id:696763521, Valid from:Fri Jan 13 02:59:32 CST 2012, Valid until:Mon Jan 13 02:59:32 CST 2042
+2021-03-09 11:21:12.234 DEBUG 12536 --- [main] jdk.event.security                       : X509Certificate: Alg:SHA1withRSA, Serial:cf08e5c0816a5ad427ff0eb271859d0, Subject:CN=SecureTrust CA, O=SecureTrust Corporation, C=US, Issuer:CN=SecureTrust CA, O=SecureTrust Corporation, C=US, Key type:RSA, Length:2048, Cert Id:2034155325, Valid from:Wed Nov 08 03:31:18 CST 2006, Valid until:Tue Jan 01 03:40:55 CST 2030
+2021-03-09 11:21:12.235 DEBUG 12536 --- [main] jdk.event.security                       : X509Certificate: Alg:SHA1withRSA, Serial:a3da427ea4b1aeda, Subject:CN=Chambers of Commerce Root - 2008, O=AC Camerfirma S.A., SERIALNUMBER=A82743287, L=Madrid (see current address at www.camerfirma.com/address), C=EU, Issuer:CN=Chambers of Commerce Root - 2008, O=AC Camerfirma S.A., SERIALNUMBER=A82743287, L=Madrid (see current address at www.camerfirma.com/address), C=EU, Key type:RSA, Length:4096, Cert Id:-28263924, Valid from:Fri Aug 01 20:29:50 CST 2008, Valid until:Sat Jul 31 20:29:50 CST 2038
+2021-03-09 11:21:12.235 DEBUG 12536 --- [main] jdk.event.security                       : X509Certificate: Alg:SHA1withRSA, Serial:18acb56afd69b6153a636cafdafac4a1, Subject:CN=GeoTrust Primary Certification Authority, O=GeoTrust Inc., C=US, Issuer:CN=GeoTrust Primary Certification Authority, O=GeoTrust Inc., C=US, Key type:RSA, Length:2048, Cert Id:-965345157, Valid from:Mon Nov 27 08:00:00 CST 2006, Valid until:Thu Jul 17 07:59:59 CST 2036
+2021-03-09 11:21:12.235 DEBUG 12536 --- [main] jdk.event.security                       : X509Certificate: Alg:SHA256withRSA, Serial:a0142800000014523c844b500000002, Subject:CN=IdenTrust Commercial Root CA 1, O=IdenTrust, C=US, Issuer:CN=IdenTrust Commercial Root CA 1, O=IdenTrust, C=US, Key type:RSA, Length:4096, Cert Id:1232565210, Valid from:Fri Jan 17 02:12:23 CST 2014, Valid until:Tue Jan 17 02:12:23 CST 2034
+2021-03-09 11:21:12.235 DEBUG 12536 --- [main] jdk.event.security                       : X509Certificate: Alg:SHA256withRSA, Serial:600197b746a7eab4b49ad64b2ff790fb, Subject:CN=thawte Primary Root CA - G3, OU="(c) 2008 thawte, Inc. - For authorized use only", OU=Certification Services Division, O="thawte, Inc.", C=US, Issuer:CN=thawte Primary Root CA - G3, OU="(c) 2008 thawte, Inc. - For authorized use only", OU=Certification Services Division, O="thawte, Inc.", C=US, Key type:RSA, Length:2048, Cert Id:1032730720, Valid from:Wed Apr 02 08:00:00 CST 2008, Valid until:Wed Dec 02 07:59:59 CST 2037
+2021-03-09 11:21:12.236 DEBUG 12536 --- [main] jdk.event.security                       : X509Certificate: Alg:SHA256withRSA, Serial:2, Subject:CN=Buypass Class 3 Root CA, O=Buypass AS-983163327, C=NO, Issuer:CN=Buypass Class 3 Root CA, O=Buypass AS-983163327, C=NO, Key type:RSA, Length:4096, Cert Id:1264269967, Valid from:Tue Oct 26 16:28:58 CST 2010, Valid until:Fri Oct 26 16:28:58 CST 2040
+2021-03-09 11:21:12.236 DEBUG 12536 --- [main] jdk.event.security                       : X509Certificate: Alg:SHA1withRSA, Serial:67c8e1e8e3be1cbdfc913b8ea6238749, Subject:CN=Thawte Timestamping CA, OU=Thawte Certification, O=Thawte, L=Durbanville, ST=Western Cape, C=ZA, Issuer:CN=Thawte Timestamping CA, OU=Thawte Certification, O=Thawte, L=Durbanville, ST=Western Cape, C=ZA, Key type:RSA, Length:1024, Cert Id:-1032800436, Valid from:Wed Jan 01 08:00:00 CST 1997, Valid until:Sat Jan 02 07:59:59 CST 2021
+2021-03-09 11:21:12.236 DEBUG 12536 --- [main] jdk.event.security                       : X509Certificate: Alg:SHA384withECDSA, Serial:2f80fe238c0e220f486712289187acb3, Subject:CN=VeriSign Class 3 Public Primary Certification Authority - G4, OU="(c) 2007 VeriSign, Inc. - For authorized use only", OU=VeriSign Trust Network, O="VeriSign, Inc.", C=US, Issuer:CN=VeriSign Class 3 Public Primary Certification Authority - G4, OU="(c) 2007 VeriSign, Inc. - For authorized use only", OU=VeriSign Trust Network, O="VeriSign, Inc.", C=US, Key type:EC, Length:384, Cert Id:-131493977, Valid from:Mon Nov 05 08:00:00 CST 2007, Valid until:Tue Jan 19 07:59:59 CST 2038
+2021-03-09 11:21:12.236 DEBUG 12536 --- [main] jdk.event.security                       : X509Certificate: Alg:SHA1withRSA, Serial:20000b9, Subject:CN=Baltimore CyberTrust Root, OU=CyberTrust, O=Baltimore, C=IE, Issuer:CN=Baltimore CyberTrust Root, OU=CyberTrust, O=Baltimore, C=IE, Key type:RSA, Length:2048, Cert Id:1425294543, Valid from:Sat May 13 02:46:00 CST 2000, Valid until:Tue May 13 07:59:00 CST 2025
+2021-03-09 11:21:12.237 DEBUG 12536 --- [main] jdk.event.security                       : X509Certificate: Alg:MD5withRSA, Serial:1a5, Subject:CN=GTE CyberTrust Global Root, OU="GTE CyberTrust Solutions, Inc.", O=GTE Corporation, C=US, Issuer:CN=GTE CyberTrust Global Root, OU="GTE CyberTrust Solutions, Inc.", O=GTE Corporation, C=US, Key type:RSA, Length:1024, Cert Id:830711155, Valid from:Thu Aug 13 08:29:00 CST 1998, Valid until:Tue Aug 14 07:59:00 CST 2018
+2021-03-09 11:21:12.237 DEBUG 12536 --- [main] jdk.event.security                       : X509Certificate: Alg:SHA256withRSA, Serial:bb8, Subject:CN=LuxTrust Global Root, O=LuxTrust s.a., C=LU, Issuer:CN=LuxTrust Global Root, O=LuxTrust s.a., C=LU, Key type:RSA, Length:2048, Cert Id:1714819687, Valid from:Thu Mar 17 17:51:37 CST 2011, Valid until:Wed Mar 17 17:51:37 CST 2021
+2021-03-09 11:21:12.237 DEBUG 12536 --- [main] jdk.event.security                       : X509Certificate: Alg:SHA1withRSA, Serial:7dd9fe07cfa81eb7107967fba78934c6, Subject:OU=VeriSign Trust Network, OU="(c) 1998 VeriSign, Inc. - For authorized use only", OU=Class 3 Public Primary Certification Authority - G2, O="VeriSign, Inc.", C=US, Issuer:OU=VeriSign Trust Network, OU="(c) 1998 VeriSign, Inc. - For authorized use only", OU=Class 3 Public Primary Certification Authority - G2, O="VeriSign, Inc.", C=US, Key type:RSA, Length:1024, Cert Id:-11071679, Valid from:Mon May 18 08:00:00 CST 1998, Valid until:Wed Aug 02 07:59:59 CST 2028
+2021-03-09 11:21:12.237 DEBUG 12536 --- [main] jdk.event.security                       : X509Certificate: Alg:SHA1withRSA, Serial:0, Subject:CN=Chambers of Commerce Root, OU=http://www.chambersign.org, O=AC Camerfirma SA CIF A82743287, C=EU, Issuer:CN=Chambers of Commerce Root, OU=http://www.chambersign.org, O=AC Camerfirma SA CIF A82743287, C=EU, Key type:RSA, Length:2048, Cert Id:1827306452, Valid from:Wed Oct 01 00:13:43 CST 2003, Valid until:Thu Oct 01 00:13:44 CST 2037
+2021-03-09 11:21:12.238 DEBUG 12536 --- [main] jdk.event.security                       : X509Certificate: Alg:SHA1withRSA, Serial:1d, Subject:CN=Sonera Class2 CA, O=Sonera, C=FI, Issuer:CN=Sonera Class2 CA, O=Sonera, C=FI, Key type:RSA, Length:2048, Cert Id:-572101437, Valid from:Fri Apr 06 15:29:40 CST 2001, Valid until:Tue Apr 06 15:29:40 CST 2021
+2021-03-09 11:21:12.238 DEBUG 12536 --- [main] jdk.event.security                       : X509Certificate: Alg:SHA1withRSA, Serial:7c4f04391cd4992d, Subject:CN=AffirmTrust Networking, O=AffirmTrust, C=US, Issuer:CN=AffirmTrust Networking, O=AffirmTrust, C=US, Key type:RSA, Length:2048, Cert Id:651670175, Valid from:Fri Jan 29 22:08:24 CST 2010, Valid until:Tue Dec 31 22:08:24 CST 2030
+2021-03-09 11:21:12.238 DEBUG 12536 --- [main] jdk.event.security                       : X509Certificate: Alg:SHA256withRSA, Serial:1, Subject:CN=T-TeleSec GlobalRoot Class 3, OU=T-Systems Trust Center, O=T-Systems Enterprise Services GmbH, C=DE, Issuer:CN=T-TeleSec GlobalRoot Class 3, OU=T-Systems Trust Center, O=T-Systems Enterprise Services GmbH, C=DE, Key type:RSA, Length:2048, Cert Id:1894096264, Valid from:Wed Oct 01 18:29:56 CST 2008, Valid until:Sun Oct 02 07:59:59 CST 2033
+2021-03-09 11:21:12.238 DEBUG 12536 --- [main] jdk.event.security                       : X509Certificate: Alg:SHA1withRSA, Serial:50946cec18ead59c4dd597ef758fa0ad, Subject:CN=XRamp Global Certification Authority, O=XRamp Security Services Inc, OU=www.xrampsecurity.com, C=US, Issuer:CN=XRamp Global Certification Authority, O=XRamp Security Services Inc, OU=www.xrampsecurity.com, C=US, Key type:RSA, Length:2048, Cert Id:-952474086, Valid from:Tue Nov 02 01:14:04 CST 2004, Valid until:Mon Jan 01 13:37:19 CST 2035
+2021-03-09 11:21:12.239 DEBUG 12536 --- [main] jdk.event.security                       : X509Certificate: Alg:SHA256withRSA, Serial:15ac6e9419b2794b41f627a9c3180f1f, Subject:CN=GeoTrust Primary Certification Authority - G3, OU=(c) 2008 GeoTrust Inc. - For authorized use only, O=GeoTrust Inc., C=US, Issuer:CN=GeoTrust Primary Certification Authority - G3, OU=(c) 2008 GeoTrust Inc. - For authorized use only, O=GeoTrust Inc., C=US, Key type:RSA, Length:2048, Cert Id:-1330153758, Valid from:Wed Apr 02 08:00:00 CST 2008, Valid until:Wed Dec 02 07:59:59 CST 2037
+2021-03-09 11:21:12.239 DEBUG 12536 --- [main] jdk.event.security                       : X509Certificate: Alg:SHA1withRSA, Serial:c9cdd3e9d57d23ce, Subject:CN=Global Chambersign Root - 2008, O=AC Camerfirma S.A., SERIALNUMBER=A82743287, L=Madrid (see current address at www.camerfirma.com/address), C=EU, Issuer:CN=Global Chambersign Root - 2008, O=AC Camerfirma S.A., SERIALNUMBER=A82743287, L=Madrid (see current address at www.camerfirma.com/address), C=EU, Key type:RSA, Length:4096, Cert Id:1271252776, Valid from:Fri Aug 01 20:31:40 CST 2008, Valid until:Sat Jul 31 20:31:40 CST 2038
+2021-03-09 11:21:12.239 DEBUG 12536 --- [main] jdk.event.security                       : X509Certificate: Alg:SHA384withECDSA, Serial:35fc265cd9844fc93d263d579baed756, Subject:CN=thawte Primary Root CA - G2, OU="(c) 2007 thawte, Inc. - For authorized use only", O="thawte, Inc.", C=US, Issuer:CN=thawte Primary Root CA - G2, OU="(c) 2007 thawte, Inc. - For authorized use only", O="thawte, Inc.", C=US, Key type:EC, Length:384, Cert Id:2068083090, Valid from:Mon Nov 05 08:00:00 CST 2007, Valid until:Tue Jan 19 07:59:59 CST 2038
+2021-03-09 11:21:12.239 DEBUG 12536 --- [main] jdk.event.security                       : X509Certificate: Alg:SHA256withECDSA, Serial:66c9fd5749736663f3b0b9ad9e89e7603f24a, Subject:CN=Amazon Root CA 3, O=Amazon, C=US, Issuer:CN=Amazon Root CA 3, O=Amazon, C=US, Key type:EC, Length:256, Cert Id:-1562287523, Valid from:Tue May 26 08:00:00 CST 2015, Valid until:Sat May 26 08:00:00 CST 2040
+2021-03-09 11:21:12.240 DEBUG 12536 --- [main] jdk.event.security                       : X509Certificate: Alg:SHA384withECDSA, Serial:5c8b99c55a94c5d27156decd8980cc26, Subject:CN=USERTrust ECC Certification Authority, O=The USERTRUST Network, L=Jersey City, ST=New Jersey, C=US, Issuer:CN=USERTrust ECC Certification Authority, O=The USERTRUST Network, L=Jersey City, ST=New Jersey, C=US, Key type:EC, Length:384, Cert Id:-965679910, Valid from:Mon Feb 01 08:00:00 CST 2010, Valid until:Tue Jan 19 07:59:59 CST 2038
+2021-03-09 11:21:12.240 DEBUG 12536 --- [main] jdk.event.security                       : X509Certificate: Alg:SHA1withRSA, Serial:4f1bd42f54bb2f4b, Subject:CN=SwissSign Silver CA - G2, O=SwissSign AG, C=CH, Issuer:CN=SwissSign Silver CA - G2, O=SwissSign AG, C=CH, Key type:RSA, Length:4096, Cert Id:126726124, Valid from:Wed Oct 25 16:32:46 CST 2006, Valid until:Sat Oct 25 16:32:46 CST 2036
+2021-03-09 11:21:12.241 DEBUG 12536 --- [main] jdk.event.security                       : X509Certificate: Alg:SHA384withRSA, Serial:6d8c1446b1a60aee, Subject:CN=AffirmTrust Premium, O=AffirmTrust, C=US, Issuer:CN=AffirmTrust Premium, O=AffirmTrust, C=US, Key type:RSA, Length:4096, Cert Id:-2130283955, Valid from:Fri Jan 29 22:10:36 CST 2010, Valid until:Mon Dec 31 22:10:36 CST 2040
+2021-03-09 11:21:12.241 DEBUG 12536 --- [main] jdk.event.security                       : X509Certificate: Alg:SHA1withRSA, Serial:40000000001154b5ac394, Subject:CN=GlobalSign Root CA, OU=Root CA, O=GlobalSign nv-sa, C=BE, Issuer:CN=GlobalSign Root CA, OU=Root CA, O=GlobalSign nv-sa, C=BE, Key type:RSA, Length:2048, Cert Id:536948034, Valid from:Tue Sep 01 20:00:00 CST 1998, Valid until:Fri Jan 28 20:00:00 CST 2028
+2021-03-09 11:21:12.241 DEBUG 12536 --- [main] jdk.event.security                       : X509Certificate: Alg:SHA256withRSA, Serial:983f3, Subject:CN=D-TRUST Root Class 3 CA 2 2009, O=D-Trust GmbH, C=DE, Issuer:CN=D-TRUST Root Class 3 CA 2 2009, O=D-Trust GmbH, C=DE, Key type:RSA, Length:2048, Cert Id:1430153102, Valid from:Thu Nov 05 16:35:58 CST 2009, Valid until:Mon Nov 05 16:35:58 CST 2029
+2021-03-09 11:21:12.241 DEBUG 12536 --- [main] jdk.event.security                       : X509Certificate: Alg:SHA256withRSA, Serial:7777062726a9b17c, Subject:CN=AffirmTrust Commercial, O=AffirmTrust, C=US, Issuer:CN=AffirmTrust Commercial, O=AffirmTrust, C=US, Key type:RSA, Length:2048, Cert Id:630485644, Valid from:Fri Jan 29 22:06:06 CST 2010, Valid until:Tue Dec 31 22:06:06 CST 2030
+2021-03-09 11:21:12.242 DEBUG 12536 --- [main] jdk.event.security                       : X509Certificate: Alg:SHA256withRSA, Serial:8210cfb0d240e3594463e0bb63828b00, Subject:CN=ISRG Root X1, O=Internet Security Research Group, C=US, Issuer:CN=ISRG Root X1, O=Internet Security Research Group, C=US, Key type:RSA, Length:4096, Cert Id:1521974916, Valid from:Thu Jun 04 19:04:38 CST 2015, Valid until:Mon Jun 04 19:04:38 CST 2035
+2021-03-09 11:21:12.242 DEBUG 12536 --- [main] jdk.event.security                       : X509Certificate: Alg:SHA1withRSA, Serial:36122296c5e338a520a1d25f4cd70954, Subject:EMAILADDRESS=premium-server@thawte.com, CN=Thawte Premium Server CA, OU=Certification Services Division, O=Thawte Consulting cc, L=Cape Town, ST=Western Cape, C=ZA, Issuer:EMAILADDRESS=premium-server@thawte.com, CN=Thawte Premium Server CA, OU=Certification Services Division, O=Thawte Consulting cc, L=Cape Town, ST=Western Cape, C=ZA, Key type:RSA, Length:1024, Cert Id:857909202, Valid from:Thu Aug 01 08:00:00 CST 1996, Valid until:Sat Jan 02 07:59:59 CST 2021
+2021-03-09 11:21:12.242 DEBUG 12536 --- [main] jdk.event.security                       : X509Certificate: Alg:SHA1withRSA, Serial:1, Subject:CN=AAA Certificate Services, O=Comodo CA Limited, L=Salford, ST=Greater Manchester, C=GB, Issuer:CN=AAA Certificate Services, O=Comodo CA Limited, L=Salford, ST=Greater Manchester, C=GB, Key type:RSA, Length:2048, Cert Id:-1197580894, Valid from:Thu Jan 01 08:00:00 CST 2004, Valid until:Mon Jan 01 07:59:59 CST 2029
+2021-03-09 11:21:12.242 DEBUG 12536 --- [main] jdk.event.security                       : X509Certificate: Alg:SHA384withECDSA, Serial:3cb2f4480a00e2feeb243b5e603ec36b, Subject:CN=GeoTrust Primary Certification Authority - G2, OU=(c) 2007 GeoTrust Inc. - For authorized use only, O=GeoTrust Inc., C=US, Issuer:CN=GeoTrust Primary Certification Authority - G2, OU=(c) 2007 GeoTrust Inc. - For authorized use only, O=GeoTrust Inc., C=US, Key type:EC, Length:384, Cert Id:-1114303822, Valid from:Mon Nov 05 08:00:00 CST 2007, Valid until:Tue Jan 19 07:59:59 CST 2038
+2021-03-09 11:21:12.243 DEBUG 12536 --- [main] jdk.event.security                       : X509Certificate: Alg:SHA256withRSA, Serial:4000000000121585308a2, Subject:CN=GlobalSign, O=GlobalSign, OU=GlobalSign Root CA - R3, Issuer:CN=GlobalSign, O=GlobalSign, OU=GlobalSign Root CA - R3, Key type:RSA, Length:2048, Cert Id:733875591, Valid from:Wed Mar 18 18:00:00 CST 2009, Valid until:Sun Mar 18 18:00:00 CST 2029
+2021-03-09 11:21:12.243 DEBUG 12536 --- [main] jdk.event.security                       : X509Certificate: Alg:SHA1withRSA, Serial:344ed55720d5edec49f42fce37db2b6d, Subject:CN=thawte Primary Root CA, OU="(c) 2006 thawte, Inc. - For authorized use only", OU=Certification Services Division, O="thawte, Inc.", C=US, Issuer:CN=thawte Primary Root CA, OU="(c) 2006 thawte, Inc. - For authorized use only", OU=Certification Services Division, O="thawte, Inc.", C=US, Key type:RSA, Length:2048, Cert Id:643000026, Valid from:Fri Nov 17 08:00:00 CST 2006, Valid until:Thu Jul 17 07:59:59 CST 2036
+2021-03-09 11:21:12.243 DEBUG 12536 --- [main] jdk.event.security                       : X509Certificate: Alg:SHA1withRSA, Serial:5c6, Subject:CN=QuoVadis Root CA 3, O=QuoVadis Limited, C=BM, Issuer:CN=QuoVadis Root CA 3, O=QuoVadis Limited, C=BM, Key type:RSA, Length:4096, Cert Id:1470392860, Valid from:Sat Nov 25 03:11:23 CST 2006, Valid until:Tue Nov 25 03:06:44 CST 2031
+2021-03-09 11:21:12.243 DEBUG 12536 --- [main] jdk.event.security                       : X509Certificate: Alg:SHA384withRSA, Serial:66c9fd29635869f0a0fe58678f85b26bb8a37, Subject:CN=Amazon Root CA 2, O=Amazon, C=US, Issuer:CN=Amazon Root CA 2, O=Amazon, C=US, Key type:RSA, Length:4096, Cert Id:-1766132388, Valid from:Tue May 26 08:00:00 CST 2015, Valid until:Sat May 26 08:00:00 CST 2040
+2021-03-09 11:21:12.243 DEBUG 12536 --- [main] jdk.event.security                       : X509Certificate: Alg:SHA1withRSA, Serial:0, Subject:OU=Starfield Class 2 Certification Authority, O="Starfield Technologies, Inc.", C=US, Issuer:OU=Starfield Class 2 Certification Authority, O="Starfield Technologies, Inc.", C=US, Key type:RSA, Length:2048, Cert Id:1825617644, Valid from:Wed Jun 30 01:39:16 CST 2004, Valid until:Fri Jun 30 01:39:16 CST 2034
+2021-03-09 11:21:12.244 DEBUG 12536 --- [main] jdk.event.security                       : X509Certificate: Alg:SHA256withRSA, Serial:0, Subject:CN=Starfield Root Certificate Authority - G2, O="Starfield Technologies, Inc.", L=Scottsdale, ST=Arizona, C=US, Issuer:CN=Starfield Root Certificate Authority - G2, O="Starfield Technologies, Inc.", L=Scottsdale, ST=Arizona, C=US, Key type:RSA, Length:2048, Cert Id:-1026641587, Valid from:Tue Sep 01 08:00:00 CST 2009, Valid until:Fri Jan 01 07:59:59 CST 2038
+2021-03-09 11:21:12.244 DEBUG 12536 --- [main] jdk.event.security                       : X509Certificate: Alg:SHA1withRSA, Serial:3c9131cb1ff6d01b0e9ab8d044bf12be, Subject:OU=Class 3 Public Primary Certification Authority, O="VeriSign, Inc.", C=US, Issuer:OU=Class 3 Public Primary Certification Authority, O="VeriSign, Inc.", C=US, Key type:RSA, Length:1024, Cert Id:118031811, Valid from:Mon Jan 29 08:00:00 CST 1996, Valid until:Thu Aug 03 07:59:59 CST 2028
+2021-03-09 11:21:12.244 DEBUG 12536 --- [main] jdk.event.security                       : X509Certificate: Alg:SHA384withECDSA, Serial:7497258ac73f7a54, Subject:CN=AffirmTrust Premium ECC, O=AffirmTrust, C=US, Issuer:CN=AffirmTrust Premium ECC, O=AffirmTrust, C=US, Key type:EC, Length:384, Cert Id:-2080363786, Valid from:Fri Jan 29 22:20:24 CST 2010, Valid until:Mon Dec 31 22:20:24 CST 2040
+2021-03-09 11:21:12.244 DEBUG 12536 --- [main] jdk.event.security                       : X509Certificate: Alg:SHA1withRSA, Serial:23456, Subject:CN=GeoTrust Global CA, O=GeoTrust Inc., C=US, Issuer:CN=GeoTrust Global CA, O=GeoTrust Inc., C=US, Key type:RSA, Length:2048, Cert Id:-2028617374, Valid from:Tue May 21 12:00:00 CST 2002, Valid until:Sat May 21 12:00:00 CST 2022
+2021-03-09 11:21:12.245 DEBUG 12536 --- [main] jdk.event.security                       : X509Certificate: Alg:SHA256withRSA, Serial:1e9e28e848f2e5efc37c4a1e5a1867b6, Subject:CN=Swisscom Root CA 2, OU=Digital Certificate Services, O=Swisscom, C=ch, Issuer:CN=Swisscom Root CA 2, OU=Digital Certificate Services, O=Swisscom, C=ch, Key type:RSA, Length:4096, Cert Id:965750831, Valid from:Fri Jun 24 16:38:14 CST 2011, Valid until:Wed Jun 25 15:38:14 CST 2031
+2021-03-09 11:21:12.245 DEBUG 12536 --- [main] jdk.event.security                       : X509Certificate: Alg:SHA1withRSA, Serial:0, Subject:OU=Go Daddy Class 2 Certification Authority, O="The Go Daddy Group, Inc.", C=US, Issuer:OU=Go Daddy Class 2 Certification Authority, O="The Go Daddy Group, Inc.", C=US, Key type:RSA, Length:2048, Cert Id:-271444299, Valid from:Wed Jun 30 01:06:20 CST 2004, Valid until:Fri Jun 30 01:06:20 CST 2034
+2021-03-09 11:21:12.245 DEBUG 12536 --- [main] jdk.event.security                       : X509Certificate: Alg:SHA256withRSA, Serial:0, Subject:CN=Go Daddy Root Certificate Authority - G2, O="GoDaddy.com, Inc.", L=Scottsdale, ST=Arizona, C=US, Issuer:CN=Go Daddy Root Certificate Authority - G2, O="GoDaddy.com, Inc.", L=Scottsdale, ST=Arizona, C=US, Key type:RSA, Length:2048, Cert Id:439600313, Valid from:Tue Sep 01 08:00:00 CST 2009, Valid until:Fri Jan 01 07:59:59 CST 2038
+2021-03-09 11:21:12.245 DEBUG 12536 --- [main] jdk.event.security                       : X509Certificate: Alg:SHA1withRSA, Serial:18dad19e267de8bb4a2158cdcc6b3b4a, Subject:CN=VeriSign Class 3 Public Primary Certification Authority - G5, OU="(c) 2006 VeriSign, Inc. - For authorized use only", OU=VeriSign Trust Network, O="VeriSign, Inc.", C=US, Issuer:CN=VeriSign Class 3 Public Primary Certification Authority - G5, OU="(c) 2006 VeriSign, Inc. - For authorized use only", OU=VeriSign Trust Network, O="VeriSign, Inc.", C=US, Key type:RSA, Length:2048, Cert Id:303010488, Valid from:Wed Nov 08 08:00:00 CST 2006, Valid until:Thu Jul 17 07:59:59 CST 2036
+2021-03-09 11:21:12.245 DEBUG 12536 --- [main] jdk.event.security                       : X509Certificate: Alg:SHA1withRSA, Serial:509, Subject:CN=QuoVadis Root CA 2, O=QuoVadis Limited, C=BM, Issuer:CN=QuoVadis Root CA 2, O=QuoVadis Limited, C=BM, Key type:RSA, Length:4096, Cert Id:338250116, Valid from:Sat Nov 25 02:27:00 CST 2006, Valid until:Tue Nov 25 02:23:33 CST 2031
+2021-03-09 11:21:12.245 DEBUG 12536 --- [main] jdk.event.security                       : X509Certificate: Alg:SHA1withRSA, Serial:10020, Subject:CN=Certum CA, O=Unizeto Sp. z o.o., C=PL, Issuer:CN=Certum CA, O=Unizeto Sp. z o.o., C=PL, Key type:RSA, Length:2048, Cert Id:-744451266, Valid from:Tue Jun 11 18:46:39 CST 2002, Valid until:Fri Jun 11 18:46:39 CST 2027
+2021-03-09 11:21:12.246 DEBUG 12536 --- [main] jdk.event.security                       : X509Certificate: Alg:SHA256withRSA, Serial:66c9fcf99bf8c0a39e2f0788a43e696365bca, Subject:CN=Amazon Root CA 1, O=Amazon, C=US, Issuer:CN=Amazon Root CA 1, O=Amazon, C=US, Key type:RSA, Length:2048, Cert Id:-1472444962, Valid from:Tue May 26 08:00:00 CST 2015, Valid until:Sun Jan 17 08:00:00 CST 2038
+2021-03-09 11:21:12.246 DEBUG 12536 --- [main] jdk.event.security                       : X509Certificate: Alg:SHA1withRSA, Serial:4eb200670c035d4f, Subject:CN=SwissSign Platinum CA - G2, O=SwissSign AG, C=CH, Issuer:CN=SwissSign Platinum CA - G2, O=SwissSign AG, C=CH, Key type:RSA, Length:4096, Cert Id:771312514, Valid from:Wed Oct 25 16:36:00 CST 2006, Valid until:Sat Oct 25 16:36:00 CST 2036
+2021-03-09 11:21:12.246 DEBUG 12536 --- [main] jdk.event.security                       : X509Certificate: Alg:SHA1withRSA, Serial:15c8bd65475cafb897005ee406d2bc9d, Subject:OU=ePKI Root Certification Authority, O="Chunghwa Telecom Co., Ltd.", C=TW, Issuer:OU=ePKI Root Certification Authority, O="Chunghwa Telecom Co., Ltd.", C=TW, Key type:RSA, Length:4096, Cert Id:-662636137, Valid from:Mon Dec 20 10:31:27 CST 2004, Valid until:Wed Dec 20 10:31:27 CST 2034
+2021-03-09 11:21:12.246 DEBUG 12536 --- [main] jdk.event.security                       : X509Certificate: Alg:SHA256withRSA, Serial:2ef59b0228a7db7affd5a3a9eebd03a0cf126a1d, Subject:CN=QuoVadis Root CA 3 G3, O=QuoVadis Limited, C=BM, Issuer:CN=QuoVadis Root CA 3 G3, O=QuoVadis Limited, C=BM, Key type:RSA, Length:4096, Cert Id:-705622991, Valid from:Fri Jan 13 04:26:32 CST 2012, Valid until:Mon Jan 13 04:26:32 CST 2042
+2021-03-09 11:21:12.247 DEBUG 12536 --- [main] jdk.event.security                       : X509Certificate: Alg:SHA1withRSA, Serial:3ab6508b, Subject:CN=QuoVadis Root Certification Authority, OU=Root Certification Authority, O=QuoVadis Limited, C=BM, Issuer:CN=QuoVadis Root Certification Authority, OU=Root Certification Authority, O=QuoVadis Limited, C=BM, Key type:RSA, Length:2048, Cert Id:-1882405602, Valid from:Tue Mar 20 02:33:33 CST 2001, Valid until:Thu Mar 18 02:33:33 CST 2021
+2021-03-09 11:21:12.247 DEBUG 12536 --- [main] jdk.event.security                       : X509Certificate: Alg:SHA1withRSA, Serial:1, Subject:CN=AddTrust Class 1 CA Root, OU=AddTrust TTP Network, O=AddTrust AB, C=SE, Issuer:CN=AddTrust Class 1 CA Root, OU=AddTrust TTP Network, O=AddTrust AB, C=SE, Key type:RSA, Length:2048, Cert Id:764620144, Valid from:Tue May 30 18:38:31 CST 2000, Valid until:Sat May 30 18:38:31 CST 2020
+2021-03-09 11:21:12.247 DEBUG 12536 --- [main] jdk.event.security                       : X509Certificate: Alg:SHA1withRSA, Serial:2ac5c266a0b409b8f0b79f2ae462577, Subject:CN=DigiCert High Assurance EV Root CA, OU=www.digicert.com, O=DigiCert Inc, C=US, Issuer:CN=DigiCert High Assurance EV Root CA, OU=www.digicert.com, O=DigiCert Inc, C=US, Key type:RSA, Length:2048, Cert Id:-1410680354, Valid from:Fri Nov 10 08:00:00 CST 2006, Valid until:Mon Nov 10 08:00:00 CST 2031
+2021-03-09 11:21:12.247 DEBUG 12536 --- [main] jdk.event.security                       : X509Certificate: Alg:SHA256withRSA, Serial:78585f2ead2c194be3370735341328b596d46593, Subject:CN=QuoVadis Root CA 1 G3, O=QuoVadis Limited, C=BM, Issuer:CN=QuoVadis Root CA 1 G3, O=QuoVadis Limited, C=BM, Key type:RSA, Length:4096, Cert Id:-762436034, Valid from:Fri Jan 13 01:27:44 CST 2012, Valid until:Mon Jan 13 01:27:44 CST 2042
+2021-03-09 11:21:12.248 DEBUG 12536 --- [main] jdk.event.security                       : X509Certificate: Alg:SHA384withRSA, Serial:4caaf9cadb636fe01ff74ed85b03869d, Subject:CN=COMODO RSA Certification Authority, O=COMODO CA Limited, L=Salford, ST=Greater Manchester, C=GB, Issuer:CN=COMODO RSA Certification Authority, O=COMODO CA Limited, L=Salford, ST=Greater Manchester, C=GB, Key type:RSA, Length:4096, Cert Id:1769425049, Valid from:Tue Jan 19 08:00:00 CST 2010, Valid until:Tue Jan 19 07:59:59 CST 2038
+2021-03-09 11:21:12.248 DEBUG 12536 --- [main] jdk.event.security                       : X509Certificate: Alg:SHA256withRSA, Serial:1121bc276c5547af584eefd4ced629b2a285, Subject:CN=KEYNECTIS ROOT CA, OU=ROOT, O=KEYNECTIS, C=FR, Issuer:CN=KEYNECTIS ROOT CA, OU=ROOT, O=KEYNECTIS, C=FR, Key type:RSA, Length:2048, Cert Id:1479486418, Valid from:Tue May 26 08:00:00 CST 2009, Valid until:Tue May 26 08:00:00 CST 2020
+2021-03-09 11:21:12.248 DEBUG 12536 --- [main] jdk.event.security                       : X509Certificate: Alg:SHA256withRSA, Serial:2, Subject:CN=Buypass Class 2 Root CA, O=Buypass AS-983163327, C=NO, Issuer:CN=Buypass Class 2 Root CA, O=Buypass AS-983163327, C=NO, Key type:RSA, Length:4096, Cert Id:969960563, Valid from:Tue Oct 26 16:38:03 CST 2010, Valid until:Fri Oct 26 16:38:03 CST 2040
+2021-03-09 11:21:12.248 DEBUG 12536 --- [main] jdk.event.security                       : X509Certificate: Alg:SHA256withRSA, Serial:0, Subject:OU=Security Communication RootCA2, O="SECOM Trust Systems CO.,LTD.", C=JP, Issuer:OU=Security Communication RootCA2, O="SECOM Trust Systems CO.,LTD.", C=JP, Key type:RSA, Length:2048, Cert Id:1521072570, Valid from:Fri May 29 13:00:39 CST 2009, Valid until:Tue May 29 13:00:39 CST 2029
+2021-03-09 11:21:12.249 DEBUG 12536 --- [main] jdk.event.security                       : X509Certificate: Alg:SHA1withRSA, Serial:456b5054, Subject:CN=Entrust Root Certification Authority, OU="(c) 2006 Entrust, Inc.", OU=www.entrust.net/CPS is incorporated by reference, O="Entrust, Inc.", C=US, Issuer:CN=Entrust Root Certification Authority, OU="(c) 2006 Entrust, Inc.", OU=www.entrust.net/CPS is incorporated by reference, O="Entrust, Inc.", C=US, Key type:RSA, Length:2048, Cert Id:-1261404096, Valid from:Tue Nov 28 04:23:42 CST 2006, Valid until:Sat Nov 28 04:53:42 CST 2026
+2021-03-09 11:21:12.249 DEBUG 12536 --- [main] jdk.event.security                       : X509Certificate: Alg:SHA1withRSA, Serial:9b7e0649a33e62b9d5ee90487129ef57, Subject:CN=VeriSign Class 3 Public Primary Certification Authority - G3, OU="(c) 1999 VeriSign, Inc. - For authorized use only", OU=VeriSign Trust Network, O="VeriSign, Inc.", C=US, Issuer:CN=VeriSign Class 3 Public Primary Certification Authority - G3, OU="(c) 1999 VeriSign, Inc. - For authorized use only", OU=VeriSign Trust Network, O="VeriSign, Inc.", C=US, Key type:RSA, Length:2048, Cert Id:2057300190, Valid from:Fri Oct 01 08:00:00 CST 1999, Valid until:Thu Jul 17 07:59:59 CST 2036
+2021-03-09 11:21:12.249 DEBUG 12536 --- [main] jdk.event.security                       : X509Certificate: Alg:SHA1withRSA, Serial:444c0, Subject:CN=Certum Trusted Network CA, OU=Certum Certification Authority, O=Unizeto Technologies S.A., C=PL, Issuer:CN=Certum Trusted Network CA, OU=Certum Certification Authority, O=Unizeto Technologies S.A., C=PL, Key type:RSA, Length:2048, Cert Id:2014002193, Valid from:Wed Oct 22 20:07:37 CST 2008, Valid until:Mon Dec 31 20:07:37 CST 2029
+2021-03-09 11:21:12.249 DEBUG 12536 --- [main] jdk.event.security                       : X509Certificate: Alg:SHA1withRSA, Serial:95be16a0f72e46f17b398272fa8bcd96, Subject:CN=TeliaSonera Root CA v1, O=TeliaSonera, Issuer:CN=TeliaSonera Root CA v1, O=TeliaSonera, Key type:RSA, Length:4096, Cert Id:1495358374, Valid from:Thu Oct 18 20:00:50 CST 2007, Valid until:Mon Oct 18 20:00:50 CST 2032
+2021-03-09 11:21:12.249 DEBUG 12536 --- [main] jdk.event.security                       : X509Certificate: Alg:SHA256withRSA, Serial:983f4, Subject:CN=D-TRUST Root Class 3 CA 2 EV 2009, O=D-Trust GmbH, C=DE, Issuer:CN=D-TRUST Root Class 3 CA 2 EV 2009, O=D-Trust GmbH, C=DE, Key type:RSA, Length:2048, Cert Id:971313728, Valid from:Thu Nov 05 16:50:46 CST 2009, Valid until:Mon Nov 05 16:50:46 CST 2029
+2021-03-09 11:21:12.249 DEBUG 12536 --- [main] jdk.event.security                       : X509Certificate: Alg:SHA384withECDSA, Serial:605949e0262ebb55f90a778a71f94ad86c, Subject:CN=GlobalSign, O=GlobalSign, OU=GlobalSign ECC Root CA - R5, Issuer:CN=GlobalSign, O=GlobalSign, OU=GlobalSign ECC Root CA - R5, Key type:EC, Length:384, Cert Id:1997048439, Valid from:Tue Nov 13 08:00:00 CST 2012, Valid until:Tue Jan 19 11:14:07 CST 2038
+2021-03-09 11:21:12.250 DEBUG 12536 --- [main] jdk.event.security                       : X509Certificate: Alg:SHA256withRSA, Serial:0, Subject:CN=Starfield Services Root Certificate Authority - G2, O="Starfield Technologies, Inc.", L=Scottsdale, ST=Arizona, C=US, Issuer:CN=Starfield Services Root Certificate Authority - G2, O="Starfield Technologies, Inc.", L=Scottsdale, ST=Arizona, C=US, Key type:RSA, Length:2048, Cert Id:1964785574, Valid from:Tue Sep 01 08:00:00 CST 2009, Valid until:Fri Jan 01 07:59:59 CST 2038
+2021-03-09 11:21:12.250 DEBUG 12536 --- [main] jdk.event.security                       : X509Certificate: Alg:SHA256withRSA, Serial:1, Subject:CN=T-TeleSec GlobalRoot Class 2, OU=T-Systems Trust Center, O=T-Systems Enterprise Services GmbH, C=DE, Issuer:CN=T-TeleSec GlobalRoot Class 2, OU=T-Systems Trust Center, O=T-Systems Enterprise Services GmbH, C=DE, Key type:RSA, Length:2048, Cert Id:-1238464039, Valid from:Wed Oct 01 18:40:14 CST 2008, Valid until:Sun Oct 02 07:59:59 CST 2033
+2021-03-09 11:21:12.250 DEBUG 12536 --- [main] jdk.event.security                       : X509Certificate: Alg:SHA1withRSA, Serial:1, Subject:CN=AddTrust Qualified CA Root, OU=AddTrust TTP Network, O=AddTrust AB, C=SE, Issuer:CN=AddTrust Qualified CA Root, OU=AddTrust TTP Network, O=AddTrust AB, C=SE, Key type:RSA, Length:2048, Cert Id:607365522, Valid from:Tue May 30 18:44:50 CST 2000, Valid until:Sat May 30 18:44:50 CST 2020
+2021-03-09 11:21:12.250 DEBUG 12536 --- [main] jdk.event.security                       : X509Certificate: Alg:SHA1withRSA, Serial:83be056904246b1a1756ac95991c74a, Subject:CN=DigiCert Global Root CA, OU=www.digicert.com, O=DigiCert Inc, C=US, Issuer:CN=DigiCert Global Root CA, OU=www.digicert.com, O=DigiCert Inc, C=US, Key type:RSA, Length:2048, Cert Id:1341898239, Valid from:Fri Nov 10 08:00:00 CST 2006, Valid until:Mon Nov 10 08:00:00 CST 2031
+2021-03-09 11:21:12.358 DEBUG 12536 --- [main] c.s.c.messaging.TokenRefresher           : Starting the proactive token refresher
+2021-03-09 11:21:12.371 DEBUG 12536 --- [main] o.a.h.client.protocol.RequestAddCookies  : CookieSpec selected: default
+2021-03-09 11:21:12.377 DEBUG 12536 --- [main] o.a.h.client.protocol.RequestAuthCache   : Auth cache not set in the context
+2021-03-09 11:21:12.379 DEBUG 12536 --- [main] h.i.c.PoolingHttpClientConnectionManager : Connection request: [route: {s}->https://oauth-login.cloud.huawei.com:443][total kept alive: 0; route allocated: 0 of 2; total allocated: 0 of 20]
+2021-03-09 11:21:12.387 DEBUG 12536 --- [main] h.i.c.PoolingHttpClientConnectionManager : Connection leased: [id: 0][route: {s}->https://oauth-login.cloud.huawei.com:443][total kept alive: 0; route allocated: 1 of 2; total allocated: 1 of 20]
+2021-03-09 11:21:12.388 DEBUG 12536 --- [main] o.a.http.impl.execchain.MainClientExec   : Opening connection {s}->https://oauth-login.cloud.huawei.com:443
+2021-03-09 11:21:12.415 DEBUG 12536 --- [RMI TCP Connection(3)-192.168.228.1] sun.rmi.transport.tcp                    : RMI TCP Connection(3)-192.168.228.1: (port 50554) connection closed
+2021-03-09 11:21:12.415 DEBUG 12536 --- [RMI TCP Connection(3)-192.168.228.1] sun.rmi.transport.tcp                    : RMI TCP Connection(3)-192.168.228.1: close connection
+2021-03-09 11:21:12.627 DEBUG 12536 --- [RMI TCP Connection(4)-192.168.228.1] sun.rmi.transport.tcp                    : RMI TCP Connection(4)-192.168.228.1: accepted socket from [192.168.228.1:50559]
+2021-03-09 11:21:12.628 DEBUG 12536 --- [RMI TCP Connection(4)-192.168.228.1] sun.rmi.transport.tcp                    : RMI TCP Connection(4)-192.168.228.1: (port 50554) op = 80
+2021-03-09 11:21:12.628 DEBUG 12536 --- [RMI TCP Connection(4)-192.168.228.1] sun.rmi.loader                           : RMI TCP Connection(4)-192.168.228.1: name = "[Ljava.rmi.server.ObjID;", codebase = "", defaultLoader = sun.misc.Launcher$ExtClassLoader@5a42bbf4
+2021-03-09 11:21:12.628 DEBUG 12536 --- [RMI TCP Connection(4)-192.168.228.1] sun.rmi.loader                           : RMI TCP Connection(4)-192.168.228.1: name = "java.rmi.server.ObjID", codebase = "", defaultLoader = sun.misc.Launcher$ExtClassLoader@5a42bbf4
+2021-03-09 11:21:12.628 DEBUG 12536 --- [RMI TCP Connection(4)-192.168.228.1] sun.rmi.loader                           : RMI TCP Connection(4)-192.168.228.1: name = "java.rmi.server.UID", codebase = "", defaultLoader = sun.misc.Launcher$ExtClassLoader@5a42bbf4
+2021-03-09 11:21:12.628 DEBUG 12536 --- [RMI TCP Connection(4)-192.168.228.1] sun.rmi.loader                           : RMI TCP Connection(4)-192.168.228.1: name = "java.rmi.dgc.VMID", codebase = "", defaultLoader = sun.misc.Launcher$ExtClassLoader@5a42bbf4
+2021-03-09 11:21:12.629 DEBUG 12536 --- [RMI TCP Connection(4)-192.168.228.1] sun.rmi.loader                           : RMI TCP Connection(4)-192.168.228.1: name = "[B", codebase = "", defaultLoader = sun.misc.Launcher$ExtClassLoader@5a42bbf4
+2021-03-09 11:21:12.846 DEBUG 12536 --- [main] .i.c.DefaultHttpClientConnectionOperator : Connecting to oauth-login.cloud.huawei.com/49.4.36.198:443
+2021-03-09 11:21:12.846 DEBUG 12536 --- [main] o.a.h.c.ssl.SSLConnectionSocketFactory   : Connecting socket to oauth-login.cloud.huawei.com/49.4.36.198:443 with timeout 0
+2021-03-09 11:21:12.873 DEBUG 12536 --- [RMI TCP Connection(5)-192.168.228.1] sun.rmi.transport.tcp                    : RMI TCP Connection(5)-192.168.228.1: accepted socket from [192.168.228.1:50560]
+2021-03-09 11:21:12.874 DEBUG 12536 --- [RMI TCP Connection(5)-192.168.228.1] sun.rmi.transport.tcp                    : RMI TCP Connection(5)-192.168.228.1: (port 50554) op = 80
+2021-03-09 11:21:12.874 DEBUG 12536 --- [RMI TCP Connection(5)-192.168.228.1] sun.rmi.loader                           : RMI TCP Connection(5)-192.168.228.1: name = "[Ljava.rmi.server.ObjID;", codebase = "", defaultLoader = sun.misc.Launcher$ExtClassLoader@5a42bbf4
+2021-03-09 11:21:12.875 DEBUG 12536 --- [RMI TCP Connection(5)-192.168.228.1] sun.rmi.loader                           : RMI TCP Connection(5)-192.168.228.1: name = "java.rmi.server.ObjID", codebase = "", defaultLoader = sun.misc.Launcher$ExtClassLoader@5a42bbf4
+2021-03-09 11:21:12.875 DEBUG 12536 --- [RMI TCP Connection(5)-192.168.228.1] sun.rmi.loader                           : RMI TCP Connection(5)-192.168.228.1: name = "java.rmi.server.UID", codebase = "", defaultLoader = sun.misc.Launcher$ExtClassLoader@5a42bbf4
+2021-03-09 11:21:12.875 DEBUG 12536 --- [RMI TCP Connection(5)-192.168.228.1] sun.rmi.loader                           : RMI TCP Connection(5)-192.168.228.1: name = "java.rmi.dgc.Lease", codebase = "", defaultLoader = sun.misc.Launcher$ExtClassLoader@5a42bbf4
+2021-03-09 11:21:12.875 DEBUG 12536 --- [RMI TCP Connection(5)-192.168.228.1] sun.rmi.loader                           : RMI TCP Connection(5)-192.168.228.1: name = "java.rmi.dgc.VMID", codebase = "", defaultLoader = sun.misc.Launcher$ExtClassLoader@5a42bbf4
+2021-03-09 11:21:12.875 DEBUG 12536 --- [RMI TCP Connection(5)-192.168.228.1] sun.rmi.loader                           : RMI TCP Connection(5)-192.168.228.1: name = "[B", codebase = "", defaultLoader = sun.misc.Launcher$ExtClassLoader@5a42bbf4
+2021-03-09 11:21:12.876 DEBUG 12536 --- [RMI TCP Connection(5)-192.168.228.1] sun.rmi.transport.tcp                    : RMI TCP Connection(5)-192.168.228.1: (port 50554) op = 80
+2021-03-09 11:21:12.877 DEBUG 12536 --- [RMI TCP Connection(5)-192.168.228.1] sun.rmi.transport.tcp                    : RMI TCP Connection(5)-192.168.228.1: (port 50554) op = 80
+2021-03-09 11:21:12.877 DEBUG 12536 --- [RMI TCP Connection(5)-192.168.228.1] sun.rmi.loader                           : RMI TCP Connection(5)-192.168.228.1: name = "[Ljava.rmi.server.ObjID;", codebase = "", defaultLoader = sun.misc.Launcher$ExtClassLoader@5a42bbf4
+2021-03-09 11:21:12.877 DEBUG 12536 --- [RMI TCP Connection(5)-192.168.228.1] sun.rmi.loader                           : RMI TCP Connection(5)-192.168.228.1: name = "java.rmi.server.ObjID", codebase = "", defaultLoader = sun.misc.Launcher$ExtClassLoader@5a42bbf4
+2021-03-09 11:21:12.877 DEBUG 12536 --- [RMI TCP Connection(5)-192.168.228.1] sun.rmi.loader                           : RMI TCP Connection(5)-192.168.228.1: name = "java.rmi.server.UID", codebase = "", defaultLoader = sun.misc.Launcher$ExtClassLoader@5a42bbf4
+2021-03-09 11:21:12.877 DEBUG 12536 --- [RMI TCP Connection(5)-192.168.228.1] sun.rmi.loader                           : RMI TCP Connection(5)-192.168.228.1: name = "java.rmi.dgc.Lease", codebase = "", defaultLoader = sun.misc.Launcher$ExtClassLoader@5a42bbf4
+2021-03-09 11:21:12.877 DEBUG 12536 --- [RMI TCP Connection(5)-192.168.228.1] sun.rmi.loader                           : RMI TCP Connection(5)-192.168.228.1: name = "java.rmi.dgc.VMID", codebase = "", defaultLoader = sun.misc.Launcher$ExtClassLoader@5a42bbf4
+2021-03-09 11:21:12.877 DEBUG 12536 --- [RMI TCP Connection(5)-192.168.228.1] sun.rmi.loader                           : RMI TCP Connection(5)-192.168.228.1: name = "[B", codebase = "", defaultLoader = sun.misc.Launcher$ExtClassLoader@5a42bbf4
+2021-03-09 11:21:12.878 DEBUG 12536 --- [RMI TCP Connection(5)-192.168.228.1] sun.rmi.transport.tcp                    : RMI TCP Connection(5)-192.168.228.1: (port 50554) op = 84
+2021-03-09 11:21:12.879 DEBUG 12536 --- [RMI TCP Connection(5)-192.168.228.1] sun.rmi.transport.tcp                    : RMI TCP Connection(5)-192.168.228.1: (port 50554) op = 80
+2021-03-09 11:21:12.879 DEBUG 12536 --- [RMI TCP Connection(5)-192.168.228.1] sun.rmi.transport.tcp                    : RMI TCP Connection(5)-192.168.228.1: (port 50554) op = 80
+2021-03-09 11:21:12.879 DEBUG 12536 --- [RMI TCP Connection(5)-192.168.228.1] sun.rmi.loader                           : RMI TCP Connection(5)-192.168.228.1: name = "javax.management.ObjectName", codebase = ""
+2021-03-09 11:21:12.880 DEBUG 12536 --- [RMI TCP Connection(5)-192.168.228.1] sun.rmi.server.call                      : RMI TCP Connection(5)-192.168.228.1: [192.168.228.1] exception: 
+
+javax.management.InstanceNotFoundException: org.springframework.boot:type=Admin,name=SpringApplication
+	at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.getMBean(DefaultMBeanServerInterceptor.java:1095) ~[na:1.8.0_251]
+	at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.getAttribute(DefaultMBeanServerInterceptor.java:643) ~[na:1.8.0_251]
+	at com.sun.jmx.mbeanserver.JmxMBeanServer.getAttribute(JmxMBeanServer.java:678) ~[na:1.8.0_251]
+	at javax.management.remote.rmi.RMIConnectionImpl.doOperation(RMIConnectionImpl.java:1445) ~[na:1.8.0_251]
+	at javax.management.remote.rmi.RMIConnectionImpl.access$300(RMIConnectionImpl.java:76) ~[na:1.8.0_251]
+	at javax.management.remote.rmi.RMIConnectionImpl$PrivilegedOperation.run(RMIConnectionImpl.java:1309) ~[na:1.8.0_251]
+	at javax.management.remote.rmi.RMIConnectionImpl.doPrivilegedOperation(RMIConnectionImpl.java:1401) ~[na:1.8.0_251]
+	at javax.management.remote.rmi.RMIConnectionImpl.getAttribute(RMIConnectionImpl.java:639) ~[na:1.8.0_251]
+	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_251]
+	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_251]
+	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_251]
+	at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_251]
+	at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:357) ~[na:1.8.0_251]
+	at sun.rmi.transport.Transport$1.run(Transport.java:200) [na:1.8.0_251]
+	at sun.rmi.transport.Transport$1.run(Transport.java:197) [na:1.8.0_251]
+	at java.security.AccessController.doPrivileged(Native Method) [na:1.8.0_251]
+	at sun.rmi.transport.Transport.serviceCall(Transport.java:196) [na:1.8.0_251]
+	at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:573) [na:1.8.0_251]
+	at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:834) [na:1.8.0_251]
+	at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.lambda$run$0(TCPTransport.java:688) [na:1.8.0_251]
+	at java.security.AccessController.doPrivileged(Native Method) [na:1.8.0_251]
+	at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:687) [na:1.8.0_251]
+	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) ~[na:1.8.0_251]
+	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) ~[na:1.8.0_251]
+	at java.lang.Thread.run(Thread.java:748) ~[na:1.8.0_251]
+
+2021-03-09 11:21:12.881 DEBUG 12536 --- [RMI TCP Connection(5)-192.168.228.1] sun.rmi.transport.tcp                    : RMI TCP Connection(5)-192.168.228.1: (port 50554) op = 80
+2021-03-09 11:21:12.912 DEBUG 12536 --- [main] o.a.h.c.ssl.SSLConnectionSocketFactory   : Enabled protocols: [TLSv1, TLSv1.1, TLSv1.2]
+2021-03-09 11:21:12.913 DEBUG 12536 --- [main] o.a.h.c.ssl.SSLConnectionSocketFactory   : Enabled cipher suites:[TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384, TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384, TLS_RSA_WITH_AES_256_CBC_SHA256, TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384, TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384, TLS_DHE_RSA_WITH_AES_256_CBC_SHA256, TLS_DHE_DSS_WITH_AES_256_CBC_SHA256, TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA, TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA, TLS_RSA_WITH_AES_256_CBC_SHA, TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA, TLS_ECDH_RSA_WITH_AES_256_CBC_SHA, TLS_DHE_RSA_WITH_AES_256_CBC_SHA, TLS_DHE_DSS_WITH_AES_256_CBC_SHA, TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256, TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256, TLS_RSA_WITH_AES_128_CBC_SHA256, TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256, TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256, TLS_DHE_RSA_WITH_AES_128_CBC_SHA256, TLS_DHE_DSS_WITH_AES_128_CBC_SHA256, TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA, TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA, TLS_RSA_WITH_AES_128_CBC_SHA, TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA, TLS_ECDH_RSA_WITH_AES_128_CBC_SHA, TLS_DHE_RSA_WITH_AES_128_CBC_SHA, TLS_DHE_DSS_WITH_AES_128_CBC_SHA, TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384, TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256, TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384, TLS_RSA_WITH_AES_256_GCM_SHA384, TLS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384, TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384, TLS_DHE_RSA_WITH_AES_256_GCM_SHA384, TLS_DHE_DSS_WITH_AES_256_GCM_SHA384, TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256, TLS_RSA_WITH_AES_128_GCM_SHA256, TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256, TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256, TLS_DHE_RSA_WITH_AES_128_GCM_SHA256, TLS_DHE_DSS_WITH_AES_128_GCM_SHA256, TLS_EMPTY_RENEGOTIATION_INFO_SCSV]
+2021-03-09 11:21:12.913 DEBUG 12536 --- [main] o.a.h.c.ssl.SSLConnectionSocketFactory   : Starting handshake
+2021-03-09 11:21:12.945 DEBUG 12536 --- [main] jdk.event.security                       : X509Certificate: Alg:SHA256withRSA, Serial:528f0a2a884f88fd6a1603da, Subject:CN=cloud.huawei.com, O="Huawei Software Technologies Co., Ltd.", OU=Cloud Platform GLOBAL Dept, L=Nanjing, ST=Jiangsu, C=CN, Issuer:CN=GlobalSign RSA OV SSL CA 2018, O=GlobalSign nv-sa, C=BE, Key type:RSA, Length:2048, Cert Id:-244728110, Valid from:Tue Aug 25 08:42:13 CST 2020, Valid until:Fri Aug 26 08:42:13 CST 2022
+2021-03-09 11:21:12.946 DEBUG 12536 --- [main] jdk.event.security                       : X509Certificate: Alg:SHA256withRSA, Serial:1ee5f221dfc623bd4333a8557, Subject:CN=GlobalSign RSA OV SSL CA 2018, O=GlobalSign nv-sa, C=BE, Issuer:CN=GlobalSign, O=GlobalSign, OU=GlobalSign Root CA - R3, Key type:RSA, Length:2048, Cert Id:930132802, Valid from:Wed Nov 21 08:00:00 CST 2018, Valid until:Tue Nov 21 08:00:00 CST 2028
+2021-03-09 11:21:12.954 DEBUG 12536 --- [main] jdk.event.security                       : ValidationChain: 733875591, 930132802, -244728110
+2021-03-09 11:21:13.011 DEBUG 12536 --- [main] jdk.event.security                       :  TLSHandshake: oauth-login.cloud.huawei.com:443, TLSv1.2, TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384, -244728110
+2021-03-09 11:21:13.012 DEBUG 12536 --- [main] o.a.h.c.ssl.SSLConnectionSocketFactory   : Secure session established
+2021-03-09 11:21:13.012 DEBUG 12536 --- [main] o.a.h.c.ssl.SSLConnectionSocketFactory   :  negotiated protocol: TLSv1.2
+2021-03-09 11:21:13.012 DEBUG 12536 --- [main] o.a.h.c.ssl.SSLConnectionSocketFactory   :  negotiated cipher suite: TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
+2021-03-09 11:21:13.012 DEBUG 12536 --- [main] o.a.h.c.ssl.SSLConnectionSocketFactory   :  peer principal: CN=cloud.huawei.com, O="Huawei Software Technologies Co., Ltd.", OU=Cloud Platform GLOBAL Dept, L=Nanjing, ST=Jiangsu, C=CN
+2021-03-09 11:21:13.012 DEBUG 12536 --- [main] o.a.h.c.ssl.SSLConnectionSocketFactory   :  peer alternative names: [cloud.huawei.com, cloud.huawei.com.cn, cloud.huawei.asia, cloud.huawei.lat, cloud.huawei.eu, cloud.huawei.com.au, cloud.huawei.ru, *.cloud.huawei.com, *.cloud.huawei.lat, *.cloud.huawei.ru, *.cloud.huawei.asia, *.cloud.huawei.eu, *.cloud.huawei.com.au, *.cloud.huawei.com.cn]
+2021-03-09 11:21:13.012 DEBUG 12536 --- [main] o.a.h.c.ssl.SSLConnectionSocketFactory   :  issuer principal: CN=GlobalSign RSA OV SSL CA 2018, O=GlobalSign nv-sa, C=BE
+2021-03-09 11:21:13.015 DEBUG 12536 --- [main] .i.c.DefaultHttpClientConnectionOperator : Connection established 172.19.157.41:50561<->49.4.36.198:443
+2021-03-09 11:21:13.015 DEBUG 12536 --- [main] o.a.http.impl.execchain.MainClientExec   : Executing request POST /oauth2/v2/token HTTP/1.1
+2021-03-09 11:21:13.015 DEBUG 12536 --- [main] o.a.http.impl.execchain.MainClientExec   : Target auth state: UNCHALLENGED
+2021-03-09 11:21:13.016 DEBUG 12536 --- [main] o.a.http.impl.execchain.MainClientExec   : Proxy auth state: UNCHALLENGED
+2021-03-09 11:21:13.021 DEBUG 12536 --- [main] org.apache.http.headers                  : http-outgoing-0 >> POST /oauth2/v2/token HTTP/1.1
+2021-03-09 11:21:13.021 DEBUG 12536 --- [main] org.apache.http.headers                  : http-outgoing-0 >> Content-Type: application/x-www-form-urlencoded;charset=utf-8
+2021-03-09 11:21:13.021 DEBUG 12536 --- [main] org.apache.http.headers                  : http-outgoing-0 >> Content-Length: 128
+2021-03-09 11:21:13.021 DEBUG 12536 --- [main] org.apache.http.headers                  : http-outgoing-0 >> Host: oauth-login.cloud.huawei.com
+2021-03-09 11:21:13.021 DEBUG 12536 --- [main] org.apache.http.headers                  : http-outgoing-0 >> Connection: Keep-Alive
+2021-03-09 11:21:13.021 DEBUG 12536 --- [main] org.apache.http.headers                  : http-outgoing-0 >> User-Agent: Apache-HttpClient/4.5.7 (Java/1.8.0_251)
+2021-03-09 11:21:13.021 DEBUG 12536 --- [main] org.apache.http.headers                  : http-outgoing-0 >> Accept-Encoding: gzip,deflate
+2021-03-09 11:21:13.021 DEBUG 12536 --- [main] org.apache.http.wire                     : http-outgoing-0 >> "POST /oauth2/v2/token HTTP/1.1[\r][\n]"
+2021-03-09 11:21:13.021 DEBUG 12536 --- [main] org.apache.http.wire                     : http-outgoing-0 >> "Content-Type: application/x-www-form-urlencoded;charset=utf-8[\r][\n]"
+2021-03-09 11:21:13.021 DEBUG 12536 --- [main] org.apache.http.wire                     : http-outgoing-0 >> "Content-Length: 128[\r][\n]"
+2021-03-09 11:21:13.021 DEBUG 12536 --- [main] org.apache.http.wire                     : http-outgoing-0 >> "Host: oauth-login.cloud.huawei.com[\r][\n]"
+2021-03-09 11:21:13.021 DEBUG 12536 --- [main] org.apache.http.wire                     : http-outgoing-0 >> "Connection: Keep-Alive[\r][\n]"
+2021-03-09 11:21:13.021 DEBUG 12536 --- [main] org.apache.http.wire                     : http-outgoing-0 >> "User-Agent: Apache-HttpClient/4.5.7 (Java/1.8.0_251)[\r][\n]"
+2021-03-09 11:21:13.022 DEBUG 12536 --- [main] org.apache.http.wire                     : http-outgoing-0 >> "Accept-Encoding: gzip,deflate[\r][\n]"
+2021-03-09 11:21:13.022 DEBUG 12536 --- [main] org.apache.http.wire                     : http-outgoing-0 >> "[\r][\n]"
+2021-03-09 11:21:13.022 DEBUG 12536 --- [main] org.apache.http.wire                     : http-outgoing-0 >> "grant_type=client_credentials&client_secret=8482729ea0f91eb002b493bc330f421d1d42e2d9c8f01f00ef0c15792aec570f&client_id=103511055"
+2021-03-09 11:21:13.057 DEBUG 12536 --- [main] org.apache.http.wire                     : http-outgoing-0 << "HTTP/1.1 200 OK[\r][\n]"
+2021-03-09 11:21:13.057 DEBUG 12536 --- [main] org.apache.http.wire                     : http-outgoing-0 << "Date: Tue, 09 Mar 2021 03:21:13 GMT[\r][\n]"
+2021-03-09 11:21:13.057 DEBUG 12536 --- [main] org.apache.http.wire                     : http-outgoing-0 << "Content-Type: text/html;charset=utf-8[\r][\n]"
+2021-03-09 11:21:13.057 DEBUG 12536 --- [main] org.apache.http.wire                     : http-outgoing-0 << "Content-Length: 147[\r][\n]"
+2021-03-09 11:21:13.057 DEBUG 12536 --- [main] org.apache.http.wire                     : http-outgoing-0 << "Connection: keep-alive[\r][\n]"
+2021-03-09 11:21:13.057 DEBUG 12536 --- [main] org.apache.http.wire                     : http-outgoing-0 << "Cache-Control: no-store[\r][\n]"
+2021-03-09 11:21:13.057 DEBUG 12536 --- [main] org.apache.http.wire                     : http-outgoing-0 << "Pragma: no-cache[\r][\n]"
+2021-03-09 11:21:13.057 DEBUG 12536 --- [main] org.apache.http.wire                     : http-outgoing-0 << "X-XSS-Protection: 1; mode=block[\r][\n]"
+2021-03-09 11:21:13.057 DEBUG 12536 --- [main] org.apache.http.wire                     : http-outgoing-0 << "X-Content-Type-Options: nosniff[\r][\n]"
+2021-03-09 11:21:13.057 DEBUG 12536 --- [main] org.apache.http.wire                     : http-outgoing-0 << "Server: elb[\r][\n]"
+2021-03-09 11:21:13.057 DEBUG 12536 --- [main] org.apache.http.wire                     : http-outgoing-0 << "[\r][\n]"
+2021-03-09 11:21:13.057 DEBUG 12536 --- [main] org.apache.http.wire                     : http-outgoing-0 << "{"access_token":"CgB6e3x9+sDx1avBbgNsOSzJRkadaCbz1nd1QBtVkZfxucKVIZG7pnteBBN7pnetijvGjDLR1bChAqqGY9Q25KcH","expires_in":3600,"token_type":"Bearer"}"
+2021-03-09 11:21:13.061 DEBUG 12536 --- [main] org.apache.http.headers                  : http-outgoing-0 << HTTP/1.1 200 OK
+2021-03-09 11:21:13.061 DEBUG 12536 --- [main] org.apache.http.headers                  : http-outgoing-0 << Date: Tue, 09 Mar 2021 03:21:13 GMT
+2021-03-09 11:21:13.061 DEBUG 12536 --- [main] org.apache.http.headers                  : http-outgoing-0 << Content-Type: text/html;charset=utf-8
+2021-03-09 11:21:13.061 DEBUG 12536 --- [main] org.apache.http.headers                  : http-outgoing-0 << Content-Length: 147
+2021-03-09 11:21:13.061 DEBUG 12536 --- [main] org.apache.http.headers                  : http-outgoing-0 << Connection: keep-alive
+2021-03-09 11:21:13.061 DEBUG 12536 --- [main] org.apache.http.headers                  : http-outgoing-0 << Cache-Control: no-store
+2021-03-09 11:21:13.061 DEBUG 12536 --- [main] org.apache.http.headers                  : http-outgoing-0 << Pragma: no-cache
+2021-03-09 11:21:13.061 DEBUG 12536 --- [main] org.apache.http.headers                  : http-outgoing-0 << X-XSS-Protection: 1; mode=block
+2021-03-09 11:21:13.061 DEBUG 12536 --- [main] org.apache.http.headers                  : http-outgoing-0 << X-Content-Type-Options: nosniff
+2021-03-09 11:21:13.061 DEBUG 12536 --- [main] org.apache.http.headers                  : http-outgoing-0 << Server: elb
+2021-03-09 11:21:13.068 DEBUG 12536 --- [main] o.a.http.impl.execchain.MainClientExec   : Connection can be kept alive indefinitely
+2021-03-09 11:21:13.074 DEBUG 12536 --- [main] h.i.c.PoolingHttpClientConnectionManager : Connection [id: 0][route: {s}->https://oauth-login.cloud.huawei.com:443] can be kept alive indefinitely
+2021-03-09 11:21:13.074 DEBUG 12536 --- [main] h.i.c.DefaultManagedHttpClientConnection : http-outgoing-0: set socket timeout to 0
+2021-03-09 11:21:13.074 DEBUG 12536 --- [main] h.i.c.PoolingHttpClientConnectionManager : Connection released: [id: 0][route: {s}->https://oauth-login.cloud.huawei.com:443][total kept alive: 1; route allocated: 1 of 2; total allocated: 1 of 20]
+2021-03-09 11:21:13.111 DEBUG 12536 --- [main] c.s.c.messaging.TokenRefresher           : Scheduling next token refresh in 3600000 milliseconds
+2021-03-09 11:21:13.119 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Creating shared instance of singleton bean 'userTokenMapper'
+2021-03-09 11:21:13.120 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Creating shared instance of singleton bean 'userController'
+2021-03-09 11:21:13.120 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Creating shared instance of singleton bean 'userServiceImpl'
+2021-03-09 11:21:13.121 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Creating shared instance of singleton bean 'rechargeOrderMapper'
+2021-03-09 11:21:13.122 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Creating shared instance of singleton bean 'userTokenController'
+2021-03-09 11:21:13.122 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Creating shared instance of singleton bean 'userTokenServiceImpl'
+2021-03-09 11:21:13.123 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Creating shared instance of singleton bean 'testTransactionManager'
+2021-03-09 11:21:13.125 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Creating shared instance of singleton bean 'org.springframework.boot.autoconfigure.AutoConfigurationPackages'
+2021-03-09 11:21:13.125 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Creating shared instance of singleton bean 'org.springframework.boot.autoconfigure.context.PropertyPlaceholderAutoConfiguration'
+2021-03-09 11:21:13.126 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Creating shared instance of singleton bean 'org.springframework.boot.autoconfigure.websocket.servlet.WebSocketServletAutoConfiguration'
+2021-03-09 11:21:13.126 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Creating shared instance of singleton bean 'org.springframework.boot.context.properties.EnableConfigurationPropertiesRegistrar.methodValidationExcludeFilter'
+2021-03-09 11:21:13.127 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Creating shared instance of singleton bean 'org.springframework.boot.autoconfigure.web.servlet.DispatcherServletAutoConfiguration'
+2021-03-09 11:21:13.127 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Creating shared instance of singleton bean 'org.springframework.boot.autoconfigure.task.TaskExecutionAutoConfiguration'
+2021-03-09 11:21:13.128 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Creating shared instance of singleton bean 'taskExecutorBuilder'
+2021-03-09 11:21:13.128 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Creating shared instance of singleton bean 'spring.task.execution-org.springframework.boot.autoconfigure.task.TaskExecutionProperties'
+2021-03-09 11:21:13.129 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Autowiring by type from bean name 'taskExecutorBuilder' via factory method to bean named 'spring.task.execution-org.springframework.boot.autoconfigure.task.TaskExecutionProperties'
+2021-03-09 11:21:13.131 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Creating shared instance of singleton bean 'org.springframework.boot.autoconfigure.web.servlet.error.ErrorMvcAutoConfiguration$WhitelabelErrorViewConfiguration'
+2021-03-09 11:21:13.132 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Creating shared instance of singleton bean 'error'
+2021-03-09 11:21:13.132 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Creating shared instance of singleton bean 'beanNameViewResolver'
+2021-03-09 11:21:13.133 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Creating shared instance of singleton bean 'org.springframework.boot.autoconfigure.web.servlet.error.ErrorMvcAutoConfiguration$DefaultErrorViewResolverConfiguration'
+2021-03-09 11:21:13.134 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Creating shared instance of singleton bean 'spring.resources-org.springframework.boot.autoconfigure.web.ResourceProperties'
+2021-03-09 11:21:13.137 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Creating shared instance of singleton bean 'spring.web-org.springframework.boot.autoconfigure.web.WebProperties'
+2021-03-09 11:21:13.138 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Autowiring by type from bean name 'org.springframework.boot.autoconfigure.web.servlet.error.ErrorMvcAutoConfiguration$DefaultErrorViewResolverConfiguration' via constructor to bean named 'org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext@53976f5c'
+2021-03-09 11:21:13.138 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Autowiring by type from bean name 'org.springframework.boot.autoconfigure.web.servlet.error.ErrorMvcAutoConfiguration$DefaultErrorViewResolverConfiguration' via constructor to bean named 'spring.resources-org.springframework.boot.autoconfigure.web.ResourceProperties'
+2021-03-09 11:21:13.138 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Autowiring by type from bean name 'org.springframework.boot.autoconfigure.web.servlet.error.ErrorMvcAutoConfiguration$DefaultErrorViewResolverConfiguration' via constructor to bean named 'spring.web-org.springframework.boot.autoconfigure.web.WebProperties'
+2021-03-09 11:21:13.138 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Creating shared instance of singleton bean 'conventionErrorViewResolver'
+2021-03-09 11:21:13.139 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Creating shared instance of singleton bean 'errorAttributes'
+2021-03-09 11:21:13.141 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Creating shared instance of singleton bean 'basicErrorController'
+2021-03-09 11:21:13.142 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Autowiring by type from bean name 'basicErrorController' via factory method to bean named 'errorAttributes'
+2021-03-09 11:21:13.144 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Creating shared instance of singleton bean 'org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration$EnableWebMvcConfiguration'
+2021-03-09 11:21:13.146 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Autowiring by type from bean name 'org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration$EnableWebMvcConfiguration' via constructor to bean named 'spring.resources-org.springframework.boot.autoconfigure.web.ResourceProperties'
+2021-03-09 11:21:13.146 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Autowiring by type from bean name 'org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration$EnableWebMvcConfiguration' via constructor to bean named 'spring.mvc-org.springframework.boot.autoconfigure.web.servlet.WebMvcProperties'
+2021-03-09 11:21:13.146 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Autowiring by type from bean name 'org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration$EnableWebMvcConfiguration' via constructor to bean named 'spring.web-org.springframework.boot.autoconfigure.web.WebProperties'
+2021-03-09 11:21:13.146 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Autowiring by type from bean name 'org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration$EnableWebMvcConfiguration' via constructor to bean named 'org.springframework.beans.factory.support.DefaultListableBeanFactory@4b8d604b'
+2021-03-09 11:21:13.152 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Creating shared instance of singleton bean 'org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration$WebMvcAutoConfigurationAdapter'
+2021-03-09 11:21:13.153 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Autowiring by type from bean name 'org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration$WebMvcAutoConfigurationAdapter' via constructor to bean named 'spring.resources-org.springframework.boot.autoconfigure.web.ResourceProperties'
+2021-03-09 11:21:13.153 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Autowiring by type from bean name 'org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration$WebMvcAutoConfigurationAdapter' via constructor to bean named 'spring.web-org.springframework.boot.autoconfigure.web.WebProperties'
+2021-03-09 11:21:13.153 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Autowiring by type from bean name 'org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration$WebMvcAutoConfigurationAdapter' via constructor to bean named 'spring.mvc-org.springframework.boot.autoconfigure.web.servlet.WebMvcProperties'
+2021-03-09 11:21:13.153 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Autowiring by type from bean name 'org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration$WebMvcAutoConfigurationAdapter' via constructor to bean named 'org.springframework.beans.factory.support.DefaultListableBeanFactory@4b8d604b'
+2021-03-09 11:21:13.155 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Creating shared instance of singleton bean 'requestMappingHandlerAdapter'
+2021-03-09 11:21:13.156 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Creating shared instance of singleton bean 'mvcContentNegotiationManager'
+2021-03-09 11:21:13.161 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Creating shared instance of singleton bean 'mvcConversionService'
+2021-03-09 11:21:13.164 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Creating shared instance of singleton bean 'mvcValidator'
+2021-03-09 11:21:13.165 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Autowiring by type from bean name 'requestMappingHandlerAdapter' via factory method to bean named 'mvcContentNegotiationManager'
+2021-03-09 11:21:13.165 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Autowiring by type from bean name 'requestMappingHandlerAdapter' via factory method to bean named 'mvcConversionService'
+2021-03-09 11:21:13.165 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Autowiring by type from bean name 'requestMappingHandlerAdapter' via factory method to bean named 'mvcValidator'
+2021-03-09 11:21:13.167 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Autowiring by type from bean name 'requestMappingHandlerAdapter' via factory method to bean named 'mvcContentNegotiationManager'
+2021-03-09 11:21:13.167 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Autowiring by type from bean name 'requestMappingHandlerAdapter' via factory method to bean named 'mvcConversionService'
+2021-03-09 11:21:13.167 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Autowiring by type from bean name 'requestMappingHandlerAdapter' via factory method to bean named 'mvcValidator'
+2021-03-09 11:21:13.172 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Creating shared instance of singleton bean 'messageConverters'
+2021-03-09 11:21:13.172 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Creating shared instance of singleton bean 'org.springframework.boot.autoconfigure.http.HttpMessageConvertersAutoConfiguration'
+2021-03-09 11:21:13.174 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Creating shared instance of singleton bean 'stringHttpMessageConverter'
+2021-03-09 11:21:13.174 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Creating shared instance of singleton bean 'org.springframework.boot.autoconfigure.http.HttpMessageConvertersAutoConfiguration$StringHttpMessageConverterConfiguration'
+2021-03-09 11:21:13.175 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Autowiring by type from bean name 'stringHttpMessageConverter' via factory method to bean named 'environment'
+2021-03-09 11:21:13.179 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Creating shared instance of singleton bean 'mappingJackson2HttpMessageConverter'
+2021-03-09 11:21:13.180 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Creating shared instance of singleton bean 'org.springframework.boot.autoconfigure.http.JacksonHttpMessageConvertersConfiguration$MappingJackson2HttpMessageConverterConfiguration'
+2021-03-09 11:21:13.180 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Creating shared instance of singleton bean 'jacksonObjectMapper'
+2021-03-09 11:21:13.180 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Creating shared instance of singleton bean 'org.springframework.boot.autoconfigure.jackson.JacksonAutoConfiguration$JacksonObjectMapperConfiguration'
+2021-03-09 11:21:13.181 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Creating shared instance of singleton bean 'org.springframework.boot.autoconfigure.jackson.JacksonAutoConfiguration$JacksonObjectMapperBuilderConfiguration'
+2021-03-09 11:21:13.182 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Creating shared instance of singleton bean 'standardJacksonObjectMapperBuilderCustomizer'
+2021-03-09 11:21:13.182 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Creating shared instance of singleton bean 'org.springframework.boot.autoconfigure.jackson.JacksonAutoConfiguration$Jackson2ObjectMapperBuilderCustomizerConfiguration'
+2021-03-09 11:21:13.183 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Creating shared instance of singleton bean 'spring.jackson-org.springframework.boot.autoconfigure.jackson.JacksonProperties'
+2021-03-09 11:21:13.184 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Autowiring by type from bean name 'standardJacksonObjectMapperBuilderCustomizer' via factory method to bean named 'org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext@53976f5c'
+2021-03-09 11:21:13.184 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Autowiring by type from bean name 'standardJacksonObjectMapperBuilderCustomizer' via factory method to bean named 'spring.jackson-org.springframework.boot.autoconfigure.jackson.JacksonProperties'
+2021-03-09 11:21:13.185 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Autowiring by type from bean name 'jacksonObjectMapperBuilder' via factory method to bean named 'org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext@53976f5c'
+2021-03-09 11:21:13.185 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Autowiring by type from bean name 'jacksonObjectMapperBuilder' via factory method to bean named 'standardJacksonObjectMapperBuilderCustomizer'
+2021-03-09 11:21:13.186 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Creating shared instance of singleton bean 'parameterNamesModule'
+2021-03-09 11:21:13.186 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Creating shared instance of singleton bean 'org.springframework.boot.autoconfigure.jackson.JacksonAutoConfiguration$ParameterNamesModuleConfiguration'
+2021-03-09 11:21:13.189 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Creating shared instance of singleton bean 'jsonComponentModule'
+2021-03-09 11:21:13.189 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Creating shared instance of singleton bean 'org.springframework.boot.autoconfigure.jackson.JacksonAutoConfiguration'
+2021-03-09 11:21:13.197 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Autowiring by type from bean name 'jacksonObjectMapper' via factory method to bean named 'jacksonObjectMapperBuilder'
+2021-03-09 11:21:13.212 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Autowiring by type from bean name 'mappingJackson2HttpMessageConverter' via factory method to bean named 'jacksonObjectMapper'
+2021-03-09 11:21:13.217 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Creating shared instance of singleton bean 'applicationTaskExecutor'
+2021-03-09 11:21:13.218 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Autowiring by type from bean name 'applicationTaskExecutor' via factory method to bean named 'taskExecutorBuilder'
+2021-03-09 11:21:13.221  INFO 12536 --- [main] o.s.s.concurrent.ThreadPoolTaskExecutor  : Initializing ExecutorService 'applicationTaskExecutor'
+2021-03-09 11:21:13.229 DEBUG 12536 --- [main] s.w.s.m.m.a.RequestMappingHandlerAdapter : ControllerAdvice beans: 0 @ModelAttribute, 0 @InitBinder, 1 RequestBodyAdvice, 1 ResponseBodyAdvice
+2021-03-09 11:21:13.241 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Creating shared instance of singleton bean 'requestMappingHandlerMapping'
+2021-03-09 11:21:13.242 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Creating shared instance of singleton bean 'mvcResourceUrlProvider'
+2021-03-09 11:21:13.246 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Autowiring by type from bean name 'requestMappingHandlerMapping' via factory method to bean named 'mvcContentNegotiationManager'
+2021-03-09 11:21:13.246 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Autowiring by type from bean name 'requestMappingHandlerMapping' via factory method to bean named 'mvcConversionService'
+2021-03-09 11:21:13.246 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Autowiring by type from bean name 'requestMappingHandlerMapping' via factory method to bean named 'mvcResourceUrlProvider'
+2021-03-09 11:21:13.247 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Autowiring by type from bean name 'requestMappingHandlerMapping' via factory method to bean named 'mvcContentNegotiationManager'
+2021-03-09 11:21:13.247 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Autowiring by type from bean name 'requestMappingHandlerMapping' via factory method to bean named 'mvcConversionService'
+2021-03-09 11:21:13.247 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Autowiring by type from bean name 'requestMappingHandlerMapping' via factory method to bean named 'mvcResourceUrlProvider'
+2021-03-09 11:21:13.270 DEBUG 12536 --- [main] s.w.s.m.m.a.RequestMappingHandlerMapping : 16 mappings in 'requestMappingHandlerMapping'
+2021-03-09 11:21:13.272 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Creating shared instance of singleton bean 'welcomePageHandlerMapping'
+2021-03-09 11:21:13.272 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Autowiring by type from bean name 'welcomePageHandlerMapping' via factory method to bean named 'org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext@53976f5c'
+2021-03-09 11:21:13.272 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Autowiring by type from bean name 'welcomePageHandlerMapping' via factory method to bean named 'mvcConversionService'
+2021-03-09 11:21:13.272 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Autowiring by type from bean name 'welcomePageHandlerMapping' via factory method to bean named 'mvcResourceUrlProvider'
+2021-03-09 11:21:13.276 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Creating shared instance of singleton bean 'localeResolver'
+2021-03-09 11:21:13.277 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Creating shared instance of singleton bean 'mvcUrlPathHelper'
+2021-03-09 11:21:13.278 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Creating shared instance of singleton bean 'mvcPathMatcher'
+2021-03-09 11:21:13.279 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Creating shared instance of singleton bean 'viewControllerHandlerMapping'
+2021-03-09 11:21:13.279 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Autowiring by type from bean name 'viewControllerHandlerMapping' via factory method to bean named 'mvcConversionService'
+2021-03-09 11:21:13.279 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Autowiring by type from bean name 'viewControllerHandlerMapping' via factory method to bean named 'mvcResourceUrlProvider'
+2021-03-09 11:21:13.279 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Creating shared instance of singleton bean 'beanNameHandlerMapping'
+2021-03-09 11:21:13.280 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Autowiring by type from bean name 'beanNameHandlerMapping' via factory method to bean named 'mvcConversionService'
+2021-03-09 11:21:13.280 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Autowiring by type from bean name 'beanNameHandlerMapping' via factory method to bean named 'mvcResourceUrlProvider'
+2021-03-09 11:21:13.282 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Creating shared instance of singleton bean 'routerFunctionMapping'
+2021-03-09 11:21:13.282 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Autowiring by type from bean name 'routerFunctionMapping' via factory method to bean named 'mvcConversionService'
+2021-03-09 11:21:13.282 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Autowiring by type from bean name 'routerFunctionMapping' via factory method to bean named 'mvcResourceUrlProvider'
+2021-03-09 11:21:13.285 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Creating shared instance of singleton bean 'resourceHandlerMapping'
+2021-03-09 11:21:13.285 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Autowiring by type from bean name 'resourceHandlerMapping' via factory method to bean named 'mvcContentNegotiationManager'
+2021-03-09 11:21:13.285 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Autowiring by type from bean name 'resourceHandlerMapping' via factory method to bean named 'mvcConversionService'
+2021-03-09 11:21:13.285 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Autowiring by type from bean name 'resourceHandlerMapping' via factory method to bean named 'mvcResourceUrlProvider'
+2021-03-09 11:21:13.292 DEBUG 12536 --- [main] o.s.w.s.handler.SimpleUrlHandlerMapping  : Patterns [/webjars/**, /**] in 'resourceHandlerMapping'
+2021-03-09 11:21:13.293 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Creating shared instance of singleton bean 'defaultServletHandlerMapping'
+2021-03-09 11:21:13.293 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Creating shared instance of singleton bean 'handlerFunctionAdapter'
+2021-03-09 11:21:13.294 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Creating shared instance of singleton bean 'mvcUriComponentsContributor'
+2021-03-09 11:21:13.294 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Autowiring by type from bean name 'mvcUriComponentsContributor' via factory method to bean named 'mvcConversionService'
+2021-03-09 11:21:13.294 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Autowiring by type from bean name 'mvcUriComponentsContributor' via factory method to bean named 'requestMappingHandlerAdapter'
+2021-03-09 11:21:13.296 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Creating shared instance of singleton bean 'httpRequestHandlerAdapter'
+2021-03-09 11:21:13.296 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Creating shared instance of singleton bean 'simpleControllerHandlerAdapter'
+2021-03-09 11:21:13.296 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Creating shared instance of singleton bean 'handlerExceptionResolver'
+2021-03-09 11:21:13.297 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Autowiring by type from bean name 'handlerExceptionResolver' via factory method to bean named 'mvcContentNegotiationManager'
+2021-03-09 11:21:13.299 DEBUG 12536 --- [main] .m.m.a.ExceptionHandlerExceptionResolver : ControllerAdvice beans: 0 @ExceptionHandler, 1 ResponseBodyAdvice
+2021-03-09 11:21:13.300 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Creating shared instance of singleton bean 'mvcViewResolver'
+2021-03-09 11:21:13.301 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Autowiring by type from bean name 'mvcViewResolver' via factory method to bean named 'mvcContentNegotiationManager'
+2021-03-09 11:21:13.302 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Creating shared instance of singleton bean 'themeResolver'
+2021-03-09 11:21:13.302 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Creating shared instance of singleton bean 'flashMapManager'
+2021-03-09 11:21:13.304 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Creating shared instance of singleton bean 'viewNameTranslator'
+2021-03-09 11:21:13.305 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Creating shared instance of singleton bean 'defaultViewResolver'
+2021-03-09 11:21:13.308 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Creating shared instance of singleton bean 'viewResolver'
+2021-03-09 11:21:13.308 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Autowiring by type from bean name 'viewResolver' via factory method to bean named 'org.springframework.beans.factory.support.DefaultListableBeanFactory@4b8d604b'
+2021-03-09 11:21:13.309 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Creating shared instance of singleton bean 'org.springframework.boot.autoconfigure.jdbc.metadata.DataSourcePoolMetadataProvidersConfiguration$HikariPoolDataSourceMetadataProviderConfiguration'
+2021-03-09 11:21:13.310 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Creating shared instance of singleton bean 'hikariPoolDataSourceMetadataProvider'
+2021-03-09 11:21:13.310 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Creating shared instance of singleton bean 'org.springframework.boot.autoconfigure.jdbc.metadata.DataSourcePoolMetadataProvidersConfiguration'
+2021-03-09 11:21:13.310 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Creating shared instance of singleton bean 'org.springframework.boot.autoconfigure.jdbc.DataSourceInitializationConfiguration'
+2021-03-09 11:21:13.310 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Creating shared instance of singleton bean 'org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration'
+2021-03-09 11:21:13.311 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Creating shared instance of singleton bean 'org.mybatis.spring.boot.autoconfigure.MybatisLanguageDriverAutoConfiguration'
+2021-03-09 11:21:13.311 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Creating shared instance of singleton bean 'org.mybatis.spring.boot.autoconfigure.MybatisAutoConfiguration'
+2021-03-09 11:21:13.312 DEBUG 12536 --- [main] ocalVariableTableParameterNameDiscoverer : Cannot find '.class' file for class [class org.mybatis.spring.boot.autoconfigure.MybatisAutoConfiguration$$EnhancerBySpringCGLIB$$22953dd6] - unable to determine constructor/method parameter names
+2021-03-09 11:21:13.313 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Creating shared instance of singleton bean 'mybatis-org.mybatis.spring.boot.autoconfigure.MybatisProperties'
+2021-03-09 11:21:13.315 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Autowiring by type from bean name 'org.mybatis.spring.boot.autoconfigure.MybatisAutoConfiguration' via constructor to bean named 'mybatis-org.mybatis.spring.boot.autoconfigure.MybatisProperties'
+2021-03-09 11:21:13.315 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Autowiring by type from bean name 'org.mybatis.spring.boot.autoconfigure.MybatisAutoConfiguration' via constructor to bean named 'org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext@53976f5c'
+2021-03-09 11:21:13.316 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Creating shared instance of singleton bean 'sqlSessionTemplate'
+2021-03-09 11:21:13.317 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Autowiring by type from bean name 'sqlSessionTemplate' via factory method to bean named 'testDsSqlSessionFactory'
+2021-03-09 11:21:13.320 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Creating shared instance of singleton bean 'org.springframework.boot.autoconfigure.jmx.JmxAutoConfiguration'
+2021-03-09 11:21:13.320 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Autowiring by type from bean name 'org.springframework.boot.autoconfigure.jmx.JmxAutoConfiguration' via constructor to bean named 'environment'
+2021-03-09 11:21:13.320 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Creating shared instance of singleton bean 'mbeanExporter'
+2021-03-09 11:21:13.321 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Creating shared instance of singleton bean 'objectNamingStrategy'
+2021-03-09 11:21:13.322 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Autowiring by type from bean name 'mbeanExporter' via factory method to bean named 'objectNamingStrategy'
+2021-03-09 11:21:13.322 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Autowiring by type from bean name 'mbeanExporter' via factory method to bean named 'org.springframework.beans.factory.support.DefaultListableBeanFactory@4b8d604b'
+2021-03-09 11:21:13.325 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Creating shared instance of singleton bean 'mbeanServer'
+2021-03-09 11:21:13.327 DEBUG 12536 --- [main] o.springframework.jmx.support.JmxUtils   : Found MBeanServer: com.sun.jmx.mbeanserver.JmxMBeanServer@133314b
+2021-03-09 11:21:13.331 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Creating shared instance of singleton bean 'org.springframework.boot.autoconfigure.admin.SpringApplicationAdminJmxAutoConfiguration'
+2021-03-09 11:21:13.331 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Creating shared instance of singleton bean 'springApplicationAdminRegistrar'
+2021-03-09 11:21:13.331 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Autowiring by type from bean name 'springApplicationAdminRegistrar' via factory method to bean named 'environment'
+2021-03-09 11:21:13.333 DEBUG 12536 --- [main] inMXBeanRegistrar$SpringApplicationAdmin : Application Admin MBean registered with name 'org.springframework.boot:type=Admin,name=SpringApplication'
+2021-03-09 11:21:13.334 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Creating shared instance of singleton bean 'org.springframework.boot.autoconfigure.aop.AopAutoConfiguration$ClassProxyingConfiguration'
+2021-03-09 11:21:13.334 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Autowiring by type from bean name 'org.springframework.boot.autoconfigure.aop.AopAutoConfiguration$ClassProxyingConfiguration' via constructor to bean named 'org.springframework.beans.factory.support.DefaultListableBeanFactory@4b8d604b'
+2021-03-09 11:21:13.334 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Creating shared instance of singleton bean 'org.springframework.boot.autoconfigure.aop.AopAutoConfiguration'
+2021-03-09 11:21:13.335 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Creating shared instance of singleton bean 'org.springframework.boot.autoconfigure.availability.ApplicationAvailabilityAutoConfiguration'
+2021-03-09 11:21:13.335 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Creating shared instance of singleton bean 'applicationAvailability'
+2021-03-09 11:21:13.337 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Creating shared instance of singleton bean 'org.springframework.boot.autoconfigure.context.ConfigurationPropertiesAutoConfiguration'
+2021-03-09 11:21:13.337 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Creating shared instance of singleton bean 'org.springframework.boot.autoconfigure.context.LifecycleAutoConfiguration'
+2021-03-09 11:21:13.337 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Creating shared instance of singleton bean 'lifecycleProcessor'
+2021-03-09 11:21:13.338 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Creating shared instance of singleton bean 'spring.lifecycle-org.springframework.boot.autoconfigure.context.LifecycleProperties'
+2021-03-09 11:21:13.339 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Autowiring by type from bean name 'lifecycleProcessor' via factory method to bean named 'spring.lifecycle-org.springframework.boot.autoconfigure.context.LifecycleProperties'
+2021-03-09 11:21:13.340 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Creating shared instance of singleton bean 'org.springframework.boot.autoconfigure.dao.PersistenceExceptionTranslationAutoConfiguration'
+2021-03-09 11:21:13.341 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Creating shared instance of singleton bean 'org.springframework.boot.autoconfigure.http.JacksonHttpMessageConvertersConfiguration'
+2021-03-09 11:21:13.342 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Creating shared instance of singleton bean 'org.springframework.boot.autoconfigure.info.ProjectInfoAutoConfiguration'
+2021-03-09 11:21:13.344 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Creating shared instance of singleton bean 'spring.info-org.springframework.boot.autoconfigure.info.ProjectInfoProperties'
+2021-03-09 11:21:13.345 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Autowiring by type from bean name 'org.springframework.boot.autoconfigure.info.ProjectInfoAutoConfiguration' via constructor to bean named 'spring.info-org.springframework.boot.autoconfigure.info.ProjectInfoProperties'
+2021-03-09 11:21:13.345 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Creating shared instance of singleton bean 'org.springframework.boot.autoconfigure.jdbc.JdbcTemplateConfiguration'
+2021-03-09 11:21:13.345 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Creating shared instance of singleton bean 'jdbcTemplate'
+2021-03-09 11:21:13.346 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Creating shared instance of singleton bean 'spring.jdbc-org.springframework.boot.autoconfigure.jdbc.JdbcProperties'
+2021-03-09 11:21:13.346 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Autowiring by type from bean name 'jdbcTemplate' via factory method to bean named 'testDataSource'
+2021-03-09 11:21:13.346 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Autowiring by type from bean name 'jdbcTemplate' via factory method to bean named 'spring.jdbc-org.springframework.boot.autoconfigure.jdbc.JdbcProperties'
+2021-03-09 11:21:13.353 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Creating shared instance of singleton bean 'org.springframework.boot.autoconfigure.jdbc.NamedParameterJdbcTemplateConfiguration'
+2021-03-09 11:21:13.353 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Creating shared instance of singleton bean 'namedParameterJdbcTemplate'
+2021-03-09 11:21:13.353 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Autowiring by type from bean name 'namedParameterJdbcTemplate' via factory method to bean named 'jdbcTemplate'
+2021-03-09 11:21:13.356 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Creating shared instance of singleton bean 'org.springframework.boot.autoconfigure.jdbc.JdbcTemplateAutoConfiguration'
+2021-03-09 11:21:13.356 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Creating shared instance of singleton bean 'org.springframework.boot.autoconfigure.task.TaskSchedulingAutoConfiguration'
+2021-03-09 11:21:13.357 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Creating shared instance of singleton bean 'taskSchedulerBuilder'
+2021-03-09 11:21:13.358 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Creating shared instance of singleton bean 'spring.task.scheduling-org.springframework.boot.autoconfigure.task.TaskSchedulingProperties'
+2021-03-09 11:21:13.359 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Autowiring by type from bean name 'taskSchedulerBuilder' via factory method to bean named 'spring.task.scheduling-org.springframework.boot.autoconfigure.task.TaskSchedulingProperties'
+2021-03-09 11:21:13.360 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Creating shared instance of singleton bean 'org.springframework.boot.autoconfigure.jdbc.DataSourceTransactionManagerAutoConfiguration$JdbcTransactionManagerConfiguration'
+2021-03-09 11:21:13.360 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Creating shared instance of singleton bean 'org.springframework.boot.autoconfigure.jdbc.DataSourceTransactionManagerAutoConfiguration'
+2021-03-09 11:21:13.361 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Creating shared instance of singleton bean 'org.springframework.boot.autoconfigure.transaction.TransactionAutoConfiguration$EnableTransactionManagementConfiguration$CglibAutoProxyConfiguration'
+2021-03-09 11:21:13.361 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Creating shared instance of singleton bean 'org.springframework.boot.autoconfigure.transaction.TransactionAutoConfiguration$EnableTransactionManagementConfiguration'
+2021-03-09 11:21:13.361 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Creating shared instance of singleton bean 'org.springframework.boot.autoconfigure.transaction.TransactionAutoConfiguration$TransactionTemplateConfiguration'
+2021-03-09 11:21:13.361 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Creating shared instance of singleton bean 'transactionTemplate'
+2021-03-09 11:21:13.361 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Autowiring by type from bean name 'transactionTemplate' via factory method to bean named 'testTransactionManager'
+2021-03-09 11:21:13.362 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Creating shared instance of singleton bean 'org.springframework.boot.autoconfigure.transaction.TransactionAutoConfiguration'
+2021-03-09 11:21:13.363 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Creating shared instance of singleton bean 'platformTransactionManagerCustomizers'
+2021-03-09 11:21:13.363 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Creating shared instance of singleton bean 'spring.transaction-org.springframework.boot.autoconfigure.transaction.TransactionProperties'
+2021-03-09 11:21:13.365 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Creating shared instance of singleton bean 'org.springframework.boot.autoconfigure.web.client.RestTemplateAutoConfiguration'
+2021-03-09 11:21:13.366 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Creating shared instance of singleton bean 'org.springframework.boot.autoconfigure.web.embedded.EmbeddedWebServerFactoryCustomizerAutoConfiguration'
+2021-03-09 11:21:13.366 DEBUG 12536 --- [main] o.s.b.f.s.DefaultListableBeanFactory     : Creating shared instance of singleton bean 'multipartResolver'
+2021-03-09 11:21:13.375 DEBUG 12536 --- [main] o.s.j.e.a.AnnotationMBeanExporter        : Registering beans for JMX exposure on startup
+2021-03-09 11:21:13.375 DEBUG 12536 --- [main] o.s.j.e.a.AnnotationMBeanExporter        : Autodetecting user-defined JMX MBeans
+2021-03-09 11:21:13.380 DEBUG 12536 --- [main] o.s.c.support.DefaultLifecycleProcessor  : Starting beans in phase 2147483646
+2021-03-09 11:21:13.384 DEBUG 12536 --- [RMI TCP Connection(5)-192.168.228.1] sun.rmi.transport.tcp                    : RMI TCP Connection(5)-192.168.228.1: (port 50554) op = 82
+2021-03-09 11:21:13.385 DEBUG 12536 --- [RMI TCP Connection(5)-192.168.228.1] sun.rmi.transport.tcp                    : RMI TCP Connection(5)-192.168.228.1: (port 50554) op = 80
+2021-03-09 11:21:13.385 DEBUG 12536 --- [RMI TCP Connection(5)-192.168.228.1] sun.rmi.transport.tcp                    : RMI TCP Connection(5)-192.168.228.1: (port 50554) op = 82
+2021-03-09 11:21:13.385 DEBUG 12536 --- [RMI TCP Connection(5)-192.168.228.1] sun.rmi.transport.tcp                    : RMI TCP Connection(5)-192.168.228.1: (port 50554) op = 80
+2021-03-09 11:21:13.385 DEBUG 12536 --- [RMI TCP Connection(5)-192.168.228.1] sun.rmi.loader                           : RMI TCP Connection(5)-192.168.228.1: name = "[Ljava.rmi.server.ObjID;", codebase = "", defaultLoader = sun.misc.Launcher$ExtClassLoader@5a42bbf4
+2021-03-09 11:21:13.386 DEBUG 12536 --- [RMI TCP Connection(5)-192.168.228.1] sun.rmi.loader                           : RMI TCP Connection(5)-192.168.228.1: name = "java.rmi.server.ObjID", codebase = "", defaultLoader = sun.misc.Launcher$ExtClassLoader@5a42bbf4
+2021-03-09 11:21:13.386 DEBUG 12536 --- [RMI TCP Connection(5)-192.168.228.1] sun.rmi.loader                           : RMI TCP Connection(5)-192.168.228.1: name = "java.rmi.server.UID", codebase = "", defaultLoader = sun.misc.Launcher$ExtClassLoader@5a42bbf4
+2021-03-09 11:21:13.386 DEBUG 12536 --- [RMI TCP Connection(5)-192.168.228.1] sun.rmi.loader                           : RMI TCP Connection(5)-192.168.228.1: name = "java.rmi.dgc.Lease", codebase = "", defaultLoader = sun.misc.Launcher$ExtClassLoader@5a42bbf4
+2021-03-09 11:21:13.386 DEBUG 12536 --- [RMI TCP Connection(5)-192.168.228.1] sun.rmi.loader                           : RMI TCP Connection(5)-192.168.228.1: name = "java.rmi.dgc.VMID", codebase = "", defaultLoader = sun.misc.Launcher$ExtClassLoader@5a42bbf4
+2021-03-09 11:21:13.386 DEBUG 12536 --- [RMI TCP Connection(5)-192.168.228.1] sun.rmi.loader                           : RMI TCP Connection(5)-192.168.228.1: name = "[B", codebase = "", defaultLoader = sun.misc.Launcher$ExtClassLoader@5a42bbf4
+2021-03-09 11:21:13.386 DEBUG 12536 --- [RMI TCP Connection(5)-192.168.228.1] sun.rmi.transport.tcp                    : RMI TCP Connection(5)-192.168.228.1: (port 50554) op = 82
+2021-03-09 11:21:13.386 DEBUG 12536 --- [RMI TCP Connection(5)-192.168.228.1] sun.rmi.transport.tcp                    : RMI TCP Connection(5)-192.168.228.1: (port 50554) op = 84
+2021-03-09 11:21:13.387 DEBUG 12536 --- [RMI TCP Connection(5)-192.168.228.1] sun.rmi.transport.tcp                    : RMI TCP Connection(5)-192.168.228.1: (port 50554) op = 82
+2021-03-09 11:21:13.387 DEBUG 12536 --- [RMI TCP Connection(5)-192.168.228.1] sun.rmi.transport.tcp                    : RMI TCP Connection(5)-192.168.228.1: (port 50554) op = 80
+2021-03-09 11:21:13.387 DEBUG 12536 --- [RMI TCP Connection(5)-192.168.228.1] sun.rmi.transport.tcp                    : RMI TCP Connection(5)-192.168.228.1: (port 50554) op = 82
+2021-03-09 11:21:13.387 DEBUG 12536 --- [RMI TCP Connection(5)-192.168.228.1] sun.rmi.transport.tcp                    : RMI TCP Connection(5)-192.168.228.1: (port 50554) op = 80
+2021-03-09 11:21:13.387 DEBUG 12536 --- [RMI TCP Connection(5)-192.168.228.1] sun.rmi.loader                           : RMI TCP Connection(5)-192.168.228.1: name = "javax.management.ObjectName", codebase = ""
+2021-03-09 11:21:13.390 DEBUG 12536 --- [RMI TCP Connection(5)-192.168.228.1] sun.rmi.transport.tcp                    : RMI TCP Connection(5)-192.168.228.1: (port 50554) op = 82
+2021-03-09 11:21:13.390 DEBUG 12536 --- [RMI TCP Connection(5)-192.168.228.1] sun.rmi.transport.tcp                    : RMI TCP Connection(5)-192.168.228.1: (port 50554) op = 80
+2021-03-09 11:21:13.393 DEBUG 12536 --- [http-nio-8081-Acceptor] o.apache.tomcat.util.threads.LimitLatch  : Counting up[http-nio-8081-Acceptor] latch=0
+2021-03-09 11:21:13.394  INFO 12536 --- [main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 8081 (http) with context path ''
+2021-03-09 11:21:13.395 DEBUG 12536 --- [main] o.s.c.support.DefaultLifecycleProcessor  : Successfully started bean 'webServerStartStop'
+2021-03-09 11:21:13.395 DEBUG 12536 --- [main] o.s.c.support.DefaultLifecycleProcessor  : Starting beans in phase 2147483647
+2021-03-09 11:21:13.395 DEBUG 12536 --- [main] o.s.c.support.DefaultLifecycleProcessor  : Successfully started bean 'webServerGracefulShutdown'
+2021-03-09 11:21:13.407 DEBUG 12536 --- [main] ConditionEvaluationReportLoggingListener : 
+
+
+============================
+CONDITIONS EVALUATION REPORT
+============================
+
+
+Positive matches:
+-----------------
+
+   AopAutoConfiguration matched:
+      - @ConditionalOnProperty (spring.aop.auto=true) matched (OnPropertyCondition)
+
+   AopAutoConfiguration.ClassProxyingConfiguration matched:
+      - @ConditionalOnMissingClass did not find unwanted class 'org.aspectj.weaver.Advice' (OnClassCondition)
+      - @ConditionalOnProperty (spring.aop.proxy-target-class=true) matched (OnPropertyCondition)
+
+   DataSourceAutoConfiguration matched:
+      - @ConditionalOnClass found required classes 'javax.sql.DataSource', 'org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseType' (OnClassCondition)
+      - @ConditionalOnMissingBean (types: io.r2dbc.spi.ConnectionFactory; SearchStrategy: all) did not find any beans (OnBeanCondition)
+
+   DataSourceConfiguration.Hikari matched:
+      - @ConditionalOnClass found required class 'com.zaxxer.hikari.HikariDataSource' (OnClassCondition)
+      - @ConditionalOnProperty (spring.datasource.type=com.zaxxer.hikari.HikariDataSource) matched (OnPropertyCondition)
+
+   DataSourceJmxConfiguration matched:
+      - @ConditionalOnProperty (spring.jmx.enabled=true) matched (OnPropertyCondition)
+
+   DataSourceJmxConfiguration.Hikari matched:
+      - @ConditionalOnClass found required class 'com.zaxxer.hikari.HikariDataSource' (OnClassCondition)
+
+   DataSourcePoolMetadataProvidersConfiguration.HikariPoolDataSourceMetadataProviderConfiguration matched:
+      - @ConditionalOnClass found required class 'com.zaxxer.hikari.HikariDataSource' (OnClassCondition)
+
+   DataSourceTransactionManagerAutoConfiguration matched:
+      - @ConditionalOnClass found required classes 'org.springframework.jdbc.core.JdbcTemplate', 'org.springframework.transaction.TransactionManager' (OnClassCondition)
+
+   DataSourceTransactionManagerAutoConfiguration.JdbcTransactionManagerConfiguration matched:
+      - @ConditionalOnSingleCandidate (types: javax.sql.DataSource; SearchStrategy: all) found a primary bean from beans 'testDataSource' (OnBeanCondition)
+
+   DispatcherServletAutoConfiguration matched:
+      - @ConditionalOnClass found required class 'org.springframework.web.servlet.DispatcherServlet' (OnClassCondition)
+      - found 'session' scope (OnWebApplicationCondition)
+
+   DispatcherServletAutoConfiguration.DispatcherServletConfiguration matched:
+      - @ConditionalOnClass found required class 'javax.servlet.ServletRegistration' (OnClassCondition)
+      - Default DispatcherServlet did not find dispatcher servlet beans (DispatcherServletAutoConfiguration.DefaultDispatcherServletCondition)
+
+   DispatcherServletAutoConfiguration.DispatcherServletRegistrationConfiguration matched:
+      - @ConditionalOnClass found required class 'javax.servlet.ServletRegistration' (OnClassCondition)
+      - DispatcherServlet Registration did not find servlet registration bean (DispatcherServletAutoConfiguration.DispatcherServletRegistrationCondition)
+
+   DispatcherServletAutoConfiguration.DispatcherServletRegistrationConfiguration#dispatcherServletRegistration matched:
+      - @ConditionalOnBean (names: dispatcherServlet types: org.springframework.web.servlet.DispatcherServlet; SearchStrategy: all) found bean 'dispatcherServlet' (OnBeanCondition)
+
+   EmbeddedWebServerFactoryCustomizerAutoConfiguration matched:
+      - @ConditionalOnWebApplication (required) found 'session' scope (OnWebApplicationCondition)
+
+   EmbeddedWebServerFactoryCustomizerAutoConfiguration.TomcatWebServerFactoryCustomizerConfiguration matched:
+      - @ConditionalOnClass found required classes 'org.apache.catalina.startup.Tomcat', 'org.apache.coyote.UpgradeProtocol' (OnClassCondition)
+
+   ErrorMvcAutoConfiguration matched:
+      - @ConditionalOnClass found required classes 'javax.servlet.Servlet', 'org.springframework.web.servlet.DispatcherServlet' (OnClassCondition)
+      - found 'session' scope (OnWebApplicationCondition)
+
+   ErrorMvcAutoConfiguration#basicErrorController matched:
+      - @ConditionalOnMissingBean (types: org.springframework.boot.web.servlet.error.ErrorController; SearchStrategy: current) did not find any beans (OnBeanCondition)
+
+   ErrorMvcAutoConfiguration#errorAttributes matched:
+      - @ConditionalOnMissingBean (types: org.springframework.boot.web.servlet.error.ErrorAttributes; SearchStrategy: current) did not find any beans (OnBeanCondition)
+
+   ErrorMvcAutoConfiguration.DefaultErrorViewResolverConfiguration#conventionErrorViewResolver matched:
+      - @ConditionalOnBean (types: org.springframework.web.servlet.DispatcherServlet; SearchStrategy: all) found bean 'dispatcherServlet'; @ConditionalOnMissingBean (types: org.springframework.boot.autoconfigure.web.servlet.error.ErrorViewResolver; SearchStrategy: all) did not find any beans (OnBeanCondition)
+
+   ErrorMvcAutoConfiguration.WhitelabelErrorViewConfiguration matched:
+      - @ConditionalOnProperty (server.error.whitelabel.enabled) matched (OnPropertyCondition)
+      - ErrorTemplate Missing did not find error template view (ErrorMvcAutoConfiguration.ErrorTemplateMissingCondition)
+
+   ErrorMvcAutoConfiguration.WhitelabelErrorViewConfiguration#beanNameViewResolver matched:
+      - @ConditionalOnMissingBean (types: org.springframework.web.servlet.view.BeanNameViewResolver; SearchStrategy: all) did not find any beans (OnBeanCondition)
+
+   ErrorMvcAutoConfiguration.WhitelabelErrorViewConfiguration#defaultErrorView matched:
+      - @ConditionalOnMissingBean (names: error; SearchStrategy: all) did not find any beans (OnBeanCondition)
+
+   GenericCacheConfiguration matched:
+      - Cache org.springframework.boot.autoconfigure.cache.GenericCacheConfiguration automatic cache type (CacheCondition)
+
+   HttpEncodingAutoConfiguration matched:
+      - @ConditionalOnClass found required class 'org.springframework.web.filter.CharacterEncodingFilter' (OnClassCondition)
+      - found 'session' scope (OnWebApplicationCondition)
+      - @ConditionalOnProperty (server.servlet.encoding.enabled) matched (OnPropertyCondition)
+
+   HttpEncodingAutoConfiguration#characterEncodingFilter matched:
+      - @ConditionalOnMissingBean (types: org.springframework.web.filter.CharacterEncodingFilter; SearchStrategy: all) did not find any beans (OnBeanCondition)
+
+   HttpMessageConvertersAutoConfiguration matched:
+      - @ConditionalOnClass found required class 'org.springframework.http.converter.HttpMessageConverter' (OnClassCondition)
+      - NoneNestedConditions 0 matched 1 did not; NestedCondition on HttpMessageConvertersAutoConfiguration.NotReactiveWebApplicationCondition.ReactiveWebApplication did not find reactive web application classes (HttpMessageConvertersAutoConfiguration.NotReactiveWebApplicationCondition)
+
+   HttpMessageConvertersAutoConfiguration#messageConverters matched:
+      - @ConditionalOnMissingBean (types: org.springframework.boot.autoconfigure.http.HttpMessageConverters; SearchStrategy: all) did not find any beans (OnBeanCondition)
+
+   HttpMessageConvertersAutoConfiguration.StringHttpMessageConverterConfiguration matched:
+      - @ConditionalOnClass found required class 'org.springframework.http.converter.StringHttpMessageConverter' (OnClassCondition)
+
+   HttpMessageConvertersAutoConfiguration.StringHttpMessageConverterConfiguration#stringHttpMessageConverter matched:
+      - @ConditionalOnMissingBean (types: org.springframework.http.converter.StringHttpMessageConverter; SearchStrategy: all) did not find any beans (OnBeanCondition)
+
+   JacksonAutoConfiguration matched:
+      - @ConditionalOnClass found required class 'com.fasterxml.jackson.databind.ObjectMapper' (OnClassCondition)
+
+   JacksonAutoConfiguration.Jackson2ObjectMapperBuilderCustomizerConfiguration matched:
+      - @ConditionalOnClass found required class 'org.springframework.http.converter.json.Jackson2ObjectMapperBuilder' (OnClassCondition)
+
+   JacksonAutoConfiguration.JacksonObjectMapperBuilderConfiguration matched:
+      - @ConditionalOnClass found required class 'org.springframework.http.converter.json.Jackson2ObjectMapperBuilder' (OnClassCondition)
+
+   JacksonAutoConfiguration.JacksonObjectMapperBuilderConfiguration#jacksonObjectMapperBuilder matched:
+      - @ConditionalOnMissingBean (types: org.springframework.http.converter.json.Jackson2ObjectMapperBuilder; SearchStrategy: all) did not find any beans (OnBeanCondition)
+
+   JacksonAutoConfiguration.JacksonObjectMapperConfiguration matched:
+      - @ConditionalOnClass found required class 'org.springframework.http.converter.json.Jackson2ObjectMapperBuilder' (OnClassCondition)
+
+   JacksonAutoConfiguration.JacksonObjectMapperConfiguration#jacksonObjectMapper matched:
+      - @ConditionalOnMissingBean (types: com.fasterxml.jackson.databind.ObjectMapper; SearchStrategy: all) did not find any beans (OnBeanCondition)
+
+   JacksonAutoConfiguration.ParameterNamesModuleConfiguration matched:
+      - @ConditionalOnClass found required class 'com.fasterxml.jackson.module.paramnames.ParameterNamesModule' (OnClassCondition)
+
+   JacksonAutoConfiguration.ParameterNamesModuleConfiguration#parameterNamesModule matched:
+      - @ConditionalOnMissingBean (types: com.fasterxml.jackson.module.paramnames.ParameterNamesModule; SearchStrategy: all) did not find any beans (OnBeanCondition)
+
+   JacksonHttpMessageConvertersConfiguration.MappingJackson2HttpMessageConverterConfiguration matched:
+      - @ConditionalOnClass found required class 'com.fasterxml.jackson.databind.ObjectMapper' (OnClassCondition)
+      - @ConditionalOnProperty (spring.mvc.converters.preferred-json-mapper=jackson) matched (OnPropertyCondition)
+      - @ConditionalOnBean (types: com.fasterxml.jackson.databind.ObjectMapper; SearchStrategy: all) found bean 'jacksonObjectMapper' (OnBeanCondition)
+
+   JacksonHttpMessageConvertersConfiguration.MappingJackson2HttpMessageConverterConfiguration#mappingJackson2HttpMessageConverter matched:
+      - @ConditionalOnMissingBean (types: org.springframework.http.converter.json.MappingJackson2HttpMessageConverter ignored: org.springframework.hateoas.server.mvc.TypeConstrainedMappingJackson2HttpMessageConverter,org.springframework.data.rest.webmvc.alps.AlpsJsonHttpMessageConverter; SearchStrategy: all) did not find any beans (OnBeanCondition)
+
+   JdbcTemplateAutoConfiguration matched:
+      - @ConditionalOnClass found required classes 'javax.sql.DataSource', 'org.springframework.jdbc.core.JdbcTemplate' (OnClassCondition)
+      - @ConditionalOnSingleCandidate (types: javax.sql.DataSource; SearchStrategy: all) found a primary bean from beans 'testDataSource' (OnBeanCondition)
+
+   JdbcTemplateConfiguration matched:
+      - @ConditionalOnMissingBean (types: org.springframework.jdbc.core.JdbcOperations; SearchStrategy: all) did not find any beans (OnBeanCondition)
+
+   JmxAutoConfiguration matched:
+      - @ConditionalOnClass found required class 'org.springframework.jmx.export.MBeanExporter' (OnClassCondition)
+      - @ConditionalOnProperty (spring.jmx.enabled=true) matched (OnPropertyCondition)
+
+   JmxAutoConfiguration#mbeanExporter matched:
+      - @ConditionalOnMissingBean (types: org.springframework.jmx.export.MBeanExporter; SearchStrategy: current) did not find any beans (OnBeanCondition)
+
+   JmxAutoConfiguration#mbeanServer matched:
+      - @ConditionalOnMissingBean (types: javax.management.MBeanServer; SearchStrategy: all) did not find any beans (OnBeanCondition)
+
+   JmxAutoConfiguration#objectNamingStrategy matched:
+      - @ConditionalOnMissingBean (types: org.springframework.jmx.export.naming.ObjectNamingStrategy; SearchStrategy: current) did not find any beans (OnBeanCondition)
+
+   LifecycleAutoConfiguration#defaultLifecycleProcessor matched:
+      - @ConditionalOnMissingBean (names: lifecycleProcessor; SearchStrategy: current) did not find any beans (OnBeanCondition)
+
+   MultipartAutoConfiguration matched:
+      - @ConditionalOnClass found required classes 'javax.servlet.Servlet', 'org.springframework.web.multipart.support.StandardServletMultipartResolver', 'javax.servlet.MultipartConfigElement' (OnClassCondition)
+      - found 'session' scope (OnWebApplicationCondition)
+      - @ConditionalOnProperty (spring.servlet.multipart.enabled) matched (OnPropertyCondition)
+
+   MultipartAutoConfiguration#multipartConfigElement matched:
+      - @ConditionalOnMissingBean (types: javax.servlet.MultipartConfigElement,org.springframework.web.multipart.commons.CommonsMultipartResolver; SearchStrategy: all) did not find any beans (OnBeanCondition)
+
+   MultipartAutoConfiguration#multipartResolver matched:
+      - @ConditionalOnMissingBean (types: org.springframework.web.multipart.MultipartResolver; SearchStrategy: all) did not find any beans (OnBeanCondition)
+
+   MybatisAutoConfiguration matched:
+      - @ConditionalOnClass found required classes 'org.apache.ibatis.session.SqlSessionFactory', 'org.mybatis.spring.SqlSessionFactoryBean' (OnClassCondition)
+      - @ConditionalOnSingleCandidate (types: javax.sql.DataSource; SearchStrategy: all) found a primary bean from beans 'testDataSource' (OnBeanCondition)
+
+   MybatisAutoConfiguration#sqlSessionTemplate matched:
+      - @ConditionalOnMissingBean (types: org.mybatis.spring.SqlSessionTemplate; SearchStrategy: all) did not find any beans (OnBeanCondition)
+
+   MybatisLanguageDriverAutoConfiguration matched:
+      - @ConditionalOnClass found required class 'org.apache.ibatis.scripting.LanguageDriver' (OnClassCondition)
+
+   NamedParameterJdbcTemplateConfiguration matched:
+      - @ConditionalOnSingleCandidate (types: org.springframework.jdbc.core.JdbcTemplate; SearchStrategy: all) found a primary bean from beans 'jdbcTemplate'; @ConditionalOnMissingBean (types: org.springframework.jdbc.core.namedparam.NamedParameterJdbcOperations; SearchStrategy: all) did not find any beans (OnBeanCondition)
+
+   NoOpCacheConfiguration matched:
+      - Cache org.springframework.boot.autoconfigure.cache.NoOpCacheConfiguration automatic cache type (CacheCondition)
+
+   PersistenceExceptionTranslationAutoConfiguration matched:
+      - @ConditionalOnClass found required class 'org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor' (OnClassCondition)
+
+   PersistenceExceptionTranslationAutoConfiguration#persistenceExceptionTranslationPostProcessor matched:
+      - @ConditionalOnProperty (spring.dao.exceptiontranslation.enabled) matched (OnPropertyCondition)
+      - @ConditionalOnMissingBean (types: org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor; SearchStrategy: all) did not find any beans (OnBeanCondition)
+
+   PropertyPlaceholderAutoConfiguration#propertySourcesPlaceholderConfigurer matched:
+      - @ConditionalOnMissingBean (types: org.springframework.context.support.PropertySourcesPlaceholderConfigurer; SearchStrategy: current) did not find any beans (OnBeanCondition)
+
+   RestTemplateAutoConfiguration matched:
+      - @ConditionalOnClass found required class 'org.springframework.web.client.RestTemplate' (OnClassCondition)
+      - NoneNestedConditions 0 matched 1 did not; NestedCondition on RestTemplateAutoConfiguration.NotReactiveWebApplicationCondition.ReactiveWebApplication did not find reactive web application classes (RestTemplateAutoConfiguration.NotReactiveWebApplicationCondition)
+
+   RestTemplateAutoConfiguration#restTemplateBuilder matched:
+      - @ConditionalOnMissingBean (types: org.springframework.boot.web.client.RestTemplateBuilder; SearchStrategy: all) did not find any beans (OnBeanCondition)
+
+   RestTemplateAutoConfiguration#restTemplateBuilderConfigurer matched:
+      - @ConditionalOnMissingBean (types: org.springframework.boot.autoconfigure.web.client.RestTemplateBuilderConfigurer; SearchStrategy: all) did not find any beans (OnBeanCondition)
+
+   ServletWebServerFactoryAutoConfiguration matched:
+      - @ConditionalOnClass found required class 'javax.servlet.ServletRequest' (OnClassCondition)
+      - found 'session' scope (OnWebApplicationCondition)
+
+   ServletWebServerFactoryAutoConfiguration#tomcatServletWebServerFactoryCustomizer matched:
+      - @ConditionalOnClass found required class 'org.apache.catalina.startup.Tomcat' (OnClassCondition)
+
+   ServletWebServerFactoryConfiguration.EmbeddedTomcat matched:
+      - @ConditionalOnClass found required classes 'javax.servlet.Servlet', 'org.apache.catalina.startup.Tomcat', 'org.apache.coyote.UpgradeProtocol' (OnClassCondition)
+      - @ConditionalOnMissingBean (types: org.springframework.boot.web.servlet.server.ServletWebServerFactory; SearchStrategy: current) did not find any beans (OnBeanCondition)
+
+   SimpleCacheConfiguration matched:
+      - Cache org.springframework.boot.autoconfigure.cache.SimpleCacheConfiguration automatic cache type (CacheCondition)
+
+   SpringApplicationAdminJmxAutoConfiguration matched:
+      - @ConditionalOnProperty (spring.application.admin.enabled=true) matched (OnPropertyCondition)
+
+   SpringApplicationAdminJmxAutoConfiguration#springApplicationAdminRegistrar matched:
+      - @ConditionalOnMissingBean (types: org.springframework.boot.admin.SpringApplicationAdminMXBeanRegistrar; SearchStrategy: all) did not find any beans (OnBeanCondition)
+
+   TaskExecutionAutoConfiguration matched:
+      - @ConditionalOnClass found required class 'org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor' (OnClassCondition)
+
+   TaskExecutionAutoConfiguration#applicationTaskExecutor matched:
+      - @ConditionalOnMissingBean (types: java.util.concurrent.Executor; SearchStrategy: all) did not find any beans (OnBeanCondition)
+
+   TaskExecutionAutoConfiguration#taskExecutorBuilder matched:
+      - @ConditionalOnMissingBean (types: org.springframework.boot.task.TaskExecutorBuilder; SearchStrategy: all) did not find any beans (OnBeanCondition)
+
+   TaskSchedulingAutoConfiguration matched:
+      - @ConditionalOnClass found required class 'org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler' (OnClassCondition)
+
+   TaskSchedulingAutoConfiguration#taskSchedulerBuilder matched:
+      - @ConditionalOnMissingBean (types: org.springframework.boot.task.TaskSchedulerBuilder; SearchStrategy: all) did not find any beans (OnBeanCondition)
+
+   TransactionAutoConfiguration matched:
+      - @ConditionalOnClass found required class 'org.springframework.transaction.PlatformTransactionManager' (OnClassCondition)
+
+   TransactionAutoConfiguration#platformTransactionManagerCustomizers matched:
+      - @ConditionalOnMissingBean (types: org.springframework.boot.autoconfigure.transaction.TransactionManagerCustomizers; SearchStrategy: all) did not find any beans (OnBeanCondition)
+
+   TransactionAutoConfiguration.EnableTransactionManagementConfiguration matched:
+      - @ConditionalOnBean (types: org.springframework.transaction.TransactionManager; SearchStrategy: all) found bean 'testTransactionManager'; @ConditionalOnMissingBean (types: org.springframework.transaction.annotation.AbstractTransactionManagementConfiguration; SearchStrategy: all) did not find any beans (OnBeanCondition)
+
+   TransactionAutoConfiguration.EnableTransactionManagementConfiguration.CglibAutoProxyConfiguration matched:
+      - @ConditionalOnProperty (spring.aop.proxy-target-class=true) matched (OnPropertyCondition)
+
+   TransactionAutoConfiguration.TransactionTemplateConfiguration matched:
+      - @ConditionalOnSingleCandidate (types: org.springframework.transaction.PlatformTransactionManager; SearchStrategy: all) found a primary bean from beans 'testTransactionManager' (OnBeanCondition)
+
+   TransactionAutoConfiguration.TransactionTemplateConfiguration#transactionTemplate matched:
+      - @ConditionalOnMissingBean (types: org.springframework.transaction.support.TransactionOperations; SearchStrategy: all) did not find any beans (OnBeanCondition)
+
+   WebMvcAutoConfiguration matched:
+      - @ConditionalOnClass found required classes 'javax.servlet.Servlet', 'org.springframework.web.servlet.DispatcherServlet', 'org.springframework.web.servlet.config.annotation.WebMvcConfigurer' (OnClassCondition)
+      - found 'session' scope (OnWebApplicationCondition)
+      - @ConditionalOnMissingBean (types: org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport; SearchStrategy: all) did not find any beans (OnBeanCondition)
+
+   WebMvcAutoConfiguration#formContentFilter matched:
+      - @ConditionalOnProperty (spring.mvc.formcontent.filter.enabled) matched (OnPropertyCondition)
+      - @ConditionalOnMissingBean (types: org.springframework.web.filter.FormContentFilter; SearchStrategy: all) did not find any beans (OnBeanCondition)
+
+   WebMvcAutoConfiguration.EnableWebMvcConfiguration#localeResolver matched:
+      - @ConditionalOnMissingBean (names: localeResolver; SearchStrategy: all) did not find any beans (OnBeanCondition)
+
+   WebMvcAutoConfiguration.WebMvcAutoConfigurationAdapter#defaultViewResolver matched:
+      - @ConditionalOnMissingBean (types: org.springframework.web.servlet.view.InternalResourceViewResolver; SearchStrategy: all) did not find any beans (OnBeanCondition)
+
+   WebMvcAutoConfiguration.WebMvcAutoConfigurationAdapter#requestContextFilter matched:
+      - @ConditionalOnMissingBean (types: org.springframework.web.context.request.RequestContextListener,org.springframework.web.filter.RequestContextFilter; SearchStrategy: all) did not find any beans (OnBeanCondition)
+
+   WebMvcAutoConfiguration.WebMvcAutoConfigurationAdapter#viewResolver matched:
+      - @ConditionalOnBean (types: org.springframework.web.servlet.ViewResolver; SearchStrategy: all) found beans 'defaultViewResolver', 'beanNameViewResolver', 'mvcViewResolver'; @ConditionalOnMissingBean (names: viewResolver types: org.springframework.web.servlet.view.ContentNegotiatingViewResolver; SearchStrategy: all) did not find any beans (OnBeanCondition)
+
+   WebSocketServletAutoConfiguration matched:
+      - @ConditionalOnClass found required classes 'javax.servlet.Servlet', 'javax.websocket.server.ServerContainer' (OnClassCondition)
+      - found 'session' scope (OnWebApplicationCondition)
+
+   WebSocketServletAutoConfiguration.TomcatWebSocketConfiguration matched:
+      - @ConditionalOnClass found required classes 'org.apache.catalina.startup.Tomcat', 'org.apache.tomcat.websocket.server.WsSci' (OnClassCondition)
+
+   WebSocketServletAutoConfiguration.TomcatWebSocketConfiguration#websocketServletWebServerCustomizer matched:
+      - @ConditionalOnMissingBean (names: websocketServletWebServerCustomizer; SearchStrategy: all) did not find any beans (OnBeanCondition)
+
+
+Negative matches:
+-----------------
+
+   ActiveMQAutoConfiguration:
+      Did not match:
+         - @ConditionalOnClass did not find required class 'javax.jms.ConnectionFactory' (OnClassCondition)
+
+   AopAutoConfiguration.AspectJAutoProxyingConfiguration:
+      Did not match:
+         - @ConditionalOnClass did not find required class 'org.aspectj.weaver.Advice' (OnClassCondition)
+
+   ArtemisAutoConfiguration:
+      Did not match:
+         - @ConditionalOnClass did not find required class 'javax.jms.ConnectionFactory' (OnClassCondition)
+
+   BatchAutoConfiguration:
+      Did not match:
+         - @ConditionalOnClass did not find required class 'org.springframework.batch.core.launch.JobLauncher' (OnClassCondition)
+
+   CacheAutoConfiguration:
+      Did not match:
+         - @ConditionalOnBean (types: org.springframework.cache.interceptor.CacheAspectSupport; SearchStrategy: all) did not find any beans of type org.springframework.cache.interceptor.CacheAspectSupport (OnBeanCondition)
+      Matched:
+         - @ConditionalOnClass found required class 'org.springframework.cache.CacheManager' (OnClassCondition)
+
+   CacheAutoConfiguration.CacheManagerEntityManagerFactoryDependsOnPostProcessor:
+      Did not match:
+         - @ConditionalOnClass did not find required class 'org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean' (OnClassCondition)
+         - Ancestor org.springframework.boot.autoconfigure.cache.CacheAutoConfiguration did not match (ConditionEvaluationReport.AncestorsMatchedCondition)
+
+   CaffeineCacheConfiguration:
+      Did not match:
+         - @ConditionalOnClass did not find required class 'com.github.benmanes.caffeine.cache.Caffeine' (OnClassCondition)
+
+   CassandraAutoConfiguration:
+      Did not match:
+         - @ConditionalOnClass did not find required class 'com.datastax.oss.driver.api.core.CqlSession' (OnClassCondition)
+
+   CassandraDataAutoConfiguration:
+      Did not match:
+         - @ConditionalOnClass did not find required class 'com.datastax.oss.driver.api.core.CqlSession' (OnClassCondition)
+
+   CassandraReactiveDataAutoConfiguration:
+      Did not match:
+         - @ConditionalOnClass did not find required class 'com.datastax.oss.driver.api.core.CqlSession' (OnClassCondition)
+
+   CassandraReactiveRepositoriesAutoConfiguration:
+      Did not match:
+         - @ConditionalOnClass did not find required class 'org.springframework.data.cassandra.ReactiveSession' (OnClassCondition)
+
+   CassandraRepositoriesAutoConfiguration:
+      Did not match:
+         - @ConditionalOnClass did not find required class 'com.datastax.oss.driver.api.core.CqlSession' (OnClassCondition)
+
+   ClientHttpConnectorAutoConfiguration:
+      Did not match:
+         - @ConditionalOnClass did not find required class 'org.springframework.web.reactive.function.client.WebClient' (OnClassCondition)
+
+   CodecsAutoConfiguration:
+      Did not match:
+         - @ConditionalOnClass did not find required class 'org.springframework.web.reactive.function.client.WebClient' (OnClassCondition)
+
+   CouchbaseAutoConfiguration:
+      Did not match:
+         - @ConditionalOnClass did not find required class 'com.couchbase.client.java.Cluster' (OnClassCondition)
+
+   CouchbaseCacheConfiguration:
+      Did not match:
+         - @ConditionalOnClass did not find required class 'com.couchbase.client.java.Cluster' (OnClassCondition)
+
+   CouchbaseDataAutoConfiguration:
+      Did not match:
+         - @ConditionalOnClass did not find required class 'com.couchbase.client.java.Bucket' (OnClassCondition)
+
+   CouchbaseReactiveDataAutoConfiguration:
+      Did not match:
+         - @ConditionalOnClass did not find required class 'com.couchbase.client.java.Cluster' (OnClassCondition)
+
+   CouchbaseReactiveRepositoriesAutoConfiguration:
+      Did not match:
+         - @ConditionalOnClass did not find required class 'com.couchbase.client.java.Cluster' (OnClassCondition)
+
+   CouchbaseRepositoriesAutoConfiguration:
+      Did not match:
+         - @ConditionalOnClass did not find required class 'com.couchbase.client.java.Bucket' (OnClassCondition)
+
+   DataSourceAutoConfiguration.EmbeddedDatabaseConfiguration:
+      Did not match:
+         - EmbeddedDataSource spring.datasource.url is set (DataSourceAutoConfiguration.EmbeddedDatabaseCondition)
+
+   DataSourceAutoConfiguration.PooledDataSourceConfiguration:
+      Did not match:
+         - @ConditionalOnMissingBean (types: javax.sql.DataSource,javax.sql.XADataSource; SearchStrategy: all) found beans of type 'javax.sql.DataSource' testDataSource (OnBeanCondition)
+      Matched:
+         - AnyNestedCondition 1 matched 1 did not; NestedCondition on DataSourceAutoConfiguration.PooledDataSourceCondition.PooledDataSourceAvailable PooledDataSource found supported DataSource; NestedCondition on DataSourceAutoConfiguration.PooledDataSourceCondition.ExplicitType @ConditionalOnProperty (spring.datasource.type) did not find property 'type' (DataSourceAutoConfiguration.PooledDataSourceCondition)
+
+   DataSourceConfiguration.Dbcp2:
+      Did not match:
+         - @ConditionalOnClass did not find required class 'org.apache.commons.dbcp2.BasicDataSource' (OnClassCondition)
+
+   DataSourceConfiguration.Generic:
+      Did not match:
+         - @ConditionalOnProperty (spring.datasource.type) did not find property 'spring.datasource.type' (OnPropertyCondition)
+
+   DataSourceConfiguration.OracleUcp:
+      Did not match:
+         - @ConditionalOnClass did not find required classes 'oracle.ucp.jdbc.PoolDataSourceImpl', 'oracle.jdbc.OracleConnection' (OnClassCondition)
+
+   DataSourceConfiguration.Tomcat:
+      Did not match:
+         - @ConditionalOnClass did not find required class 'org.apache.tomcat.jdbc.pool.DataSource' (OnClassCondition)
+
+   DataSourceJmxConfiguration.TomcatDataSourceJmxConfiguration:
+      Did not match:
+         - @ConditionalOnClass did not find required class 'org.apache.tomcat.jdbc.pool.DataSourceProxy' (OnClassCondition)
+
+   DataSourcePoolMetadataProvidersConfiguration.CommonsDbcp2PoolDataSourceMetadataProviderConfiguration:
+      Did not match:
+         - @ConditionalOnClass did not find required class 'org.apache.commons.dbcp2.BasicDataSource' (OnClassCondition)
+
+   DataSourcePoolMetadataProvidersConfiguration.OracleUcpPoolDataSourceMetadataProviderConfiguration:
+      Did not match:
+         - @ConditionalOnClass did not find required classes 'oracle.ucp.jdbc.PoolDataSource', 'oracle.jdbc.OracleConnection' (OnClassCondition)
+
+   DataSourcePoolMetadataProvidersConfiguration.TomcatDataSourcePoolMetadataProviderConfiguration:
+      Did not match:
+         - @ConditionalOnClass did not find required class 'org.apache.tomcat.jdbc.pool.DataSource' (OnClassCondition)
+
+   DataSourceTransactionManagerAutoConfiguration.JdbcTransactionManagerConfiguration#transactionManager:
+      Did not match:
+         - @ConditionalOnMissingBean (types: org.springframework.transaction.TransactionManager; SearchStrategy: all) found beans of type 'org.springframework.transaction.TransactionManager' testTransactionManager (OnBeanCondition)
+
+   DispatcherServletAutoConfiguration.DispatcherServletConfiguration#multipartResolver:
+      Did not match:
+         - @ConditionalOnBean (types: org.springframework.web.multipart.MultipartResolver; SearchStrategy: all) did not find any beans of type org.springframework.web.multipart.MultipartResolver (OnBeanCondition)
+
+   EhCacheCacheConfiguration:
+      Did not match:
+         - @ConditionalOnClass did not find required class 'net.sf.ehcache.Cache' (OnClassCondition)
+
+   ElasticsearchDataAutoConfiguration:
+      Did not match:
+         - @ConditionalOnClass did not find required class 'org.springframework.data.elasticsearch.core.ElasticsearchRestTemplate' (OnClassCondition)
+
+   ElasticsearchRepositoriesAutoConfiguration:
+      Did not match:
+         - @ConditionalOnClass did not find required class 'org.elasticsearch.client.Client' (OnClassCondition)
+
+   ElasticsearchRestClientAutoConfiguration:
+      Did not match:
+         - @ConditionalOnClass did not find required class 'org.elasticsearch.client.RestHighLevelClient' (OnClassCondition)
+
+   EmbeddedLdapAutoConfiguration:
+      Did not match:
+         - @ConditionalOnClass did not find required class 'com.unboundid.ldap.listener.InMemoryDirectoryServer' (OnClassCondition)
+
+   EmbeddedMongoAutoConfiguration:
+      Did not match:
+         - @ConditionalOnClass did not find required class 'com.mongodb.MongoClientSettings' (OnClassCondition)
+
+   EmbeddedWebServerFactoryCustomizerAutoConfiguration.JettyWebServerFactoryCustomizerConfiguration:
+      Did not match:
+         - @ConditionalOnClass did not find required classes 'org.eclipse.jetty.server.Server', 'org.eclipse.jetty.util.Loader', 'org.eclipse.jetty.webapp.WebAppContext' (OnClassCondition)
+
+   EmbeddedWebServerFactoryCustomizerAutoConfiguration.NettyWebServerFactoryCustomizerConfiguration:
+      Did not match:
+         - @ConditionalOnClass did not find required class 'reactor.netty.http.server.HttpServer' (OnClassCondition)
+
+   EmbeddedWebServerFactoryCustomizerAutoConfiguration.UndertowWebServerFactoryCustomizerConfiguration:
+      Did not match:
+         - @ConditionalOnClass did not find required classes 'io.undertow.Undertow', 'org.xnio.SslClientAuthMode' (OnClassCondition)
+
+   ErrorWebFluxAutoConfiguration:
+      Did not match:
+         - @ConditionalOnClass did not find required class 'org.springframework.web.reactive.config.WebFluxConfigurer' (OnClassCondition)
+
+   FlywayAutoConfiguration:
+      Did not match:
+         - @ConditionalOnClass did not find required class 'org.flywaydb.core.Flyway' (OnClassCondition)
+
+   FreeMarkerAutoConfiguration:
+      Did not match:
+         - @ConditionalOnClass did not find required class 'freemarker.template.Configuration' (OnClassCondition)
+
+   GroovyTemplateAutoConfiguration:
+      Did not match:
+         - @ConditionalOnClass did not find required class 'groovy.text.markup.MarkupTemplateEngine' (OnClassCondition)
+
+   GsonAutoConfiguration:
+      Did not match:
+         - @ConditionalOnClass did not find required class 'com.google.gson.Gson' (OnClassCondition)
+
+   GsonHttpMessageConvertersConfiguration:
+      Did not match:
+         - @ConditionalOnClass did not find required class 'com.google.gson.Gson' (OnClassCondition)
+
+   H2ConsoleAutoConfiguration:
+      Did not match:
+         - @ConditionalOnClass did not find required class 'org.h2.server.web.WebServlet' (OnClassCondition)
+
+   HazelcastAutoConfiguration:
+      Did not match:
+         - @ConditionalOnClass did not find required class 'com.hazelcast.core.HazelcastInstance' (OnClassCondition)
+
+   HazelcastCacheConfiguration:
+      Did not match:
+         - @ConditionalOnClass did not find required class 'com.hazelcast.core.HazelcastInstance' (OnClassCondition)
+
+   HazelcastJpaDependencyAutoConfiguration:
+      Did not match:
+         - @ConditionalOnClass did not find required class 'com.hazelcast.core.HazelcastInstance' (OnClassCondition)
+
+   HibernateJpaAutoConfiguration:
+      Did not match:
+         - @ConditionalOnClass did not find required class 'javax.persistence.EntityManager' (OnClassCondition)
+
+   HttpHandlerAutoConfiguration:
+      Did not match:
+         - @ConditionalOnClass did not find required class 'org.springframework.web.reactive.DispatcherHandler' (OnClassCondition)
+
+   HypermediaAutoConfiguration:
+      Did not match:
+         - @ConditionalOnClass did not find required class 'org.springframework.hateoas.EntityModel' (OnClassCondition)
+
+   InfinispanCacheConfiguration:
+      Did not match:
+         - @ConditionalOnClass did not find required class 'org.infinispan.spring.embedded.provider.SpringEmbeddedCacheManager' (OnClassCondition)
+
+   InfluxDbAutoConfiguration:
+      Did not match:
+         - @ConditionalOnClass did not find required class 'org.influxdb.InfluxDB' (OnClassCondition)
+
+   IntegrationAutoConfiguration:
+      Did not match:
+         - @ConditionalOnClass did not find required class 'org.springframework.integration.config.EnableIntegration' (OnClassCondition)
+
+   JCacheCacheConfiguration:
+      Did not match:
+         - @ConditionalOnClass did not find required class 'javax.cache.Caching' (OnClassCondition)
+
+   JacksonHttpMessageConvertersConfiguration.MappingJackson2XmlHttpMessageConverterConfiguration:
+      Did not match:
+         - @ConditionalOnClass did not find required class 'com.fasterxml.jackson.dataformat.xml.XmlMapper' (OnClassCondition)
+
+   JdbcRepositoriesAutoConfiguration:
+      Did not match:
+         - @ConditionalOnClass did not find required class 'org.springframework.data.jdbc.repository.config.AbstractJdbcConfiguration' (OnClassCondition)
+
+   JerseyAutoConfiguration:
+      Did not match:
+         - @ConditionalOnClass did not find required class 'org.glassfish.jersey.server.spring.SpringComponentProvider' (OnClassCondition)
+
+   JmsAutoConfiguration:
+      Did not match:
+         - @ConditionalOnClass did not find required class 'javax.jms.Message' (OnClassCondition)
+
+   JndiConnectionFactoryAutoConfiguration:
+      Did not match:
+         - @ConditionalOnClass did not find required class 'org.springframework.jms.core.JmsTemplate' (OnClassCondition)
+
+   JndiDataSourceAutoConfiguration:
+      Did not match:
+         - @ConditionalOnProperty (spring.datasource.jndi-name) did not find property 'jndi-name' (OnPropertyCondition)
+      Matched:
+         - @ConditionalOnClass found required classes 'javax.sql.DataSource', 'org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseType' (OnClassCondition)
+
+   JooqAutoConfiguration:
+      Did not match:
+         - @ConditionalOnClass did not find required class 'org.jooq.DSLContext' (OnClassCondition)
+
+   JpaRepositoriesAutoConfiguration:
+      Did not match:
+         - @ConditionalOnClass did not find required class 'org.springframework.data.jpa.repository.JpaRepository' (OnClassCondition)
+
+   JsonbAutoConfiguration:
+      Did not match:
+         - @ConditionalOnClass did not find required class 'javax.json.bind.Jsonb' (OnClassCondition)
+
+   JsonbHttpMessageConvertersConfiguration:
+      Did not match:
+         - @ConditionalOnClass did not find required class 'javax.json.bind.Jsonb' (OnClassCondition)
+
+   JtaAutoConfiguration:
+      Did not match:
+         - @ConditionalOnClass did not find required class 'javax.transaction.Transaction' (OnClassCondition)
+
+   KafkaAutoConfiguration:
+      Did not match:
+         - @ConditionalOnClass did not find required class 'org.springframework.kafka.core.KafkaTemplate' (OnClassCondition)
+
+   LdapAutoConfiguration:
+      Did not match:
+         - @ConditionalOnClass did not find required class 'org.springframework.ldap.core.ContextSource' (OnClassCondition)
+
+   LdapRepositoriesAutoConfiguration:
+      Did not match:
+         - @ConditionalOnClass did not find required class 'org.springframework.data.ldap.repository.LdapRepository' (OnClassCondition)
+
+   LiquibaseAutoConfiguration:
+      Did not match:
+         - @ConditionalOnClass did not find required class 'liquibase.change.DatabaseChange' (OnClassCondition)
+
+   MailSenderAutoConfiguration:
+      Did not match:
+         - @ConditionalOnClass did not find required class 'javax.mail.internet.MimeMessage' (OnClassCondition)
+
+   MailSenderValidatorAutoConfiguration:
+      Did not match:
+         - @ConditionalOnSingleCandidate did not find required type 'org.springframework.mail.javamail.JavaMailSenderImpl' (OnBeanCondition)
+
+   MessageSourceAutoConfiguration:
+      Did not match:
+         - ResourceBundle did not find bundle with basename messages (MessageSourceAutoConfiguration.ResourceBundleCondition)
+
+   MongoAutoConfiguration:
+      Did not match:
+         - @ConditionalOnClass did not find required class 'com.mongodb.client.MongoClient' (OnClassCondition)
+
+   MongoDataAutoConfiguration:
+      Did not match:
+         - @ConditionalOnClass did not find required class 'com.mongodb.client.MongoClient' (OnClassCondition)
+
+   MongoReactiveAutoConfiguration:
+      Did not match:
+         - @ConditionalOnClass did not find required class 'com.mongodb.reactivestreams.client.MongoClient' (OnClassCondition)
+
+   MongoReactiveDataAutoConfiguration:
+      Did not match:
+         - @ConditionalOnClass did not find required class 'com.mongodb.reactivestreams.client.MongoClient' (OnClassCondition)
+
+   MongoReactiveRepositoriesAutoConfiguration:
+      Did not match:
+         - @ConditionalOnClass did not find required class 'com.mongodb.reactivestreams.client.MongoClient' (OnClassCondition)
+
+   MongoRepositoriesAutoConfiguration:
+      Did not match:
+         - @ConditionalOnClass did not find required class 'com.mongodb.client.MongoClient' (OnClassCondition)
+
+   MustacheAutoConfiguration:
+      Did not match:
+         - @ConditionalOnClass did not find required class 'com.samskivert.mustache.Mustache' (OnClassCondition)
+
+   MybatisAutoConfiguration#sqlSessionFactory:
+      Did not match:
+         - @ConditionalOnMissingBean (types: org.apache.ibatis.session.SqlSessionFactory; SearchStrategy: all) found beans of type 'org.apache.ibatis.session.SqlSessionFactory' testDsSqlSessionFactory (OnBeanCondition)
+
+   MybatisAutoConfiguration.MapperScannerRegistrarNotFoundConfiguration:
+      Did not match:
+         - @ConditionalOnMissingBean (types: org.mybatis.spring.mapper.MapperFactoryBean,org.mybatis.spring.mapper.MapperScannerConfigurer; SearchStrategy: all) found beans of type 'org.mybatis.spring.mapper.MapperScannerConfigurer' cn.seecoder.courselearning.config.DataSourceConfig#MapperScannerRegistrar#0 (OnBeanCondition)
+
+   MybatisLanguageDriverAutoConfiguration.FreeMarkerConfiguration:
+      Did not match:
+         - @ConditionalOnClass did not find required classes 'org.mybatis.scripting.freemarker.FreeMarkerLanguageDriver', 'org.mybatis.scripting.freemarker.FreeMarkerLanguageDriverConfig' (OnClassCondition)
+
+   MybatisLanguageDriverAutoConfiguration.LegacyFreeMarkerConfiguration:
+      Did not match:
+         - @ConditionalOnClass did not find required class 'org.mybatis.scripting.freemarker.FreeMarkerLanguageDriver' (OnClassCondition)
+
+   MybatisLanguageDriverAutoConfiguration.LegacyVelocityConfiguration:
+      Did not match:
+         - @ConditionalOnClass did not find required class 'org.mybatis.scripting.velocity.Driver' (OnClassCondition)
+
+   MybatisLanguageDriverAutoConfiguration.ThymeleafConfiguration:
+      Did not match:
+         - @ConditionalOnClass did not find required class 'org.mybatis.scripting.thymeleaf.ThymeleafLanguageDriver' (OnClassCondition)
+
+   MybatisLanguageDriverAutoConfiguration.VelocityConfiguration:
+      Did not match:
+         - @ConditionalOnClass did not find required classes 'org.mybatis.scripting.velocity.VelocityLanguageDriver', 'org.mybatis.scripting.velocity.VelocityLanguageDriverConfig' (OnClassCondition)
+
+   Neo4jAutoConfiguration:
+      Did not match:
+         - @ConditionalOnClass did not find required class 'org.neo4j.driver.Driver' (OnClassCondition)
+
+   Neo4jDataAutoConfiguration:
+      Did not match:
+         - @ConditionalOnClass did not find required class 'org.neo4j.driver.Driver' (OnClassCondition)
+
+   Neo4jReactiveDataAutoConfiguration:
+      Did not match:
+         - @ConditionalOnClass did not find required class 'org.neo4j.driver.Driver' (OnClassCondition)
+
+   Neo4jReactiveRepositoriesAutoConfiguration:
+      Did not match:
+         - @ConditionalOnClass did not find required class 'org.neo4j.driver.Driver' (OnClassCondition)
+
+   Neo4jRepositoriesAutoConfiguration:
+      Did not match:
+         - @ConditionalOnClass did not find required class 'org.neo4j.driver.Driver' (OnClassCondition)
+
+   OAuth2ClientAutoConfiguration:
+      Did not match:
+         - @ConditionalOnClass did not find required class 'org.springframework.security.config.annotation.web.configuration.EnableWebSecurity' (OnClassCondition)
+
+   OAuth2ResourceServerAutoConfiguration:
+      Did not match:
+         - @ConditionalOnClass did not find required class 'org.springframework.security.oauth2.server.resource.BearerTokenAuthenticationToken' (OnClassCondition)
+
+   ProjectInfoAutoConfiguration#buildProperties:
+      Did not match:
+         - @ConditionalOnResource did not find resource '${spring.info.build.location:classpath:META-INF/build-info.properties}' (OnResourceCondition)
+
+   ProjectInfoAutoConfiguration#gitProperties:
+      Did not match:
+         - GitResource did not find git info at classpath:git.properties (ProjectInfoAutoConfiguration.GitResourceAvailableCondition)
+
+   QuartzAutoConfiguration:
+      Did not match:
+         - @ConditionalOnClass did not find required class 'org.quartz.Scheduler' (OnClassCondition)
+
+   R2dbcAutoConfiguration:
+      Did not match:
+         - @ConditionalOnClass did not find required class 'io.r2dbc.spi.ConnectionFactory' (OnClassCondition)
+
+   R2dbcDataAutoConfiguration:
+      Did not match:
+         - @ConditionalOnClass did not find required class 'org.springframework.data.r2dbc.core.R2dbcEntityTemplate' (OnClassCondition)
+
+   R2dbcRepositoriesAutoConfiguration:
+      Did not match:
+         - @ConditionalOnClass did not find required class 'io.r2dbc.spi.ConnectionFactory' (OnClassCondition)
+
+   R2dbcTransactionManagerAutoConfiguration:
+      Did not match:
+         - @ConditionalOnClass did not find required class 'org.springframework.r2dbc.connection.R2dbcTransactionManager' (OnClassCondition)
+
+   RSocketMessagingAutoConfiguration:
+      Did not match:
+         - @ConditionalOnClass did not find required class 'io.rsocket.RSocket' (OnClassCondition)
+
+   RSocketRequesterAutoConfiguration:
+      Did not match:
+         - @ConditionalOnClass did not find required class 'io.rsocket.RSocket' (OnClassCondition)
+
+   RSocketSecurityAutoConfiguration:
+      Did not match:
+         - @ConditionalOnClass did not find required class 'org.springframework.security.rsocket.core.SecuritySocketAcceptorInterceptor' (OnClassCondition)
+
+   RSocketServerAutoConfiguration:
+      Did not match:
+         - @ConditionalOnClass did not find required class 'io.rsocket.core.RSocketServer' (OnClassCondition)
+
+   RSocketStrategiesAutoConfiguration:
+      Did not match:
+         - @ConditionalOnClass did not find required class 'io.netty.buffer.PooledByteBufAllocator' (OnClassCondition)
+
+   RabbitAutoConfiguration:
+      Did not match:
+         - @ConditionalOnClass did not find required class 'com.rabbitmq.client.Channel' (OnClassCondition)
+
+   ReactiveElasticsearchRepositoriesAutoConfiguration:
+      Did not match:
+         - @ConditionalOnClass did not find required class 'org.springframework.data.elasticsearch.client.reactive.ReactiveElasticsearchClient' (OnClassCondition)
+
+   ReactiveElasticsearchRestClientAutoConfiguration:
+      Did not match:
+         - @ConditionalOnClass did not find required class 'reactor.netty.http.client.HttpClient' (OnClassCondition)
+
+   ReactiveOAuth2ClientAutoConfiguration:
+      Did not match:
+         - @ConditionalOnClass did not find required class 'reactor.core.publisher.Flux' (OnClassCondition)
+
+   ReactiveOAuth2ResourceServerAutoConfiguration:
+      Did not match:
+         - @ConditionalOnClass did not find required class 'org.springframework.security.config.annotation.web.reactive.EnableWebFluxSecurity' (OnClassCondition)
+
+   ReactiveSecurityAutoConfiguration:
+      Did not match:
+         - @ConditionalOnClass did not find required class 'reactor.core.publisher.Flux' (OnClassCondition)
+
+   ReactiveUserDetailsServiceAutoConfiguration:
+      Did not match:
+         - @ConditionalOnClass did not find required class 'org.springframework.security.authentication.ReactiveAuthenticationManager' (OnClassCondition)
+
+   ReactiveWebServerFactoryAutoConfiguration:
+      Did not match:
+         - @ConditionalOnWebApplication did not find reactive web application classes (OnWebApplicationCondition)
+
+   RedisAutoConfiguration:
+      Did not match:
+         - @ConditionalOnClass did not find required class 'org.springframework.data.redis.core.RedisOperations' (OnClassCondition)
+
+   RedisCacheConfiguration:
+      Did not match:
+         - @ConditionalOnClass did not find required class 'org.springframework.data.redis.connection.RedisConnectionFactory' (OnClassCondition)
+
+   RedisReactiveAutoConfiguration:
+      Did not match:
+         - @ConditionalOnClass did not find required class 'reactor.core.publisher.Flux' (OnClassCondition)
+
+   RedisRepositoriesAutoConfiguration:
+      Did not match:
+         - @ConditionalOnClass did not find required class 'org.springframework.data.redis.repository.configuration.EnableRedisRepositories' (OnClassCondition)
+
+   RepositoryRestMvcAutoConfiguration:
+      Did not match:
+         - @ConditionalOnClass did not find required class 'org.springframework.data.rest.webmvc.config.RepositoryRestMvcConfiguration' (OnClassCondition)
+
+   Saml2RelyingPartyAutoConfiguration:
+      Did not match:
+         - @ConditionalOnClass did not find required class 'org.springframework.security.saml2.provider.service.registration.RelyingPartyRegistrationRepository' (OnClassCondition)
+
+   SecurityAutoConfiguration:
+      Did not match:
+         - @ConditionalOnClass did not find required class 'org.springframework.security.authentication.DefaultAuthenticationEventPublisher' (OnClassCondition)
+
+   SecurityFilterAutoConfiguration:
+      Did not match:
+         - @ConditionalOnClass did not find required class 'org.springframework.security.config.http.SessionCreationPolicy' (OnClassCondition)
+
+   SendGridAutoConfiguration:
+      Did not match:
+         - @ConditionalOnClass did not find required class 'com.sendgrid.SendGrid' (OnClassCondition)
+
+   ServletWebServerFactoryAutoConfiguration#forwardedHeaderFilter:
+      Did not match:
+         - @ConditionalOnProperty (server.forward-headers-strategy=framework) did not find property 'server.forward-headers-strategy' (OnPropertyCondition)
+
+   ServletWebServerFactoryConfiguration.EmbeddedJetty:
+      Did not match:
+         - @ConditionalOnClass did not find required classes 'org.eclipse.jetty.server.Server', 'org.eclipse.jetty.util.Loader', 'org.eclipse.jetty.webapp.WebAppContext' (OnClassCondition)
+
+   ServletWebServerFactoryConfiguration.EmbeddedUndertow:
+      Did not match:
+         - @ConditionalOnClass did not find required classes 'io.undertow.Undertow', 'org.xnio.SslClientAuthMode' (OnClassCondition)
+
+   SessionAutoConfiguration:
+      Did not match:
+         - @ConditionalOnClass did not find required class 'org.springframework.session.Session' (OnClassCondition)
+
+   SolrAutoConfiguration:
+      Did not match:
+         - @ConditionalOnClass did not find required class 'org.apache.solr.client.solrj.impl.CloudSolrClient' (OnClassCondition)
+
+   SolrRepositoriesAutoConfiguration:
+      Did not match:
+         - @ConditionalOnClass did not find required class 'org.apache.solr.client.solrj.SolrClient' (OnClassCondition)
+
+   SpringDataWebAutoConfiguration:
+      Did not match:
+         - @ConditionalOnClass did not find required class 'org.springframework.data.web.PageableHandlerMethodArgumentResolver' (OnClassCondition)
+
+   TaskSchedulingAutoConfiguration#taskScheduler:
+      Did not match:
+         - @ConditionalOnBean (names: org.springframework.context.annotation.internalScheduledAnnotationProcessor; SearchStrategy: all) did not find any beans named org.springframework.context.annotation.internalScheduledAnnotationProcessor (OnBeanCondition)
+
+   ThymeleafAutoConfiguration:
+      Did not match:
+         - @ConditionalOnClass did not find required class 'org.thymeleaf.spring5.SpringTemplateEngine' (OnClassCondition)
+
+   TransactionAutoConfiguration#transactionalOperator:
+      Did not match:
+         - @ConditionalOnSingleCandidate (types: org.springframework.transaction.ReactiveTransactionManager; SearchStrategy: all) did not find any beans (OnBeanCondition)
+
+   TransactionAutoConfiguration.EnableTransactionManagementConfiguration.JdkDynamicAutoProxyConfiguration:
+      Did not match:
+         - @ConditionalOnProperty (spring.aop.proxy-target-class=false) did not find property 'proxy-target-class' (OnPropertyCondition)
+
+   UserDetailsServiceAutoConfiguration:
+      Did not match:
+         - @ConditionalOnClass did not find required class 'org.springframework.security.authentication.AuthenticationManager' (OnClassCondition)
+
+   ValidationAutoConfiguration:
+      Did not match:
+         - @ConditionalOnClass did not find required class 'javax.validation.executable.ExecutableValidator' (OnClassCondition)
+
+   WebClientAutoConfiguration:
+      Did not match:
+         - @ConditionalOnClass did not find required class 'org.springframework.web.reactive.function.client.WebClient' (OnClassCondition)
+
+   WebFluxAutoConfiguration:
+      Did not match:
+         - @ConditionalOnClass did not find required class 'org.springframework.web.reactive.config.WebFluxConfigurer' (OnClassCondition)
+
+   WebMvcAutoConfiguration#hiddenHttpMethodFilter:
+      Did not match:
+         - @ConditionalOnProperty (spring.mvc.hiddenmethod.filter.enabled) did not find property 'enabled' (OnPropertyCondition)
+
+   WebMvcAutoConfiguration.ResourceChainCustomizerConfiguration:
+      Did not match:
+         - @ConditionalOnEnabledResourceChain did not find class org.webjars.WebJarAssetLocator (OnEnabledResourceChainCondition)
+
+   WebMvcAutoConfiguration.WebMvcAutoConfigurationAdapter#beanNameViewResolver:
+      Did not match:
+         - @ConditionalOnMissingBean (types: org.springframework.web.servlet.view.BeanNameViewResolver; SearchStrategy: all) found beans of type 'org.springframework.web.servlet.view.BeanNameViewResolver' beanNameViewResolver (OnBeanCondition)
+
+   WebServiceTemplateAutoConfiguration:
+      Did not match:
+         - @ConditionalOnClass did not find required class 'org.springframework.oxm.Marshaller' (OnClassCondition)
+
+   WebServicesAutoConfiguration:
+      Did not match:
+         - @ConditionalOnClass did not find required class 'org.springframework.ws.transport.http.MessageDispatcherServlet' (OnClassCondition)
+
+   WebSocketMessagingAutoConfiguration:
+      Did not match:
+         - @ConditionalOnClass did not find required class 'org.springframework.web.socket.config.annotation.WebSocketMessageBrokerConfigurer' (OnClassCondition)
+
+   WebSocketReactiveAutoConfiguration:
+      Did not match:
+         - @ConditionalOnWebApplication did not find reactive web application classes (OnWebApplicationCondition)
+
+   WebSocketServletAutoConfiguration.JettyWebSocketConfiguration:
+      Did not match:
+         - @ConditionalOnClass did not find required class 'org.eclipse.jetty.websocket.jsr356.server.deploy.WebSocketServerContainerInitializer' (OnClassCondition)
+
+   WebSocketServletAutoConfiguration.UndertowWebSocketConfiguration:
+      Did not match:
+         - @ConditionalOnClass did not find required class 'io.undertow.websockets.jsr.Bootstrap' (OnClassCondition)
+
+   XADataSourceAutoConfiguration:
+      Did not match:
+         - @ConditionalOnClass did not find required class 'javax.transaction.TransactionManager' (OnClassCondition)
+
+
+Exclusions:
+-----------
+
+    None
+
+
+Unconditional classes:
+----------------------
+
+    org.springframework.boot.autoconfigure.context.ConfigurationPropertiesAutoConfiguration
+
+    org.springframework.boot.autoconfigure.context.LifecycleAutoConfiguration
+
+    org.springframework.boot.autoconfigure.context.PropertyPlaceholderAutoConfiguration
+
+    org.springframework.boot.autoconfigure.availability.ApplicationAvailabilityAutoConfiguration
+
+    org.springframework.boot.autoconfigure.info.ProjectInfoAutoConfiguration
+
+
+
+2021-03-09 11:21:13.409 DEBUG 12536 --- [main] o.s.c.e.PropertySourcesPropertyResolver  : Found key 'spring.liveBeansView.mbeanDomain' in PropertySource 'systemProperties' with value of type String
+2021-03-09 11:21:13.411  INFO 12536 --- [main] c.s.c.CourseLearningApplication          : Started CourseLearningApplication in 3.172 seconds (JVM running for 3.934)
+2021-03-09 11:21:13.891 DEBUG 12536 --- [RMI TCP Connection(5)-192.168.228.1] sun.rmi.transport.tcp                    : RMI TCP Connection(5)-192.168.228.1: (port 50554) op = 82
+2021-03-09 11:21:13.891 DEBUG 12536 --- [RMI TCP Connection(5)-192.168.228.1] sun.rmi.transport.tcp                    : RMI TCP Connection(5)-192.168.228.1: (port 50554) op = 80
+2021-03-09 11:21:13.892 DEBUG 12536 --- [RMI TCP Connection(5)-192.168.228.1] sun.rmi.transport.tcp                    : RMI TCP Connection(5)-192.168.228.1: (port 50554) op = 80
+2021-03-09 11:21:13.892 DEBUG 12536 --- [RMI TCP Connection(5)-192.168.228.1] sun.rmi.loader                           : RMI TCP Connection(5)-192.168.228.1: name = "[Ljava.rmi.server.ObjID;", codebase = "", defaultLoader = sun.misc.Launcher$ExtClassLoader@5a42bbf4
+2021-03-09 11:21:13.892 DEBUG 12536 --- [RMI TCP Connection(5)-192.168.228.1] sun.rmi.loader                           : RMI TCP Connection(5)-192.168.228.1: name = "java.rmi.server.ObjID", codebase = "", defaultLoader = sun.misc.Launcher$ExtClassLoader@5a42bbf4
+2021-03-09 11:21:13.892 DEBUG 12536 --- [RMI TCP Connection(5)-192.168.228.1] sun.rmi.loader                           : RMI TCP Connection(5)-192.168.228.1: name = "java.rmi.server.UID", codebase = "", defaultLoader = sun.misc.Launcher$ExtClassLoader@5a42bbf4
+2021-03-09 11:21:13.892 DEBUG 12536 --- [RMI TCP Connection(5)-192.168.228.1] sun.rmi.loader                           : RMI TCP Connection(5)-192.168.228.1: name = "java.rmi.dgc.Lease", codebase = "", defaultLoader = sun.misc.Launcher$ExtClassLoader@5a42bbf4
+2021-03-09 11:21:13.892 DEBUG 12536 --- [RMI TCP Connection(5)-192.168.228.1] sun.rmi.loader                           : RMI TCP Connection(5)-192.168.228.1: name = "java.rmi.dgc.VMID", codebase = "", defaultLoader = sun.misc.Launcher$ExtClassLoader@5a42bbf4
+2021-03-09 11:21:13.893 DEBUG 12536 --- [RMI TCP Connection(5)-192.168.228.1] sun.rmi.loader                           : RMI TCP Connection(5)-192.168.228.1: name = "[B", codebase = "", defaultLoader = sun.misc.Launcher$ExtClassLoader@5a42bbf4
+2021-03-09 11:21:13.893 DEBUG 12536 --- [RMI TCP Connection(5)-192.168.228.1] sun.rmi.transport.tcp                    : RMI TCP Connection(5)-192.168.228.1: (port 50554) op = 84
+2021-03-09 11:21:13.894 DEBUG 12536 --- [RMI TCP Connection(5)-192.168.228.1] sun.rmi.transport.tcp                    : RMI TCP Connection(5)-192.168.228.1: (port 50554) op = 80
+2021-03-09 11:21:13.894 DEBUG 12536 --- [RMI TCP Connection(5)-192.168.228.1] sun.rmi.transport.tcp                    : RMI TCP Connection(5)-192.168.228.1: (port 50554) op = 80
+2021-03-09 11:21:13.894 DEBUG 12536 --- [RMI TCP Connection(5)-192.168.228.1] sun.rmi.loader                           : RMI TCP Connection(5)-192.168.228.1: name = "javax.management.ObjectName", codebase = ""
+2021-03-09 11:21:13.895 DEBUG 12536 --- [RMI TCP Connection(5)-192.168.228.1] sun.rmi.transport.tcp                    : RMI TCP Connection(5)-192.168.228.1: (port 50554) op = 80
+2021-03-09 11:21:13.895 DEBUG 12536 --- [RMI TCP Connection(5)-192.168.228.1] sun.rmi.transport.tcp                    : RMI TCP Connection(5)-192.168.228.1: (port 50554) op = 80
+2021-03-09 11:21:13.896 DEBUG 12536 --- [RMI TCP Connection(5)-192.168.228.1] sun.rmi.transport.tcp                    : RMI TCP Connection(5)-192.168.228.1: (port 50554) op = 80
+2021-03-09 11:21:13.896 DEBUG 12536 --- [RMI TCP Connection(5)-192.168.228.1] sun.rmi.loader                           : RMI TCP Connection(5)-192.168.228.1: name = "[Ljava.rmi.server.ObjID;", codebase = "", defaultLoader = sun.misc.Launcher$ExtClassLoader@5a42bbf4
+2021-03-09 11:21:13.897 DEBUG 12536 --- [RMI TCP Connection(5)-192.168.228.1] sun.rmi.loader                           : RMI TCP Connection(5)-192.168.228.1: name = "java.rmi.server.ObjID", codebase = "", defaultLoader = sun.misc.Launcher$ExtClassLoader@5a42bbf4
+2021-03-09 11:21:13.897 DEBUG 12536 --- [RMI TCP Connection(5)-192.168.228.1] sun.rmi.loader                           : RMI TCP Connection(5)-192.168.228.1: name = "java.rmi.server.UID", codebase = "", defaultLoader = sun.misc.Launcher$ExtClassLoader@5a42bbf4
+2021-03-09 11:21:13.897 DEBUG 12536 --- [RMI TCP Connection(5)-192.168.228.1] sun.rmi.loader                           : RMI TCP Connection(5)-192.168.228.1: name = "java.rmi.dgc.Lease", codebase = "", defaultLoader = sun.misc.Launcher$ExtClassLoader@5a42bbf4
+2021-03-09 11:21:13.897 DEBUG 12536 --- [RMI TCP Connection(5)-192.168.228.1] sun.rmi.loader                           : RMI TCP Connection(5)-192.168.228.1: name = "java.rmi.dgc.VMID", codebase = "", defaultLoader = sun.misc.Launcher$ExtClassLoader@5a42bbf4
+2021-03-09 11:21:13.897 DEBUG 12536 --- [RMI TCP Connection(5)-192.168.228.1] sun.rmi.loader                           : RMI TCP Connection(5)-192.168.228.1: name = "[B", codebase = "", defaultLoader = sun.misc.Launcher$ExtClassLoader@5a42bbf4
+2021-03-09 11:21:13.897 DEBUG 12536 --- [RMI TCP Connection(5)-192.168.228.1] sun.rmi.transport.tcp                    : RMI TCP Connection(5)-192.168.228.1: (port 50554) op = 84
+2021-03-09 11:21:13.898 DEBUG 12536 --- [RMI TCP Connection(5)-192.168.228.1] sun.rmi.transport.tcp                    : RMI TCP Connection(5)-192.168.228.1: (port 50554) op = 80
+2021-03-09 11:21:13.898 DEBUG 12536 --- [RMI TCP Connection(5)-192.168.228.1] sun.rmi.transport.tcp                    : RMI TCP Connection(5)-192.168.228.1: (port 50554) op = 80
+2021-03-09 11:21:13.898 DEBUG 12536 --- [RMI TCP Connection(5)-192.168.228.1] sun.rmi.loader                           : RMI TCP Connection(5)-192.168.228.1: name = "javax.management.ObjectName", codebase = ""
+2021-03-09 11:21:13.898 DEBUG 12536 --- [RMI TCP Connection(5)-192.168.228.1] sun.rmi.loader                           : RMI TCP Connection(5)-192.168.228.1: name = "java.rmi.MarshalledObject", codebase = ""
+2021-03-09 11:21:13.900 DEBUG 12536 --- [RMI TCP Connection(5)-192.168.228.1] sun.rmi.transport.tcp                    : RMI TCP Connection(5)-192.168.228.1: (port 50554) op = 80
+2021-03-09 11:21:13.900 DEBUG 12536 --- [RMI TCP Connection(5)-192.168.228.1] sun.rmi.loader                           : RMI TCP Connection(5)-192.168.228.1: name = "javax.management.ObjectName", codebase = ""
+2021-03-09 11:21:13.907 DEBUG 12536 --- [RMI TCP Connection(5)-192.168.228.1] sun.rmi.transport.tcp                    : RMI TCP Connection(5)-192.168.228.1: (port 50554) op = 82
+2021-03-09 11:21:13.908 DEBUG 12536 --- [RMI TCP Connection(5)-192.168.228.1] sun.rmi.transport.tcp                    : RMI TCP Connection(5)-192.168.228.1: (port 50554) op = 80
+2021-03-09 11:21:13.991 DEBUG 12536 --- [RMI TCP Connection(5)-192.168.228.1] sun.rmi.transport.tcp                    : RMI TCP Connection(5)-192.168.228.1: (port 50554) op = 82
+2021-03-09 11:21:13.991 DEBUG 12536 --- [RMI TCP Connection(5)-192.168.228.1] sun.rmi.transport.tcp                    : RMI TCP Connection(5)-192.168.228.1: (port 50554) op = 80
+2021-03-09 11:21:13.992 DEBUG 12536 --- [RMI TCP Connection(5)-192.168.228.1] sun.rmi.loader                           : RMI TCP Connection(5)-192.168.228.1: name = "[Ljava.rmi.server.ObjID;", codebase = "", defaultLoader = sun.misc.Launcher$ExtClassLoader@5a42bbf4
+2021-03-09 11:21:13.992 DEBUG 12536 --- [RMI TCP Connection(5)-192.168.228.1] sun.rmi.loader                           : RMI TCP Connection(5)-192.168.228.1: name = "java.rmi.server.ObjID", codebase = "", defaultLoader = sun.misc.Launcher$ExtClassLoader@5a42bbf4
+2021-03-09 11:21:13.992 DEBUG 12536 --- [RMI TCP Connection(5)-192.168.228.1] sun.rmi.loader                           : RMI TCP Connection(5)-192.168.228.1: name = "java.rmi.server.UID", codebase = "", defaultLoader = sun.misc.Launcher$ExtClassLoader@5a42bbf4
+2021-03-09 11:21:13.992 DEBUG 12536 --- [RMI TCP Connection(5)-192.168.228.1] sun.rmi.loader                           : RMI TCP Connection(5)-192.168.228.1: name = "java.rmi.dgc.VMID", codebase = "", defaultLoader = sun.misc.Launcher$ExtClassLoader@5a42bbf4
+2021-03-09 11:21:13.992 DEBUG 12536 --- [RMI TCP Connection(5)-192.168.228.1] sun.rmi.loader                           : RMI TCP Connection(5)-192.168.228.1: name = "[B", codebase = "", defaultLoader = sun.misc.Launcher$ExtClassLoader@5a42bbf4
+2021-03-09 11:21:14.108 DEBUG 12536 --- [RMI TCP Connection(6)-192.168.228.1] sun.rmi.transport.tcp                    : RMI TCP Connection(6)-192.168.228.1: accepted socket from [192.168.228.1:50566]
+2021-03-09 11:21:14.109 DEBUG 12536 --- [RMI TCP Connection(6)-192.168.228.1] sun.rmi.transport.tcp                    : RMI TCP Connection(6)-192.168.228.1: (port 50554) op = 80
+2021-03-09 11:21:14.110 DEBUG 12536 --- [RMI TCP Connection(6)-192.168.228.1] sun.rmi.transport.tcp                    : RMI TCP Connection(6)-192.168.228.1: (port 50554) op = 80
+2021-03-09 11:21:14.110 DEBUG 12536 --- [RMI TCP Connection(6)-192.168.228.1] sun.rmi.loader                           : RMI TCP Connection(6)-192.168.228.1: name = "[Ljava.rmi.server.ObjID;", codebase = "", defaultLoader = sun.misc.Launcher$ExtClassLoader@5a42bbf4
+2021-03-09 11:21:14.110 DEBUG 12536 --- [RMI TCP Connection(6)-192.168.228.1] sun.rmi.loader                           : RMI TCP Connection(6)-192.168.228.1: name = "java.rmi.server.ObjID", codebase = "", defaultLoader = sun.misc.Launcher$ExtClassLoader@5a42bbf4
+2021-03-09 11:21:14.110 DEBUG 12536 --- [RMI TCP Connection(6)-192.168.228.1] sun.rmi.loader                           : RMI TCP Connection(6)-192.168.228.1: name = "java.rmi.server.UID", codebase = "", defaultLoader = sun.misc.Launcher$ExtClassLoader@5a42bbf4
+2021-03-09 11:21:14.110 DEBUG 12536 --- [RMI TCP Connection(6)-192.168.228.1] sun.rmi.loader                           : RMI TCP Connection(6)-192.168.228.1: name = "java.rmi.dgc.Lease", codebase = "", defaultLoader = sun.misc.Launcher$ExtClassLoader@5a42bbf4
+2021-03-09 11:21:14.110 DEBUG 12536 --- [RMI TCP Connection(6)-192.168.228.1] sun.rmi.loader                           : RMI TCP Connection(6)-192.168.228.1: name = "java.rmi.dgc.VMID", codebase = "", defaultLoader = sun.misc.Launcher$ExtClassLoader@5a42bbf4
+2021-03-09 11:21:14.110 DEBUG 12536 --- [RMI TCP Connection(6)-192.168.228.1] sun.rmi.loader                           : RMI TCP Connection(6)-192.168.228.1: name = "[B", codebase = "", defaultLoader = sun.misc.Launcher$ExtClassLoader@5a42bbf4
+2021-03-09 11:21:14.111 DEBUG 12536 --- [RMI TCP Connection(6)-192.168.228.1] sun.rmi.transport.tcp                    : RMI TCP Connection(6)-192.168.228.1: (port 50554) op = 84
+2021-03-09 11:21:14.111 DEBUG 12536 --- [RMI TCP Connection(6)-192.168.228.1] sun.rmi.transport.tcp                    : RMI TCP Connection(6)-192.168.228.1: (port 50554) op = 80
+2021-03-09 11:21:14.112 DEBUG 12536 --- [RMI TCP Connection(6)-192.168.228.1] sun.rmi.transport.tcp                    : RMI TCP Connection(6)-192.168.228.1: (port 50554) op = 80
+2021-03-09 11:21:14.112 DEBUG 12536 --- [RMI TCP Connection(6)-192.168.228.1] sun.rmi.loader                           : RMI TCP Connection(6)-192.168.228.1: name = "javax.management.ObjectName", codebase = ""
+2021-03-09 11:21:14.112 DEBUG 12536 --- [RMI TCP Connection(6)-192.168.228.1] sun.rmi.loader                           : RMI TCP Connection(6)-192.168.228.1: name = "java.rmi.MarshalledObject", codebase = ""
+2021-03-09 11:21:14.112 DEBUG 12536 --- [RMI TCP Connection(6)-192.168.228.1] sun.rmi.loader                           : RMI TCP Connection(6)-192.168.228.1: name = "[B", codebase = ""
+2021-03-09 11:21:14.112 DEBUG 12536 --- [RMI TCP Connection(6)-192.168.228.1] sun.rmi.loader                           : RMI TCP Connection(6)-192.168.228.1: name = "[Ljava.lang.String;", codebase = ""
+2021-03-09 11:21:14.113 DEBUG 12536 --- [RMI TCP Connection(6)-192.168.228.1] sun.rmi.loader                           : RMI TCP Connection(6)-192.168.228.1: name = "[Ljava.lang.String;", codebase = "", defaultLoader = sun.misc.Launcher$ExtClassLoader@5a42bbf4
+2021-03-09 11:21:14.113 DEBUG 12536 --- [RMI TCP Connection(6)-192.168.228.1] o.s.c.e.PropertySourcesPropertyResolver  : Found key 'local.server.port' in PropertySource 'server.ports' with value of type Integer
+2021-03-09 11:21:14.113 DEBUG 12536 --- [RMI TCP Connection(6)-192.168.228.1] sun.rmi.transport.tcp                    : RMI TCP Connection(6)-192.168.228.1: (port 50554) op = 80
+2021-03-09 11:21:14.114 DEBUG 12536 --- [RMI TCP Connection(6)-192.168.228.1] sun.rmi.transport.tcp                    : RMI TCP Connection(6)-192.168.228.1: (port 50554) op = 80
+2021-03-09 11:21:14.115 DEBUG 12536 --- [RMI TCP Connection(6)-192.168.228.1] sun.rmi.transport.tcp                    : RMI TCP Connection(6)-192.168.228.1: (port 50554) op = 80
+2021-03-09 11:21:14.115 DEBUG 12536 --- [RMI TCP Connection(6)-192.168.228.1] sun.rmi.loader                           : RMI TCP Connection(6)-192.168.228.1: name = "[Ljava.rmi.server.ObjID;", codebase = "", defaultLoader = sun.misc.Launcher$ExtClassLoader@5a42bbf4
+2021-03-09 11:21:14.115 DEBUG 12536 --- [RMI TCP Connection(6)-192.168.228.1] sun.rmi.loader                           : RMI TCP Connection(6)-192.168.228.1: name = "java.rmi.server.ObjID", codebase = "", defaultLoader = sun.misc.Launcher$ExtClassLoader@5a42bbf4
+2021-03-09 11:21:14.116 DEBUG 12536 --- [RMI TCP Connection(6)-192.168.228.1] sun.rmi.loader                           : RMI TCP Connection(6)-192.168.228.1: name = "java.rmi.server.UID", codebase = "", defaultLoader = sun.misc.Launcher$ExtClassLoader@5a42bbf4
+2021-03-09 11:21:14.116 DEBUG 12536 --- [RMI TCP Connection(6)-192.168.228.1] sun.rmi.loader                           : RMI TCP Connection(6)-192.168.228.1: name = "java.rmi.dgc.Lease", codebase = "", defaultLoader = sun.misc.Launcher$ExtClassLoader@5a42bbf4
+2021-03-09 11:21:14.116 DEBUG 12536 --- [RMI TCP Connection(6)-192.168.228.1] sun.rmi.loader                           : RMI TCP Connection(6)-192.168.228.1: name = "java.rmi.dgc.VMID", codebase = "", defaultLoader = sun.misc.Launcher$ExtClassLoader@5a42bbf4
+2021-03-09 11:21:14.116 DEBUG 12536 --- [RMI TCP Connection(6)-192.168.228.1] sun.rmi.loader                           : RMI TCP Connection(6)-192.168.228.1: name = "[B", codebase = "", defaultLoader = sun.misc.Launcher$ExtClassLoader@5a42bbf4
+2021-03-09 11:21:14.116 DEBUG 12536 --- [RMI TCP Connection(6)-192.168.228.1] sun.rmi.transport.tcp                    : RMI TCP Connection(6)-192.168.228.1: (port 50554) op = 84
+2021-03-09 11:21:14.117 DEBUG 12536 --- [RMI TCP Connection(6)-192.168.228.1] sun.rmi.transport.tcp                    : RMI TCP Connection(6)-192.168.228.1: (port 50554) op = 80
+2021-03-09 11:21:14.117 DEBUG 12536 --- [RMI TCP Connection(6)-192.168.228.1] sun.rmi.transport.tcp                    : RMI TCP Connection(6)-192.168.228.1: (port 50554) op = 80
+2021-03-09 11:21:14.118 DEBUG 12536 --- [RMI TCP Connection(6)-192.168.228.1] sun.rmi.loader                           : RMI TCP Connection(6)-192.168.228.1: name = "javax.management.ObjectName", codebase = ""
+2021-03-09 11:21:14.118 DEBUG 12536 --- [RMI TCP Connection(6)-192.168.228.1] sun.rmi.loader                           : RMI TCP Connection(6)-192.168.228.1: name = "java.rmi.MarshalledObject", codebase = ""
+2021-03-09 11:21:14.118 DEBUG 12536 --- [RMI TCP Connection(6)-192.168.228.1] sun.rmi.loader                           : RMI TCP Connection(6)-192.168.228.1: name = "[B", codebase = ""
+2021-03-09 11:21:14.118 DEBUG 12536 --- [RMI TCP Connection(6)-192.168.228.1] sun.rmi.loader                           : RMI TCP Connection(6)-192.168.228.1: name = "[Ljava.lang.String;", codebase = ""
+2021-03-09 11:21:14.118 DEBUG 12536 --- [RMI TCP Connection(6)-192.168.228.1] sun.rmi.loader                           : RMI TCP Connection(6)-192.168.228.1: name = "[Ljava.lang.String;", codebase = "", defaultLoader = sun.misc.Launcher$ExtClassLoader@5a42bbf4
+2021-03-09 11:21:14.119 DEBUG 12536 --- [RMI TCP Connection(6)-192.168.228.1] sun.rmi.transport.tcp                    : RMI TCP Connection(6)-192.168.228.1: (port 50554) op = 80
+2021-03-09 11:21:14.119 DEBUG 12536 --- [RMI TCP Connection(6)-192.168.228.1] sun.rmi.loader                           : RMI TCP Connection(6)-192.168.228.1: name = "javax.management.ObjectName", codebase = ""
+2021-03-09 11:21:14.119 DEBUG 12536 --- [RMI TCP Connection(6)-192.168.228.1] sun.rmi.loader                           : RMI TCP Connection(6)-192.168.228.1: name = "java.rmi.MarshalledObject", codebase = ""
+2021-03-09 11:21:14.119 DEBUG 12536 --- [RMI TCP Connection(6)-192.168.228.1] sun.rmi.loader                           : RMI TCP Connection(6)-192.168.228.1: name = "[B", codebase = ""
+2021-03-09 11:21:14.119 DEBUG 12536 --- [RMI TCP Connection(6)-192.168.228.1] sun.rmi.loader                           : RMI TCP Connection(6)-192.168.228.1: name = "[Ljava.lang.String;", codebase = ""
+2021-03-09 11:21:14.119 DEBUG 12536 --- [RMI TCP Connection(6)-192.168.228.1] sun.rmi.loader                           : RMI TCP Connection(6)-192.168.228.1: name = "[Ljava.lang.String;", codebase = "", defaultLoader = sun.misc.Launcher$ExtClassLoader@5a42bbf4
+2021-03-09 11:21:14.120 DEBUG 12536 --- [RMI TCP Connection(6)-192.168.228.1] sun.rmi.transport.tcp                    : RMI TCP Connection(6)-192.168.228.1: (port 50554) op = 80
+2021-03-09 11:21:14.120 DEBUG 12536 --- [RMI TCP Connection(6)-192.168.228.1] sun.rmi.loader                           : RMI TCP Connection(6)-192.168.228.1: name = "javax.management.ObjectName", codebase = ""
+2021-03-09 11:21:14.120 DEBUG 12536 --- [RMI TCP Connection(6)-192.168.228.1] sun.rmi.loader                           : RMI TCP Connection(6)-192.168.228.1: name = "java.rmi.MarshalledObject", codebase = ""
+2021-03-09 11:21:14.120 DEBUG 12536 --- [RMI TCP Connection(6)-192.168.228.1] sun.rmi.loader                           : RMI TCP Connection(6)-192.168.228.1: name = "[B", codebase = ""
+2021-03-09 11:21:14.120 DEBUG 12536 --- [RMI TCP Connection(6)-192.168.228.1] sun.rmi.loader                           : RMI TCP Connection(6)-192.168.228.1: name = "[Ljava.lang.String;", codebase = ""
+2021-03-09 11:21:14.120 DEBUG 12536 --- [RMI TCP Connection(6)-192.168.228.1] sun.rmi.loader                           : RMI TCP Connection(6)-192.168.228.1: name = "[Ljava.lang.String;", codebase = "", defaultLoader = sun.misc.Launcher$ExtClassLoader@5a42bbf4
+2021-03-09 11:21:14.121 DEBUG 12536 --- [RMI TCP Connection(6)-192.168.228.1] sun.rmi.transport.tcp                    : RMI TCP Connection(6)-192.168.228.1: (port 50554) op = 80
+2021-03-09 11:21:14.121 DEBUG 12536 --- [RMI TCP Connection(6)-192.168.228.1] sun.rmi.loader                           : RMI TCP Connection(6)-192.168.228.1: name = "javax.management.ObjectName", codebase = ""
+2021-03-09 11:21:14.121 DEBUG 12536 --- [RMI TCP Connection(6)-192.168.228.1] sun.rmi.loader                           : RMI TCP Connection(6)-192.168.228.1: name = "java.rmi.MarshalledObject", codebase = ""
+2021-03-09 11:21:14.121 DEBUG 12536 --- [RMI TCP Connection(6)-192.168.228.1] sun.rmi.loader                           : RMI TCP Connection(6)-192.168.228.1: name = "[B", codebase = ""
+2021-03-09 11:21:14.121 DEBUG 12536 --- [RMI TCP Connection(6)-192.168.228.1] sun.rmi.loader                           : RMI TCP Connection(6)-192.168.228.1: name = "[Ljava.lang.String;", codebase = ""
+2021-03-09 11:21:14.121 DEBUG 12536 --- [RMI TCP Connection(6)-192.168.228.1] sun.rmi.loader                           : RMI TCP Connection(6)-192.168.228.1: name = "[Ljava.lang.String;", codebase = "", defaultLoader = sun.misc.Launcher$ExtClassLoader@5a42bbf4
+2021-03-09 11:21:14.122 DEBUG 12536 --- [RMI TCP Connection(6)-192.168.228.1] sun.rmi.transport.tcp                    : RMI TCP Connection(6)-192.168.228.1: (port 50554) op = 80
+2021-03-09 11:21:19.650 DEBUG 12536 --- [RMI TCP Connection(6)-192.168.228.1] sun.rmi.transport.tcp                    : RMI TCP Connection(6)-192.168.228.1: (port 50554) connection closed
+2021-03-09 11:21:19.650 DEBUG 12536 --- [RMI TCP Connection(5)-192.168.228.1] sun.rmi.transport.tcp                    : RMI TCP Connection(5)-192.168.228.1: (port 50554) connection closed
+2021-03-09 11:21:19.650 DEBUG 12536 --- [RMI TCP Connection(6)-192.168.228.1] sun.rmi.transport.tcp                    : RMI TCP Connection(6)-192.168.228.1: close connection
+2021-03-09 11:21:19.651 DEBUG 12536 --- [RMI TCP Connection(5)-192.168.228.1] sun.rmi.transport.tcp                    : RMI TCP Connection(5)-192.168.228.1: close connection
+2021-03-09 11:21:19.871 DEBUG 12536 --- [RMI TCP Connection(7)-192.168.228.1] sun.rmi.transport.tcp                    : RMI TCP Connection(7)-192.168.228.1: accepted socket from [192.168.228.1:50567]
+2021-03-09 11:21:19.871 DEBUG 12536 --- [RMI TCP Connection(7)-192.168.228.1] sun.rmi.transport.tcp                    : RMI TCP Connection(7)-192.168.228.1: (port 50554) op = 80
+2021-03-09 11:21:19.871 DEBUG 12536 --- [RMI TCP Connection(7)-192.168.228.1] sun.rmi.loader                           : RMI TCP Connection(7)-192.168.228.1: name = "[Ljava.rmi.server.ObjID;", codebase = "", defaultLoader = sun.misc.Launcher$ExtClassLoader@5a42bbf4
+2021-03-09 11:21:19.871 DEBUG 12536 --- [RMI TCP Connection(7)-192.168.228.1] sun.rmi.loader                           : RMI TCP Connection(7)-192.168.228.1: name = "java.rmi.server.ObjID", codebase = "", defaultLoader = sun.misc.Launcher$ExtClassLoader@5a42bbf4
+2021-03-09 11:21:19.872 DEBUG 12536 --- [RMI TCP Connection(7)-192.168.228.1] sun.rmi.loader                           : RMI TCP Connection(7)-192.168.228.1: name = "java.rmi.server.UID", codebase = "", defaultLoader = sun.misc.Launcher$ExtClassLoader@5a42bbf4
+2021-03-09 11:21:19.872 DEBUG 12536 --- [RMI TCP Connection(7)-192.168.228.1] sun.rmi.loader                           : RMI TCP Connection(7)-192.168.228.1: name = "java.rmi.dgc.VMID", codebase = "", defaultLoader = sun.misc.Launcher$ExtClassLoader@5a42bbf4
+2021-03-09 11:21:19.872 DEBUG 12536 --- [RMI TCP Connection(7)-192.168.228.1] sun.rmi.loader                           : RMI TCP Connection(7)-192.168.228.1: name = "[B", codebase = "", defaultLoader = sun.misc.Launcher$ExtClassLoader@5a42bbf4
+2021-03-09 11:21:40.829 DEBUG 12536 --- [RMI TCP Connection(2)-192.168.228.1] sun.rmi.transport.tcp                    : RMI TCP Connection(2)-192.168.228.1: (port 50554) connection closed
+2021-03-09 11:21:40.830 DEBUG 12536 --- [RMI TCP Connection(2)-192.168.228.1] sun.rmi.transport.tcp                    : RMI TCP Connection(2)-192.168.228.1: close connection
+2021-03-09 11:21:41.580 DEBUG 12536 --- [RMI TCP Connection(4)-192.168.228.1] sun.rmi.transport.tcp                    : RMI TCP Connection(4)-192.168.228.1: (port 50554) connection closed
+2021-03-09 11:21:41.580 DEBUG 12536 --- [RMI TCP Connection(4)-192.168.228.1] sun.rmi.transport.tcp                    : RMI TCP Connection(4)-192.168.228.1: close connection
+2021-03-09 11:21:42.879 DEBUG 12536 --- [RMI TCP Connection(7)-192.168.228.1] sun.rmi.transport.tcp                    : RMI TCP Connection(7)-192.168.228.1: (port 50554) connection closed
+2021-03-09 11:21:42.879 DEBUG 12536 --- [RMI TCP Connection(7)-192.168.228.1] sun.rmi.transport.tcp                    : RMI TCP Connection(7)-192.168.228.1: close connection
+2021-03-09 11:25:20.776  INFO 8132 --- [main] c.s.c.CourseLearningApplication          : Starting CourseLearningApplication using Java 1.8.0_251 on LAPTOP-408U5MVM with PID 8132 (C:\Users\tubinyan\IdeaProjects\courselearning\target\classes started by tubinyan in C:\Users\tubinyan\IdeaProjects\courselearning)
+2021-03-09 11:25:20.778  INFO 8132 --- [main] c.s.c.CourseLearningApplication          : No active profile set, falling back to default profiles: default
+2021-03-09 11:25:21.586  INFO 8132 --- [main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port(s): 8081 (http)
+2021-03-09 11:25:21.593  INFO 8132 --- [main] o.apache.catalina.core.StandardService   : Starting service [Tomcat]
+2021-03-09 11:25:21.593  INFO 8132 --- [main] org.apache.catalina.core.StandardEngine  : Starting Servlet engine: [Apache Tomcat/9.0.41]
+2021-03-09 11:25:21.672  INFO 8132 --- [main] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
+2021-03-09 11:25:21.672  INFO 8132 --- [main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 853 ms
+2021-03-09 11:25:21.743  INFO 8132 --- [MLog-Init-Reporter] com.mchange.v2.log.MLog                  : MLog clients using slf4j logging.
+2021-03-09 11:25:21.760  INFO 8132 --- [main] com.mchange.v2.c3p0.C3P0Registry         : Initializing c3p0-0.9.5.2 [built 08-December-2015 22:06:04 -0800; debug? true; trace: 10]
+2021-03-09 11:25:22.869  INFO 8132 --- [main] o.s.s.concurrent.ThreadPoolTaskExecutor  : Initializing ExecutorService 'applicationTaskExecutor'
+2021-03-09 11:25:23.031  INFO 8132 --- [main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 8081 (http) with context path ''
+2021-03-09 11:25:23.039  INFO 8132 --- [main] c.s.c.CourseLearningApplication          : Started CourseLearningApplication in 2.603 seconds (JVM running for 3.312)

+ 310 - 0
mvnw

@@ -0,0 +1,310 @@
+#!/bin/sh
+# ----------------------------------------------------------------------------
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#    https://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+# ----------------------------------------------------------------------------
+
+# ----------------------------------------------------------------------------
+# Maven Start Up Batch script
+#
+# Required ENV vars:
+# ------------------
+#   JAVA_HOME - location of a JDK home dir
+#
+# Optional ENV vars
+# -----------------
+#   M2_HOME - location of maven2's installed home dir
+#   MAVEN_OPTS - parameters passed to the Java VM when running Maven
+#     e.g. to debug Maven itself, use
+#       set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
+#   MAVEN_SKIP_RC - flag to disable loading of mavenrc files
+# ----------------------------------------------------------------------------
+
+if [ -z "$MAVEN_SKIP_RC" ] ; then
+
+  if [ -f /etc/mavenrc ] ; then
+    . /etc/mavenrc
+  fi
+
+  if [ -f "$HOME/.mavenrc" ] ; then
+    . "$HOME/.mavenrc"
+  fi
+
+fi
+
+# OS specific support.  $var _must_ be set to either true or false.
+cygwin=false;
+darwin=false;
+mingw=false
+case "`uname`" in
+  CYGWIN*) cygwin=true ;;
+  MINGW*) mingw=true;;
+  Darwin*) darwin=true
+    # Use /usr/libexec/java_home if available, otherwise fall back to /Library/Java/Home
+    # See https://developer.apple.com/library/mac/qa/qa1170/_index.html
+    if [ -z "$JAVA_HOME" ]; then
+      if [ -x "/usr/libexec/java_home" ]; then
+        export JAVA_HOME="`/usr/libexec/java_home`"
+      else
+        export JAVA_HOME="/Library/Java/Home"
+      fi
+    fi
+    ;;
+esac
+
+if [ -z "$JAVA_HOME" ] ; then
+  if [ -r /etc/gentoo-release ] ; then
+    JAVA_HOME=`java-config --jre-home`
+  fi
+fi
+
+if [ -z "$M2_HOME" ] ; then
+  ## resolve links - $0 may be a link to maven's home
+  PRG="$0"
+
+  # need this for relative symlinks
+  while [ -h "$PRG" ] ; do
+    ls=`ls -ld "$PRG"`
+    link=`expr "$ls" : '.*-> \(.*\)$'`
+    if expr "$link" : '/.*' > /dev/null; then
+      PRG="$link"
+    else
+      PRG="`dirname "$PRG"`/$link"
+    fi
+  done
+
+  saveddir=`pwd`
+
+  M2_HOME=`dirname "$PRG"`/..
+
+  # make it fully qualified
+  M2_HOME=`cd "$M2_HOME" && pwd`
+
+  cd "$saveddir"
+  # echo Using m2 at $M2_HOME
+fi
+
+# For Cygwin, ensure paths are in UNIX format before anything is touched
+if $cygwin ; then
+  [ -n "$M2_HOME" ] &&
+    M2_HOME=`cygpath --unix "$M2_HOME"`
+  [ -n "$JAVA_HOME" ] &&
+    JAVA_HOME=`cygpath --unix "$JAVA_HOME"`
+  [ -n "$CLASSPATH" ] &&
+    CLASSPATH=`cygpath --path --unix "$CLASSPATH"`
+fi
+
+# For Mingw, ensure paths are in UNIX format before anything is touched
+if $mingw ; then
+  [ -n "$M2_HOME" ] &&
+    M2_HOME="`(cd "$M2_HOME"; pwd)`"
+  [ -n "$JAVA_HOME" ] &&
+    JAVA_HOME="`(cd "$JAVA_HOME"; pwd)`"
+fi
+
+if [ -z "$JAVA_HOME" ]; then
+  javaExecutable="`which javac`"
+  if [ -n "$javaExecutable" ] && ! [ "`expr \"$javaExecutable\" : '\([^ ]*\)'`" = "no" ]; then
+    # readlink(1) is not available as standard on Solaris 10.
+    readLink=`which readlink`
+    if [ ! `expr "$readLink" : '\([^ ]*\)'` = "no" ]; then
+      if $darwin ; then
+        javaHome="`dirname \"$javaExecutable\"`"
+        javaExecutable="`cd \"$javaHome\" && pwd -P`/javac"
+      else
+        javaExecutable="`readlink -f \"$javaExecutable\"`"
+      fi
+      javaHome="`dirname \"$javaExecutable\"`"
+      javaHome=`expr "$javaHome" : '\(.*\)/bin'`
+      JAVA_HOME="$javaHome"
+      export JAVA_HOME
+    fi
+  fi
+fi
+
+if [ -z "$JAVACMD" ] ; then
+  if [ -n "$JAVA_HOME"  ] ; then
+    if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
+      # IBM's JDK on AIX uses strange locations for the executables
+      JAVACMD="$JAVA_HOME/jre/sh/java"
+    else
+      JAVACMD="$JAVA_HOME/bin/java"
+    fi
+  else
+    JAVACMD="`which java`"
+  fi
+fi
+
+if [ ! -x "$JAVACMD" ] ; then
+  echo "Error: JAVA_HOME is not defined correctly." >&2
+  echo "  We cannot execute $JAVACMD" >&2
+  exit 1
+fi
+
+if [ -z "$JAVA_HOME" ] ; then
+  echo "Warning: JAVA_HOME environment variable is not set."
+fi
+
+CLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher
+
+# traverses directory structure from process work directory to filesystem root
+# first directory with .mvn subdirectory is considered project base directory
+find_maven_basedir() {
+
+  if [ -z "$1" ]
+  then
+    echo "Path not specified to find_maven_basedir"
+    return 1
+  fi
+
+  basedir="$1"
+  wdir="$1"
+  while [ "$wdir" != '/' ] ; do
+    if [ -d "$wdir"/.mvn ] ; then
+      basedir=$wdir
+      break
+    fi
+    # workaround for JBEAP-8937 (on Solaris 10/Sparc)
+    if [ -d "${wdir}" ]; then
+      wdir=`cd "$wdir/.."; pwd`
+    fi
+    # end of workaround
+  done
+  echo "${basedir}"
+}
+
+# concatenates all lines of a file
+concat_lines() {
+  if [ -f "$1" ]; then
+    echo "$(tr -s '\n' ' ' < "$1")"
+  fi
+}
+
+BASE_DIR=`find_maven_basedir "$(pwd)"`
+if [ -z "$BASE_DIR" ]; then
+  exit 1;
+fi
+
+##########################################################################################
+# Extension to allow automatically downloading the maven-wrapper.jar from Maven-central
+# This allows using the maven wrapper in projects that prohibit checking in binary data.
+##########################################################################################
+if [ -r "$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" ]; then
+    if [ "$MVNW_VERBOSE" = true ]; then
+      echo "Found .mvn/wrapper/maven-wrapper.jar"
+    fi
+else
+    if [ "$MVNW_VERBOSE" = true ]; then
+      echo "Couldn't find .mvn/wrapper/maven-wrapper.jar, downloading it ..."
+    fi
+    if [ -n "$MVNW_REPOURL" ]; then
+      jarUrl="$MVNW_REPOURL/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar"
+    else
+      jarUrl="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar"
+    fi
+    while IFS="=" read key value; do
+      case "$key" in (wrapperUrl) jarUrl="$value"; break ;;
+      esac
+    done < "$BASE_DIR/.mvn/wrapper/maven-wrapper.properties"
+    if [ "$MVNW_VERBOSE" = true ]; then
+      echo "Downloading from: $jarUrl"
+    fi
+    wrapperJarPath="$BASE_DIR/.mvn/wrapper/maven-wrapper.jar"
+    if $cygwin; then
+      wrapperJarPath=`cygpath --path --windows "$wrapperJarPath"`
+    fi
+
+    if command -v wget > /dev/null; then
+        if [ "$MVNW_VERBOSE" = true ]; then
+          echo "Found wget ... using wget"
+        fi
+        if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then
+            wget "$jarUrl" -O "$wrapperJarPath"
+        else
+            wget --http-user=$MVNW_USERNAME --http-password=$MVNW_PASSWORD "$jarUrl" -O "$wrapperJarPath"
+        fi
+    elif command -v curl > /dev/null; then
+        if [ "$MVNW_VERBOSE" = true ]; then
+          echo "Found curl ... using curl"
+        fi
+        if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then
+            curl -o "$wrapperJarPath" "$jarUrl" -f
+        else
+            curl --user $MVNW_USERNAME:$MVNW_PASSWORD -o "$wrapperJarPath" "$jarUrl" -f
+        fi
+
+    else
+        if [ "$MVNW_VERBOSE" = true ]; then
+          echo "Falling back to using Java to download"
+        fi
+        javaClass="$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.java"
+        # For Cygwin, switch paths to Windows format before running javac
+        if $cygwin; then
+          javaClass=`cygpath --path --windows "$javaClass"`
+        fi
+        if [ -e "$javaClass" ]; then
+            if [ ! -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then
+                if [ "$MVNW_VERBOSE" = true ]; then
+                  echo " - Compiling MavenWrapperDownloader.java ..."
+                fi
+                # Compiling the Java class
+                ("$JAVA_HOME/bin/javac" "$javaClass")
+            fi
+            if [ -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then
+                # Running the downloader
+                if [ "$MVNW_VERBOSE" = true ]; then
+                  echo " - Running MavenWrapperDownloader.java ..."
+                fi
+                ("$JAVA_HOME/bin/java" -cp .mvn/wrapper MavenWrapperDownloader "$MAVEN_PROJECTBASEDIR")
+            fi
+        fi
+    fi
+fi
+##########################################################################################
+# End of extension
+##########################################################################################
+
+export MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-"$BASE_DIR"}
+if [ "$MVNW_VERBOSE" = true ]; then
+  echo $MAVEN_PROJECTBASEDIR
+fi
+MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS"
+
+# For Cygwin, switch paths to Windows format before running java
+if $cygwin; then
+  [ -n "$M2_HOME" ] &&
+    M2_HOME=`cygpath --path --windows "$M2_HOME"`
+  [ -n "$JAVA_HOME" ] &&
+    JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"`
+  [ -n "$CLASSPATH" ] &&
+    CLASSPATH=`cygpath --path --windows "$CLASSPATH"`
+  [ -n "$MAVEN_PROJECTBASEDIR" ] &&
+    MAVEN_PROJECTBASEDIR=`cygpath --path --windows "$MAVEN_PROJECTBASEDIR"`
+fi
+
+# Provide a "standardized" way to retrieve the CLI args that will
+# work with both Windows and non-Windows executions.
+MAVEN_CMD_LINE_ARGS="$MAVEN_CONFIG $@"
+export MAVEN_CMD_LINE_ARGS
+
+WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain
+
+exec "$JAVACMD" \
+  $MAVEN_OPTS \
+  -classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \
+  "-Dmaven.home=${M2_HOME}" "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \
+  ${WRAPPER_LAUNCHER} $MAVEN_CONFIG "$@"

+ 182 - 0
mvnw.cmd

@@ -0,0 +1,182 @@
+@REM ----------------------------------------------------------------------------
+@REM Licensed to the Apache Software Foundation (ASF) under one
+@REM or more contributor license agreements.  See the NOTICE file
+@REM distributed with this work for additional information
+@REM regarding copyright ownership.  The ASF licenses this file
+@REM to you under the Apache License, Version 2.0 (the
+@REM "License"); you may not use this file except in compliance
+@REM with the License.  You may obtain a copy of the License at
+@REM
+@REM    https://www.apache.org/licenses/LICENSE-2.0
+@REM
+@REM Unless required by applicable law or agreed to in writing,
+@REM software distributed under the License is distributed on an
+@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+@REM KIND, either express or implied.  See the License for the
+@REM specific language governing permissions and limitations
+@REM under the License.
+@REM ----------------------------------------------------------------------------
+
+@REM ----------------------------------------------------------------------------
+@REM Maven Start Up Batch script
+@REM
+@REM Required ENV vars:
+@REM JAVA_HOME - location of a JDK home dir
+@REM
+@REM Optional ENV vars
+@REM M2_HOME - location of maven2's installed home dir
+@REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands
+@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a keystroke before ending
+@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven
+@REM     e.g. to debug Maven itself, use
+@REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
+@REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files
+@REM ----------------------------------------------------------------------------
+
+@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on'
+@echo off
+@REM set title of command window
+title %0
+@REM enable echoing by setting MAVEN_BATCH_ECHO to 'on'
+@if "%MAVEN_BATCH_ECHO%" == "on"  echo %MAVEN_BATCH_ECHO%
+
+@REM set %HOME% to equivalent of $HOME
+if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%")
+
+@REM Execute a user defined script before this one
+if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre
+@REM check for pre script, once with legacy .bat ending and once with .cmd ending
+if exist "%HOME%\mavenrc_pre.bat" call "%HOME%\mavenrc_pre.bat"
+if exist "%HOME%\mavenrc_pre.cmd" call "%HOME%\mavenrc_pre.cmd"
+:skipRcPre
+
+@setlocal
+
+set ERROR_CODE=0
+
+@REM To isolate internal variables from possible post scripts, we use another setlocal
+@setlocal
+
+@REM ==== START VALIDATION ====
+if not "%JAVA_HOME%" == "" goto OkJHome
+
+echo.
+echo Error: JAVA_HOME not found in your environment. >&2
+echo Please set the JAVA_HOME variable in your environment to match the >&2
+echo location of your Java installation. >&2
+echo.
+goto error
+
+:OkJHome
+if exist "%JAVA_HOME%\bin\java.exe" goto init
+
+echo.
+echo Error: JAVA_HOME is set to an invalid directory. >&2
+echo JAVA_HOME = "%JAVA_HOME%" >&2
+echo Please set the JAVA_HOME variable in your environment to match the >&2
+echo location of your Java installation. >&2
+echo.
+goto error
+
+@REM ==== END VALIDATION ====
+
+:init
+
+@REM Find the project base dir, i.e. the directory that contains the folder ".mvn".
+@REM Fallback to current working directory if not found.
+
+set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR%
+IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir
+
+set EXEC_DIR=%CD%
+set WDIR=%EXEC_DIR%
+:findBaseDir
+IF EXIST "%WDIR%"\.mvn goto baseDirFound
+cd ..
+IF "%WDIR%"=="%CD%" goto baseDirNotFound
+set WDIR=%CD%
+goto findBaseDir
+
+:baseDirFound
+set MAVEN_PROJECTBASEDIR=%WDIR%
+cd "%EXEC_DIR%"
+goto endDetectBaseDir
+
+:baseDirNotFound
+set MAVEN_PROJECTBASEDIR=%EXEC_DIR%
+cd "%EXEC_DIR%"
+
+:endDetectBaseDir
+
+IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig
+
+@setlocal EnableExtensions EnableDelayedExpansion
+for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a
+@endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS%
+
+:endReadAdditionalConfig
+
+SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe"
+set WRAPPER_JAR="%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.jar"
+set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain
+
+set DOWNLOAD_URL="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar"
+
+FOR /F "tokens=1,2 delims==" %%A IN ("%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties") DO (
+    IF "%%A"=="wrapperUrl" SET DOWNLOAD_URL=%%B
+)
+
+@REM Extension to allow automatically downloading the maven-wrapper.jar from Maven-central
+@REM This allows using the maven wrapper in projects that prohibit checking in binary data.
+if exist %WRAPPER_JAR% (
+    if "%MVNW_VERBOSE%" == "true" (
+        echo Found %WRAPPER_JAR%
+    )
+) else (
+    if not "%MVNW_REPOURL%" == "" (
+        SET DOWNLOAD_URL="%MVNW_REPOURL%/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar"
+    )
+    if "%MVNW_VERBOSE%" == "true" (
+        echo Couldn't find %WRAPPER_JAR%, downloading it ...
+        echo Downloading from: %DOWNLOAD_URL%
+    )
+
+    powershell -Command "&{"^
+		"$webclient = new-object System.Net.WebClient;"^
+		"if (-not ([string]::IsNullOrEmpty('%MVNW_USERNAME%') -and [string]::IsNullOrEmpty('%MVNW_PASSWORD%'))) {"^
+		"$webclient.Credentials = new-object System.Net.NetworkCredential('%MVNW_USERNAME%', '%MVNW_PASSWORD%');"^
+		"}"^
+		"[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; $webclient.DownloadFile('%DOWNLOAD_URL%', '%WRAPPER_JAR%')"^
+		"}"
+    if "%MVNW_VERBOSE%" == "true" (
+        echo Finished downloading %WRAPPER_JAR%
+    )
+)
+@REM End of extension
+
+@REM Provide a "standardized" way to retrieve the CLI args that will
+@REM work with both Windows and non-Windows executions.
+set MAVEN_CMD_LINE_ARGS=%*
+
+%MAVEN_JAVA_EXE% %JVM_CONFIG_MAVEN_PROPS% %MAVEN_OPTS% %MAVEN_DEBUG_OPTS% -classpath %WRAPPER_JAR% "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" %WRAPPER_LAUNCHER% %MAVEN_CONFIG% %*
+if ERRORLEVEL 1 goto error
+goto end
+
+:error
+set ERROR_CODE=1
+
+:end
+@endlocal & set ERROR_CODE=%ERROR_CODE%
+
+if not "%MAVEN_SKIP_RC%" == "" goto skipRcPost
+@REM check for post script, once with legacy .bat ending and once with .cmd ending
+if exist "%HOME%\mavenrc_post.bat" call "%HOME%\mavenrc_post.bat"
+if exist "%HOME%\mavenrc_post.cmd" call "%HOME%\mavenrc_post.cmd"
+:skipRcPost
+
+@REM pause the script if MAVEN_BATCH_PAUSE is set to 'on'
+if "%MAVEN_BATCH_PAUSE%" == "on" pause
+
+if "%MAVEN_TERMINATE_CMD%" == "on" exit %ERROR_CODE%
+
+exit /B %ERROR_CODE%

+ 94 - 0
pom.xml

@@ -0,0 +1,94 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <parent>
+        <groupId>org.springframework.boot</groupId>
+        <artifactId>spring-boot-starter-parent</artifactId>
+        <version>2.4.1</version>
+        <relativePath/> <!-- lookup parent from repository -->
+    </parent>
+    <groupId>cn.seecoder</groupId>
+    <artifactId>courselearning</artifactId>
+    <version>0.0.1-SNAPSHOT</version>
+    <name>courseLearning</name>
+    <description>Demo project for Spring Boot</description>
+
+    <properties>
+        <java.version>1.8</java.version>
+    </properties>
+
+    <dependencies>
+        <!--spring boot mybatis-->
+        <dependency>
+            <groupId>org.mybatis.spring.boot</groupId>
+            <artifactId>mybatis-spring-boot-starter</artifactId>
+            <version>2.1.4</version>
+        </dependency>
+        <!--spring boot web-->
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-web</artifactId>
+        </dependency>
+        <!--mysql-->
+        <dependency>
+            <groupId>mysql</groupId>
+            <artifactId>mysql-connector-java</artifactId>
+            <version>8.0.22</version>
+        </dependency>
+        <!--mybatis自动生成实体类、映射表 -->
+        <dependency>
+            <groupId>org.mybatis.generator</groupId>
+            <artifactId>mybatis-generator-core</artifactId>
+            <version>1.3.5</version>
+        </dependency>
+        <!--与mybatis配合使用的分页插件-->
+        <dependency>
+            <groupId>com.github.pagehelper</groupId>
+            <artifactId>pagehelper</artifactId>
+            <version>5.0.0</version>
+        </dependency>
+        <!--c3p0数据源-->
+        <!-- https://mvnrepository.com/artifact/com.mchange/c3p0 -->
+        <dependency>
+            <groupId>com.mchange</groupId>
+            <artifactId>c3p0</artifactId>
+            <version>0.9.5.2</version>
+        </dependency>
+
+        <dependency>
+            <groupId>org.slf4j</groupId>
+            <artifactId>slf4j-api</artifactId>
+            <version>1.7.26</version>
+        </dependency>
+
+        <dependency>
+            <groupId>org.projectlombok</groupId>
+            <artifactId>lombok</artifactId>
+            <optional>true</optional>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-test</artifactId>
+            <scope>test</scope>
+        </dependency>
+    </dependencies>
+
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.springframework.boot</groupId>
+                <artifactId>spring-boot-maven-plugin</artifactId>
+                <configuration>
+                    <excludes>
+                        <exclude>
+                            <groupId>org.projectlombok</groupId>
+                            <artifactId>lombok</artifactId>
+                        </exclude>
+                    </excludes>
+                </configuration>
+            </plugin>
+        </plugins>
+    </build>
+
+</project>

+ 314 - 0
sql/courselearning.sql

@@ -0,0 +1,314 @@
+create database if not exists `courselearning` default charset utf8;
+
+use `courselearning`;
+
+SET FOREIGN_KEY_CHECKS=0;
+
+-- ----------------------------
+-- Table structure for `course`
+-- ----------------------------
+DROP TABLE IF EXISTS `course`;
+CREATE TABLE `course` (
+  `id` int NOT NULL AUTO_INCREMENT,
+  `name` varchar(255) NOT NULL,
+  `type` varchar(255) DEFAULT NULL,
+  `intro` varchar(255) DEFAULT NULL,
+  `picture` varchar(255) DEFAULT NULL,
+  `school` varchar(255) DEFAULT NULL,
+  `create_time` datetime NOT NULL,
+  `delete_time` datetime DEFAULT NULL,
+  `cost` int NOT NULL,
+  `teacher_id` int NOT NULL,
+  `teacher_name` varchar(255) DEFAULT NULL,
+  PRIMARY KEY (`id`),
+  KEY `fk_user_course` (`teacher_id`),
+  CONSTRAINT `fk_user_course` FOREIGN KEY (`teacher_id`) REFERENCES `user_info` (`id`) ON DELETE NO ACTION ON UPDATE CASCADE
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+
+-- ----------------------------
+-- Records of course
+-- ----------------------------
+INSERT INTO `course` VALUES ('1', '软件工程与计算 I', '中级', '通过Scheme、Python和Java语言,让你分别体会函数式编程范式、结构化编程范式和面向对象编程范式', 'course1.png', '南京大学', '2020-12-20 10:00:00', null, '1', 1, '刘钦');
+INSERT INTO `course` VALUES ('2', '软件工程与计算 II', '中级', '基于DevOps培养团队开发中小规模软件系统的能力', 'course2.png', '南京大学', '2020-12-20 10:00:00', null, '1', 1, '刘钦');
+INSERT INTO `course` VALUES ('3', '程序猿与攻城狮', '初级', '我们将由5位老师从不同的角度来说说他们对软件工程的理解。我们并非试图去覆盖所有软件工程的知识点,我们只是希望去让对软件工程有兴趣的你们了解到“我要学什么”“我应如何学”“我今后能做什么”这样一些基本的问题的部分答案。\r\n\r\n   刘钦老师会介绍软件工程的历史和软件工程建模;丁二玉老师会谈谈软件工程师和软件工程团队;冯桂焕老师会通过案例让大家体验人机交互的魅力;陈振宇老师会从概率统计讲到软件测试;刘嘉老师会娓娓道来他对最热门的移动互联网发展的本质的理解。', 'course3.png', '南京大学', '2020-12-20 10:00:00', null, '1', 1, '刘钦');
+INSERT INTO `course` VALUES ('4', '基于Java的面向对象编程范式', '初级', '本课程完成了编程思维、结构化编程范式、面向对象编程方式的介绍,并且着重强调了面向对象编程中封装、协作和可修改性三个重要概念。通过客观题和6道编程题的训练,进一步加深对面向对象编程范式的理解,初步领略面向对象编程范式的风采。', 'course4.png', '南京大学', '2020-12-20 10:00:00', null, '1', 1, '刘钦');
+INSERT INTO `course` VALUES ('5', '移动互联网软件工程', '高级', '本课程结合软件工程方法学,从移动互联网需求出发,结合现有的互联网企业产品架构分析,探讨移动互联网软件开发的各种关注点、应用架构基础。', 'no.png', '南京大学', '2020-12-20 10:00:00', null, '1', 1, '刘钦');
+
+-- ----------------------------
+-- Table structure for `course_order`
+-- ----------------------------
+DROP TABLE IF EXISTS `course_order`;
+CREATE TABLE `course_order` (
+  `id` int NOT NULL AUTO_INCREMENT,
+  `cost` int NOT NULL,
+  `course_id` int NOT NULL,
+  `course_name` varchar(255) NOT NULL,
+  `create_time` datetime NOT NULL,
+  `user_id` int NOT NULL,
+  `status` int NOT NULL,
+  PRIMARY KEY (`id`),
+  KEY `fk_course_order` (`course_id`),
+  CONSTRAINT `fk_course_order` FOREIGN KEY (`course_id`) REFERENCES `course` (`id`) ON DELETE NO ACTION ON UPDATE CASCADE,
+  KEY `fk_user_order` (`user_id`),
+  CONSTRAINT `fk_user_order` FOREIGN KEY (`user_id`) REFERENCES `user_info` (`id`) ON DELETE NO ACTION ON UPDATE CASCADE
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+
+-- ----------------------------
+-- Table structure for `course_ware`
+-- ----------------------------
+DROP TABLE IF EXISTS `course_ware`;
+CREATE TABLE `course_ware` (
+  `id` int NOT NULL AUTO_INCREMENT,
+  `course_id` int NOT NULL,
+  `number` int NOT NULL,
+  `title` varchar(255) NOT NULL,
+  `file_name` varchar(255) DEFAULT NULL,
+  `file_type` varchar(255) DEFAULT NULL,
+  `file_size` varchar(255) DEFAULT NULL,
+  `free_flag` tinyint(1) NOT NULL DEFAULT '0',
+  `download_flag` tinyint(1) NOT NULL DEFAULT '1',
+  `upload_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
+  PRIMARY KEY (`id`),
+  KEY `fk_course_ware` (`course_id`),
+  CONSTRAINT `fk_course_ware` FOREIGN KEY (`course_id`) REFERENCES `course` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
+) ENGINE=InnoDB AUTO_INCREMENT=198 DEFAULT CHARSET=utf8;
+
+-- ----------------------------
+-- Records of course_ware
+-- ----------------------------
+INSERT INTO `course_ware` VALUES ('2', '1', '1', '00 - Overview', null, null, null, '0', '1', '2020-12-18 10:00:00');
+INSERT INTO `course_ware` VALUES ('3', '1', '2', '01 - 编程语言概述', null, null, null, '0', '1', '2020-12-18 10:00:00');
+INSERT INTO `course_ware` VALUES ('4', '1', '3', '02 - 编程基础 I-分解与抽象', null, null, null, '0', '1', '2020-12-18 10:00:00');
+INSERT INTO `course_ware` VALUES ('5', '1', '4', '03 - 编程基础 II-可计算性', null, null, null, '0', '1', '2020-12-18 10:00:00');
+INSERT INTO `course_ware` VALUES ('6', '1', '5', '04 - 编程基础 III-Lambda演算', null, null, null, '0', '1', '2020-12-18 10:00:00');
+INSERT INTO `course_ware` VALUES ('7', '1', '6', '05 - 编程基础 IV-函数式编程范式', null, null, null, '0', '1', '2020-12-18 10:00:00');
+INSERT INTO `course_ware` VALUES ('8', '1', '7', '06 - 编程基础 V-习题课', null, null, null, '0', '1', '2020-12-18 10:00:00');
+INSERT INTO `course_ware` VALUES ('9', '1', '8', '07 - 结构化编程 I - 思想', null, null, null, '0', '1', '2020-12-18 10:00:00');
+INSERT INTO `course_ware` VALUES ('10', '1', '9', '08 - 结构化编程 II - 变量', null, null, null, '0', '1', '2020-12-18 10:00:00');
+INSERT INTO `course_ware` VALUES ('11', '1', '10', '09 - 结构化编程 III - 方法', null, null, null, '0', '1', '2020-12-18 10:00:00');
+INSERT INTO `course_ware` VALUES ('12', '1', '11', '10 - 面向对象编程 I-思想', null, null, null, '0', '1', '2020-12-18 10:00:00');
+INSERT INTO `course_ware` VALUES ('13', '1', '12', '11 - 面向对象编程 II-封装', null, null, null, '0', '1', '2020-12-18 10:00:00');
+INSERT INTO `course_ware` VALUES ('14', '1', '13', '12 - 面向对象编程 III-协作', null, null, null, '0', '1', '2020-12-18 10:00:00');
+INSERT INTO `course_ware` VALUES ('15', '1', '14', '13 - 软件工程建模', null, null, null, '0', '1', '2020-12-18 10:00:00');
+INSERT INTO `course_ware` VALUES ('16', '1', '15', '14 - JVM和字节码基础', null, null, null, '0', '1', '2020-12-18 10:00:00');
+INSERT INTO `course_ware` VALUES ('17', '1', '16', '15 - 面向对象编程III-继承与多态', null, null, null, '0', '1', '2020-12-18 10:00:00');
+INSERT INTO `course_ware` VALUES ('18', '1', '17', '16 - 面向对象编程 IV-可修改性', null, null, null, '0', '1', '2020-12-18 10:00:00');
+INSERT INTO `course_ware` VALUES ('19', '1', '18', '17 - 面向对象编程 V-接口', null, null, null, '0', '1', '2020-12-18 10:00:00');
+INSERT INTO `course_ware` VALUES ('20', '1', '19', '18 - 异常', null, null, null, '0', '1', '2020-12-18 10:00:00');
+INSERT INTO `course_ware` VALUES ('21', '1', '20', '19 - Network and Thread', null, null, null, '0', '1', '2020-12-18 10:00:00');
+INSERT INTO `course_ware` VALUES ('22', '1', '21', '20 - Graphical User Interface', null, null, null, '0', '1', '2020-12-18 10:00:00');
+INSERT INTO `course_ware` VALUES ('23', '1', '22', 'Git介绍', null, null, null, '0', '1', '2020-12-18 10:00:00');
+INSERT INTO `course_ware` VALUES ('24', '1', '23', 'Java编程基础', null, null, null, '0', '1', '2020-12-18 10:00:00');
+INSERT INTO `course_ware` VALUES ('25', '1', '24', 'Lab01-环境配置', null, null, null, '0', '1', '2020-12-18 10:00:00');
+INSERT INTO `course_ware` VALUES ('26', '1', '25', 'Lab02-Seec系统', null, null, null, '0', '1', '2020-12-18 10:00:00');
+INSERT INTO `course_ware` VALUES ('27', '1', '26', 'Lab03-简单分支和循环的训练', null, null, null, '0', '1', '2020-12-18 10:00:00');
+INSERT INTO `course_ware` VALUES ('28', '1', '27', 'Lab04-Anagram', null, null, null, '0', '1', '2020-12-18 10:00:00');
+INSERT INTO `course_ware` VALUES ('29', '1', '28', 'Lab05-arrival_of_general', null, null, null, '0', '1', '2020-12-18 10:00:00');
+INSERT INTO `course_ware` VALUES ('30', '1', '29', 'Lab06-Taxi', null, null, null, '0', '1', '2020-12-18 10:00:00');
+INSERT INTO `course_ware` VALUES ('31', '1', '30', 'Programming-01-Basics', null, null, null, '0', '1', '2020-12-18 10:00:00');
+INSERT INTO `course_ware` VALUES ('32', '1', '31', 'Programming-02-Variable & Type', null, null, null, '0', '1', '2020-12-18 10:00:00');
+INSERT INTO `course_ware` VALUES ('33', '1', '32', 'Programming-03-Control Flow', null, null, null, '0', '1', '2020-12-18 10:00:00');
+INSERT INTO `course_ware` VALUES ('34', '1', '33', 'Programming-04-Method', null, null, null, '0', '1', '2020-12-18 10:00:00');
+INSERT INTO `course_ware` VALUES ('35', '1', '34', 'Programming-05-Module', null, null, null, '0', '1', '2020-12-18 10:00:00');
+INSERT INTO `course_ware` VALUES ('36', '1', '35', 'Programming-06-Composite Data', null, null, null, '0', '1', '2020-12-18 10:00:00');
+INSERT INTO `course_ware` VALUES ('37', '1', '36', 'Programming-07-Input & Output', null, null, null, '0', '1', '2020-12-18 10:00:00');
+INSERT INTO `course_ware` VALUES ('38', '1', '37', 'Programming-08-Lambda and Functional Programming', null, null, null, '0', '1', '2020-12-18 10:00:00');
+INSERT INTO `course_ware` VALUES ('39', '1', '38', 'Programming-09-Simulation and Calculation', null, null, null, '0', '1', '2020-12-18 10:00:00');
+INSERT INTO `course_ware` VALUES ('40', '1', '39', 'Python-01-HelloWorld和Variable', null, null, null, '0', '1', '2020-12-18 10:00:00');
+INSERT INTO `course_ware` VALUES ('41', '1', '40', 'Python-02-控制流', null, null, null, '0', '1', '2020-12-18 10:00:00');
+INSERT INTO `course_ware` VALUES ('42', '1', '41', 'Python-03-函数', null, null, null, '0', '1', '2020-12-18 10:00:00');
+INSERT INTO `course_ware` VALUES ('43', '1', '42', 'Python-04-模块', null, null, null, '0', '1', '2020-12-18 10:00:00');
+INSERT INTO `course_ware` VALUES ('44', '1', '43', 'Python-05-复合数据', null, null, null, '0', '1', '2020-12-18 10:00:00');
+INSERT INTO `course_ware` VALUES ('45', '1', '44', 'Python-06-输入输出', null, null, null, '0', '1', '2020-12-18 10:00:00');
+INSERT INTO `course_ware` VALUES ('46', '1', '45', 'Python-07-Lambda and Functional Programming', null, null, null, '0', '1', '2020-12-18 10:00:00');
+INSERT INTO `course_ware` VALUES ('47', '1', '46', 'Reference-01-Byte-of-Python', null, null, null, '0', '1', '2020-12-18 10:00:00');
+INSERT INTO `course_ware` VALUES ('48', '1', '47', 'Reference-02-Turing, His Machine and Computability', null, null, null, '0', '1', '2020-12-18 10:00:00');
+INSERT INTO `course_ware` VALUES ('49', '1', '48', 'Reference-03-Register Machines are Turing Machines', null, null, null, '0', '1', '2020-12-18 10:00:00');
+INSERT INTO `course_ware` VALUES ('50', '1', '49', 'Reference-04-Lambda', null, null, null, '0', '1', '2020-12-18 10:00:00');
+INSERT INTO `course_ware` VALUES ('51', '1', '50', 'Z总结', null, null, null, '0', '1', '2020-12-18 10:00:00');
+INSERT INTO `course_ware` VALUES ('52', '1', '51', '谷歌软件工程', null, null, null, '0', '1', '2020-12-18 10:00:00');
+INSERT INTO `course_ware` VALUES ('53', '1', '52', '软件工程守破离', null, null, null, '0', '1', '2020-12-18 10:00:00');
+INSERT INTO `course_ware` VALUES ('54', '2', '1', '00-Overview', null, null, null, '0', '1', '2020-12-18 10:00:00');
+INSERT INTO `course_ware` VALUES ('55', '2', '2', '01-软件工程基础', null, null, null, '0', '1', '2020-12-18 10:00:00');
+INSERT INTO `course_ware` VALUES ('56', '2', '3', '02-软件工程的发展', null, null, null, '0', '1', '2020-12-18 10:00:00');
+INSERT INTO `course_ware` VALUES ('57', '2', '4', '04-项目启动', null, null, null, '0', '1', '2020-12-18 10:00:00');
+INSERT INTO `course_ware` VALUES ('58', '2', '5', '05-需求基础', null, null, null, '0', '1', '2020-12-18 10:00:00');
+INSERT INTO `course_ware` VALUES ('59', '2', '6', '06-需求分析方法', null, null, null, '0', '1', '2020-12-18 10:00:00');
+INSERT INTO `course_ware` VALUES ('60', '2', '7', '07-需求文档化与验证', null, null, null, '0', '1', '2020-12-18 10:00:00');
+INSERT INTO `course_ware` VALUES ('61', '2', '8', '08-软件设计基础', null, null, null, '0', '1', '2020-12-18 10:00:00');
+INSERT INTO `course_ware` VALUES ('62', '2', '9', '09-软件体系结构基础', null, null, null, '0', '1', '2020-12-18 10:00:00');
+INSERT INTO `course_ware` VALUES ('63', '2', '10', '10-软件体系结构设计与构建', null, null, null, '0', '1', '2020-12-18 10:00:00');
+INSERT INTO `course_ware` VALUES ('64', '2', '11', '11-人机交互', null, null, null, '0', '1', '2020-12-18 10:00:00');
+INSERT INTO `course_ware` VALUES ('65', '2', '12', '12-详细设计', null, null, null, '0', '1', '2020-12-18 10:00:00');
+INSERT INTO `course_ware` VALUES ('66', '2', '13', '13-模块化与信息隐藏', null, null, null, '0', '1', '2020-12-18 10:00:00');
+INSERT INTO `course_ware` VALUES ('67', '2', '14', '14-面向对象的模块化', null, null, null, '0', '1', '2020-12-18 10:00:00');
+INSERT INTO `course_ware` VALUES ('68', '2', '15', '15-面向对象的信息隐藏', null, null, null, '0', '1', '2020-12-18 10:00:00');
+INSERT INTO `course_ware` VALUES ('69', '2', '16', '16-设计模式', null, null, null, '0', '1', '2020-12-18 10:00:00');
+INSERT INTO `course_ware` VALUES ('70', '2', '17', '16工厂设计模式', null, null, null, '0', '1', '2020-12-18 10:00:00');
+INSERT INTO `course_ware` VALUES ('71', '2', '18', '16设计模式练习', null, null, null, '0', '1', '2020-12-18 10:00:00');
+INSERT INTO `course_ware` VALUES ('72', '2', '19', '17-软件构造', null, null, null, '0', '1', '2020-12-18 10:00:00');
+INSERT INTO `course_ware` VALUES ('73', '2', '20', '18-代码设计', null, null, null, '0', '1', '2020-12-18 10:00:00');
+INSERT INTO `course_ware` VALUES ('74', '2', '21', '19-软件测试', null, null, null, '0', '1', '2020-12-18 10:00:00');
+INSERT INTO `course_ware` VALUES ('75', '2', '22', '20-软件交付', null, null, null, '0', '1', '2020-12-18 10:00:00');
+INSERT INTO `course_ware` VALUES ('76', '2', '23', '21-软件维护与演化', null, null, null, '0', '1', '2020-12-18 10:00:00');
+INSERT INTO `course_ware` VALUES ('77', '2', '24', '22-软件开发过程模型', null, null, null, '0', '1', '2020-12-18 10:00:00');
+INSERT INTO `course_ware` VALUES ('78', '2', '25', '23-软件工程职业基础', null, null, null, '0', '1', '2020-12-18 10:00:00');
+INSERT INTO `course_ware` VALUES ('79', '2', '26', 'Homework01-软工二大作业迭代一功能需求简述', null, null, null, '0', '1', '2020-12-18 10:00:00');
+INSERT INTO `course_ware` VALUES ('80', '2', '27', 'Ref-01-SEEC系统课程与小组说明', null, null, null, '0', '1', '2020-12-18 10:00:00');
+INSERT INTO `course_ware` VALUES ('81', '2', '28', 'Ref-02-代码作业使用说明', null, null, null, '0', '1', '2020-12-18 10:00:00');
+INSERT INTO `course_ware` VALUES ('82', '2', '29', 'Review01-用例文档点评', null, null, null, '0', '1', '2020-12-18 10:00:00');
+INSERT INTO `course_ware` VALUES ('83', '2', '30', 'Review02-需求规格点评', null, null, null, '0', '1', '2020-12-18 10:00:00');
+INSERT INTO `course_ware` VALUES ('84', '2', '31', 'Review03-体系结构', null, null, null, '0', '1', '2020-12-18 10:00:00');
+INSERT INTO `course_ware` VALUES ('85', '2', '32', 'Web开发-01-浏览器的渲染原理', null, null, null, '0', '1', '2020-12-18 10:00:00');
+INSERT INTO `course_ware` VALUES ('86', '2', '33', 'Web开发-02-HTTP协议原理', null, null, null, '0', '1', '2020-12-18 10:00:00');
+INSERT INTO `course_ware` VALUES ('87', '2', '34', 'Web开发-03-Tomcat和Servlet原理', null, null, null, '0', '1', '2020-12-18 10:00:00');
+INSERT INTO `course_ware` VALUES ('88', '2', '35', 'Web开发-04-REST和JSON', null, null, null, '0', '1', '2020-12-18 10:00:00');
+INSERT INTO `course_ware` VALUES ('89', '2', '36', 'Web开发-05-Springboot入门', null, null, null, '0', '1', '2020-12-18 10:00:00');
+INSERT INTO `course_ware` VALUES ('90', '2', '37', 'Web开发-06-GUI入门', null, null, null, '0', '1', '2020-12-18 10:00:00');
+INSERT INTO `course_ware` VALUES ('91', '2', '38', 'Web开发-07-数据设计', null, null, null, '0', '1', '2020-12-18 10:00:00');
+INSERT INTO `course_ware` VALUES ('92', '2', '39', 'Web开发-08-MVC-MVP-MVVM', null, null, null, '0', '1', '2020-12-18 10:00:00');
+INSERT INTO `course_ware` VALUES ('93', '2', '40', 'Web开发-09-Vue实战--前端', null, null, null, '0', '1', '2020-12-18 10:00:00');
+INSERT INTO `course_ware` VALUES ('94', '2', '41', 'Web开发-10-Springboot+Mybatis--后端', null, null, null, '0', '1', '2020-12-18 10:00:00');
+INSERT INTO `course_ware` VALUES ('95', '2', '42', '复习提纲', null, null, null, '0', '1', '2020-12-18 10:00:00');
+INSERT INTO `course_ware` VALUES ('96', '3', '1', '软件工程历史和软件工程建模', null, null, null, '0', '1', '2020-12-18 10:00:00');
+INSERT INTO `course_ware` VALUES ('97', '3', '2', '软件工程历史', null, null, null, '0', '1', '2020-12-18 10:00:00');
+INSERT INTO `course_ware` VALUES ('98', '3', '3', '数学和计算机建模', null, null, null, '0', '1', '2020-12-18 10:00:00');
+INSERT INTO `course_ware` VALUES ('99', '3', '4', '软件工程建模', null, null, null, '0', '1', '2020-12-18 10:00:00');
+INSERT INTO `course_ware` VALUES ('100', '3', '5', '编程思想', null, null, null, '0', '1', '2020-12-18 10:00:00');
+INSERT INTO `course_ware` VALUES ('101', '3', '6', '测试一', null, null, null, '0', '1', '2020-12-18 10:00:00');
+INSERT INTO `course_ware` VALUES ('102', '3', '7', '软件工程师和软件工程团队', null, null, null, '0', '1', '2020-12-18 10:00:00');
+INSERT INTO `course_ware` VALUES ('103', '3', '8', '软件工程师是做什么的 上集', null, null, null, '0', '1', '2020-12-18 10:00:00');
+INSERT INTO `course_ware` VALUES ('104', '3', '9', '软件工程师是做什么的 下集', null, null, null, '0', '1', '2020-12-18 10:00:00');
+INSERT INTO `course_ware` VALUES ('105', '3', '10', '软件工程团队的三驾马车', null, null, null, '0', '1', '2020-12-18 10:00:00');
+INSERT INTO `course_ware` VALUES ('106', '3', '11', '软件工程团队的其他重要角色', null, null, null, '0', '1', '2020-12-18 10:00:00');
+INSERT INTO `course_ware` VALUES ('107', '3', '12', '测试二', null, null, null, '0', '1', '2020-12-18 10:00:00');
+INSERT INTO `course_ware` VALUES ('108', '3', '13', '人机交互', null, null, null, '0', '1', '2020-12-18 10:00:00');
+INSERT INTO `course_ware` VALUES ('109', '3', '14', '人机交互概述', null, null, null, '0', '1', '2020-12-18 10:00:00');
+INSERT INTO `course_ware` VALUES ('110', '3', '15', '启发式设计原则', null, null, null, '0', '1', '2020-12-18 10:00:00');
+INSERT INTO `course_ware` VALUES ('111', '3', '16', '人机交互的软件工程方法—— 启发式评估', null, null, null, '0', '1', '2020-12-18 10:00:00');
+INSERT INTO `course_ware` VALUES ('112', '3', '17', '测试三', null, null, null, '0', '1', '2020-12-18 10:00:00');
+INSERT INTO `course_ware` VALUES ('113', '3', '18', '概率统计到软件测试', null, null, null, '0', '1', '2020-12-18 10:00:00');
+INSERT INTO `course_ware` VALUES ('114', '3', '19', '数字与计算', null, null, null, '0', '1', '2020-12-18 10:00:00');
+INSERT INTO `course_ware` VALUES ('115', '3', '20', '计算与概率', null, null, null, '0', '1', '2020-12-18 10:00:00');
+INSERT INTO `course_ware` VALUES ('116', '3', '21', '概率与测试', null, null, null, '0', '1', '2020-12-18 10:00:00');
+INSERT INTO `course_ware` VALUES ('117', '3', '22', '测试与生活', null, null, null, '0', '1', '2020-12-18 10:00:00');
+INSERT INTO `course_ware` VALUES ('118', '3', '23', '生活与数字', null, null, null, '0', '1', '2020-12-18 10:00:00');
+INSERT INTO `course_ware` VALUES ('119', '3', '24', '测试四', null, null, null, '0', '1', '2020-12-18 10:00:00');
+INSERT INTO `course_ware` VALUES ('120', '3', '25', '移动互联网本质', null, null, null, '0', '1', '2020-12-18 10:00:00');
+INSERT INTO `course_ware` VALUES ('121', '3', '26', '连接', null, null, null, '0', '1', '2020-12-18 10:00:00');
+INSERT INTO `course_ware` VALUES ('122', '3', '27', '时间', null, null, null, '0', '1', '2020-12-18 10:00:00');
+INSERT INTO `course_ware` VALUES ('123', '3', '28', '未来', null, null, null, '0', '1', '2020-12-18 10:00:00');
+INSERT INTO `course_ware` VALUES ('124', '3', '29', '本质', null, null, null, '0', '1', '2020-12-18 10:00:00');
+INSERT INTO `course_ware` VALUES ('125', '4', '1', '1 - 编程之前', null, null, null, '0', '1', '2020-12-18 10:00:00');
+INSERT INTO `course_ware` VALUES ('126', '4', '2', '1-01-科学思维vs工程思维', null, null, null, '0', '1', '2020-12-18 10:00:00');
+INSERT INTO `course_ware` VALUES ('127', '4', '3', '1-02-数学建模', null, null, null, '0', '1', '2020-12-18 10:00:00');
+INSERT INTO `course_ware` VALUES ('128', '4', '4', '1-03-计算机建模 1', null, null, null, '0', '1', '2020-12-18 10:00:00');
+INSERT INTO `course_ware` VALUES ('129', '4', '5', '1-04-计算机建模 2', null, null, null, '0', '1', '2020-12-18 10:00:00');
+INSERT INTO `course_ware` VALUES ('130', '4', '6', '1-05-软件工程建模', null, null, null, '0', '1', '2020-12-18 10:00:00');
+INSERT INTO `course_ware` VALUES ('131', '4', '7', '1-06-软件开发生命周期模型', null, null, null, '0', '1', '2020-12-18 10:00:00');
+INSERT INTO `course_ware` VALUES ('132', '4', '8', '1-07-分解与抽象', null, null, null, '0', '1', '2020-12-18 10:00:00');
+INSERT INTO `course_ware` VALUES ('133', '4', '9', '1-08-层次性', null, null, null, '0', '1', '2020-12-18 10:00:00');
+INSERT INTO `course_ware` VALUES ('134', '4', '10', '1-09-HelloWorld', null, null, null, '0', '1', '2020-12-18 10:00:00');
+INSERT INTO `course_ware` VALUES ('135', '4', '11', '1-10-代码是用来读的', null, null, null, '0', '1', '2020-12-18 10:00:00');
+INSERT INTO `course_ware` VALUES ('136', '4', '12', '1-11-有代码就得有测试', null, null, null, '0', '1', '2020-12-18 10:00:00');
+INSERT INTO `course_ware` VALUES ('137', '4', '13', '1-12-用例来给需求建模', null, null, null, '0', '1', '2020-12-18 10:00:00');
+INSERT INTO `course_ware` VALUES ('138', '4', '14', '第一单元 单元测试', null, null, null, '0', '1', '2020-12-18 10:00:00');
+INSERT INTO `course_ware` VALUES ('139', '4', '15', '2 - 结构化编程范式', null, null, null, '0', '1', '2020-12-18 10:00:00');
+INSERT INTO `course_ware` VALUES ('140', '4', '16', '2-01-结构化编程思想', null, null, null, '0', '1', '2020-12-18 10:00:00');
+INSERT INTO `course_ware` VALUES ('141', '4', '17', '2-02-数据流图', null, null, null, '0', '1', '2020-12-18 10:00:00');
+INSERT INTO `course_ware` VALUES ('142', '4', '18', '2-03-结构图', null, null, null, '0', '1', '2020-12-18 10:00:00');
+INSERT INTO `course_ware` VALUES ('143', '4', '19', '2-04-数据流图向结构图的转变', null, null, null, '0', '1', '2020-12-18 10:00:00');
+INSERT INTO `course_ware` VALUES ('144', '4', '20', '2-05-顺序、循环、分支', null, null, null, '0', '1', '2020-12-18 10:00:00');
+INSERT INTO `course_ware` VALUES ('145', '4', '21', '2-06-MatrixCalculation', null, null, null, '0', '1', '2020-12-18 10:00:00');
+INSERT INTO `course_ware` VALUES ('146', '4', '22', '2-07-避免重复', null, null, null, '0', '1', '2020-12-18 10:00:00');
+INSERT INTO `course_ware` VALUES ('147', '4', '23', '2-08-测试分支和循环', null, null, null, '0', '1', '2020-12-18 10:00:00');
+INSERT INTO `course_ware` VALUES ('148', '4', '24', '第二单元 单元测试', null, null, null, '0', '1', '2020-12-18 10:00:00');
+INSERT INTO `course_ware` VALUES ('149', '4', '25', '3 - 面向对象编程范式', null, null, null, '0', '1', '2020-12-18 10:00:00');
+INSERT INTO `course_ware` VALUES ('150', '4', '26', '3-01-变更时不可以避免的', null, null, null, '0', '1', '2020-12-18 10:00:00');
+INSERT INTO `course_ware` VALUES ('151', '4', '27', '3-02-大范围的修改vs有限范围', null, null, null, '0', '1', '2020-12-18 10:00:00');
+INSERT INTO `course_ware` VALUES ('152', '4', '28', '3-03-面向对象的世界观', null, null, null, '0', '1', '2020-12-18 10:00:00');
+INSERT INTO `course_ware` VALUES ('153', '4', '29', '3-04-类和对象', null, null, null, '0', '1', '2020-12-18 10:00:00');
+INSERT INTO `course_ware` VALUES ('154', '4', '30', '3-05-BadMatrix', null, null, null, '0', '1', '2020-12-18 10:00:00');
+INSERT INTO `course_ware` VALUES ('155', '4', '31', '3-06-重用', null, null, null, '0', '1', '2020-12-18 10:00:00');
+INSERT INTO `course_ware` VALUES ('156', '4', '32', '3-07-测试单个类', null, null, null, '0', '1', '2020-12-18 10:00:00');
+INSERT INTO `course_ware` VALUES ('157', '4', '33', '第三单元 单元测试', null, null, null, '0', '1', '2020-12-18 10:00:00');
+INSERT INTO `course_ware` VALUES ('158', '4', '34', '4 - 类的封装', null, null, null, '0', '1', '2020-12-18 10:00:00');
+INSERT INTO `course_ware` VALUES ('159', '4', '35', '4-01-在一起', null, null, null, '0', '1', '2020-12-18 10:00:00');
+INSERT INTO `course_ware` VALUES ('160', '4', '36', '4-02-封装', null, null, null, '0', '1', '2020-12-18 10:00:00');
+INSERT INTO `course_ware` VALUES ('161', '4', '37', '4-03-MyMatrix', null, null, null, '0', '1', '2020-12-18 10:00:00');
+INSERT INTO `course_ware` VALUES ('162', '4', '38', '4-04-寻找类和对象', null, null, null, '0', '1', '2020-12-18 10:00:00');
+INSERT INTO `course_ware` VALUES ('163', '4', '39', '4-05-用类图表达类的职责', null, null, null, '0', '1', '2020-12-18 10:00:00');
+INSERT INTO `course_ware` VALUES ('164', '4', '40', '4-06-防御式编程', null, null, null, '0', '1', '2020-12-18 10:00:00');
+INSERT INTO `course_ware` VALUES ('165', '4', '41', '4-07-静态变量和静态方法', null, null, null, '0', '1', '2020-12-18 10:00:00');
+INSERT INTO `course_ware` VALUES ('166', '4', '42', '4-08-简单类的初始化', null, null, null, '0', '1', '2020-12-18 10:00:00');
+INSERT INTO `course_ware` VALUES ('167', '4', '43', '第四单元 单元测试', null, null, null, '0', '1', '2020-12-18 10:00:00');
+INSERT INTO `course_ware` VALUES ('168', '4', '44', '5 - 类的协作', null, null, null, '0', '1', '2020-12-18 10:00:00');
+INSERT INTO `course_ware` VALUES ('169', '4', '45', '5-01-职责', null, null, null, '0', '1', '2020-12-18 10:00:00');
+INSERT INTO `course_ware` VALUES ('170', '4', '46', '5-02-协作', null, null, null, '0', '1', '2020-12-18 10:00:00');
+INSERT INTO `course_ware` VALUES ('171', '4', '47', '5-03-类之间的关系', null, null, null, '0', '1', '2020-12-18 10:00:00');
+INSERT INTO `course_ware` VALUES ('172', '4', '48', '5-04-TicTacToe', null, null, null, '0', '1', '2020-12-18 10:00:00');
+INSERT INTO `course_ware` VALUES ('173', '4', '49', '5-05-用顺序图表达类的协作', null, null, null, '0', '1', '2020-12-18 10:00:00');
+INSERT INTO `course_ware` VALUES ('174', '4', '50', '5-06-用Mock Object来辅助测试协作', null, null, null, '0', '1', '2020-12-18 10:00:00');
+INSERT INTO `course_ware` VALUES ('175', '4', '51', '第五单元 单元测验', null, null, null, '0', '1', '2020-12-18 10:00:00');
+INSERT INTO `course_ware` VALUES ('176', '4', '52', '6-类的可重用和可修改', null, null, null, '0', '1', '2020-12-18 10:00:00');
+INSERT INTO `course_ware` VALUES ('177', '4', '53', '6-01-可修改性', null, null, null, '0', '1', '2020-12-18 10:00:00');
+INSERT INTO `course_ware` VALUES ('178', '4', '54', '6-02-继承', null, null, null, '0', '1', '2020-12-18 10:00:00');
+INSERT INTO `course_ware` VALUES ('179', '4', '55', '6-03-多态', null, null, null, '0', '1', '2020-12-18 10:00:00');
+INSERT INTO `course_ware` VALUES ('180', '4', '56', '6-04-抽象类和抽象方法', null, null, null, '0', '1', '2020-12-18 10:00:00');
+INSERT INTO `course_ware` VALUES ('181', '4', '57', '6-05-接口', null, null, null, '0', '1', '2020-12-18 10:00:00');
+INSERT INTO `course_ware` VALUES ('182', '4', '58', '6-06-NewTicTacToe', null, null, null, '0', '1', '2020-12-18 10:00:00');
+INSERT INTO `course_ware` VALUES ('183', '4', '59', '6-07-继承和组合', null, null, null, '0', '1', '2020-12-18 10:00:00');
+INSERT INTO `course_ware` VALUES ('184', '4', '60', '6-08-按接口编程', null, null, null, '0', '1', '2020-12-18 10:00:00');
+INSERT INTO `course_ware` VALUES ('185', '4', '61', '6-09-实现可修改性', null, null, null, '0', '1', '2020-12-18 10:00:00');
+INSERT INTO `course_ware` VALUES ('186', '4', '62', '6-10-复杂类的初始化', null, null, null, '0', '1', '2020-12-18 10:00:00');
+INSERT INTO `course_ware` VALUES ('187', '5', '1', '00 - 关于课程', null, null, null, '0', '1', '2020-12-18 10:00:00');
+INSERT INTO `course_ware` VALUES ('188', '5', '2', '01 - 软件工程方法学', null, null, null, '0', '1', '2020-12-18 10:00:00');
+INSERT INTO `course_ware` VALUES ('189', '5', '3', '02 - 移动互联网需求分析', null, null, null, '0', '1', '2020-12-18 10:00:00');
+INSERT INTO `course_ware` VALUES ('190', '5', '4', '03 - 移动互联网公司架构分析I - 架构视角', null, null, null, '0', '1', '2020-12-18 10:00:00');
+INSERT INTO `course_ware` VALUES ('191', '5', '5', '04 - 移动互联网架构分析II - 关注点', null, null, null, '0', '1', '2020-12-18 10:00:00');
+INSERT INTO `course_ware` VALUES ('192', '5', '6', '05 - 移动互联网应用App体系结构设计', null, null, null, '0', '1', '2020-12-18 10:00:00');
+INSERT INTO `course_ware` VALUES ('193', '5', '7', '06 - 移动互联网商业视角', null, null, null, '0', '1', '2020-12-18 10:00:00');
+INSERT INTO `course_ware` VALUES ('194', '5', '8', '07 - UI设计', null, null, null, '0', '1', '2020-12-18 10:00:00');
+INSERT INTO `course_ware` VALUES ('195', '5', '9', '08 - 秒杀系统', null, null, null, '0', '1', '2020-12-18 10:00:00');
+INSERT INTO `course_ware` VALUES ('196', '5', '10', '09 - 敏捷软件开发', null, null, null, '0', '1', '2020-12-18 10:00:00');
+INSERT INTO `course_ware` VALUES ('197', '5', '11', '10 - 微服务', null, null, null, '0', '1', '2020-12-18 10:00:00');
+
+
+-- ----------------------------
+-- Table structure for `user_info`
+-- ----------------------------
+DROP TABLE IF EXISTS `user_info`;
+CREATE TABLE `user_info` (
+  `id` int NOT NULL AUTO_INCREMENT,
+  `uname` varchar(255) NOT NULL,
+  `phone` varchar(255) NOT NULL,
+  `password` varchar(255) NOT NULL,
+  `picture` varchar(255) DEFAULT NULL,
+  `balance` int NOT NULL,
+  `user_role` varchar(255) NOT NULL,
+  `create_time` datetime NOT NULL,
+  PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+
+-- ----------------------------
+-- Records of course_ware
+-- ----------------------------
+INSERT INTO `user_info` VALUES ('1', '刘钦', '10112345678', '123456', null, 0, 'TEACHER', '2020-12-18 10:00:00');
+INSERT INTO `user_info` VALUES ('2', '小明', '10212345678', '123456', null, 0, 'STUDENT', '2020-12-18 10:00:00');
+
+-- ----------------------------
+-- Table structure for `recharge_order`
+-- ----------------------------
+
+DROP TABLE IF EXISTS `recharge_order`;
+CREATE TABLE `recharge_order` (
+  `order_id` int NOT NULL AUTO_INCREMENT,
+  `user_id` int NOT NULL,
+  `value` int NOT NULL,
+  `create_time` datetime NOT NULL,
+  PRIMARY KEY (`order_id`),
+  KEY `fk_user_recharge` (`user_id`),
+  CONSTRAINT `fk_user_recharge` FOREIGN KEY (`user_id`) REFERENCES `user_info` (`id`) ON DELETE NO ACTION ON UPDATE CASCADE
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+
+SET FOREIGN_KEY_CHECKS=1;

+ 12 - 0
src/main/java/cn/seecoder/courselearning/CourseLearningApplication.java

@@ -0,0 +1,12 @@
+package cn.seecoder.courselearning;
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+
+@SpringBootApplication
+public class CourseLearningApplication {
+
+    public static void main(String[] args) {
+        SpringApplication.run(CourseLearningApplication.class, args);
+    }
+
+}

+ 27 - 0
src/main/java/cn/seecoder/courselearning/config/CorsConfig.java

@@ -0,0 +1,27 @@
+package cn.seecoder.courselearning.config;
+
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.web.cors.CorsConfiguration;
+import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
+import org.springframework.web.filter.CorsFilter;
+
+/**
+ * 允许跨域请求访问资源
+ */
+@Configuration
+public class CorsConfig {
+    private CorsConfiguration buildConfig() {
+        CorsConfiguration corsConfiguration = new CorsConfiguration();
+        corsConfiguration.addAllowedOrigin("*");
+        corsConfiguration.addAllowedHeader("*");
+        corsConfiguration.addAllowedMethod("*");
+        return corsConfiguration;
+    }
+    @Bean
+    public CorsFilter corsFilter() {
+        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
+        source.registerCorsConfiguration("/**", buildConfig());
+        return new CorsFilter(source);
+    }
+}

+ 89 - 0
src/main/java/cn/seecoder/courselearning/config/DataSourceConfig.java

@@ -0,0 +1,89 @@
+package cn.seecoder.courselearning.config;
+
+import com.github.pagehelper.PageInterceptor;
+import com.mchange.v2.c3p0.ComboPooledDataSource;
+import org.apache.ibatis.plugin.Interceptor;
+import org.apache.ibatis.session.SqlSessionFactory;
+import org.mybatis.spring.SqlSessionFactoryBean;
+import org.mybatis.spring.annotation.MapperScan;
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.core.io.DefaultResourceLoader;
+import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
+import org.springframework.jdbc.datasource.DataSourceTransactionManager;
+
+import javax.sql.DataSource;
+import java.beans.PropertyVetoException;
+import java.util.Properties;
+
+@Configuration
+// 扫描 Mapper 接口并容器管理
+@MapperScan(basePackages = cn.seecoder.courselearning.config.DataSourceConfig.PACKAGE,sqlSessionFactoryRef = "testDsSqlSessionFactory")
+public class DataSourceConfig {
+
+    // 精确到 cluster 目录,以便跟其他数据源隔离
+    static final String PACKAGE = "cn.seecoder.courselearning.mapperservice";
+    static final String MAPPER_LOCATION = "classpath:mapper/*.xml";
+    static final String ALIAS = "cn.seecoder.courselearning.po";
+
+    @Value("${spring.datasource.url}")
+    private String url;
+
+    @Value("${spring.datasource.username}")
+    private String user;
+
+    @Value("${spring.datasource.password}")
+    private String password;
+
+    @Value("${spring.datasource.driver-class-name}")
+    private String driverClass;
+
+    @Bean(name = "testDataSource")
+    public DataSource clusterDataSource()throws PropertyVetoException{
+        ComboPooledDataSource dataSource=new ComboPooledDataSource();
+        dataSource.setDriverClass(driverClass);
+        dataSource.setJdbcUrl(url);
+        dataSource.setUser(user);
+        dataSource.setPassword(password);
+        dataSource.setAutoCommitOnClose(false);
+        return dataSource;
+    }
+
+    @Bean(name = "testTransactionManager")
+    public DataSourceTransactionManager clusterTransactionManager() throws PropertyVetoException {
+        return new DataSourceTransactionManager(clusterDataSource());
+    }
+
+    // 创建SqlSessionFactory对象
+    @Bean(name = "testDsSqlSessionFactory")
+    public SqlSessionFactory testDsSqlSessionFactory(@Qualifier("testDataSource") DataSource clusterDataSource)
+            throws Exception {
+        final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
+        sessionFactory.setDataSource(clusterDataSource);
+
+        // 加载全局的配置文件
+        sessionFactory.setConfigLocation(
+                new DefaultResourceLoader().getResource("classpath:mybatis-config.xml"));
+
+        // 配置类型别名
+        sessionFactory.setTypeAliasesPackage(ALIAS);
+
+        // 分页插件
+        PageInterceptor interceptor = new PageInterceptor();
+        Properties properties = new Properties();
+        properties.setProperty("reasonable", "true");
+        properties.setProperty("supportMethodsArguments", "true");
+        properties.setProperty("returnPageInfo", "check");
+        properties.setProperty("params", "count=countSql");
+        interceptor.setProperties(properties);
+
+        // 添加插件
+        sessionFactory.setPlugins(interceptor);
+
+        sessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver()
+                .getResources(DataSourceConfig.MAPPER_LOCATION));
+        return sessionFactory.getObject();
+    }
+}

+ 22 - 0
src/main/java/cn/seecoder/courselearning/config/WebResourceConfig.java

@@ -0,0 +1,22 @@
+package cn.seecoder.courselearning.config;
+
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
+import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
+
+/**
+ * 资源映射路径
+ */
+@Configuration
+public class WebResourceConfig implements WebMvcConfigurer {
+    @Value("${web.file-upload-path}")
+    private String fileUploadPath;
+
+    @Override
+    public void addResourceHandlers(ResourceHandlerRegistry registry) {
+        // 配置资源映射路径
+        // 在当前配置下,如果后端在本地运行,访问上传的文件资源,只需访问路径 http://localhost:8081/file/{file_name}
+        registry.addResourceHandler("/file/**").addResourceLocations("file:"+fileUploadPath);
+    }
+}

+ 118 - 0
src/main/java/cn/seecoder/courselearning/controller/CourseController.java

@@ -0,0 +1,118 @@
+package cn.seecoder.courselearning.controller;
+
+import cn.seecoder.courselearning.service.CourseService;
+import cn.seecoder.courselearning.util.Constant;
+import cn.seecoder.courselearning.vo.CourseVO;
+import cn.seecoder.courselearning.vo.ResultVO;
+import com.github.pagehelper.PageInfo;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+@RestController
+@RequestMapping("/course")
+public class CourseController {
+    @Resource
+    private CourseService courseService;
+
+    /**
+     * 查询单一课程
+     * @param uid 用户id
+     * @param courseId 课程id
+     */
+    @GetMapping("/{courseId}")
+    public CourseVO getCoursesByKey(@RequestParam(required = false, defaultValue = "") Integer uid, @PathVariable Integer courseId) {
+        return courseService.getCourse(courseId, uid);
+    }
+
+    /**
+     * @api {GET} /course/all/{page} getCoursesByKey
+     * @apiVersion 1.0.0
+     * @apiGroup CourseController
+     * @apiName getCoursesByKey
+     * @apiParam (请求参数) {Number} uid
+     * @apiParam (请求参数) {String} key
+     * @apiParam (请求参数) {Number} page
+     * @apiParamExample 请求参数示例
+     * uid=7072&page=8779&key=b1IJw5
+     * @apiSuccess (响应结果) {Number} pageNum
+     * @apiSuccess (响应结果) {Number} pageSize
+     * @apiSuccess (响应结果) {Number} size
+     * @apiSuccess (响应结果) {Number} startRow
+     * @apiSuccess (响应结果) {Number} endRow
+     * @apiSuccess (响应结果) {Number} total
+     * @apiSuccess (响应结果) {Number} pages
+     * @apiSuccess (响应结果) {Array} list
+     * @apiSuccess (响应结果) {Number} list.id
+     * @apiSuccess (响应结果) {String} list.name
+     * @apiSuccess (响应结果) {String} list.type
+     * @apiSuccess (响应结果) {String} list.intro
+     * @apiSuccess (响应结果) {String} list.picture
+     * @apiSuccess (响应结果) {String} list.school
+     * @apiSuccess (响应结果) {Number} list.createTime
+     * @apiSuccess (响应结果) {Number} list.cost
+     * @apiSuccess (响应结果) {Number} list.teacherId
+     * @apiSuccess (响应结果) {String} list.teacherName
+     * @apiSuccess (响应结果) {Boolean} list.bought
+     * @apiSuccess (响应结果) {Boolean} list.manageable
+     * @apiSuccess (响应结果) {Number} prePage
+     * @apiSuccess (响应结果) {Number} nextPage
+     * @apiSuccess (响应结果) {Boolean} isFirstPage
+     * @apiSuccess (响应结果) {Boolean} isLastPage
+     * @apiSuccess (响应结果) {Boolean} hasPreviousPage
+     * @apiSuccess (响应结果) {Boolean} hasNextPage
+     * @apiSuccess (响应结果) {Number} navigatePages
+     * @apiSuccess (响应结果) {Array} navigatepageNums
+     * @apiSuccess (响应结果) {Number} navigateFirstPage
+     * @apiSuccess (响应结果) {Number} navigateLastPage
+     * @apiSuccessExample 响应结果示例
+     * {"startRow":6242,"navigatepageNums":[4700,3760],"prePage":9238,"hasNextPage":false,"nextPage":4296,"pageSize":3134,"endRow":1233,"list":[{"cost":9011,"teacherId":3899,"teacherName":"FggvmfS","school":"pMPQyzzYK","createTime":2598623110501,"bought":false,"intro":"6ZDaTK","name":"vyIjLJ","id":3301,"type":"R","picture":"7ZuOtM","manageable":true}],"pageNum":1775,"navigatePages":3984,"total":6489,"navigateFirstPage":3675,"pages":5031,"size":1961,"isLastPage":true,"hasPreviousPage":true,"navigateLastPage":1044,"isFirstPage":false}
+     */
+    @GetMapping("/all/{page}")
+    public PageInfo<CourseVO> getCoursesByKey(@RequestParam(required = false, defaultValue = "") Integer uid,
+                                                @RequestParam(required = false, defaultValue = "") String key,
+                                                @PathVariable Integer page) {
+        return courseService.getCourses(page, Constant.COURSE_PAGE_SIZE, uid, key);
+    }
+
+    /**
+     * 根据分类标签,获取课程列表
+     * 如果带参数uid,则需要判断该用户是否购买过课程、该用户是否为课程的教师
+     * @param uid 用户id
+     * @param type 课程类别
+     */
+    @GetMapping("/type/{page}")
+    public PageInfo<CourseVO> getCoursesByType(@RequestParam(required = false, defaultValue = "")  Integer uid,
+                                         @RequestParam String type,
+                                         @PathVariable Integer page) {
+        return courseService.getCoursesByType(page, Constant.COURSE_PAGE_SIZE, uid, type);
+    }
+
+    /**
+     * 获取用户已购买的课程列表
+     * @param sid 学生id
+     */
+    @GetMapping("/sid/{sid}")
+    public List<CourseVO> getBoughtCourses(@PathVariable Integer sid) {
+        return courseService.getBoughtCourses(sid);
+    }
+
+    /**
+     * 获取教师可管理的课程列表
+     * @param tid 教师id
+     */
+    @GetMapping("/tid/{tid}")
+    public List<CourseVO> getManageableCourses(@PathVariable Integer tid) {
+        return courseService.getManageableCourses(tid);
+    }
+
+    /**
+     * 教师创建课程
+     * @param course 课程VO
+     */
+    @PostMapping("/create")
+    public ResultVO<CourseVO> createCourse(@RequestBody CourseVO course) {
+        return courseService.createCourse(course);
+    }
+}

+ 38 - 0
src/main/java/cn/seecoder/courselearning/controller/CourseOrderController.java

@@ -0,0 +1,38 @@
+package cn.seecoder.courselearning.controller;
+
+import cn.seecoder.courselearning.service.CourseOrderService;
+import cn.seecoder.courselearning.vo.CourseOrderVO;
+import cn.seecoder.courselearning.vo.ResultVO;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+@RestController
+@RequestMapping("/course_order")
+public class CourseOrderController {
+    @Resource
+    private CourseOrderService orderService;
+
+    /**
+     * 创建课程订单
+     */
+    @PostMapping("/create")
+    public ResultVO<CourseOrderVO> createCourseOrder(@RequestBody CourseOrderVO orderVO){
+        return orderService.insertCourseOrder(orderVO);
+    }
+
+    /**
+     * 根据uid查询用户所有的订单
+     */
+    @GetMapping("/uid/{uid}")
+    public List<CourseOrderVO> getCourseOrders(@PathVariable Integer uid){
+        return orderService.getCourseOrders(uid);
+    }
+
+    @PostMapping("/update")
+    public ResultVO<CourseOrderVO> updateCourseOrderStatus(@RequestParam Integer orderId, @RequestParam Integer orderStatus){
+        return orderService.updateCourseOrder(orderId, orderStatus);
+    }
+
+}

+ 46 - 0
src/main/java/cn/seecoder/courselearning/controller/CourseWareController.java

@@ -0,0 +1,46 @@
+package cn.seecoder.courselearning.controller;
+
+import cn.seecoder.courselearning.service.CourseWareService;
+import cn.seecoder.courselearning.vo.CourseWareVO;
+import cn.seecoder.courselearning.vo.ResultVO;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+@RestController
+@RequestMapping("/course_ware")
+public class CourseWareController {
+    @Resource
+    private CourseWareService courseWareService;
+
+    /**
+     * 获取课件列表
+     * 如果带参数uid,则需要判断该用户是否购买过课程
+     * @param uid 用户id
+     * @param courseId 课程id
+     */
+    @GetMapping("/course/{courseId}")
+    public List<CourseWareVO> getCourseWare(@RequestParam(required = false, defaultValue = "") Integer uid,
+                                            @PathVariable Integer courseId) {
+        return courseWareService.getCourseWare(uid, courseId);
+    }
+
+    /**
+     * 教师创建课件
+     * @param courseWare 课件VO
+     */
+    @PostMapping("/create")
+    public ResultVO<CourseWareVO> createCourseWare(CourseWareVO courseWare){
+        return courseWareService.createCourseWare(courseWare);
+    }
+
+    /**
+     * 教师更新课件
+     * @param courseWare 课件VO
+     */
+    @PostMapping("/update")
+    public ResultVO<CourseWareVO> updateCourseWare(CourseWareVO courseWare){
+        return courseWareService.updateCourseWare(courseWare);
+    }
+}

+ 24 - 0
src/main/java/cn/seecoder/courselearning/controller/FileController.java

@@ -0,0 +1,24 @@
+package cn.seecoder.courselearning.controller;
+
+import cn.seecoder.courselearning.service.FileService;
+import cn.seecoder.courselearning.vo.FileInfoVO;
+import cn.seecoder.courselearning.vo.ResultVO;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.annotation.Resource;
+
+@RestController
+@RequestMapping("/file")
+public class FileController {
+    @Resource
+    FileService fileService;
+
+    @PostMapping("/upload")
+    public ResultVO<FileInfoVO> upload(@RequestParam("file") MultipartFile file) {
+        return fileService.uploadFile(file);
+    }
+}

+ 37 - 0
src/main/java/cn/seecoder/courselearning/controller/UserController.java

@@ -0,0 +1,37 @@
+package cn.seecoder.courselearning.controller;
+
+import cn.seecoder.courselearning.service.UserService;
+import cn.seecoder.courselearning.vo.RechargeOrderVO;
+import cn.seecoder.courselearning.vo.ResultVO;
+import cn.seecoder.courselearning.vo.UserFormVO;
+import cn.seecoder.courselearning.vo.UserVO;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+
+@RestController
+@RequestMapping("/user")
+public class UserController {
+    @Resource
+    private UserService userService;
+
+    @PostMapping("/register")
+    public ResultVO<UserVO> register(@RequestBody UserVO user){
+        return userService.userRegister(user);
+    }
+
+    @PostMapping("/login")
+    public ResultVO<UserVO> login(@RequestBody UserFormVO userForm){
+        return userService.userLogin(userForm.getPhone(), userForm.getPassword());
+    }
+
+    @GetMapping("/{uid}")
+    public UserVO getUser(@PathVariable Integer uid){
+        return userService.getUser(uid);
+    }
+
+    @PostMapping("/recharge")
+    public ResultVO<UserVO> recharge(@RequestBody RechargeOrderVO rechargeOrderVO){
+        return userService.rechargeAccount(rechargeOrderVO);
+    }
+}

+ 17 - 0
src/main/java/cn/seecoder/courselearning/enums/ExceptionType.java

@@ -0,0 +1,17 @@
+package cn.seecoder.courselearning.enums;
+
+import org.springframework.http.HttpStatus;
+
+public enum ExceptionType {
+    PARAM_ERROR(HttpStatus.BAD_REQUEST), UNAUTHORIZED(HttpStatus.UNAUTHORIZED), NOT_FOUND(HttpStatus.NOT_FOUND), SERVER_ERROR(HttpStatus.INTERNAL_SERVER_ERROR);
+
+    private final HttpStatus status;
+
+    public HttpStatus getStatus(){
+        return status;
+    }
+
+    ExceptionType(HttpStatus status){
+        this.status = status;
+    }
+}

+ 7 - 0
src/main/java/cn/seecoder/courselearning/enums/UserRole.java

@@ -0,0 +1,7 @@
+package cn.seecoder.courselearning.enums;
+
+public enum UserRole {
+    STUDENT,
+    TEACHER,
+    ADMIN;
+}

+ 17 - 0
src/main/java/cn/seecoder/courselearning/exception/MyException.java

@@ -0,0 +1,17 @@
+package cn.seecoder.courselearning.exception;
+
+import cn.seecoder.courselearning.enums.ExceptionType;
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+@Getter
+@AllArgsConstructor(staticName = "of")
+public class MyException extends RuntimeException {
+    private final ExceptionType type;
+    private final String msg;
+
+    @Override
+    public String getMessage() {
+        return msg;
+    }
+}

+ 24 - 0
src/main/java/cn/seecoder/courselearning/mapperservice/CourseMapper.java

@@ -0,0 +1,24 @@
+package cn.seecoder.courselearning.mapperservice;
+
+import cn.seecoder.courselearning.po.Course;
+import java.util.List;
+
+public interface CourseMapper {
+    int deleteByPrimaryKey(Integer id);
+
+    int insert(Course record);
+
+    Course selectByPrimaryKey(Integer id);
+
+    List<Course> selectAll();
+
+    int updateByPrimaryKey(Course record);
+
+    List<Course> selectByType(String type);
+
+    List<Course> queryAll(String key);
+
+    List<Course> selectByTeacherId(Integer userId);
+
+    List<Course> selectByStudentId(Integer userId);
+}

+ 20 - 0
src/main/java/cn/seecoder/courselearning/mapperservice/CourseOrderMapper.java

@@ -0,0 +1,20 @@
+package cn.seecoder.courselearning.mapperservice;
+
+import cn.seecoder.courselearning.po.CourseOrder;
+import java.util.List;
+
+public interface CourseOrderMapper {
+    int deleteByPrimaryKey(Integer id);
+
+    int insert(CourseOrder record);
+
+    CourseOrder selectByPrimaryKey(Integer id);
+
+    List<CourseOrder> selectAll();
+
+    int updateByPrimaryKey(CourseOrder record);
+
+    List<CourseOrder> selectByUserId(Integer userId);
+
+    CourseOrder queryMostRecentOrder(Integer userId, Integer courseId);
+}

+ 18 - 0
src/main/java/cn/seecoder/courselearning/mapperservice/CourseWareMapper.java

@@ -0,0 +1,18 @@
+package cn.seecoder.courselearning.mapperservice;
+
+import cn.seecoder.courselearning.po.CourseWare;
+import java.util.List;
+
+public interface CourseWareMapper {
+    int deleteByPrimaryKey(Integer id);
+
+    int insert(CourseWare record);
+
+    CourseWare selectByPrimaryKey(Integer id);
+
+    List<CourseWare> selectAll();
+
+    int updateByPrimaryKey(CourseWare record);
+
+    List<CourseWare> selectByCourseId(Integer courseId);
+}

+ 16 - 0
src/main/java/cn/seecoder/courselearning/mapperservice/RechargeOrderMapper.java

@@ -0,0 +1,16 @@
+package cn.seecoder.courselearning.mapperservice;
+
+import cn.seecoder.courselearning.po.RechargeOrder;
+import java.util.List;
+
+public interface RechargeOrderMapper {
+    int deleteByPrimaryKey(Integer orderId);
+
+    int insert(RechargeOrder record);
+
+    RechargeOrder selectByPrimaryKey(Integer orderId);
+
+    List<RechargeOrder> selectAll();
+
+    int updateByPrimaryKey(RechargeOrder record);
+}

+ 24 - 0
src/main/java/cn/seecoder/courselearning/mapperservice/UserMapper.java

@@ -0,0 +1,24 @@
+package cn.seecoder.courselearning.mapperservice;
+
+import cn.seecoder.courselearning.po.User;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+public interface UserMapper {
+    int deleteByPrimaryKey(Integer id);
+
+    int insert(User record);
+
+    User selectByPrimaryKey(Integer id);
+
+    List<User> selectAll();
+
+    int updateByPrimaryKey(User record);
+
+    void increaseBalance(@Param(value = "id") Integer id, @Param(value = "delta")Integer delta);
+
+    void decreaseBalance(@Param(value = "id") Integer id, @Param(value = "delta")Integer delta);
+
+    User selectByPhone(String phone);
+}

+ 133 - 0
src/main/java/cn/seecoder/courselearning/po/Course.java

@@ -0,0 +1,133 @@
+package cn.seecoder.courselearning.po;
+
+import cn.seecoder.courselearning.vo.CourseVO;
+import lombok.NonNull;
+
+import java.util.Date;
+
+public class Course {
+    private Integer id;
+
+    private String name;
+
+    private String type;
+
+    private String intro;
+
+    private String picture;
+
+    private String school;
+
+    private Date createTime;
+
+    private Date deleteTime;
+
+    private Integer cost;
+
+    private Integer teacherId;
+
+    private String teacherName;
+
+    public Integer getId() {
+        return id;
+    }
+
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name == null ? null : name.trim();
+    }
+
+    public String getType() {
+        return type;
+    }
+
+    public void setType(String type) {
+        this.type = type == null ? null : type.trim();
+    }
+
+    public String getIntro() {
+        return intro;
+    }
+
+    public void setIntro(String intro) {
+        this.intro = intro == null ? null : intro.trim();
+    }
+
+    public String getPicture() {
+        return picture;
+    }
+
+    public void setPicture(String picture) {
+        this.picture = picture == null ? null : picture.trim();
+    }
+
+    public String getSchool() {
+        return school;
+    }
+
+    public void setSchool(String school) {
+        this.school = school == null ? null : school.trim();
+    }
+
+    public Date getCreateTime() {
+        return createTime;
+    }
+
+    public void setCreateTime(Date createTime) {
+        this.createTime = createTime;
+    }
+
+    public Date getDeleteTime() {
+        return deleteTime;
+    }
+
+    public void setDeleteTime(Date deleteTime) {
+        this.deleteTime = deleteTime;
+    }
+
+    public Integer getCost() {
+        return cost;
+    }
+
+    public void setCost(Integer cost) {
+        this.cost = cost;
+    }
+
+    public Integer getTeacherId() {
+        return teacherId;
+    }
+
+    public void setTeacherId(Integer teacherId) {
+        this.teacherId = teacherId;
+    }
+
+    public String getTeacherName() {
+        return teacherName;
+    }
+
+    public void setTeacherName(String teacherName) {
+        this.teacherName = teacherName == null ? null : teacherName.trim();
+    }
+
+    public Course() {
+    }
+
+    public Course(@NonNull CourseVO courseVO){
+        this.name = courseVO.getName();
+        this.type = courseVO.getType();
+        this.intro = courseVO.getIntro();
+        this.picture = courseVO.getPicture();
+        this.school = courseVO.getSchool();
+        this.createTime = courseVO.getCreateTime();
+        this.cost = courseVO.getCost();
+        this.teacherId = courseVO.getTeacherId();
+        this.teacherName = courseVO.getTeacherName();
+    }
+}

+ 91 - 0
src/main/java/cn/seecoder/courselearning/po/CourseOrder.java

@@ -0,0 +1,91 @@
+package cn.seecoder.courselearning.po;
+
+import cn.seecoder.courselearning.vo.CourseOrderVO;
+import lombok.NonNull;
+
+import java.util.Date;
+
+public class CourseOrder {
+    private Integer id;
+
+    private Integer cost;
+
+    private Integer courseId;
+
+    private String courseName;
+
+    private Date createTime;
+
+    private Integer userId;
+
+    private Integer status;
+
+    public Integer getId() {
+        return id;
+    }
+
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    public Integer getCost() {
+        return cost;
+    }
+
+    public void setCost(Integer cost) {
+        this.cost = cost;
+    }
+
+    public Integer getCourseId() {
+        return courseId;
+    }
+
+    public void setCourseId(Integer courseId) {
+        this.courseId = courseId;
+    }
+
+    public String getCourseName() {
+        return courseName;
+    }
+
+    public void setCourseName(String courseName) {
+        this.courseName = courseName == null ? null : courseName.trim();
+    }
+
+    public Date getCreateTime() {
+        return createTime;
+    }
+
+    public void setCreateTime(Date createTime) {
+        this.createTime = createTime;
+    }
+
+    public Integer getUserId() {
+        return userId;
+    }
+
+    public void setUserId(Integer userId) {
+        this.userId = userId;
+    }
+
+    public Integer getStatus() {
+        return status;
+    }
+
+    public void setStatus(Integer status) {
+        this.status = status;
+    }
+
+    public CourseOrder() {
+    }
+
+    public CourseOrder(@NonNull CourseOrderVO orderVO){
+        this.id = orderVO.getId();
+        this.cost = orderVO.getCost();
+        this.courseId = orderVO.getCourseId();
+        this.courseName = orderVO.getCourseName();
+        this.createTime = orderVO.getCreateTime()==null ? new Date():orderVO.getCreateTime();
+        this.userId = orderVO.getUserId();
+        this.status = orderVO.getStatus();
+    }
+}

+ 123 - 0
src/main/java/cn/seecoder/courselearning/po/CourseWare.java

@@ -0,0 +1,123 @@
+package cn.seecoder.courselearning.po;
+
+import cn.seecoder.courselearning.vo.CourseWareVO;
+import lombok.NonNull;
+
+import java.util.Date;
+
+public class CourseWare {
+    private Integer id;
+
+    private Integer courseId;
+
+    private Integer number;
+
+    private String title;
+
+    private String fileName;
+
+    private String fileType;
+
+    private String fileSize;
+
+    private Boolean freeFlag;
+
+    private Boolean downloadFlag;
+
+    private Date uploadTime;
+
+    public Integer getId() {
+        return id;
+    }
+
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    public Integer getCourseId() {
+        return courseId;
+    }
+
+    public void setCourseId(Integer courseId) {
+        this.courseId = courseId;
+    }
+
+    public Integer getNumber() {
+        return number;
+    }
+
+    public void setNumber(Integer number) {
+        this.number = number;
+    }
+
+    public String getTitle() {
+        return title;
+    }
+
+    public void setTitle(String title) {
+        this.title = title == null ? null : title.trim();
+    }
+
+    public String getFileName() {
+        return fileName;
+    }
+
+    public void setFileName(String fileName) {
+        this.fileName = fileName == null ? null : fileName.trim();
+    }
+
+    public String getFileType() {
+        return fileType;
+    }
+
+    public void setFileType(String fileType) {
+        this.fileType = fileType == null ? null : fileType.trim();
+    }
+
+    public String getFileSize() {
+        return fileSize;
+    }
+
+    public void setFileSize(String fileSize) {
+        this.fileSize = fileSize == null ? null : fileSize.trim();
+    }
+
+    public Boolean getFreeFlag() {
+        return freeFlag;
+    }
+
+    public void setFreeFlag(Boolean freeFlag) {
+        this.freeFlag = freeFlag;
+    }
+
+    public Boolean getDownloadFlag() {
+        return downloadFlag;
+    }
+
+    public void setDownloadFlag(Boolean downloadFlag) {
+        this.downloadFlag = downloadFlag;
+    }
+
+    public Date getUploadTime() {
+        return uploadTime;
+    }
+
+    public void setUploadTime(Date uploadTime) {
+        this.uploadTime = uploadTime;
+    }
+
+    public CourseWare() {
+    }
+    
+    public CourseWare(@NonNull CourseWareVO courseWareVO){
+        courseId = courseWareVO.getCourseId();
+        number = courseWareVO.getNumber();
+        title = courseWareVO.getTitle();
+        fileName = courseWareVO.getFileName();
+        fileType = courseWareVO.getFileType();
+        fileSize = courseWareVO.getFileSize();
+        freeFlag = courseWareVO.getFreeFlag();
+        downloadFlag = courseWareVO.getDownloadFlag();
+        uploadTime = courseWareVO.getUploadTime();
+    }
+}

+ 56 - 0
src/main/java/cn/seecoder/courselearning/po/RechargeOrder.java

@@ -0,0 +1,56 @@
+package cn.seecoder.courselearning.po;
+
+import cn.seecoder.courselearning.vo.RechargeOrderVO;
+
+import java.util.Date;
+
+public class RechargeOrder {
+    private Integer orderId;
+
+    private Integer userId;
+
+    private Integer value;
+
+    private Date createTime;
+
+    public Integer getOrderId() {
+        return orderId;
+    }
+
+    public void setOrderId(Integer orderId) {
+        this.orderId = orderId;
+    }
+
+    public Integer getUserId() {
+        return userId;
+    }
+
+    public void setUserId(Integer userId) {
+        this.userId = userId;
+    }
+
+    public Integer getValue() {
+        return value;
+    }
+
+    public void setValue(Integer value) {
+        this.value = value;
+    }
+
+    public Date getCreateTime() {
+        return createTime;
+    }
+
+    public void setCreateTime(Date createTime) {
+        this.createTime = createTime;
+    }
+
+    public RechargeOrder() {
+    }
+
+    public RechargeOrder(RechargeOrderVO rechargeOrder) {
+        this.userId = rechargeOrder.getUserId();
+        this.value = rechargeOrder.getValue();
+        this.createTime = rechargeOrder.getCreateTime();
+    }
+}

+ 101 - 0
src/main/java/cn/seecoder/courselearning/po/User.java

@@ -0,0 +1,101 @@
+package cn.seecoder.courselearning.po;
+
+import cn.seecoder.courselearning.enums.UserRole;
+import cn.seecoder.courselearning.vo.UserVO;
+
+import java.util.Date;
+
+public class User {
+    private Integer id;
+
+    private String uname;
+
+    private String phone;
+
+    private String password;
+
+    private String picture;
+
+    private Integer balance;
+
+    private UserRole userRole;
+
+    private Date createTime;
+
+    public Integer getId() {
+        return id;
+    }
+
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    public String getUname() {
+        return uname;
+    }
+
+    public void setUname(String uname) {
+        this.uname = uname == null ? null : uname.trim();
+    }
+
+    public String getPhone() {
+        return phone;
+    }
+
+    public void setPhone(String phone) {
+        this.phone = phone == null ? null : phone.trim();
+    }
+
+    public String getPassword() {
+        return password;
+    }
+
+    public void setPassword(String password) {
+        this.password = password == null ? null : password.trim();
+    }
+
+    public String getPicture() {
+        return picture;
+    }
+
+    public void setPicture(String picture) {
+        this.picture = picture == null ? null : picture.trim();
+    }
+
+    public Integer getBalance() {
+        return balance;
+    }
+
+    public void setBalance(Integer balance) {
+        this.balance = balance;
+    }
+
+    public UserRole getUserRole() {
+        return userRole;
+    }
+
+    public void setUserRole(UserRole userRole) {
+        this.userRole = userRole;
+    }
+
+    public Date getCreateTime() {
+        return createTime;
+    }
+
+    public void setCreateTime(Date createTime) {
+        this.createTime = createTime;
+    }
+
+    public User() {
+    }
+
+    public User(UserVO userVO){
+        uname = userVO.getUname();
+        phone = userVO.getPhone();
+        password = userVO.getPassword();
+        picture = userVO.getPicture();
+        balance = userVO.getBalance();
+        userRole = userVO.getUserRole();
+        createTime = userVO.getCreateTime();
+    }
+}

+ 17 - 0
src/main/java/cn/seecoder/courselearning/service/CourseOrderService.java

@@ -0,0 +1,17 @@
+package cn.seecoder.courselearning.service;
+
+import cn.seecoder.courselearning.vo.CourseOrderVO;
+import cn.seecoder.courselearning.vo.ResultVO;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+
+public interface CourseOrderService {
+    // 创建订单
+    ResultVO<CourseOrderVO> insertCourseOrder(CourseOrderVO orderVO);
+    // 更新订单
+    ResultVO<CourseOrderVO> updateCourseOrder(Integer orderId, Integer orderStatus);
+    // 根据用户id获取该用户的所有订单
+    List<CourseOrderVO> getCourseOrders(Integer uid);
+}

+ 23 - 0
src/main/java/cn/seecoder/courselearning/service/CourseService.java

@@ -0,0 +1,23 @@
+package cn.seecoder.courselearning.service;
+
+import cn.seecoder.courselearning.vo.CourseVO;
+import cn.seecoder.courselearning.vo.ResultVO;
+import com.github.pagehelper.PageInfo;
+
+import java.util.List;
+
+
+public interface CourseService {
+    // 根据关键字,分页查询课程
+    PageInfo<CourseVO> getCourses(Integer currPage, Integer pageSize, Integer uid, String key);
+    // 根据分类,分页查询课程
+    PageInfo<CourseVO> getCoursesByType(Integer currPage, Integer pageSize, Integer uid, String type);
+    // 查询用户所有已购买的课程
+    List<CourseVO> getBoughtCourses(Integer uid);
+    // 查询教师所有可管理的课程
+    List<CourseVO> getManageableCourses(Integer uid);
+    // 查询单门课程
+    CourseVO getCourse(Integer courseId, Integer uid);
+    // 创建课程
+    ResultVO<CourseVO> createCourse(CourseVO courseVO);
+}

+ 16 - 0
src/main/java/cn/seecoder/courselearning/service/CourseWareService.java

@@ -0,0 +1,16 @@
+package cn.seecoder.courselearning.service;
+
+import cn.seecoder.courselearning.vo.CourseWareVO;
+import cn.seecoder.courselearning.vo.ResultVO;
+
+import java.util.List;
+
+
+public interface CourseWareService {
+    // 获取课件信息
+    List<CourseWareVO> getCourseWare(Integer uid, Integer courseId);
+    // 创建课件
+    ResultVO<CourseWareVO> createCourseWare(CourseWareVO courseWareVO);
+    // 更新课件
+    ResultVO<CourseWareVO> updateCourseWare(CourseWareVO courseWareVO);
+}

+ 9 - 0
src/main/java/cn/seecoder/courselearning/service/FileService.java

@@ -0,0 +1,9 @@
+package cn.seecoder.courselearning.service;
+
+import cn.seecoder.courselearning.vo.FileInfoVO;
+import cn.seecoder.courselearning.vo.ResultVO;
+import org.springframework.web.multipart.MultipartFile;
+
+public interface FileService {
+    ResultVO<FileInfoVO> uploadFile(MultipartFile file);
+}

+ 18 - 0
src/main/java/cn/seecoder/courselearning/service/UserService.java

@@ -0,0 +1,18 @@
+package cn.seecoder.courselearning.service;
+
+import cn.seecoder.courselearning.vo.RechargeOrderVO;
+import cn.seecoder.courselearning.vo.ResultVO;
+import cn.seecoder.courselearning.vo.UserVO;
+import org.springframework.stereotype.Service;
+
+
+public interface UserService {
+    // 用户注册
+    ResultVO<UserVO> userRegister(UserVO user);
+    // 用户登录验证
+    ResultVO<UserVO> userLogin(String phone, String password);
+    // 根据id查找用户
+    UserVO getUser(Integer uid);
+    // 账号充值
+    ResultVO<UserVO> rechargeAccount(RechargeOrderVO rechargeOrderVO);
+}

+ 79 - 0
src/main/java/cn/seecoder/courselearning/serviceimpl/CourseOrderServiceImpl.java

@@ -0,0 +1,79 @@
+package cn.seecoder.courselearning.serviceimpl;
+
+import cn.seecoder.courselearning.mapperservice.CourseOrderMapper;
+import cn.seecoder.courselearning.mapperservice.UserMapper;
+import cn.seecoder.courselearning.po.CourseOrder;
+import cn.seecoder.courselearning.po.User;
+import cn.seecoder.courselearning.service.CourseOrderService;
+import cn.seecoder.courselearning.util.Constant;
+import cn.seecoder.courselearning.vo.CourseOrderVO;
+import cn.seecoder.courselearning.vo.ResultVO;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.ArrayList;
+import java.util.List;
+
+@Service
+public class CourseOrderServiceImpl implements CourseOrderService {
+    @Resource
+    CourseOrderMapper orderMapper;
+    @Resource
+    UserMapper userMapper;
+
+    @Override
+    public ResultVO<CourseOrderVO> insertCourseOrder(CourseOrderVO orderVO) {
+        CourseOrder order = new CourseOrder(orderVO);
+        try{
+            Integer status = order.getStatus();
+            if(status.equals(Constant.ORDER_STATUS_UNPAID)){
+                // 当订单状态为未支付时,检查用户余额是否足够
+                User user = userMapper.selectByPrimaryKey(order.getUserId());
+                if(user.getBalance()>=orderVO.getCost()){
+                    userMapper.decreaseBalance(user.getId(), order.getCost());
+                    // 支付成功,将订单存入数据库
+                    order.setStatus(Constant.ORDER_STATUS_SUCCESS);
+                    orderMapper.insert(order);
+                }else {
+                    // 若用户余额不足,则不保存订单,返回失败信息
+                    return new ResultVO<>(Constant.REQUEST_FAIL, "用户余额不足");
+                }
+            }else if(status.equals(Constant.ORDER_STATUS_SUCCESS) || status.equals(Constant.ORDER_STATUS_WAIT)) {
+                // 若订单状态为已支付,则直接存入数据库
+                orderMapper.insert(order);
+                return new ResultVO<>(Constant.REQUEST_SUCCESS, "订单保存成功");
+            }
+        }catch (Exception e){
+            return new ResultVO<>(Constant.REQUEST_FAIL, e.toString());
+        }
+        return new ResultVO<>(Constant.REQUEST_SUCCESS, "操作成功", new CourseOrderVO(order));
+    }
+
+    @Override
+    public ResultVO<CourseOrderVO> updateCourseOrder(Integer orderId, Integer orderStatus) {
+        CourseOrder order = orderMapper.selectByPrimaryKey(orderId);
+        if(order == null) return new ResultVO<>(Constant.REQUEST_FAIL, "找不到当前订单!");
+        if((orderStatus.equals(Constant.ORDER_STATUS_SUCCESS)||orderStatus.equals(Constant.ORDER_STATUS_WAIT)) &&
+                order.getStatus().equals(Constant.ORDER_STATUS_UNPAID)){
+            // 当订单原始状态为待支付 并且此时为支付成功时,需扣除用户余额
+            User user = userMapper.selectByPrimaryKey(order.getUserId());
+            if(user.getBalance()>=order.getCost()){
+                userMapper.decreaseBalance(user.getId(), order.getCost());
+            }else
+                return new ResultVO<>(Constant.REQUEST_FAIL, "用户余额不足");
+        }
+        order.setStatus(orderStatus);
+        orderMapper.updateByPrimaryKey(order);
+        return new ResultVO<CourseOrderVO>(Constant.REQUEST_SUCCESS, "操作成功", new CourseOrderVO(order));
+    }
+
+    @Override
+    public List<CourseOrderVO> getCourseOrders(Integer uid) {
+        List<CourseOrderVO> ret = new ArrayList<>();
+        List<CourseOrder> orderList = orderMapper.selectByUserId(uid);
+        for(CourseOrder order: orderList){
+            ret.add(new CourseOrderVO(order));
+        }
+        return ret;
+    }
+}

+ 106 - 0
src/main/java/cn/seecoder/courselearning/serviceimpl/CourseServiceImpl.java

@@ -0,0 +1,106 @@
+package cn.seecoder.courselearning.serviceimpl;
+
+import cn.seecoder.courselearning.mapperservice.CourseMapper;
+import cn.seecoder.courselearning.mapperservice.CourseOrderMapper;
+import cn.seecoder.courselearning.po.Course;
+import cn.seecoder.courselearning.po.CourseOrder;
+import cn.seecoder.courselearning.service.CourseService;
+import cn.seecoder.courselearning.util.Constant;
+import cn.seecoder.courselearning.util.PageInfoUtil;
+import cn.seecoder.courselearning.vo.CourseVO;
+import cn.seecoder.courselearning.vo.ResultVO;
+import com.github.pagehelper.PageHelper;
+import com.github.pagehelper.PageInfo;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+@Service
+public class CourseServiceImpl implements CourseService {
+    @Resource
+    private CourseMapper courseMapper;
+    @Resource
+    private CourseOrderMapper orderMapper;
+
+    @Override
+    public PageInfo<CourseVO> getCourses(Integer currPage, Integer pageSize, Integer uid, String key) {
+        if(currPage==null || currPage<1) currPage=1;
+        PageHelper.startPage(currPage, pageSize);
+        PageInfo<Course> po = new PageInfo<>(courseMapper.queryAll(key));
+        return getCourseVOPageInfo(uid, po);
+    }
+
+    @Override
+    public PageInfo<CourseVO> getCoursesByType(Integer currPage, Integer pageSize, Integer uid, String type) {
+        if(currPage==null || currPage<1) currPage=1;
+        PageHelper.startPage(currPage, pageSize);
+        PageInfo<Course> po = new PageInfo<>(courseMapper.selectByType(type));
+        return getCourseVOPageInfo(uid, po);
+    }
+
+    @Override
+    public List<CourseVO> getBoughtCourses(Integer uid) {
+        List<CourseVO> ret = new ArrayList<>();
+        List<Course> courseList = courseMapper.selectByStudentId(uid);
+        for(Course course: courseList){
+            ret.add(new CourseVO(course, true, false));
+        }
+        return ret;
+    }
+
+    @Override
+    public List<CourseVO> getManageableCourses(Integer uid) {
+        List<CourseVO> ret = new ArrayList<>();
+        List<Course> courseList = courseMapper.selectByTeacherId(uid);
+        for(Course course: courseList){
+            ret.add(new CourseVO(course, false, true));
+        }
+        return ret;
+    }
+
+    @Override
+    public CourseVO getCourse(Integer courseId, Integer uid) {
+        Course course = courseMapper.selectByPrimaryKey(courseId);
+        boolean bought = false;
+        boolean manageable = false;
+        if(uid != null && uid > 0) {
+            CourseOrder order = orderMapper.queryMostRecentOrder(uid, courseId);
+            if(order != null)
+                bought = order.getStatus().equals(Constant.ORDER_STATUS_SUCCESS);
+            manageable = uid.equals(course.getTeacherId());
+        }
+        return new CourseVO(course, bought, manageable);
+    }
+
+    @Override
+    public ResultVO<CourseVO> createCourse(CourseVO courseVO) {
+        courseVO.setCreateTime(new Date());
+        for(Course course: courseMapper.selectByTeacherId(courseVO.getTeacherId())){
+            if (course.getName().equals(courseVO.getName()))
+                return new ResultVO<>(Constant.REQUEST_FAIL, "已存在同名课程!");
+        }
+        Course course = new Course(courseVO);
+        if(courseMapper.insert(course) > 0){
+            return new ResultVO<CourseVO>(Constant.REQUEST_SUCCESS, "课程创建成功。", new CourseVO(course, false, true));
+        }
+        return new ResultVO<>(Constant.REQUEST_FAIL, "服务器错误");
+    }
+
+    private PageInfo<CourseVO> getCourseVOPageInfo(Integer uid, PageInfo<Course> po) {
+        PageInfo<CourseVO> result = PageInfoUtil.convert(po, CourseVO.class);
+        if(uid != null && uid > 0){
+            List<CourseVO> voList = result.getList();
+            for(CourseVO vo: voList){
+                CourseOrder order = orderMapper.queryMostRecentOrder(uid, vo.getId());
+                if(order != null)
+                    vo.setBought(order.getStatus().equals(Constant.ORDER_STATUS_SUCCESS));
+                vo.setManageable(uid.equals(vo.getTeacherId()));
+            }
+        }
+        return result;
+    }
+
+}

+ 56 - 0
src/main/java/cn/seecoder/courselearning/serviceimpl/CourseWareServiceImpl.java

@@ -0,0 +1,56 @@
+package cn.seecoder.courselearning.serviceimpl;
+
+import cn.seecoder.courselearning.mapperservice.CourseOrderMapper;
+import cn.seecoder.courselearning.mapperservice.CourseWareMapper;
+import cn.seecoder.courselearning.po.CourseOrder;
+import cn.seecoder.courselearning.po.CourseWare;
+import cn.seecoder.courselearning.service.CourseWareService;
+import cn.seecoder.courselearning.util.Constant;
+import cn.seecoder.courselearning.vo.CourseWareVO;
+import cn.seecoder.courselearning.vo.ResultVO;
+import org.springframework.stereotype.Service;
+import org.springframework.util.StringUtils;
+
+import javax.annotation.Resource;
+import java.util.ArrayList;
+import java.util.List;
+
+@Service
+public class CourseWareServiceImpl implements CourseWareService {
+    @Resource
+    private CourseWareMapper courseWareMapper;
+    @Resource
+    private CourseOrderMapper courseOrderMapper;
+
+    @Override
+    public List<CourseWareVO> getCourseWare(Integer uid, Integer courseId) {
+        boolean bought = false;
+        if (uid != null && uid > 0){
+            CourseOrder order = courseOrderMapper.queryMostRecentOrder(uid, courseId);
+            if(order != null)
+                bought = order.getStatus().equals(Constant.ORDER_STATUS_SUCCESS);
+        }
+        List<CourseWare> tempList = courseWareMapper.selectByCourseId(courseId);
+        List<CourseWareVO> ret = new ArrayList<>();
+        for(CourseWare courseWare: tempList){
+            ret.add(new CourseWareVO(courseWare, bought));
+        }
+        return ret;
+    }
+
+    @Override
+    public ResultVO<CourseWareVO> createCourseWare(CourseWareVO courseWareVO) {
+        CourseWare courseWare = new CourseWare(courseWareVO);
+        if(courseWareMapper.insert(courseWare) > 0)
+            return new ResultVO<>(Constant.REQUEST_SUCCESS, "课件创建成功", new CourseWareVO(courseWare));
+        return new ResultVO<>(Constant.REQUEST_FAIL, "课件创建失败");
+    }
+
+    @Override
+    public ResultVO<CourseWareVO> updateCourseWare(CourseWareVO courseWareVO) {
+        CourseWare courseWare = new CourseWare(courseWareVO);
+        if(courseWareMapper.updateByPrimaryKey(courseWare) > 0)
+            return new ResultVO<>(Constant.REQUEST_SUCCESS, "课件更新成功", new CourseWareVO(courseWare));
+        return new ResultVO<>(Constant.REQUEST_FAIL, "课件更新失败");
+    }
+}

+ 36 - 0
src/main/java/cn/seecoder/courselearning/serviceimpl/FileServiceImpl.java

@@ -0,0 +1,36 @@
+package cn.seecoder.courselearning.serviceimpl;
+
+import cn.seecoder.courselearning.exception.MyException;
+import cn.seecoder.courselearning.service.FileService;
+import cn.seecoder.courselearning.util.Constant;
+import cn.seecoder.courselearning.util.FileHelper;
+import cn.seecoder.courselearning.vo.FileInfoVO;
+import cn.seecoder.courselearning.vo.ResultVO;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Service;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.io.IOException;
+
+@Service
+public class FileServiceImpl implements FileService {
+    private static final Logger logger = LoggerFactory.getLogger(FileService.class);
+
+    @Value("${web.file-upload-path}")
+    private String path;
+
+    @Override
+    public ResultVO<FileInfoVO> uploadFile(MultipartFile file) {
+        try {
+            FileInfoVO fileInfoVO = FileHelper.save(path, file);
+            return new ResultVO<>(Constant.REQUEST_SUCCESS, "文件上传成功", fileInfoVO);
+        } catch (MyException myException){
+            logger.error("用于存放上传文件的文件夹不存在或创建失败,请检查路径是否有效", myException);
+        } catch (IOException ioException){
+            logger.error("文件复制时出错", ioException);
+        }
+        return new ResultVO<>(-1, "服务器错误,请联系网站管理员。");
+    }
+}

+ 104 - 0
src/main/java/cn/seecoder/courselearning/serviceimpl/UserServiceImpl.java

@@ -0,0 +1,104 @@
+package cn.seecoder.courselearning.serviceimpl;
+
+import cn.seecoder.courselearning.mapperservice.RechargeOrderMapper;
+import cn.seecoder.courselearning.mapperservice.UserMapper;
+import cn.seecoder.courselearning.po.RechargeOrder;
+import cn.seecoder.courselearning.po.User;
+import cn.seecoder.courselearning.service.UserService;
+import cn.seecoder.courselearning.util.Constant;
+import cn.seecoder.courselearning.vo.RechargeOrderVO;
+import cn.seecoder.courselearning.vo.ResultVO;
+import cn.seecoder.courselearning.vo.UserVO;
+import org.springframework.stereotype.Service;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.util.StringUtils;
+
+import javax.annotation.Resource;
+import java.util.Date;
+
+
+@Service
+public class UserServiceImpl implements UserService {
+    private static final Logger logger = LoggerFactory.getLogger(UserService.class);
+
+    @Resource
+    UserMapper userMapper;
+    @Resource
+    RechargeOrderMapper rechargeOrderMapper;
+
+    @Override
+    public ResultVO<UserVO> userRegister(UserVO vo) {
+        String phone = vo.getPhone();
+        String uname = vo.getUname();
+        String password = vo.getPassword();
+        if(userMapper.selectByPhone(phone) == null){
+            if(StringUtils.hasText(uname) && StringUtils.hasText(password)){
+                vo.setCreateTime(new Date());
+                vo.setBalance(0);
+                User user = new User(vo);
+                userMapper.insert(user);
+                System.out.println(new UserVO(user));
+                return new ResultVO<>(Constant.REQUEST_SUCCESS, "账号注册成功!", new UserVO(user));
+            }else{
+                return new ResultVO<>(Constant.REQUEST_FAIL, "用户名或密码不得为空!");
+            }
+        }
+        return new ResultVO<>(Constant.REQUEST_FAIL, "这个手机号已经注册过账号。");
+    }
+
+    @Override
+    public ResultVO<UserVO> userLogin(String phone, String password) {
+        User user = userMapper.selectByPhone(phone);
+        if(user == null){
+            return new ResultVO<>(Constant.REQUEST_FAIL, "这个手机号尚未注册过账号。");
+        }else{
+            if(!user.getPassword().equals(password))
+                return new ResultVO<>(Constant.REQUEST_FAIL, "账号或密码错误!");
+        }
+        return new ResultVO<>(Constant.REQUEST_SUCCESS, "账号登陆成功!", new UserVO(userMapper.selectByPhone(phone)));
+    }
+
+    @Override
+    public UserVO getUser(Integer uid) {
+        User userFromDB = userMapper.selectByPrimaryKey(uid);
+        if(userFromDB == null){
+            return new UserVO();
+        }else{
+            return new UserVO(userFromDB);
+        }
+    }
+
+    @Override
+    public ResultVO<UserVO> rechargeAccount(RechargeOrderVO rechargeOrderVO) {
+        ResultVO<UserVO> ret = new ResultVO<>();
+        Integer userId = rechargeOrderVO.getUserId();
+        if(userId == null || userId <= 0){
+            ret.setCode(Constant.REQUEST_FAIL);
+            ret.setMsg("userId 参数无效");
+        }else{
+            User user = userMapper.selectByPrimaryKey(userId);
+            if(user != null){
+                try{
+                    rechargeOrderVO.setCreateTime(new Date());
+                    Integer value = rechargeOrderVO.getValue();
+                    // 更新用户余额
+                    userMapper.increaseBalance(userId, value);
+                    if(rechargeOrderMapper.insert(new RechargeOrder(rechargeOrderVO)) > 0){
+                        ret.setCode(Constant.REQUEST_SUCCESS);
+                        ret.setMsg("充值成功");
+                        ret.setData(new UserVO(userMapper.selectByPrimaryKey(rechargeOrderVO.getUserId())));
+                    }else{
+                        ret.setCode(Constant.REQUEST_FAIL);
+                        ret.setMsg("系统错误");
+                    }
+                }catch (Exception e){
+                    ret.setCode(Constant.REQUEST_FAIL);
+                    ret.setMsg("服务器数据库系统出错,请咨询系统管理员");
+                    logger.error("用户充值账号时出错", e);
+                }
+            }
+        }
+        return ret;
+    }
+}

+ 23 - 0
src/main/java/cn/seecoder/courselearning/util/Constant.java

@@ -0,0 +1,23 @@
+package cn.seecoder.courselearning.util;
+
+/**
+ * 定义一些常量
+ */
+public class Constant {
+    // 一个展示课程的页面内包含的课程数量
+    public static final Integer COURSE_PAGE_SIZE = 3;
+    // 一个展示课件的页面内包含的课件数量
+    public static final Integer COURSE_WARE_PAGE_SIZE = 10;
+    // 请求操作成功返回码
+    public static final Integer REQUEST_SUCCESS = 1;
+    // 请求操作失败返回码
+    public static final Integer REQUEST_FAIL = 0;
+    // 订单已完成交易(支付并已发货)的状态码
+    public static final Integer ORDER_STATUS_SUCCESS = 1;
+    // 订单尚未支付的状态码
+    public static final Integer ORDER_STATUS_UNPAID = 2;
+    // 订单已支付等待发货的状态码
+    public static final Integer ORDER_STATUS_WAIT = 3;
+    // 订单已取消的状态码
+    public static final Integer ORDER_STATUS_CANCEL = 4;
+}

+ 19 - 0
src/main/java/cn/seecoder/courselearning/util/DateUtil.java

@@ -0,0 +1,19 @@
+package cn.seecoder.courselearning.util;
+
+import java.text.DateFormat;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.Locale;
+
+public class DateUtil {
+    private final static DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.CHINA);
+
+    public static String getDateString(Date date){
+        return df.format(date);
+    }
+
+    public static Date toDate(String dateString) throws ParseException {
+        return df.parse(dateString);
+    }
+}

+ 73 - 0
src/main/java/cn/seecoder/courselearning/util/FileHelper.java

@@ -0,0 +1,73 @@
+package cn.seecoder.courselearning.util;
+import cn.seecoder.courselearning.enums.ExceptionType;
+import cn.seecoder.courselearning.exception.MyException;
+import cn.seecoder.courselearning.vo.FileInfoVO;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.util.FileCopyUtils;
+import org.springframework.util.StringUtils;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.util.UUID;
+
+@Slf4j
+public class FileHelper {
+    /**
+     * 保存文件
+     * @param directoryPath 目录路径
+     * @param file 文件
+     * @return 保存成功后的文件名
+     */
+    public static FileInfoVO save(String directoryPath, MultipartFile file) throws IOException{
+        if(!checkDirectoryPath(directoryPath)){
+            throw MyException.of(ExceptionType.SERVER_ERROR, "服务器端错误,用于存放上传文件的文件夹不存在或创建失败!");
+        }
+        // 原文件名
+        String originalName = file.getOriginalFilename();
+        String newName;
+        String type = "unknown";
+        String size = String.format("%.2f", (file.getSize() * 1.0 / 1024 / 1024)) + " MB";
+        if(originalName!=null && originalName.lastIndexOf(".")!=-1){
+            // 取扩展名
+            String ext = originalName.substring(originalName.lastIndexOf("."));
+            type = originalName.substring(originalName.lastIndexOf(".")+1);
+            // 构造新文件名
+            newName = UUID.randomUUID() + ext;
+        }else
+            newName = UUID.randomUUID().toString();
+        // 根据目标地址构造文件输出流
+        FileOutputStream fileOutputStream = new FileOutputStream(directoryPath + newName);
+        // 将文件复制到映射的地址
+        FileCopyUtils.copy(file.getInputStream(),fileOutputStream);
+
+        return new FileInfoVO(newName, type, size);
+    }
+
+    public static boolean delete(String directoryPath, String fileName){
+        if(StringUtils.hasText(fileName)){
+            File file = new File(directoryPath + fileName);
+            if(file.exists()) {
+                // 当且仅当文件被成功删除后返回true
+                return file.delete();
+            }
+        }
+        return false;
+    }
+
+    /**
+     * 检查目录路径是否有效,若当前路径对应的目录不存在,则尝试创建目录
+     * @param directoryPath 目录路径
+     * @return 若目录不存在且创建失败则返回false,否则返回true
+     */
+    private static boolean checkDirectoryPath(String directoryPath) {
+        File dir = new File(directoryPath);
+        // 如果文件夹不存在则创建
+        if(!dir.exists() && !dir.isDirectory()){
+            log.debug("用于存放上传文件的文件夹不存在,正在尝试创建..");
+            return dir.mkdirs();
+        }
+        return true;
+    }
+}

+ 52 - 0
src/main/java/cn/seecoder/courselearning/util/MyBatisGeneratorUtil.java

@@ -0,0 +1,52 @@
+package cn.seecoder.courselearning.util;
+
+import org.mybatis.generator.api.MyBatisGenerator;
+import org.mybatis.generator.config.Configuration;
+import org.mybatis.generator.config.xml.ConfigurationParser;
+import org.mybatis.generator.exception.InvalidConfigurationException;
+import org.mybatis.generator.exception.XMLParserException;
+import org.mybatis.generator.internal.DefaultShellCallback;
+
+import java.io.File;
+import java.io.IOException;
+import java.sql.SQLException;
+import java.util.ArrayList;
+import java.util.List;
+
+// 用于生成自动生成MyBatis相关文件的工具类
+public class MyBatisGeneratorUtil {
+	public static void main(String[] args) {
+		List<String> warnings = new ArrayList<String>();
+		boolean overwrite = true;
+		String genCfg = "/generatorConfig.xml";
+		File configFile = new File(cn.seecoder.courselearning.util.MyBatisGeneratorUtil.class.getResource(genCfg).getFile());
+		ConfigurationParser cp = new ConfigurationParser(warnings);
+		Configuration config = null;
+		try {
+			config = cp.parseConfiguration(configFile);
+		} catch (IOException e) {
+			e.printStackTrace();
+		} catch (XMLParserException e) {
+			e.printStackTrace();
+		}
+		DefaultShellCallback callback = new DefaultShellCallback(overwrite);
+		MyBatisGenerator myBatisGenerator = null;
+		try {
+			myBatisGenerator = new MyBatisGenerator(config, callback, warnings);
+		} catch (InvalidConfigurationException e) {
+			e.printStackTrace();
+		}
+		try {
+			myBatisGenerator.generate(null);
+		} catch (SQLException e) {
+			e.printStackTrace();
+		} catch (IOException e) {
+			e.printStackTrace();
+		} catch (InterruptedException e) {
+			e.printStackTrace();
+		}
+	}
+
+
+
+}

+ 29 - 0
src/main/java/cn/seecoder/courselearning/util/PageInfoUtil.java

@@ -0,0 +1,29 @@
+package cn.seecoder.courselearning.util;
+
+import com.github.pagehelper.Page;
+import com.github.pagehelper.PageInfo;
+import org.springframework.beans.BeanUtils;
+
+public class PageInfoUtil {
+    /**
+     * 将PageInfo对象泛型中的PO对象转化为VO对象后返回
+     * @param <P> PO类型
+     * @param <V> VO类型
+     */
+    public static <P, V> PageInfo<V> convert(PageInfo<P> pageInfoPO, Class<V> vClass) {
+        // 创建Page对象,实际上是一个ArrayList类型的集合
+        Page<V> page = new Page<>(pageInfoPO.getPageNum(), pageInfoPO.getPageSize());
+        page.setTotal(pageInfoPO.getTotal());
+        for (P p : pageInfoPO.getList()) {
+            V v = null;
+            try {
+                v = vClass.newInstance();
+            } catch (InstantiationException | IllegalAccessException e) {
+                e.printStackTrace();
+            }
+            BeanUtils.copyProperties(p, v);
+            page.add(v);
+        }
+        return new PageInfo<>(page);
+    }
+}

+ 37 - 0
src/main/java/cn/seecoder/courselearning/vo/CourseOrderVO.java

@@ -0,0 +1,37 @@
+package cn.seecoder.courselearning.vo;
+
+import cn.seecoder.courselearning.po.CourseOrder;
+import lombok.Data;
+import lombok.NonNull;
+
+import java.util.Date;
+
+@Data
+public class CourseOrderVO {
+    private Integer id;
+
+    private Integer cost;
+
+    private Integer courseId;
+
+    private String courseName;
+
+    private Date createTime;
+
+    private Integer userId;
+
+    private Integer status;
+
+    public CourseOrderVO() {
+    }
+
+    public CourseOrderVO(@NonNull CourseOrder order) {
+        id = order.getId();
+        cost = order.getCost();
+        courseId = order.getCourseId();
+        courseName = order.getCourseName();
+        createTime = order.getCreateTime();
+        userId = order.getUserId();
+        status = order.getStatus();
+    }
+}

+ 70 - 0
src/main/java/cn/seecoder/courselearning/vo/CourseVO.java

@@ -0,0 +1,70 @@
+package cn.seecoder.courselearning.vo;
+
+import cn.seecoder.courselearning.po.Course;
+import lombok.Data;
+import lombok.NonNull;
+
+import java.util.Date;
+
+@Data
+public class CourseVO {
+    private Integer id;
+
+    private String name;
+
+    private String type;
+
+    private String intro;
+
+    private String picture;
+
+    private String school;
+
+    private Date createTime;
+
+    private Integer cost;
+
+    private Integer teacherId;
+
+    private String teacherName;
+
+    // 标记当前用户(学生)是否已购买解锁
+    private boolean bought;
+
+    // 标记当前用户(老师)是否有权限管理课程
+    private boolean manageable;
+
+    public CourseVO() {
+        bought = false;
+    }
+
+    public CourseVO(@NonNull Course course){
+        id = course.getId();
+        name = course.getName();
+        type = course.getType();
+        intro = course.getIntro();
+        picture = course.getPicture();
+        school = course.getSchool();
+        createTime = course.getCreateTime();
+        cost = course.getCost();
+        teacherId = course.getTeacherId();
+        teacherName = course.getTeacherName();
+        bought = false;
+        manageable = false;
+    }
+
+    public CourseVO(@NonNull Course course, @NonNull boolean bought, @NonNull boolean manageable){
+        id = course.getId();
+        name = course.getName();
+        type = course.getType();
+        intro = course.getIntro();
+        picture = course.getPicture();
+        school = course.getSchool();
+        createTime = course.getCreateTime();
+        cost = course.getCost();
+        teacherId = course.getTeacherId();
+        teacherName = course.getTeacherName();
+        this.bought = bought;
+        this.manageable = manageable;
+    }
+}

+ 63 - 0
src/main/java/cn/seecoder/courselearning/vo/CourseWareVO.java

@@ -0,0 +1,63 @@
+package cn.seecoder.courselearning.vo;
+
+import cn.seecoder.courselearning.po.CourseWare;
+import lombok.Data;
+import lombok.NonNull;
+
+import java.util.Date;
+
+@Data
+public class CourseWareVO {
+    private Integer id;
+
+    private Integer courseId;
+
+    private Integer number;
+
+    private String title;
+
+    private String fileName;
+
+    private String fileType;
+
+    private String fileSize;
+
+    private Boolean freeFlag;
+
+    private Boolean downloadFlag;
+
+    private Boolean availableFlag;
+
+    private Date uploadTime;
+
+    public CourseWareVO(){
+    }
+
+    public CourseWareVO(@NonNull CourseWare courseWare) {
+        id = courseWare.getId();
+        courseId = courseWare.getCourseId();
+        number = courseWare.getNumber();
+        title = courseWare.getTitle();
+        fileName = courseWare.getFileName();
+        fileType = courseWare.getFileType();
+        fileSize = courseWare.getFileSize();
+        freeFlag = courseWare.getFreeFlag();
+        downloadFlag = courseWare.getDownloadFlag();
+        availableFlag = freeFlag;
+        uploadTime = courseWare.getUploadTime();
+    }
+
+    public CourseWareVO(@NonNull CourseWare courseWare, @NonNull boolean isBought) {
+        id = courseWare.getId();
+        courseId = courseWare.getCourseId();
+        number = courseWare.getNumber();
+        title = courseWare.getTitle();
+        fileName = courseWare.getFileName();
+        fileType = courseWare.getFileType();
+        fileSize = courseWare.getFileSize();
+        freeFlag = courseWare.getFreeFlag();
+        downloadFlag = courseWare.getDownloadFlag();
+        availableFlag = isBought?true:freeFlag;
+        uploadTime = courseWare.getUploadTime();
+    }
+}

+ 16 - 0
src/main/java/cn/seecoder/courselearning/vo/FileInfoVO.java

@@ -0,0 +1,16 @@
+package cn.seecoder.courselearning.vo;
+
+import lombok.Data;
+
+@Data
+public class FileInfoVO {
+    private String name;
+    private String type;
+    private String size;
+
+    public FileInfoVO(String name, String type, String size) {
+        this.name = name;
+        this.type = type;
+        this.size = size;
+    }
+}

+ 27 - 0
src/main/java/cn/seecoder/courselearning/vo/RechargeOrderVO.java

@@ -0,0 +1,27 @@
+package cn.seecoder.courselearning.vo;
+
+import cn.seecoder.courselearning.po.RechargeOrder;
+import lombok.Data;
+
+import java.util.Date;
+
+@Data
+public class RechargeOrderVO {
+    private Integer orderId;
+
+    private Integer userId;
+
+    private Integer value;
+
+    private Date createTime;
+
+    public RechargeOrderVO() {
+    }
+
+    public RechargeOrderVO(RechargeOrder rechargeOrder) {
+        this.orderId = rechargeOrder.getOrderId();
+        this.userId = rechargeOrder.getUserId();
+        this.value = rechargeOrder.getValue();
+        this.createTime = rechargeOrder.getCreateTime();
+    }
+}

+ 29 - 0
src/main/java/cn/seecoder/courselearning/vo/ResultVO.java

@@ -0,0 +1,29 @@
+package cn.seecoder.courselearning.vo;
+
+import lombok.Data;
+import lombok.NonNull;
+
+@Data
+public class ResultVO<T> {
+
+    private Integer code;
+
+    private String msg;
+
+    private T data;
+
+    public ResultVO(){
+
+    }
+
+    public ResultVO(Integer code, String msg){
+        this.code = code;
+        this.msg = msg;
+    }
+
+    public ResultVO(Integer code, String msg, @NonNull T data) {
+        this.code = code;
+        this.msg = msg;
+        this.data = data;
+    }
+}

+ 9 - 0
src/main/java/cn/seecoder/courselearning/vo/UserFormVO.java

@@ -0,0 +1,9 @@
+package cn.seecoder.courselearning.vo;
+
+import lombok.Data;
+
+@Data
+public class UserFormVO {
+    private String phone;
+    private String password;
+}

+ 40 - 0
src/main/java/cn/seecoder/courselearning/vo/UserVO.java

@@ -0,0 +1,40 @@
+package cn.seecoder.courselearning.vo;
+
+import cn.seecoder.courselearning.enums.UserRole;
+import cn.seecoder.courselearning.po.User;
+import lombok.Data;
+import lombok.NonNull;
+
+import java.util.Date;
+
+@Data
+public class UserVO {
+    private Integer id;
+
+    private String uname;
+
+    private String phone;
+
+    private String password;
+
+    private String picture;
+
+    private Integer balance;
+
+    private UserRole userRole;
+
+    private Date createTime;
+
+    public UserVO() {
+    }
+
+    public UserVO(@NonNull User user) {
+        id = user.getId();
+        uname = user.getUname();
+        phone = user.getPhone();
+        picture = user.getPicture();
+        balance = user.getBalance();
+        userRole = user.getUserRole();
+        createTime = user.getCreateTime();
+    }
+}

+ 31 - 0
src/main/resources/application.yml

@@ -0,0 +1,31 @@
+server:
+  port: 8081
+
+spring:
+  datasource:
+    url: jdbc:mysql://localhost:3306/courselearning?setUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8&allowPublicKeyRetrieval=true
+    driver-class-name: com.mysql.cj.jdbc.Driver
+    username: root
+    password: 123456
+  servlet:
+    multipart:
+      max-file-size: 200MB #设置上传文件大小不得超过200MB
+      max-request-size: 210MB #设置一次请求的数据量不得超过200MB
+      enabled: true
+#  web:
+#    resources:
+#      static-locations: classpath:/static/
+
+# 设置日志输出
+logging:
+  level:
+    #cn.seecoder.courselearning.mapperservice: DEBUG
+    cn.seecoder.courselearning.service: DEBUG
+#  file:
+#    path: D:/courselearning/
+
+
+# 自定义标签 ${web.file-upload-path} 用于存储向服务器上传的文件
+web:
+  file-upload-path: D:/courselearning/upload/
+

+ 48 - 0
src/main/resources/generatorConfig.xml

@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+  <!DOCTYPE generatorConfiguration
+    PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
+    "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
+  <generatorConfiguration>
+
+	 <context id="MysqlContext" targetRuntime="MyBatis3Simple" defaultModelType="flat">
+        
+     
+        <property name="beginningDelimiter" value="`"/>
+        <property name="endingDelimiter" value="`"/>
+
+         <!-- suppressDate是去掉生成日期那行注释,suppressAllComments是去掉所有的注解 -->
+        <commentGenerator>
+	        <property name="suppressDate" value="true"/>
+	        <property name="suppressAllComments" value="true" />
+    	</commentGenerator>
+  
+        <jdbcConnection driverClass="com.mysql.cj.jdbc.Driver"
+                        connectionURL="jdbc:mysql://localhost:3306/courselearning?useUnicode=true&amp;characterEncoding=UTF-8&amp;userSSL=false&amp;serverTimezone=GMT%2B8"
+                        userId="root"
+                        password="123456">
+        </jdbcConnection>
+
+         <!--生成model类的存放位置 -->
+         <javaModelGenerator targetPackage="cn.seecoder.courselearning.po" targetProject="src/main/java">
+             <property name="enableSubPackages" value="true"/>
+             <property name="trimStrings" value="true"/>
+         </javaModelGenerator>
+        
+		 <!-- 生成映射文件的存放位置 -->
+         <sqlMapGenerator targetPackage="mapper" targetProject="src/main/resources">
+             <property name="enableSubPackages" value="true"/>
+         </sqlMapGenerator>
+      
+	     <!-- 生成Dao类的存放位置-->
+         <javaClientGenerator type="XMLMAPPER" targetPackage="cn.seecoder.courselearning.mapperservice" targetProject="src/main/java">
+             <property name="enableSubPackages" value="true"/>
+         </javaClientGenerator>
+         
+		 <!-- 生成对应的表及类名 -->
+<!--         <table tableName="course" domainObjectName="Course" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"></table>-->
+<!--         <table tableName="course_ware" domainObjectName="CourseWare" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"></table>-->
+<!--         <table tableName="user_info" domainObjectName="User" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"></table>-->
+         <table tableName="recharge_order" domainObjectName="RechargeOrder" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"></table>
+<!--         <table tableName="course_order" domainObjectName="CourseOrder" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"></table>-->
+     </context>
+ </generatorConfiguration>

+ 88 - 0
src/main/resources/mapper/CourseMapper.xml

@@ -0,0 +1,88 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="cn.seecoder.courselearning.mapperservice.CourseMapper">
+  <resultMap id="BaseResultMap" type="cn.seecoder.courselearning.po.Course">
+    <id column="id" jdbcType="INTEGER" property="id" />
+    <result column="name" jdbcType="VARCHAR" property="name" />
+    <result column="type" jdbcType="VARCHAR" property="type" />
+    <result column="intro" jdbcType="VARCHAR" property="intro" />
+    <result column="picture" jdbcType="VARCHAR" property="picture" />
+    <result column="school" jdbcType="VARCHAR" property="school" />
+    <result column="create_time" jdbcType="TIMESTAMP" property="createTime" />
+    <result column="delete_time" jdbcType="TIMESTAMP" property="deleteTime" />
+    <result column="cost" jdbcType="INTEGER" property="cost" />
+    <result column="teacher_id" jdbcType="INTEGER" property="teacherId" />
+    <result column="teacher_name" jdbcType="VARCHAR" property="teacherName" />
+  </resultMap>
+  <delete id="deleteByPrimaryKey" parameterType="java.lang.Integer">
+    delete from course
+    where id = #{id,jdbcType=INTEGER}
+  </delete>
+  <insert id="insert" parameterType="cn.seecoder.courselearning.po.Course" useGeneratedKeys="true" keyProperty="id">
+    insert into course (id, name, type, 
+      intro, picture, school, 
+      create_time, delete_time, cost, 
+      teacher_id, teacher_name)
+    values (#{id,jdbcType=INTEGER}, #{name,jdbcType=VARCHAR}, #{type,jdbcType=VARCHAR}, 
+      #{intro,jdbcType=VARCHAR}, #{picture,jdbcType=VARCHAR}, #{school,jdbcType=VARCHAR}, 
+      #{createTime,jdbcType=TIMESTAMP}, #{deleteTime,jdbcType=TIMESTAMP}, #{cost,jdbcType=INTEGER}, 
+      #{teacherId,jdbcType=INTEGER}, #{teacherName,jdbcType=VARCHAR})
+  </insert>
+  <update id="updateByPrimaryKey" parameterType="cn.seecoder.courselearning.po.Course">
+    update course
+    set name = #{name,jdbcType=VARCHAR},
+      type = #{type,jdbcType=VARCHAR},
+      intro = #{intro,jdbcType=VARCHAR},
+      picture = #{picture,jdbcType=VARCHAR},
+      school = #{school,jdbcType=VARCHAR},
+      create_time = #{createTime,jdbcType=TIMESTAMP},
+      delete_time = #{deleteTime,jdbcType=TIMESTAMP},
+      cost = #{cost,jdbcType=INTEGER},
+      teacher_id = #{teacherId,jdbcType=INTEGER},
+      teacher_name = #{teacherName,jdbcType=VARCHAR}
+    where id = #{id,jdbcType=INTEGER}
+  </update>
+  <select id="selectByPrimaryKey" parameterType="java.lang.Integer" resultMap="BaseResultMap">
+    select id, name, type, intro, picture, school, create_time, delete_time, cost, teacher_id, 
+    teacher_name
+    from course
+    where id = #{id,jdbcType=INTEGER}
+  </select>
+  <select id="selectAll" resultMap="BaseResultMap">
+    select id, name, type, intro, picture, school, create_time, delete_time, cost, teacher_id, teacher_name
+    from course
+  </select>
+  <select id="selectByType" parameterType="java.lang.String" resultMap="BaseResultMap">
+    select id, name, type, intro, picture, school, create_time, delete_time, cost, teacher_id, teacher_name
+    from course
+    where type = #{type,jdbcType=VARCHAR}
+  </select>
+  <select id="queryAll" parameterType="java.lang.String" resultMap="BaseResultMap">
+    select id, name, type, intro, picture, school, create_time, delete_time, cost, teacher_id, teacher_name
+    from course
+    <where>
+      <if test="name!=null and name!=''">
+        or name like concat('%',#{key},'%')
+      </if>
+      <if test="intro!=null and type!=''">
+        or intro like concat('%',#{key},'%')
+      </if>
+      <if test="school!=null and school!=''">
+        or school like concat('%',#{key},'%')
+      </if>
+    </where>
+    order by create_time asc
+  </select>
+  <select id="selectByTeacherId" parameterType="java.lang.Integer" resultMap="BaseResultMap">
+    select c.id, name, type, intro, picture, school, create_time, delete_time, cost, teacher_id, teacher_name
+    from course c
+    where teacher_id = #{userId}
+  </select>
+  <select id="selectByStudentId" parameterType="java.lang.Integer" resultMap="BaseResultMap">
+    select c.id, name, type, intro, picture, school, create_time, delete_time, cost, teacher_id, teacher_name
+    from course c
+    where exists (
+        select o.id from course_order o where o.course_id = c.id and o.user_id = #{userId}
+    )
+  </select>
+</mapper>

+ 55 - 0
src/main/resources/mapper/CourseOrderMapper.xml

@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="cn.seecoder.courselearning.mapperservice.CourseOrderMapper">
+  <resultMap id="BaseResultMap" type="cn.seecoder.courselearning.po.CourseOrder">
+    <id column="id" jdbcType="INTEGER" property="id" />
+    <result column="cost" jdbcType="INTEGER" property="cost" />
+    <result column="course_id" jdbcType="INTEGER" property="courseId" />
+    <result column="course_name" jdbcType="VARCHAR" property="courseName" />
+    <result column="create_time" jdbcType="TIMESTAMP" property="createTime" />
+    <result column="user_id" jdbcType="INTEGER" property="userId" />
+    <result column="status" jdbcType="INTEGER" property="status" />
+  </resultMap>
+  <delete id="deleteByPrimaryKey" parameterType="java.lang.Integer">
+    delete from course_order
+    where id = #{id,jdbcType=INTEGER}
+  </delete>
+  <insert id="insert" parameterType="cn.seecoder.courselearning.po.CourseOrder" useGeneratedKeys="true" keyProperty="id">
+    insert into course_order (id, cost, course_id, 
+      course_name, create_time, user_id, 
+      status)
+    values (#{id,jdbcType=INTEGER}, #{cost,jdbcType=INTEGER}, #{courseId,jdbcType=INTEGER}, 
+      #{courseName,jdbcType=VARCHAR}, #{createTime,jdbcType=TIMESTAMP}, #{userId,jdbcType=INTEGER}, 
+      #{status,jdbcType=INTEGER})
+  </insert>
+  <update id="updateByPrimaryKey" parameterType="cn.seecoder.courselearning.po.CourseOrder">
+    update course_order
+    set cost = #{cost,jdbcType=INTEGER},
+      course_id = #{courseId,jdbcType=INTEGER},
+      course_name = #{courseName,jdbcType=VARCHAR},
+      create_time = #{createTime,jdbcType=TIMESTAMP},
+      user_id = #{userId,jdbcType=INTEGER},
+      status = #{status,jdbcType=INTEGER}
+    where id = #{id,jdbcType=INTEGER}
+  </update>
+  <select id="selectByPrimaryKey" parameterType="java.lang.Integer" resultMap="BaseResultMap">
+    select id, cost, course_id, course_name, create_time, user_id, status
+    from course_order
+    where id = #{id,jdbcType=INTEGER}
+  </select>
+  <select id="selectAll" resultMap="BaseResultMap">
+    select id, cost, course_id, course_name, create_time, user_id, status
+    from course_order
+  </select>
+  <select id="selectByUserId" parameterType="java.lang.Integer" resultMap="BaseResultMap">
+    select id, cost, course_id, course_name, create_time, user_id, status
+    from course_order
+    where user_id=#{userId}
+  </select>
+  <select id="queryMostRecentOrder" parameterType="java.lang.Integer" resultMap="BaseResultMap">
+    select id, cost, course_id, course_name, create_time, user_id, status
+    from course_order
+    where user_id=#{userId} and course_id=#{courseId}
+    order by create_time desc limit 1
+  </select>
+</mapper>

+ 60 - 0
src/main/resources/mapper/CourseWareMapper.xml

@@ -0,0 +1,60 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="cn.seecoder.courselearning.mapperservice.CourseWareMapper">
+  <resultMap id="BaseResultMap" type="cn.seecoder.courselearning.po.CourseWare">
+    <id column="id" jdbcType="INTEGER" property="id" />
+    <result column="course_id" jdbcType="INTEGER" property="courseId" />
+    <result column="number" jdbcType="INTEGER" property="number" />
+    <result column="title" jdbcType="VARCHAR" property="title" />
+    <result column="file_name" jdbcType="VARCHAR" property="fileName" />
+    <result column="file_type" jdbcType="VARCHAR" property="fileType" />
+    <result column="file_size" jdbcType="VARCHAR" property="fileSize" />
+    <result column="free_flag" jdbcType="BIT" property="freeFlag" />
+    <result column="download_flag" jdbcType="BIT" property="downloadFlag" />
+    <result column="upload_time" jdbcType="TIMESTAMP" property="uploadTime" />
+  </resultMap>
+  <delete id="deleteByPrimaryKey" parameterType="java.lang.Integer">
+    delete from course_ware
+    where id = #{id,jdbcType=INTEGER}
+  </delete>
+  <insert id="insert" parameterType="cn.seecoder.courselearning.po.CourseWare" useGeneratedKeys="true" keyProperty="id">
+    insert into course_ware (id, course_id, number, 
+      title, file_name, file_type, 
+      file_size, free_flag, download_flag, 
+      upload_time)
+    values (#{id,jdbcType=INTEGER}, #{courseId,jdbcType=INTEGER}, #{number,jdbcType=INTEGER}, 
+      #{title,jdbcType=VARCHAR}, #{fileName,jdbcType=VARCHAR}, #{fileType,jdbcType=VARCHAR}, 
+      #{fileSize,jdbcType=VARCHAR}, #{freeFlag,jdbcType=BIT}, #{downloadFlag,jdbcType=BIT}, 
+      #{uploadTime,jdbcType=TIMESTAMP})
+  </insert>
+  <update id="updateByPrimaryKey" parameterType="cn.seecoder.courselearning.po.CourseWare">
+    update course_ware
+    set course_id = #{courseId,jdbcType=INTEGER},
+      number = #{number,jdbcType=INTEGER},
+      title = #{title,jdbcType=VARCHAR},
+      file_name = #{fileName,jdbcType=VARCHAR},
+      file_type = #{fileType,jdbcType=VARCHAR},
+      file_size = #{fileSize,jdbcType=VARCHAR},
+      free_flag = #{freeFlag,jdbcType=BIT},
+      download_flag = #{downloadFlag,jdbcType=BIT},
+      upload_time = #{uploadTime,jdbcType=TIMESTAMP}
+    where id = #{id,jdbcType=INTEGER}
+  </update>
+  <select id="selectByPrimaryKey" parameterType="java.lang.Integer" resultMap="BaseResultMap">
+    select id, course_id, number, title, file_name, file_type, file_size, free_flag, 
+    download_flag, upload_time
+    from course_ware
+    where id = #{id,jdbcType=INTEGER}
+  </select>
+  <select id="selectAll" resultMap="BaseResultMap">
+    select id, course_id, number, title, file_name, file_type, file_size, free_flag, 
+    download_flag, upload_time
+    from course_ware
+  </select>
+  <select id="selectByCourseId" parameterType="java.lang.Integer" resultMap="BaseResultMap">
+    select id, course_id, number, title, file_name, file_type, file_size, free_flag,
+    download_flag, upload_time
+    from course_ware
+    where course_id = #{courseId,jdbcType=INTEGER}
+  </select>
+</mapper>

+ 42 - 0
src/main/resources/mapper/RechargeOrderMapper.xml

@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="cn.seecoder.courselearning.mapperservice.RechargeOrderMapper">
+  <resultMap id="BaseResultMap" type="cn.seecoder.courselearning.po.RechargeOrder">
+    <id column="order_id" jdbcType="INTEGER" property="orderId" />
+    <result column="user_id" jdbcType="INTEGER" property="userId" />
+    <result column="value" jdbcType="INTEGER" property="value" />
+    <result column="create_time" jdbcType="TIMESTAMP" property="createTime" />
+  </resultMap>
+  <delete id="deleteByPrimaryKey" parameterType="java.lang.String">
+    delete from recharge_order
+    where order_id = #{orderId,jdbcType=VARCHAR}
+  </delete>
+  <insert id="insert" parameterType="cn.seecoder.courselearning.po.RechargeOrder" useGeneratedKeys="true" keyProperty="orderId">
+    insert into recharge_order (order_id, user_id, value, 
+      create_time)
+    values (#{orderId,jdbcType=VARCHAR}, #{userId,jdbcType=INTEGER}, #{value,jdbcType=INTEGER}, 
+      #{createTime,jdbcType=TIMESTAMP})
+  </insert>
+  <update id="updateByPrimaryKey" parameterType="cn.seecoder.courselearning.po.RechargeOrder">
+    update recharge_order
+    set user_id = #{userId,jdbcType=INTEGER},
+      value = #{value,jdbcType=INTEGER},
+      create_time = #{createTime,jdbcType=TIMESTAMP}
+    where order_id = #{orderId,jdbcType=VARCHAR}
+  </update>
+  <select id="selectByPrimaryKey" parameterType="java.lang.String" resultMap="BaseResultMap">
+    select order_id, user_id, value, create_time
+    from recharge_order
+    where order_id = #{orderId,jdbcType=VARCHAR}
+  </select>
+  <select id="selectAll" resultMap="BaseResultMap">
+    select order_id, user_id, value, create_time
+    from recharge_order
+  </select>
+
+  <select id="selectByUserId" parameterType="java.lang.Integer" resultMap="BaseResultMap">
+    select order_id, user_id, value, create_time
+    from recharge_order
+    where user_id = #{userId}
+  </select>
+</mapper>

+ 59 - 0
src/main/resources/mapper/UserMapper.xml

@@ -0,0 +1,59 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="cn.seecoder.courselearning.mapperservice.UserMapper">
+  <resultMap id="BaseResultMap" type="cn.seecoder.courselearning.po.User">
+    <id column="id" jdbcType="INTEGER" property="id" />
+    <result column="uname" jdbcType="VARCHAR" property="uname" />
+    <result column="phone" jdbcType="VARCHAR" property="phone" />
+    <result column="password" jdbcType="VARCHAR" property="password" />
+    <result column="picture" jdbcType="VARCHAR" property="picture" />
+    <result column="balance" jdbcType="INTEGER" property="balance" />
+    <result column="user_role" jdbcType="VARCHAR" property="userRole" />
+    <result column="create_time" jdbcType="TIMESTAMP" property="createTime" />
+  </resultMap>
+  <delete id="deleteByPrimaryKey" parameterType="java.lang.Integer">
+    delete from user_info
+    where id = #{id,jdbcType=INTEGER}
+  </delete>
+  <insert id="insert" parameterType="cn.seecoder.courselearning.po.User" useGeneratedKeys="true" keyProperty="id">
+    insert into user_info (id, uname, phone, 
+      password, picture, balance, 
+      user_role, create_time)
+    values (#{id,jdbcType=INTEGER}, #{uname,jdbcType=VARCHAR}, #{phone,jdbcType=VARCHAR}, 
+      #{password,jdbcType=VARCHAR}, #{picture,jdbcType=VARCHAR}, #{balance,jdbcType=INTEGER}, 
+      #{userRole,jdbcType=VARCHAR}, #{createTime,jdbcType=TIMESTAMP})
+  </insert>
+  <update id="updateByPrimaryKey" parameterType="cn.seecoder.courselearning.po.User">
+    update user_info
+    set uname = #{uname,jdbcType=VARCHAR},
+      phone = #{phone,jdbcType=VARCHAR},
+      password = #{password,jdbcType=VARCHAR},
+      picture = #{picture,jdbcType=VARCHAR}
+    where id = #{id,jdbcType=INTEGER}
+  </update>
+  <select id="selectByPrimaryKey" parameterType="java.lang.Integer" resultMap="BaseResultMap">
+    select id, uname, phone, password, picture, balance, user_role, create_time
+    from user_info
+    where id = #{id,jdbcType=INTEGER}
+  </select>
+  <select id="selectByPhone" parameterType="java.lang.String" resultMap="BaseResultMap">
+    select id, uname, phone, password, picture, balance, user_role, create_time
+    from user_info
+    where phone = #{phone}
+    limit 0,1
+  </select>
+  <select id="selectAll" resultMap="BaseResultMap">
+    select id, uname, phone, password, picture, balance, user_role, create_time
+    from user_info
+  </select>
+  <update id="increaseBalance">
+    update user_info
+    set balance = balance+#{delta,jdbcType=INTEGER}
+    where id = #{id}
+  </update>
+  <update id="decreaseBalance">
+    update user_info
+    set balance = balance-#{delta,jdbcType=INTEGER}
+    where id = #{id}
+  </update>
+</mapper>

+ 22 - 0
src/main/resources/mybatis-config.xml

@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE configuration
+        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-config.dtd">
+<configuration>
+    <settings>
+        <!-- 是否可以使用列的别名 (取决于驱动的兼容性) default:true -->
+        <setting name="useColumnLabel" value="true"/>
+        <!-- 允许JDBC 获取生成的主键。需要驱动器支持。如果设为了true,这个设置将强制使用被生成的主键,有一些驱动器不兼容不过仍然可以执行。 default:false -->
+        <setting name="useGeneratedKeys" value="true" />
+        <!-- 使用驼峰命名法转换字段。 -->
+        <setting name="mapUnderscoreToCamelCase" value="true" />
+    </settings>
+<!--    <typeHandlers>-->
+<!--        <typeHandler handler="org.apache.ibatis.type.EnumOrdinalTypeHandler"-->
+<!--                     javaType="cn.seecoder.courselearning.enums.UserRole"-->
+<!--                     jdbcType="VARCHAR"/>-->
+<!--    </typeHandlers>-->
+<!--    <mappers>-->
+<!--        <mapper class="cn.seecoder.courselearning.mapperservice.UserMapper"/>-->
+<!--    </mappers>-->
+</configuration>

BIN
src/main/resources/static/course1.png


BIN
src/main/resources/static/course2.png


BIN
src/main/resources/static/course3.png


BIN
src/main/resources/static/course4.png


BIN
src/main/resources/static/no.png


+ 4 - 0
src/main/resources/url.properties

@@ -0,0 +1,4 @@
+token_server=https://oauth-login.cloud.huawei.com/oauth2/v2/token
+push_open_url=https://push-api.cloud.huawei.com
+app_id=103511055
+app_secret=8482729ea0f91eb002b493bc330f421d1d42e2d9c8f01f00ef0c15792aec570f

+ 13 - 0
src/test/java/cn/seecoder/courselearning/CourselearningApplicationTests.java

@@ -0,0 +1,13 @@
+package cn.seecoder.courselearning;
+
+import org.junit.jupiter.api.Test;
+import org.springframework.boot.test.context.SpringBootTest;
+
+@SpringBootTest
+class CourseLearningApplicationTests {
+
+    @Test
+    void contextLoads() {
+    }
+
+}