J.U.C--ThreadPoolExecutor的配置与使用

Java并发编程:ThreadPoolExecutor详解
本文详细介绍了Java并发库中的ThreadPoolExecutor,包括其构造器参数解析、Executors静态工厂方法分析、工作队列策略以及拒绝策略。核心关注点在于线程池的定制性和如何根据场景选择合适的线程池配置。

ThreadPoolExecutor为Executor提供了基本的实现,这些Executor是由Executors中的静态工厂方法返回的。ThreadPoolExecutor是一种灵活的、稳定的线程池,允许进行各种定制。

1.Executors中的静态工厂方法

其实不管是newCachedThreadPool()、newFixedThreadPool(int nThreads)还是newSingleThreadExecutor() 他们的底层都是根据不同的特性对ThreadPoolExecutor进行了定制。
下面给出源码:

public static ExecutorService newCachedThreadPool() {
    return new ThreadPoolExecutor(0, Integer.MAX_VALUE,
                                      60L, TimeUnit.SECONDS,
                                      new SynchronousQueue<Runnable>());
}

public static ExecutorService newCachedThreadPool(ThreadFactory threadFactory) {
    return new ThreadPoolExecutor(0, Integer.MAX_VALUE,
                                  60L, TimeUnit.SECONDS,
                                  new SynchronousQueue<Runnable>(),
                                  threadFactory);
}

public static ExecutorService newFixedThreadPool(int nThreads) {
    return new ThreadPoolExecutor(nThreads, nThreads,
                                  0L, TimeUnit.MILLISECONDS,
                                  new LinkedBlockingQueue<Runnable>());
}

public static ExecutorService newFixedThreadPool(int nThreads, ThreadFactory threadFactory) {
    return new ThreadPoolExecutor(nThreads, nThreads,
                                  0L, TimeUnit.MILLISECONDS,
                                  new LinkedBlockingQueue<Runnable>(),
                                  threadFactory);
}

public static ScheduledExecutorService newScheduledThreadPool(int corePoolSize) {
    return new ScheduledThreadPoolExecutor(corePoolSize);
}

public static ScheduledExecutorService newScheduledThreadPool(
            int corePoolSize, ThreadFactory threadFactory) {
    return new ScheduledThreadPoolExecutor(corePoolSize, threadFactory);
}

public static ExecutorService newSingleThreadExecutor() {
    return new FinalizableDelegatedExecutorService
        (new ThreadPoolExecutor(1, 1,
                                0L, TimeUnit.MILLISECONDS,
                                new LinkedBlockingQueue<Runnable>()));
}

public static ExecutorService newSingleThreadExecutor(ThreadFactory threadFactory) {
    return new FinalizableDelegatedExecutorService
        (new ThreadPoolExecutor(1, 1,
                                0L, TimeUnit.MILLISECONDS,
                                new LinkedBlockingQueue<Runnable>(),
                                threadFactory));
}

从上面的源码我们验证之前的结论,所以对于研究J.U.C的Executor框架,我们需要重点研究的就是ThreadPoolExecutor这个类。

2. ThreadPoolExecutor的类继承图

ThreadPoolExecutor类继承图

从上面的类图中我们可以知道,ThreadPoolExecutor基本上是Executor的实现。

3.ThreadPoolExecutor的构造器

构造器中有很多可定制的参数,所以该线程池具有很高的定制性,虽然提供了好几个构造器,但是最终都会调用如下这个构造器:

public ThreadPoolExecutor(int corePoolSize,
                              int maximumPoolSize,
                              long keepAliveTime,
                              TimeUnit unit,
                              BlockingQueue<Runnable> workQueue,
                              ThreadFactory threadFactory,
                              RejectedExecutionHandler handler) {
    if (corePoolSize < 0 ||
        maximumPoolSize <= 0 ||
        maximumPoolSize < corePoolSize ||
        keepAliveTime < 0)
        throw new IllegalArgumentException();
    if (workQueue == null || threadFactory == null || handler == null)
        throw new NullPointerException();
    this.corePoolSize = corePoolSize;
    this.maximumPoolSize = maximumPoolSize;
    this.workQueue = workQueue;
    this.keepAliveTime = unit.toNanos(keepAliveTime);
    this.threadFactory = threadFactory;
    this.handler = handler;
}

首先来分析一下构造器的参数(来自JDK文档)

1、corePoolSize - 池中所保存的线程数,包括空闲线程。
2、maximumPoolSize - 池中允许的最大线程数。
3、keepAliveTime - 当线程数大于核心时,此为终止前多余的空闲线程等待新任务的最长时间。
4、unit - keepAliveTime 参数的时间单位。
5、workQueue - 执行前用于保持任务的队列。此队列仅保持由 execute 方法提交的 Runnable 任务。
6、threadFactory - 执行程序创建新线程时使用的工厂。
7、handler - 由于超出线程范围和队列容量而使执行被阻塞时所使用的处理程序。

上面的构造器参数里面最不好理解的就是:corePoolSize 和 maximumPoolSize这两个参数了。所以特别做一个详细的解释:

1、池中线程数小于corePoolSize,新任务都不排队而是直接添加新线程。
2、池中线程数大于等于corePoolSize,workQueue未满,首选将新任务加入workQueue而不是添加新线程。
3、池中线程数大于等于corePoolSize,workQueue已满,但是线程数小于maximumPoolSize,添加新的线程来处理被添加的任务。
4、池中线程数大于等于corePoolSize,workQueue已满,并且线程数大于等于maximumPoolSize,新任务被拒绝,使用handler处理被拒绝的任务。
5、如果设置的 corePoolSize 和 maximumPoolSize 相同,则创建了固定大小的线程池

上面这4条规则非常重要。基本解释清楚了corePoolSize 和 maximumPoolSize这两个参数怎么用。

ThreadPoolExecutor的使用很简单,前面的代码也写过例子了。通过execute(Runnable command)方法来发起一个任务的执行,通过shutDown()方法来对已经提交的任务做一个有效的关闭。尽管线程池很好,但我们要注意JDK API的一段话:
强烈建议程序员使用较为方便的Executors工厂方法Executors.newCachedThreadPool()(无界线程池,可以进行线程自动回收)、Executors.newFixedThreadPool(int)(固定大小线程池)和Executors.newSingleThreadExecutor()(单个后台线程),它们均为大多数使用场景预定义了设置。

所以,跳开对ThreadPoolExecutor的关注(还是那句话,有问题查询JDK API),重点关注一下JDK推荐的Executors。

4.根据ThreadPoolExecutor的构造器分析Executors的静态工厂方法

线程池的重点不是ThreadPoolExecutor怎么用或者是Executors怎么用,而是在合适的场景下使用合适的线程池,所谓”合适的线程池”的意思就是,ThreadPoolExecutor的构造方法传入不同的参数,构造出不同的线程池,以满足使用的需要。
下面来看一下Executors为用户提供的几种线程池:

1、newSingleThreadExecutos() 单线程线程池

public static ExecutorService newSingleThreadExecutor() {
    return new FinalizableDelegatedExecutorService
        (new ThreadPoolExecutor(1, 1,
                                0L, TimeUnit.MILLISECONDS,
                                new LinkedBlockingQueue<Runnable>()));
}

单线程线程池,那么线程池中运行的肯定是只有一个线程。workQueue选择了无界阻塞队列的LinkedBlockingQueue,那么不管来多少任务都排队,前面一个任务执行完毕,再执行队列中的线程。从这个角度讲,第二个参数maximumPoolSize是没有意义的,因为maximumPoolSize描述的是排队的任务多过workQueue的容量,线程池中最多只能容纳maximumPoolSize个任务,现在workQueue是无界的,也就是说排队的任务永远不会多过workQueue的容量,那maximum其实设置多少都无所谓了。

2、newFixedThreadPool(int nThreads) 固定大小线程池

public static ExecutorService newFixedThreadPool(int nThreads) {
    return new ThreadPoolExecutor(nThreads, nThreads,
                                  0L, TimeUnit.MILLISECONDS,
                                  new LinkedBlockingQueue<Runnable>());
}

固定大小的线程池和单线程的线程池异曲同工,无非是让线程池中能运行的线程编程了手动指定的nThreads罢了。同样,由于是选择了LinkedBlockingQueue,因此其实第二个参数maximumPoolSize同样也是无意义的.

3、newCachedThreadPool() 无界线程池

public static ExecutorService newCachedThreadPool() {
    return new ThreadPoolExecutor(0, Integer.MAX_VALUE,
                                  60L, TimeUnit.SECONDS,
                                  new SynchronousQueue<Runnable>());
}

无界线程池,意思是不管多少任务提交进来,都直接运行。无界线程池采用了同步队列SynchronousQueue,采用这个线程池就没有workQueue容量一说了,只要添加进去的线程就会被拿去用。既然是无界线程池,那线程数肯定没上限,所以以maximumPoolSize为主了,设置为一个近似的无限大Integer.MAX_VALUE。 另外注意一下,单线程线程池和固定大小线程池线程都不会进行自动回收的,也即是说保证提交进来的任务最终都会被处理,但至于什么时候处理,就要看处理能力了。但是无界线程池是设置了回收时间的,由于corePoolSize为0,所以只要60秒没有被用到的线程都会被直接移除。

5. 关于工作队列WorkQueue

上面三种线程池都提到了一个概念,workQueue,也就是排队策略。排队策略描述的是,当前线程大于corePoolSize时,线程以什么样的方式排队等待被运行。

排队有三种策略:直接提交、有界队列、无界队列。

谈谈后两种,JDK使用了无界队列LinkedBlockingQueue作为WorkQueue而不是有界队列ArrayBlockingQueue,尽管后者可以对资源进行控制,但是个人认为,使用有界队列相比无界队列有三个缺点:
1、使用有界队列,corePoolSize、maximumPoolSize两个参数势必要根据实际场景不断调整以求达到一个最佳,这势必给开发带来极大的麻烦,必须经过大量的性能测试。所以干脆就使用无界队列,任务永远添加到队列中,不会溢出,自然maximumPoolSize也没什么用了,只需要根据系统处理能力调整corePoolSize就可以了

2、防止业务突刺。尤其是在Web应用中,某些时候突然大量请求的到来都是很正常的。这时候使用无界队列,不管早晚,至少保证所有任务都能被处理到。但是使用有界队列呢?那些超出maximumPoolSize的任务直接被丢掉了,处理地慢还可以忍受,但是任务直接就不处理了,这似乎有些糟糕

3、不仅仅是corePoolSize和maximumPoolSize需要相互调整,有界队列的队列大小和maximumPoolSize也需要相互折衷,这也是一块比较难以控制和调整的方面

当然,最后还是那句话,就像Comparable和Comparator的对比、synchronized和ReentrantLock,再到这里的无界队列和有界队列的对比,看似都有一个的优点稍微突出一些,但是这绝不是鼓励大家使用一个而不使用另一个,任何东西都需要根据实际情况来,当然在一开始的时候可以重点考虑那些看上去优点明显一点的。

这里有一点需要特别注意的就是,对于阻塞队列的选择不能使用无上限的阻塞队列,因为如果流量太大,会不停往队列里面塞任务,队列里面每个Runable都是要占用内存资源的容易将内存打爆。此外如果消息太多,Runable的运行肯定会有大的延迟,所以一般情况下建议使用同步队列,并合理扩大线程池的数量。

6.四种拒绝策略

所谓拒绝策略之前也提到过了,任务太多,超过maximumPoolSize了怎么把?当然是接不下了,接不下那只有拒绝了。拒绝的时候可以指定拒绝策略,也就是一段处理程序。

决绝策略的父接口是RejectedExecutionHandler,JDK本身在ThreadPoolExecutor里给用户提供了四种拒绝策略,看一下:
1、AbortPolicy
直接抛出一个RejectedExecutionException,这也是JDK默认的拒绝策略

2、CallerRunsPolicy
尝试直接运行被拒绝的任务,如果线程池已经被关闭了,任务就被丢弃了

3、DiscardOldestPolicy
移除最晚的那个没有被处理的任务,然后执行被拒绝的任务。同样,如果线程池已经被关闭了,任务就被丢弃了

4、DiscardPolicy
不能执行的任务将被删除

其实上面的内容大部分都来自JDK文档,所以JDK文档是 非常重要的。

Application run failed java.lang.IllegD:\module\java17\bin\java.exe -XX:TieredStopAtLevel=1 -Dspring.output.ansi.enabled=always -Dcom.sun.management.jmxremote -Dspring.jmx.enabled=true -Dspring.liveBeansView.mbeanDomain -Dspring.application.admin.enabled=true "-Dmanagement.endpoints.jmx.exposure.include=*" "-javaagent:D:\anp\IntelliJ IDEA 2024.3\lib\idea_rt.jar=5929:D:\anp\IntelliJ IDEA 2024.3\bin" -Dfile.encoding=UTF-8 -classpath D:\1\lingyidianke\lingyidianke\lingyidianke-leadnews-service\lingyidianke-leadnews-user\target\classes;D:\1\lingyidianke-repository\org\springframework\cloud\spring-cloud-starter-bootstrap\4.1.4\spring-cloud-starter-bootstrap-4.1.4.jar;D:\1\lingyidianke-repository\org\springframework\cloud\spring-cloud-starter\4.1.4\spring-cloud-starter-4.1.4.jar;D:\1\lingyidianke-repository\org\springframework\security\spring-security-rsa\1.1.3\spring-security-rsa-1.1.3.jar;D:\1\lingyidianke-repository\org\bouncycastle\bcprov-jdk18on\1.78\bcprov-jdk18on-1.78.jar;D:\1\lingyidianke-repository\org\projectlombok\lombok\1.18.30\lombok-1.18.30.jar;D:\1\lingyidianke\lingyidianke\lingyidianke-leadnews-model\target\classes;D:\1\lingyidianke-repository\com\alibaba\fastjson\1.2.58\fastjson-1.2.58.jar;D:\1\lingyidianke-repository\com\mysql\mysql-connector-j\8.0.33\mysql-connector-j-8.0.33.jar;D:\1\lingyidianke-repository\com\google\protobuf\protobuf-java\3.21.9\protobuf-java-3.21.9.jar;D:\1\lingyidianke-repository\org\apache\commons\commons-lang3\3.14.0\commons-lang3-3.14.0.jar;D:\1\lingyidianke-repository\com\baomidou\mybatis-plus-spring-boot3-starter\3.5.7\mybatis-plus-spring-boot3-starter-3.5.7.jar;D:\1\lingyidianke-repository\com\baomidou\mybatis-plus\3.5.7\mybatis-plus-3.5.7.jar;D:\1\lingyidianke-repository\org\mybatis\mybatis-spring\3.0.3\mybatis-spring-3.0.3.jar;D:\1\lingyidianke-repository\com\baomidou\mybatis-plus-spring-boot-autoconfigure\3.5.7\mybatis-plus-spring-boot-autoconfigure-3.5.7.jar;D:\1\lingyidianke-repository\org\springframework\boot\spring-boot-starter-jdbc\3.3.4\spring-boot-starter-jdbc-3.3.4.jar;D:\1\lingyidianke-repository\com\zaxxer\HikariCP\5.1.0\HikariCP-5.1.0.jar;D:\1\lingyidianke-repository\org\springframework\spring-jdbc\6.1.13\spring-jdbc-6.1.13.jar;D:\1\lingyidianke-repository\org\springframework\spring-tx\6.1.13\spring-tx-6.1.13.jar;D:\1\lingyidianke-repository\io\swagger\swagger-annotations\1.5.22\swagger-annotations-1.5.22.jar;D:\1\lingyidianke-repository\ch\qos\logback\logback-classic\1.4.11\logback-classic-1.4.11.jar;D:\1\lingyidianke-repository\ch\qos\logback\logback-core\1.5.8\logback-core-1.5.8.jar;D:\1\lingyidianke-repository\org\slf4j\slf4j-api\2.0.16\slf4j-api-2.0.16.jar;D:\1\lingyidianke-repository\com\baomidou\mybatis-plus-extension\3.5.7\mybatis-plus-extension-3.5.7.jar;D:\1\lingyidianke-repository\com\baomidou\mybatis-plus-core\3.5.7\mybatis-plus-core-3.5.7.jar;D:\1\lingyidianke-repository\com\baomidou\mybatis-plus-annotation\3.5.7\mybatis-plus-annotation-3.5.7.jar;D:\1\lingyidianke-repository\com\github\jsqlparser\jsqlparser\4.9\jsqlparser-4.9.jar;D:\1\lingyidianke-repository\org\mybatis\mybatis\3.5.16\mybatis-3.5.16.jar;D:\1\lingyidianke\lingyidianke\lingyidianke-leadnews-feign-api\target\classes;D:\1\lingyidianke\lingyidianke\lingyidianke-leadnews-common\target\classes;D:\1\lingyidianke-repository\com\github\xiaoymin\knife4j-spring-boot-starter\3.0.3\knife4j-spring-boot-starter-3.0.3.jar;D:\1\lingyidianke-repository\com\github\xiaoymin\knife4j-spring-boot-autoconfigure\3.0.3\knife4j-spring-boot-autoconfigure-3.0.3.jar;D:\1\lingyidianke-repository\com\github\xiaoymin\knife4j-spring\3.0.3\knife4j-spring-3.0.3.jar;D:\1\lingyidianke-repository\com\github\xiaoymin\knife4j-annotations\3.0.3\knife4j-annotations-3.0.3.jar;D:\1\lingyidianke-repository\io\swagger\core\v3\swagger-annotations\2.1.2\swagger-annotations-2.1.2.jar;D:\1\lingyidianke-repository\com\github\xiaoymin\knife4j-core\3.0.3\knife4j-core-3.0.3.jar;D:\1\lingyidianke-repository\org\javassist\javassist\3.25.0-GA\javassist-3.25.0-GA.jar;D:\1\lingyidianke-repository\io\springfox\springfox-swagger2\3.0.0\springfox-swagger2-3.0.0.jar;D:\1\lingyidianke-repository\io\springfox\springfox-spi\3.0.0\springfox-spi-3.0.0.jar;D:\1\lingyidianke-repository\io\springfox\springfox-schema\3.0.0\springfox-schema-3.0.0.jar;D:\1\lingyidianke-repository\io\springfox\springfox-swagger-common\3.0.0\springfox-swagger-common-3.0.0.jar;D:\1\lingyidianke-repository\io\springfox\springfox-spring-web\3.0.0\springfox-spring-web-3.0.0.jar;D:\1\lingyidianke-repository\io\github\classgraph\classgraph\4.8.83\classgraph-4.8.83.jar;D:\1\lingyidianke-repository\io\springfox\springfox-spring-webflux\3.0.0\springfox-spring-webflux-3.0.0.jar;D:\1\lingyidianke-repository\org\mapstruct\mapstruct\1.3.1.Final\mapstruct-1.3.1.Final.jar;D:\1\lingyidianke-repository\io\springfox\springfox-spring-webmvc\3.0.0\springfox-spring-webmvc-3.0.0.jar;D:\1\lingyidianke-repository\io\springfox\springfox-core\3.0.0\springfox-core-3.0.0.jar;D:\1\lingyidianke-repository\io\springfox\springfox-oas\3.0.0\springfox-oas-3.0.0.jar;D:\1\lingyidianke-repository\io\swagger\core\v3\swagger-models\2.1.2\swagger-models-2.1.2.jar;D:\1\lingyidianke-repository\io\springfox\springfox-bean-validators\3.0.0\springfox-bean-validators-3.0.0.jar;D:\1\lingyidianke-repository\io\swagger\swagger-models\1.5.22\swagger-models-1.5.22.jar;D:\1\lingyidianke-repository\io\swagger\swagger-core\1.5.22\swagger-core-1.5.22.jar;D:\1\lingyidianke-repository\com\fasterxml\jackson\dataformat\jackson-dataformat-yaml\2.17.2\jackson-dataformat-yaml-2.17.2.jar;D:\1\lingyidianke-repository\com\google\guava\guava\27.0.1-android\guava-27.0.1-android.jar;D:\1\lingyidianke-repository\com\google\guava\failureaccess\1.0.1\failureaccess-1.0.1.jar;D:\1\lingyidianke-repository\com\google\guava\listenablefuture\9999.0-empty-to-avoid-conflict-with-guava\listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar;D:\1\lingyidianke-repository\com\google\code\findbugs\jsr305\3.0.2\jsr305-3.0.2.jar;D:\1\lingyidianke-repository\org\checkerframework\checker-compat-qual\2.5.2\checker-compat-qual-2.5.2.jar;D:\1\lingyidianke-repository\com\google\errorprone\error_prone_annotations\2.2.0\error_prone_annotations-2.2.0.jar;D:\1\lingyidianke-repository\com\google\j2objc\j2objc-annotations\1.1\j2objc-annotations-1.1.jar;D:\1\lingyidianke-repository\org\codehaus\mojo\animal-sniffer-annotations\1.17\animal-sniffer-annotations-1.17.jar;D:\1\lingyidianke-repository\javax\validation\validation-api\1.1.0.Final\validation-api-1.1.0.Final.jar;D:\1\lingyidianke-repository\io\springfox\springfox-boot-starter\3.0.0\springfox-boot-starter-3.0.0.jar;D:\1\lingyidianke-repository\io\springfox\springfox-data-rest\3.0.0\springfox-data-rest-3.0.0.jar;D:\1\lingyidianke-repository\com\fasterxml\classmate\1.7.0\classmate-1.7.0.jar;D:\1\lingyidianke-repository\org\springframework\plugin\spring-plugin-core\2.0.0.RELEASE\spring-plugin-core-2.0.0.RELEASE.jar;D:\1\lingyidianke-repository\org\springframework\plugin\spring-plugin-metadata\2.0.0.RELEASE\spring-plugin-metadata-2.0.0.RELEASE.jar;D:\1\lingyidianke-repository\com\github\xiaoymin\knife4j-spring-ui\3.0.3\knife4j-spring-ui-3.0.3.jar;D:\1\lingyidianke\lingyidianke\lingyidianke-leadnews-utils\target\classes;D:\1\lingyidianke-repository\io\jsonwebtoken\jjwt\0.9.1\jjwt-0.9.1.jar;D:\1\lingyidianke-repository\org\springframework\boot\spring-boot-starter\3.3.4\spring-boot-starter-3.3.4.jar;D:\1\lingyidianke-repository\org\springframework\boot\spring-boot\3.3.4\spring-boot-3.3.4.jar;D:\1\lingyidianke-repository\org\springframework\spring-context\6.1.13\spring-context-6.1.13.jar;D:\1\lingyidianke-repository\org\springframework\boot\spring-boot-autoconfigure\3.3.4\spring-boot-autoconfigure-3.3.4.jar;D:\1\lingyidianke-repository\org\springframework\boot\spring-boot-starter-logging\3.3.4\spring-boot-starter-logging-3.3.4.jar;D:\1\lingyidianke-repository\org\apache\logging\log4j\log4j-to-slf4j\2.23.1\log4j-to-slf4j-2.23.1.jar;D:\1\lingyidianke-repository\org\apache\logging\log4j\log4j-api\2.23.1\log4j-api-2.23.1.jar;D:\1\lingyidianke-repository\org\slf4j\jul-to-slf4j\2.0.16\jul-to-slf4j-2.0.16.jar;D:\1\lingyidianke-repository\jakarta\annotation\jakarta.annotation-api\2.1.1\jakarta.annotation-api-2.1.1.jar;D:\1\lingyidianke-repository\org\springframework\spring-core\6.1.13\spring-core-6.1.13.jar;D:\1\lingyidianke-repository\org\springframework\spring-jcl\6.1.13\spring-jcl-6.1.13.jar;D:\1\lingyidianke-repository\org\yaml\snakeyaml\2.2\snakeyaml-2.2.jar;D:\1\lingyidianke-repository\org\springframework\boot\spring-boot-starter-web\3.3.4\spring-boot-starter-web-3.3.4.jar;D:\1\lingyidianke-repository\org\springframework\boot\spring-boot-starter-json\3.3.4\spring-boot-starter-json-3.3.4.jar;D:\1\lingyidianke-repository\com\fasterxml\jackson\datatype\jackson-datatype-jdk8\2.17.2\jackson-datatype-jdk8-2.17.2.jar;D:\1\lingyidianke-repository\com\fasterxml\jackson\datatype\jackson-datatype-jsr310\2.17.2\jackson-datatype-jsr310-2.17.2.jar;D:\1\lingyidianke-repository\com\fasterxml\jackson\module\jackson-module-parameter-names\2.17.2\jackson-module-parameter-names-2.17.2.jar;D:\1\lingyidianke-repository\org\springframework\boot\spring-boot-starter-tomcat\3.3.4\spring-boot-starter-tomcat-3.3.4.jar;D:\1\lingyidianke-repository\org\apache\tomcat\embed\tomcat-embed-core\10.1.30\tomcat-embed-core-10.1.30.jar;D:\1\lingyidianke-repository\org\apache\tomcat\embed\tomcat-embed-el\10.1.30\tomcat-embed-el-10.1.30.jar;D:\1\lingyidianke-repository\org\apache\tomcat\embed\tomcat-embed-websocket\10.1.30\tomcat-embed-websocket-10.1.30.jar;D:\1\lingyidianke-repository\org\springframework\spring-web\6.1.13\spring-web-6.1.13.jar;D:\1\lingyidianke-repository\org\springframework\spring-beans\6.1.13\spring-beans-6.1.13.jar;D:\1\lingyidianke-repository\io\micrometer\micrometer-observation\1.13.4\micrometer-observation-1.13.4.jar;D:\1\lingyidianke-repository\io\micrometer\micrometer-commons\1.13.4\micrometer-commons-1.13.4.jar;D:\1\lingyidianke-repository\org\springframework\spring-webmvc\6.1.13\spring-webmvc-6.1.13.jar;D:\1\lingyidianke-repository\org\springframework\spring-aop\6.1.13\spring-aop-6.1.13.jar;D:\1\lingyidianke-repository\org\springframework\spring-expression\6.1.13\spring-expression-6.1.13.jar;D:\1\lingyidianke-repository\net\bytebuddy\byte-buddy\1.14.19\byte-buddy-1.14.19.jar;D:\1\lingyidianke-repository\com\alibaba\nacos\nacos-client\2.2.3\nacos-client-2.2.3.jar;D:\1\lingyidianke-repository\com\alibaba\nacos\nacos-auth-plugin\2.2.3\nacos-auth-plugin-2.2.3.jar;D:\1\lingyidianke-repository\com\alibaba\nacos\nacos-encryption-plugin\2.2.3\nacos-encryption-plugin-2.2.3.jar;D:\1\lingyidianke-repository\commons-codec\commons-codec\1.16.1\commons-codec-1.16.1.jar;D:\1\lingyidianke-repository\com\fasterxml\jackson\core\jackson-core\2.17.2\jackson-core-2.17.2.jar;D:\1\lingyidianke-repository\com\fasterxml\jackson\core\jackson-databind\2.17.2\jackson-databind-2.17.2.jar;D:\1\lingyidianke-repository\com\fasterxml\jackson\core\jackson-annotations\2.17.2\jackson-annotations-2.17.2.jar;D:\1\lingyidianke-repository\org\apache\httpcomponents\httpasyncclient\4.1.5\httpasyncclient-4.1.5.jar;D:\1\lingyidianke-repository\org\apache\httpcomponents\httpcore\4.4.16\httpcore-4.4.16.jar;D:\1\lingyidianke-repository\org\apache\httpcomponents\httpcore-nio\4.4.16\httpcore-nio-4.4.16.jar;D:\1\lingyidianke-repository\org\apache\httpcomponents\httpclient\4.5.13\httpclient-4.5.13.jar;D:\1\lingyidianke-repository\io\prometheus\simpleclient\0.16.0\simpleclient-0.16.0.jar;D:\1\lingyidianke-repository\io\prometheus\simpleclient_tracer_otel\0.16.0\simpleclient_tracer_otel-0.16.0.jar;D:\1\lingyidianke-repository\io\prometheus\simpleclient_tracer_common\0.16.0\simpleclient_tracer_common-0.16.0.jar;D:\1\lingyidianke-repository\io\prometheus\simpleclient_tracer_otel_agent\0.16.0\simpleclient_tracer_otel_agent-0.16.0.jar;D:\1\lingyidianke-repository\com\alibaba\cloud\spring-cloud-starter-alibaba-nacos-discovery\2023.0.3.2\spring-cloud-starter-alibaba-nacos-discovery-2023.0.3.2.jar;D:\1\lingyidianke-repository\com\alibaba\cloud\spring-cloud-alibaba-commons\2023.0.3.2\spring-cloud-alibaba-commons-2023.0.3.2.jar;D:\1\lingyidianke-repository\org\springframework\cloud\spring-cloud-commons\4.1.4\spring-cloud-commons-4.1.4.jar;D:\1\lingyidianke-repository\org\springframework\security\spring-security-crypto\6.3.3\spring-security-crypto-6.3.3.jar;D:\1\lingyidianke-repository\org\springframework\cloud\spring-cloud-context\4.1.4\spring-cloud-context-4.1.4.jar;D:\1\lingyidianke-repository\com\alibaba\cloud\spring-cloud-starter-alibaba-nacos-config\2023.0.3.2\spring-cloud-starter-alibaba-nacos-config-2023.0.3.2.jar;D:\1\lingyidianke-repository\com\alibaba\cloud\spring-alibaba-nacos-config\2023.0.3.2\spring-alibaba-nacos-config-2023.0.3.2.jar com.lingyidianke.service.user.LingyidiankeLeadnewsUserApplication Application starting... 2025-07-01 13:37:15.810 [main] WARN c.a.n.client.logging.NacosLogging - Load Logback Configuration of Nacos fail, message: Could not initialize Logback Nacos logging from classpath:nacos-logback.xml 2025-07-01 13:37:16.101 [main] WARN c.a.n.client.logging.NacosLogging - Load Logback Configuration of Nacos fail, message: Could not initialize Logback Nacos logging from classpath:nacos-logback.xml 2025-07-01 13:37:17.859 [main] WARN c.a.n.client.logging.NacosLogging - Load Logback Configuration of Nacos fail, message: Could not initialize Logback Nacos logging from classpath:nacos-logback.xml . ____ _ __ _ _ /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \ ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \ \\/ ___)| |_)| | | | | || (_| | ) ) ) ) ' |____| .__|_| |_|_| |_\__, | / / / / =========|_|==============|___/=/_/_/_/ :: Spring Boot :: (v3.3.4) 2025-07-01 13:37:17.916 [main] WARN c.a.n.client.logging.NacosLogging - Load Logback Configuration of Nacos fail, message: Could not initialize Logback Nacos logging from classpath:nacos-logback.xml 2025-07-01 13:37:17.919 [main] INFO c.l.s.u.LingyidiankeLeadnewsUserApplication - No active profile set, falling back to 1 default profile: "default" 2025-07-01 13:37:20.339 [main] DEBUG o.apache.ibatis.logging.LogFactory - Logging initialized using 'class org.apache.ibatis.logging.slf4j.Slf4jImpl' adapter. 2025-07-01 13:37:20.344 [main] DEBUG o.m.s.mapper.ClassPathMapperScanner - Identified candidate component class: file [D:\1\lingyidianke\lingyidianke\lingyidianke-leadnews-service\lingyidianke-leadnews-user\target\classes\com\lingyidianke\service\user\mapper\ApUserMapper.class] 2025-07-01 13:37:20.345 [main] DEBUG o.m.s.mapper.ClassPathMapperScanner - Creating MapperFactoryBean with name 'apUserMapper' and 'com.lingyidianke.service.user.mapper.ApUserMapper' mapperInterface 2025-07-01 13:37:20.351 [main] DEBUG o.m.s.mapper.ClassPathMapperScanner - Enabling autowire by type for MapperFactoryBean with name 'apUserMapper'. 2025-07-01 13:37:20.628 [main] INFO o.s.cloud.context.scope.GenericScope - BeanFactory id=3c43dc0a-4512-3230-88b9-a854c1cec355 2025-07-01 13:37:20.730 [main] WARN o.s.c.s.PostProcessorRegistrationDelegate$BeanPostProcessorChecker - Bean 'com.alibaba.cloud.nacos.NacosConfigAutoConfiguration' of type [com.alibaba.cloud.nacos.NacosConfigAutoConfiguration] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying). The currently created BeanPostProcessor [nacosAnnotationProcessor] is declared through a non-static factory method on that class; consider declaring it as static instead. 2025-07-01 13:37:21.365 [main] INFO o.s.b.w.e.tomcat.TomcatWebServer - Tomcat initialized with port 51801 (http) 2025-07-01 13:37:21.389 [main] INFO o.a.coyote.http11.Http11NioProtocol - Initializing ProtocolHandler ["http-nio-51801"] 2025-07-01 13:37:21.397 [main] INFO o.a.catalina.core.StandardService - Starting service [Tomcat] 2025-07-01 13:37:21.399 [main] INFO o.a.catalina.core.StandardEngine - Starting Servlet engine: [Apache Tomcat/10.1.30] 2025-07-01 13:37:21.577 [main] INFO o.a.c.c.C.[Tomcat].[localhost].[/] - Initializing Spring embedded WebApplicationContext 2025-07-01 13:37:21.578 [main] INFO o.s.b.w.s.c.ServletWebServerApplicationContext - Root WebApplicationContext: initialization completed in 3618 ms 2025-07-01 13:37:21.923 [main] DEBUG c.b.m.e.s.MybatisSqlSessionFactoryBean - Registered plugin: 'MybatisPlusInterceptor{interceptors=[PaginationInnerInterceptor(logger=org.apache.ibatis.logging.slf4j.Slf4jImpl@5b1efaaf, overflow=false, maxLimit=null, dbType=MYSQL, dialect=null, optimizeJoin=true), com.baomidou.mybatisplus.extension.plugins.inner.OptimisticLockerInnerInterceptor@27585351]}' 2025-07-01 13:37:21.926 [main] DEBUG c.b.m.e.s.MybatisSqlSessionFactoryBean - Property 'mapperLocations' was not specified. 2025-07-01 13:37:22.330 [main] DEBUG c.b.m.core.toolkit.Sequence - Get /192.168.96.1 network interface 2025-07-01 13:37:22.369 [main] DEBUG c.b.m.core.toolkit.Sequence - Get network interface info: name:eth7 (VMware Virtual Ethernet Adapter for VMnet0) 2025-07-01 13:37:22.393 [main] DEBUG c.b.m.core.toolkit.Sequence - Initialization Sequence datacenterId:0 workerId:1 _ _ |_ _ _|_. ___ _ | _ | | |\/|_)(_| | |_\ |_)||_|_\ / | 3.5.7 2025-07-01 13:37:23.099 [main] DEBUG _.s.w.s.HandlerMapping.Mappings - c.l.s.u.c.ApUserLoginController: {POST [/api/v1/login/login_auth]}: login(LoginDto) 2025-07-01 13:37:23.107 [main] DEBUG _.s.w.s.HandlerMapping.Mappings - o.s.b.a.w.s.e.BasicErrorController: { [/error]}: error(HttpServletRequest) { [/error], produces [text/html]}: errorHtml(HttpServletRequest,HttpServletResponse) 2025-07-01 13:37:23.128 [main] DEBUG _.s.w.s.HandlerMapping.Mappings - 'beanNameHandlerMapping' {} 2025-07-01 13:37:23.286 [main] DEBUG _.s.w.s.HandlerMapping.Mappings - 'resourceHandlerMapping' {/webjars/**=ResourceHttpRequestHandler [classpath [META-INF/resources/webjars/]], /**=ResourceHttpRequestHandler [classpath [META-INF/resources/], classpath [resources/], classpath [static/], classpath [public/], ServletContext [/]]} 2025-07-01 13:37:23.526 [main] WARN c.a.n.client.logging.NacosLogging - Load Logback Configuration of Nacos fail, message: Could not initialize Logback Nacos logging from classpath:nacos-logback.xml 2025-07-01 13:37:23.530 [main] INFO c.a.nacos.client.utils.ParamUtil - [settings] [req-serv] nacos-server port:8848 2025-07-01 13:37:23.530 [main] INFO c.a.nacos.client.utils.ParamUtil - [settings] [http-client] connect timeout:1000 2025-07-01 13:37:23.535 [main] INFO c.a.nacos.client.utils.ParamUtil - PER_TASK_CONFIG_SIZE: 3000.0 2025-07-01 13:37:23.615 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. 2025-07-01 13:37:23.615 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. 2025-07-01 13:37:23.625 [main] INFO c.a.n.c.a.r.i.CredentialWatcher - null No credential found 2025-07-01 13:37:24.817 [main] INFO o.a.coyote.http11.Http11NioProtocol - Starting ProtocolHandler ["http-nio-51801"] 2025-07-01 13:37:24.881 [main] INFO o.s.b.w.e.tomcat.TomcatWebServer - Tomcat started on port 51801 (http) with context path '/' 2025-07-01 13:37:24.910 [main] INFO com.alibaba.nacos.client.naming - initializer namespace from ans.namespace attribute : null 2025-07-01 13:37:24.911 [main] INFO com.alibaba.nacos.client.naming - initializer namespace from ALIBABA_ALIWARE_NAMESPACE attribute :null 2025-07-01 13:37:24.913 [main] INFO com.alibaba.nacos.client.naming - initializer namespace from namespace attribute :null 2025-07-01 13:37:25.022 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. 2025-07-01 13:37:25.023 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. 2025-07-01 13:37:26.471 [main] INFO c.alibaba.nacos.common.remote.client - [RpcClientFactory] create a new rpc client of a52074fc-69d1-48b2-9aeb-d3875f5476f9 2025-07-01 13:37:26.694 [main] INFO c.alibaba.nacos.common.remote.client - [a52074fc-69d1-48b2-9aeb-d3875f5476f9] RpcClient init, ServerListFactory = com.alibaba.nacos.client.naming.core.ServerListManager 2025-07-01 13:37:26.695 [main] INFO c.alibaba.nacos.common.remote.client - [a52074fc-69d1-48b2-9aeb-d3875f5476f9] Registry connection listener to current client:com.alibaba.nacos.client.naming.remote.gprc.redo.NamingGrpcRedoService 2025-07-01 13:37:26.707 [main] INFO c.alibaba.nacos.common.remote.client - [a52074fc-69d1-48b2-9aeb-d3875f5476f9] Register server push request handler:com.alibaba.nacos.client.naming.remote.gprc.NamingPushRequestHandler 2025-07-01 13:37:26.720 [main] INFO c.alibaba.nacos.common.remote.client - [a52074fc-69d1-48b2-9aeb-d3875f5476f9] Try to connect to server on start up, server: {serverIp = '192.168.3.113', server main port = 8848} 2025-07-01 13:37:27.039 [main] INFO c.a.n.c.r.client.grpc.GrpcClient - grpc client connection server:192.168.3.113 ip,serverPort:9848,grpcTslConfig:{"sslProvider":"","enableTls":false,"mutualAuthEnable":false,"trustAll":false} 2025-07-01 13:37:29.706 [com.alibaba.nacos.client.naming.grpc.redo.0] WARN com.alibaba.nacos.client.naming - Grpc Connection is disconnect, skip current redo task 2025-07-01 13:37:30.973 [main] INFO c.alibaba.nacos.common.remote.client - [a52074fc-69d1-48b2-9aeb-d3875f5476f9] Success to connect to server [192.168.3.113:8848] on start up, connectionId = 1751348250562_192.168.3.113_5970 2025-07-01 13:37:30.974 [com.alibaba.nacos.client.remote.worker] INFO c.alibaba.nacos.common.remote.client - [a52074fc-69d1-48b2-9aeb-d3875f5476f9] Notify connected event to listeners. 2025-07-01 13:37:30.975 [com.alibaba.nacos.client.remote.worker] INFO com.alibaba.nacos.client.naming - Grpc connection connect 2025-07-01 13:37:30.975 [main] INFO c.alibaba.nacos.common.remote.client - [a52074fc-69d1-48b2-9aeb-d3875f5476f9] Register server push request handler:com.alibaba.nacos.common.remote.client.RpcClient$ConnectResetRequestHandler 2025-07-01 13:37:30.975 [main] INFO c.alibaba.nacos.common.remote.client - [a52074fc-69d1-48b2-9aeb-d3875f5476f9] Register server push request handler:com.alibaba.nacos.common.remote.client.RpcClient$$Lambda$1109/0x0000014db76cccf8 2025-07-01 13:37:30.977 [main] INFO com.alibaba.nacos.client.naming - [REGISTER-SERVICE] public registering service lingyidianke-leadnews-user with instance Instance{instanceId='null', ip='192.168.3.113', port=51801, weight=1.0, healthy=true, enabled=true, ephemeral=true, clusterName='', serviceName='null', metadata={IPv6=null, preserved.register.source=SPRING_CLOUD}} 2025-07-01 13:37:31.010 [main] INFO c.a.c.n.r.NacosServiceRegistry - nacos registry, DEFAULT_GROUP lingyidianke-leadnews-user 192.168.3.113:51801 register finished 2025-07-01 13:37:31.238 [main] INFO c.l.s.u.LingyidiankeLeadnewsUserApplication - Started LingyidiankeLeadnewsUserApplication in 18.411 seconds (process running for 21.381) 2025-07-01 13:37:31.241 [main] ERROR com.zaxxer.hikari.HikariConfig - HikariPool-1 - dataSource or dataSourceClassName or jdbcUrl is required. 2025-07-01 13:37:31.244 [main] INFO o.s.b.a.l.ConditionEvaluationReportLogger - Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled. 2025-07-01 13:37:31.833 [main] INFO c.a.c.n.r.NacosServiceRegistry - De-registering from Nacos Server now... 2025-07-01 13:37:31.833 [main] INFO com.alibaba.nacos.client.naming - [DEREGISTER-SERVICE] public deregistering service lingyidianke-leadnews-user with instance: Instance{instanceId='null', ip='192.168.3.113', port=51801, weight=1.0, healthy=true, enabled=true, ephemeral=true, clusterName='', serviceName='null', metadata={}} 2025-07-01 13:37:31.852 [main] INFO c.a.c.n.r.NacosServiceRegistry - De-registration finished. 2025-07-01 13:37:31.853 [main] INFO com.alibaba.nacos.client.naming - com.alibaba.nacos.client.naming.cache.ServiceInfoHolder do shutdown begin 2025-07-01 13:37:31.853 [main] INFO com.alibaba.nacos.client.naming - com.alibaba.nacos.client.naming.backups.FailoverReactor do shutdown begin 2025-07-01 13:37:32.177 [main] INFO com.alibaba.nacos.client.naming - com.alibaba.nacos.client.naming.backups.FailoverReactor do shutdown stop 2025-07-01 13:37:32.177 [main] INFO com.alibaba.nacos.client.naming - com.alibaba.nacos.client.naming.cache.ServiceInfoHolder do shutdown stop 2025-07-01 13:37:32.177 [main] INFO com.alibaba.nacos.client.naming - com.alibaba.nacos.client.naming.remote.NamingClientProxyDelegate do shutdown begin 2025-07-01 13:37:32.179 [main] INFO com.alibaba.nacos.client.naming - com.alibaba.nacos.client.naming.core.ServiceInfoUpdateService do shutdown begin 2025-07-01 13:37:32.179 [main] INFO com.alibaba.nacos.client.naming - com.alibaba.nacos.client.naming.core.ServiceInfoUpdateService do shutdown stop 2025-07-01 13:37:32.179 [main] INFO com.alibaba.nacos.client.naming - com.alibaba.nacos.client.naming.core.ServerListManager do shutdown begin 2025-07-01 13:37:32.179 [main] WARN com.alibaba.nacos.client.naming - [NamingHttpClientManager] Start destroying NacosRestTemplate 2025-07-01 13:37:32.179 [main] WARN com.alibaba.nacos.client.naming - [NamingHttpClientManager] Destruction of the end 2025-07-01 13:37:32.179 [main] INFO com.alibaba.nacos.client.naming - com.alibaba.nacos.client.naming.core.ServerListManager do shutdown stop 2025-07-01 13:37:32.180 [main] INFO com.alibaba.nacos.client.naming - com.alibaba.nacos.client.naming.remote.http.NamingHttpClientProxy do shutdown begin 2025-07-01 13:37:32.180 [main] WARN com.alibaba.nacos.client.naming - [NamingHttpClientManager] Start destroying NacosRestTemplate 2025-07-01 13:37:32.180 [main] WARN com.alibaba.nacos.client.naming - [NamingHttpClientManager] Destruction of the end 2025-07-01 13:37:32.180 [main] INFO com.alibaba.nacos.client.naming - com.alibaba.nacos.client.naming.remote.http.NamingHttpClientProxy do shutdown stop 2025-07-01 13:37:32.180 [main] INFO c.alibaba.nacos.common.remote.client - Shutdown rpc client, set status to shutdown 2025-07-01 13:37:32.180 [main] INFO c.alibaba.nacos.common.remote.client - Shutdown client event executor java.util.concurrent.ScheduledThreadPoolExecutor@369a95a5[Running, pool size = 2, active threads = 2, queued tasks = 0, completed tasks = 0] 2025-07-01 13:37:32.181 [main] INFO c.alibaba.nacos.common.remote.client - Close current connection 1751348250562_192.168.3.113_5970 2025-07-01 13:37:32.187 [main] INFO c.a.n.c.r.client.grpc.GrpcClient - Shutdown grpc executor java.util.concurrent.ThreadPoolExecutor@2ac05a33[Running, pool size = 11, active threads = 0, queued tasks = 0, completed tasks = 11] 2025-07-01 13:37:32.188 [main] INFO com.alibaba.nacos.client.naming - Shutdown grpc redo service executor java.util.concurrent.ScheduledThreadPoolExecutor@35af52dc[Running, pool size = 1, active threads = 0, queued tasks = 1, completed tasks = 1] 2025-07-01 13:37:32.189 [main] INFO c.a.n.c.a.r.i.CredentialWatcher - [null] CredentialWatcher is stopped 2025-07-01 13:37:32.189 [main] INFO c.a.n.c.a.r.i.CredentialService - [null] CredentialService is freed 2025-07-01 13:37:32.189 [main] INFO com.alibaba.nacos.client.naming - com.alibaba.nacos.client.naming.remote.NamingClientProxyDelegate do shutdown stop 2025-07-01 13:37:32.272 [main] ERROR o.s.boot.SpringApplication - Application run failed java.lang.IllegalArgumentException: dataSource or dataSourceClassName or jdbcUrl is required. at com.zaxxer.hikari.HikariConfig.validate(HikariConfig.java:1032) at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:108) at com.lingyidianke.service.user.LingyidiankeLeadnewsUserApplication.lambda$testDataSource$0(LingyidiankeLeadnewsUserApplication.java:60) at org.springframework.boot.SpringApplication.lambda$callRunner$5(SpringApplication.java:790) at org.springframework.util.function.ThrowingConsumer$1.acceptWithException(ThrowingConsumer.java:83) at org.springframework.util.function.ThrowingConsumer.accept(ThrowingConsumer.java:60) at org.springframework.util.function.ThrowingConsumer$1.accept(ThrowingConsumer.java:88) at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:798) at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:789) at org.springframework.boot.SpringApplication.lambda$callRunners$3(SpringApplication.java:774) at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) at java.base/java.util.stream.SortedOps$SizedRefSortingSink.end(SortedOps.java:357) at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:510) at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) at org.springframework.boot.SpringApplication.callRunners(SpringApplication.java:774) at org.springframework.boot.SpringApplication.run(SpringApplication.java:342) at org.springframework.boot.SpringApplication.run(SpringApplication.java:1363) at org.springframework.boot.SpringApplication.run(SpringApplication.java:1352) at com.lingyidianke.service.user.LingyidiankeLeadnewsUserApplication.main(LingyidiankeLeadnewsUserApplication.java:32) 2025-07-01 13:37:32.277 [Thread-9] WARN c.a.nacos.common.notify.NotifyCenter - [NotifyCenter] Start destroying Publisher 2025-07-01 13:37:32.277 [Thread-3] WARN c.a.n.c.http.HttpClientBeanHolder - [HttpClientBeanHolder] Start destroying common HttpClient 2025-07-01 13:37:32.277 [Thread-9] WARN c.a.nacos.common.notify.NotifyCenter - [NotifyCenter] Destruction of the end 进程已结束,退出代码为 1 出问题了alArgumentException: dataSource or dataSourceClassName or jdbcUrl is required.,package com.lingyidianke.service.user; import com.baomidou.mybatisplus.annotation.DbType; import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor; import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor; import com.zaxxer.hikari.HikariDataSource; import org.mybatis.spring.annotation.MapperScan; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.CommandLineRunner; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.client.discovery.EnableDiscoveryClient; import org.springframework.context.ConfigurableApplicationContext; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.core.env.Environment; import javax.sql.DataSource; import java.sql.Connection; import java.sql.SQLException; @SpringBootApplication @EnableDiscoveryClient @MapperScan("com.lingyidianke.service.user.mapper") public class LingyidiankeLeadnewsUserApplication { private static final Logger logger = LoggerFactory.getLogger(LingyidiankeLeadnewsUserApplication.class); public static void main(String[] args) { System.out.println("Application starting..."); ConfigurableApplicationContext context = SpringApplication.run(LingyidiankeLeadnewsUserApplication.class, args); // 验证日志系统是否正常工作 logger.info("Application started successfully."); checkEnvironment(context); validateMyBatisVersion(); } /** * 检查环境配置 */ private static void checkEnvironment(ConfigurableApplicationContext context) { Environment env = context.getEnvironment(); logger.info("Active profiles: {}", String.join(",", env.getActiveProfiles())); logger.info("Datasource URL: {}", env.getProperty("spring.datasource.url")); } /** * 验证数据源连接 */ @Autowired private DataSource dataSource; /** * 验证MyBatis运行时版本 */ @Bean public CommandLineRunner testDataSource(DataSource dataSource) { return args -> { try (Connection conn = dataSource.getConnection()) { logger.info("数据库连接成功: {}", conn.getMetaData().getURL()); } catch (SQLException e) { logger.error("数据库连接失败", e); } }; } private static void validateMyBatisVersion() { String version = Configuration.class.getPackage().getImplementationVersion(); logger.info("运行时MyBatis版本: {}", version); logger.error("当前版本:"); } }server: port: 51801 spring: application: name: lingyidianke-leadnews-user cloud: nacos: discovery: server-addr: 192.168.3.113:8848 username: nacos password: nacos config: server-addr: 192.168.3.113:8848 username: nacos password: nacos file-extension: yml extension-configs: # file-extension同级 - data-id: lingyidianke-leadnews-user-logging.yml group: DEFAULT_GROUP refresh: true # 启用动态刷新 main: allow-bean-definition-overriding: true # 开发环境允许Bean覆盖 # 日志配置(优先级低于Nacos配置) logging: config: classpath:logback-spring.xml file: path: D:/logs # 统一日志目录spring: application: name: lingyidianke-leadnews-user cloud: nacos: config: server-addr: 192.168.3.113:8848 namespace: public # 显式指定命名空间 data-id: ${spring.application.name}.yml # 动态引用应用名 group: DEFAULT_GROUP file-extension: yml refresh-enabled: true discovery: server-addr: ${spring.cloud.nacos.config.server-addr}
07-02
C:\Users\Administrator\.jdks\ms-17.0.15\bin\java.exe -XX:TieredStopAtLevel=1 -Dspring.output.ansi.enabled=always -Dcom.sun.management.jmxremote -Dspring.jmx.enabled=true -Dspring.liveBeansView.mbeanDomain -Dspring.application.admin.enabled=true "-Dmanagement.endpoints.jmx.exposure.include=*" "-javaagent:C:\Users\Administrator\AppData\Local\Programs\IntelliJ IDEA Ultimate 2025.1.3\lib\idea_rt.jar=59648" -Dfile.encoding=UTF-8 -classpath C:\Users\Administrator\IdeaProjects\demo\target\classes;D:\apache-maven-3.9.10\maven-repository\org\springframework\boot\spring-boot-starter-web\2.6.13\spring-boot-starter-web-2.6.13.jar;D:\apache-maven-3.9.10\maven-repository\org\springframework\boot\spring-boot-starter\2.6.13\spring-boot-starter-2.6.13.jar;D:\apache-maven-3.9.10\maven-repository\org\springframework\boot\spring-boot-starter-logging\2.6.13\spring-boot-starter-logging-2.6.13.jar;D:\apache-maven-3.9.10\maven-repository\ch\qos\logback\logback-classic\1.2.11\logback-classic-1.2.11.jar;D:\apache-maven-3.9.10\maven-repository\ch\qos\logback\logback-core\1.2.11\logback-core-1.2.11.jar;D:\apache-maven-3.9.10\maven-repository\org\apache\logging\log4j\log4j-to-slf4j\2.17.2\log4j-to-slf4j-2.17.2.jar;D:\apache-maven-3.9.10\maven-repository\org\apache\logging\log4j\log4j-api\2.17.2\log4j-api-2.17.2.jar;D:\apache-maven-3.9.10\maven-repository\org\slf4j\jul-to-slf4j\1.7.36\jul-to-slf4j-1.7.36.jar;D:\apache-maven-3.9.10\maven-repository\jakarta\annotation\jakarta.annotation-api\1.3.5\jakarta.annotation-api-1.3.5.jar;D:\apache-maven-3.9.10\maven-repository\org\yaml\snakeyaml\1.29\snakeyaml-1.29.jar;D:\apache-maven-3.9.10\maven-repository\org\springframework\boot\spring-boot-starter-json\2.6.13\spring-boot-starter-json-2.6.13.jar;D:\apache-maven-3.9.10\maven-repository\com\fasterxml\jackson\core\jackson-databind\2.13.4.2\jackson-databind-2.13.4.2.jar;D:\apache-maven-3.9.10\maven-repository\com\fasterxml\jackson\core\jackson-annotations\2.13.4\jackson-annotations-2.13.4.jar;D:\apache-maven-3.9.10\maven-repository\com\fasterxml\jackson\core\jackson-core\2.13.4\jackson-core-2.13.4.jar;D:\apache-maven-3.9.10\maven-repository\com\fasterxml\jackson\datatype\jackson-datatype-jdk8\2.13.4\jackson-datatype-jdk8-2.13.4.jar;D:\apache-maven-3.9.10\maven-repository\com\fasterxml\jackson\datatype\jackson-datatype-jsr310\2.13.4\jackson-datatype-jsr310-2.13.4.jar;D:\apache-maven-3.9.10\maven-repository\com\fasterxml\jackson\module\jackson-module-parameter-names\2.13.4\jackson-module-parameter-names-2.13.4.jar;D:\apache-maven-3.9.10\maven-repository\org\springframework\boot\spring-boot-starter-tomcat\2.6.13\spring-boot-starter-tomcat-2.6.13.jar;D:\apache-maven-3.9.10\maven-repository\org\apache\tomcat\embed\tomcat-embed-core\9.0.68\tomcat-embed-core-9.0.68.jar;D:\apache-maven-3.9.10\maven-repository\org\apache\tomcat\embed\tomcat-embed-el\9.0.68\tomcat-embed-el-9.0.68.jar;D:\apache-maven-3.9.10\maven-repository\org\apache\tomcat\embed\tomcat-embed-websocket\9.0.68\tomcat-embed-websocket-9.0.68.jar;D:\apache-maven-3.9.10\maven-repository\org\springframework\spring-web\5.3.23\spring-web-5.3.23.jar;D:\apache-maven-3.9.10\maven-repository\org\springframework\spring-beans\5.3.23\spring-beans-5.3.23.jar;D:\apache-maven-3.9.10\maven-repository\org\springframework\spring-webmvc\5.3.23\spring-webmvc-5.3.23.jar;D:\apache-maven-3.9.10\maven-repository\org\springframework\spring-aop\5.3.23\spring-aop-5.3.23.jar;D:\apache-maven-3.9.10\maven-repository\org\springframework\spring-context\5.3.23\spring-context-5.3.23.jar;D:\apache-maven-3.9.10\maven-repository\org\springframework\spring-expression\5.3.23\spring-expression-5.3.23.jar;D:\apache-maven-3.9.10\maven-repository\org\slf4j\slf4j-api\1.7.36\slf4j-api-1.7.36.jar;D:\apache-maven-3.9.10\maven-repository\org\springframework\spring-core\5.3.23\spring-core-5.3.23.jar;D:\apache-maven-3.9.10\maven-repository\org\springframework\spring-jcl\5.3.23\spring-jcl-5.3.23.jar;D:\apache-maven-3.9.10\maven-repository\org\springframework\boot\spring-boot-configuration-processor\2.6.13\spring-boot-configuration-processor-2.6.13.jar;D:\apache-maven-3.9.10\maven-repository\org\springframework\boot\spring-boot-devtools\2.6.13\spring-boot-devtools-2.6.13.jar;D:\apache-maven-3.9.10\maven-repository\org\springframework\boot\spring-boot\2.6.13\spring-boot-2.6.13.jar;D:\apache-maven-3.9.10\maven-repository\org\springframework\boot\spring-boot-autoconfigure\2.6.13\spring-boot-autoconfigure-2.6.13.jar;D:\apache-maven-3.9.10\maven-repository\org\projectlombok\lombok\1.18.24\lombok-1.18.24.jar;D:\apache-maven-3.9.10\maven-repository\org\mybatis\spring\boot\mybatis-spring-boot-starter\2.2.2\mybatis-spring-boot-starter-2.2.2.jar;D:\apache-maven-3.9.10\maven-repository\org\springframework\boot\spring-boot-starter-jdbc\2.6.13\spring-boot-starter-jdbc-2.6.13.jar;D:\apache-maven-3.9.10\maven-repository\com\zaxxer\HikariCP\4.0.3\HikariCP-4.0.3.jar;D:\apache-maven-3.9.10\maven-repository\org\springframework\spring-jdbc\5.3.23\spring-jdbc-5.3.23.jar;D:\apache-maven-3.9.10\maven-repository\org\mybatis\spring\boot\mybatis-spring-boot-autoconfigure\2.2.2\mybatis-spring-boot-autoconfigure-2.2.2.jar;D:\apache-maven-3.9.10\maven-repository\org\mybatis\mybatis\3.5.9\mybatis-3.5.9.jar;D:\apache-maven-3.9.10\maven-repository\org\mybatis\mybatis-spring\2.0.7\mybatis-spring-2.0.7.jar;D:\apache-maven-3.9.10\maven-repository\org\springframework\spring-tx\5.3.23\spring-tx-5.3.23.jar;D:\apache-maven-3.9.10\maven-repository\com\mysql\mysql-connector-j\8.0.31\mysql-connector-j-8.0.31.jar;D:\apache-maven-3.9.10\maven-repository\org\springframework\boot\spring-boot-starter-actuator\2.6.13\spring-boot-starter-actuator-2.6.13.jar;D:\apache-maven-3.9.10\maven-repository\org\springframework\boot\spring-boot-actuator-autoconfigure\2.6.13\spring-boot-actuator-autoconfigure-2.6.13.jar;D:\apache-maven-3.9.10\maven-repository\org\springframework\boot\spring-boot-actuator\2.6.13\spring-boot-actuator-2.6.13.jar;D:\apache-maven-3.9.10\maven-repository\io\micrometer\micrometer-core\1.8.11\micrometer-core-1.8.11.jar;D:\apache-maven-3.9.10\maven-repository\org\hdrhistogram\HdrHistogram\2.1.12\HdrHistogram-2.1.12.jar;D:\apache-maven-3.9.10\maven-repository\org\latencyutils\LatencyUtils\2.0.3\LatencyUtils-2.0.3.jar com.example.demo.DemoApplication 13:42:30.278 [Thread-0] DEBUG org.springframework.boot.devtools.restart.classloader.RestartClassLoader - Created RestartClassLoader org.springframework.boot.devtools.restart.classloader.RestartClassLoader@28c78a11 . ____ _ __ _ _ /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \ ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \ \\/ ___)| |_)| | | | | || (_| | ) ) ) ) ' |____| .__|_| |_|_| |_\__, | / / / / =========|_|==============|___/=/_/_/_/ :: Spring Boot :: (v2.6.13) 2025-07-11 13:42:30.555 INFO 6852 --- [ restartedMain] com.example.demo.DemoApplication : Starting DemoApplication using Java 17.0.15 on 闫晓强 with PID 6852 (C:\Users\Administrator\IdeaProjects\demo\target\classes started by Administrator in C:\Users\Administrator\IdeaProjects\demo) 2025-07-11 13:42:30.556 INFO 6852 --- [ restartedMain] com.example.demo.DemoApplication : No active profile set, falling back to 1 default profile: "default" 2025-07-11 13:42:30.590 INFO 6852 --- [ restartedMain] .e.DevToolsPropertyDefaultsPostProcessor : Devtools property defaults active! Set 'spring.devtools.add-properties' to 'false' to disable 2025-07-11 13:42:30.591 INFO 6852 --- [ restartedMain] .e.DevToolsPropertyDefaultsPostProcessor : For additional web related logging consider setting the 'logging.level.web' property to 'DEBUG' 2025-07-11 13:42:31.184 WARN 6852 --- [ restartedMain] o.m.s.mapper.ClassPathMapperScanner : No MyBatis mapper was found in '[com.example.demo]' package. Please check your configuration. 2025-07-11 13:42:31.495 INFO 6852 --- [ restartedMain] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 8080 (http) 2025-07-11 13:42:31.502 INFO 6852 --- [ restartedMain] o.apache.catalina.core.StandardService : Starting service [Tomcat] 2025-07-11 13:42:31.503 INFO 6852 --- [ restartedMain] org.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/9.0.68] 2025-07-11 13:42:31.555 INFO 6852 --- [ restartedMain] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext 2025-07-11 13:42:31.556 INFO 6852 --- [ restartedMain] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 965 ms 2025-07-11 13:42:31.785 INFO 6852 --- [ restartedMain] o.s.b.a.w.s.WelcomePageHandlerMapping : Adding welcome page: class path resource [static/index.html] 2025-07-11 13:42:32.037 INFO 6852 --- [ restartedMain] o.s.b.d.a.OptionalLiveReloadServer : LiveReload server is running on port 35729 2025-07-11 13:42:32.040 INFO 6852 --- [ restartedMain] o.s.b.a.e.web.EndpointLinksResolver : Exposing 2 endpoint(s) beneath base path '/actuator' 2025-07-11 13:42:32.072 INFO 6852 --- [ restartedMain] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8080 (http) with context path '' 2025-07-11 13:42:32.083 INFO 6852 --- [ restartedMain] com.example.demo.DemoApplication : Started DemoApplication in 1.796 seconds (JVM running for 2.257) 2025-07-11 13:42:32.425 INFO 6852 --- [)-192.168.0.102] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring DispatcherServlet 'dispatcherServlet' 2025-07-11 13:42:32.425 INFO 6852 --- [)-192.168.0.102] o.s.web.servlet.DispatcherServlet : Initializing Servlet 'dispatcherServlet' 2025-07-11 13:42:32.426 INFO 6852 --- [)-192.168.0.102] o.s.web.servlet.DispatcherServlet : Completed initialization in 1 ms 2025-07-11 13:42:32.472 INFO 6852 --- [)-192.168.0.102] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Starting... 2025-07-11 13:42:33.605 ERROR 6852 --- [)-192.168.0.102] com.zaxxer.hikari.pool.HikariPool : HikariPool-1 - Exception during pool initialization. java.sql.SQLException: Access denied for user 'root'@'localhost' (using password: YES) at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:129) ~[mysql-connector-j-8.0.31.jar:8.0.31] at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122) ~[mysql-connector-j-8.0.31.jar:8.0.31] at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:828) ~[mysql-connector-j-8.0.31.jar:8.0.31] at com.mysql.cj.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:448) ~[mysql-connector-j-8.0.31.jar:8.0.31] at com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:241) ~[mysql-connector-j-8.0.31.jar:8.0.31] at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:198) ~[mysql-connector-j-8.0.31.jar:8.0.31] at com.zaxxer.hikari.util.DriverDataSource.getConnection(DriverDataSource.java:138) ~[HikariCP-4.0.3.jar:na] at com.zaxxer.hikari.pool.PoolBase.newConnection(PoolBase.java:364) ~[HikariCP-4.0.3.jar:na] at com.zaxxer.hikari.pool.PoolBase.newPoolEntry(PoolBase.java:206) ~[HikariCP-4.0.3.jar:na] at com.zaxxer.hikari.pool.HikariPool.createPoolEntry(HikariPool.java:476) ~[HikariCP-4.0.3.jar:na] at com.zaxxer.hikari.pool.HikariPool.checkFailFast(HikariPool.java:561) ~[HikariCP-4.0.3.jar:na] at com.zaxxer.hikari.pool.HikariPool.<init>(HikariPool.java:115) ~[HikariCP-4.0.3.jar:na] at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) ~[HikariCP-4.0.3.jar:na] at org.springframework.jdbc.datasource.DataSourceUtils.fetchConnection(DataSourceUtils.java:159) ~[spring-jdbc-5.3.23.jar:5.3.23] at org.springframework.jdbc.datasource.DataSourceUtils.doGetConnection(DataSourceUtils.java:117) ~[spring-jdbc-5.3.23.jar:5.3.23] at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:80) ~[spring-jdbc-5.3.23.jar:5.3.23] at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:330) ~[spring-jdbc-5.3.23.jar:5.3.23] at org.springframework.boot.actuate.jdbc.DataSourceHealthIndicator.getProduct(DataSourceHealthIndicator.java:122) ~[spring-boot-actuator-2.6.13.jar:2.6.13] at org.springframework.boot.actuate.jdbc.DataSourceHealthIndicator.doDataSourceHealthCheck(DataSourceHealthIndicator.java:105) ~[spring-boot-actuator-2.6.13.jar:2.6.13] at org.springframework.boot.actuate.jdbc.DataSourceHealthIndicator.doHealthCheck(DataSourceHealthIndicator.java:100) ~[spring-boot-actuator-2.6.13.jar:2.6.13] at org.springframework.boot.actuate.health.AbstractHealthIndicator.health(AbstractHealthIndicator.java:82) ~[spring-boot-actuator-2.6.13.jar:2.6.13] at org.springframework.boot.actuate.health.HealthIndicator.getHealth(HealthIndicator.java:37) ~[spring-boot-actuator-2.6.13.jar:2.6.13] at org.springframework.boot.actuate.health.HealthEndpoint.getHealth(HealthEndpoint.java:94) ~[spring-boot-actuator-2.6.13.jar:2.6.13] at org.springframework.boot.actuate.health.HealthEndpoint.getHealth(HealthEndpoint.java:41) ~[spring-boot-actuator-2.6.13.jar:2.6.13] at org.springframework.boot.actuate.health.HealthEndpointSupport.getLoggedHealth(HealthEndpointSupport.java:172) ~[spring-boot-actuator-2.6.13.jar:2.6.13] at org.springframework.boot.actuate.health.HealthEndpointSupport.getContribution(HealthEndpointSupport.java:145) ~[spring-boot-actuator-2.6.13.jar:2.6.13] at org.springframework.boot.actuate.health.HealthEndpointSupport.getAggregateContribution(HealthEndpointSupport.java:156) ~[spring-boot-actuator-2.6.13.jar:2.6.13] at org.springframework.boot.actuate.health.HealthEndpointSupport.getContribution(HealthEndpointSupport.java:141) ~[spring-boot-actuator-2.6.13.jar:2.6.13] at org.springframework.boot.actuate.health.HealthEndpointSupport.getHealth(HealthEndpointSupport.java:110) ~[spring-boot-actuator-2.6.13.jar:2.6.13] at org.springframework.boot.actuate.health.HealthEndpointSupport.getHealth(HealthEndpointSupport.java:81) ~[spring-boot-actuator-2.6.13.jar:2.6.13] at org.springframework.boot.actuate.health.HealthEndpoint.health(HealthEndpoint.java:88) ~[spring-boot-actuator-2.6.13.jar:2.6.13] at org.springframework.boot.actuate.health.HealthEndpoint.health(HealthEndpoint.java:78) ~[spring-boot-actuator-2.6.13.jar:2.6.13] at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na] at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[na:na] at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na] at java.base/java.lang.reflect.Method.invoke(Method.java:569) ~[na:na] at org.springframework.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:282) ~[spring-core-5.3.23.jar:5.3.23] at org.springframework.boot.actuate.endpoint.invoke.reflect.ReflectiveOperationInvoker.invoke(ReflectiveOperationInvoker.java:74) ~[spring-boot-actuator-2.6.13.jar:2.6.13] at org.springframework.boot.actuate.endpoint.annotation.AbstractDiscoveredOperation.invoke(AbstractDiscoveredOperation.java:60) ~[spring-boot-actuator-2.6.13.jar:2.6.13] at org.springframework.boot.actuate.endpoint.jmx.EndpointMBean.invoke(EndpointMBean.java:122) ~[spring-boot-actuator-2.6.13.jar:2.6.13] at org.springframework.boot.actuate.endpoint.jmx.EndpointMBean.invoke(EndpointMBean.java:97) ~[spring-boot-actuator-2.6.13.jar:2.6.13] at java.management/com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:814) ~[na:na] at java.management/com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:802) ~[na:na] at java.management.rmi/javax.management.remote.rmi.RMIConnectionImpl.doOperation(RMIConnectionImpl.java:1472) ~[na:na] at java.management.rmi/javax.management.remote.rmi.RMIConnectionImpl$PrivilegedOperation.run(RMIConnectionImpl.java:1310) ~[na:na] at java.management.rmi/javax.management.remote.rmi.RMIConnectionImpl.doPrivilegedOperation(RMIConnectionImpl.java:1405) ~[na:na] at java.management.rmi/javax.management.remote.rmi.RMIConnectionImpl.invoke(RMIConnectionImpl.java:829) ~[na:na] at java.base/jdk.internal.reflect.GeneratedMethodAccessor48.invoke(Unknown Source) ~[na:na] at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na] at java.base/java.lang.reflect.Method.invoke(Method.java:569) ~[na:na] at java.rmi/sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:360) ~[na:na] at java.rmi/sun.rmi.transport.Transport$1.run(Transport.java:200) ~[na:na] at java.rmi/sun.rmi.transport.Transport$1.run(Transport.java:197) ~[na:na] at java.base/java.security.AccessController.doPrivileged(AccessController.java:712) ~[na:na] at java.rmi/sun.rmi.transport.Transport.serviceCall(Transport.java:196) ~[na:na] at java.rmi/sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:587) ~[na:na] at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:828) ~[na:na] at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.lambda$run$0(TCPTransport.java:705) ~[na:na] at java.base/java.security.AccessController.doPrivileged(AccessController.java:399) ~[na:na] at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:704) ~[na:na] at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) ~[na:na] at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) ~[na:na] at java.base/java.lang.Thread.run(Thread.java:840) ~[na:na] 2025-07-11 13:42:33.608 WARN 6852 --- [)-192.168.0.102] o.s.b.a.jdbc.DataSourceHealthIndicator : DataSource health check failed org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection; nested exception is java.sql.SQLException: Access denied for user 'root'@'localhost' (using password: YES) at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:83) ~[spring-jdbc-5.3.23.jar:5.3.23] at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:330) ~[spring-jdbc-5.3.23.jar:5.3.23] at org.springframework.boot.actuate.jdbc.DataSourceHealthIndicator.getProduct(DataSourceHealthIndicator.java:122) ~[spring-boot-actuator-2.6.13.jar:2.6.13] at org.springframework.boot.actuate.jdbc.DataSourceHealthIndicator.doDataSourceHealthCheck(DataSourceHealthIndicator.java:105) ~[spring-boot-actuator-2.6.13.jar:2.6.13] at org.springframework.boot.actuate.jdbc.DataSourceHealthIndicator.doHealthCheck(DataSourceHealthIndicator.java:100) ~[spring-boot-actuator-2.6.13.jar:2.6.13] at org.springframework.boot.actuate.health.AbstractHealthIndicator.health(AbstractHealthIndicator.java:82) ~[spring-boot-actuator-2.6.13.jar:2.6.13] at org.springframework.boot.actuate.health.HealthIndicator.getHealth(HealthIndicator.java:37) ~[spring-boot-actuator-2.6.13.jar:2.6.13] at org.springframework.boot.actuate.health.HealthEndpoint.getHealth(HealthEndpoint.java:94) ~[spring-boot-actuator-2.6.13.jar:2.6.13] at org.springframework.boot.actuate.health.HealthEndpoint.getHealth(HealthEndpoint.java:41) ~[spring-boot-actuator-2.6.13.jar:2.6.13] at org.springframework.boot.actuate.health.HealthEndpointSupport.getLoggedHealth(HealthEndpointSupport.java:172) ~[spring-boot-actuator-2.6.13.jar:2.6.13] at org.springframework.boot.actuate.health.HealthEndpointSupport.getContribution(HealthEndpointSupport.java:145) ~[spring-boot-actuator-2.6.13.jar:2.6.13] at org.springframework.boot.actuate.health.HealthEndpointSupport.getAggregateContribution(HealthEndpointSupport.java:156) ~[spring-boot-actuator-2.6.13.jar:2.6.13] at org.springframework.boot.actuate.health.HealthEndpointSupport.getContribution(HealthEndpointSupport.java:141) ~[spring-boot-actuator-2.6.13.jar:2.6.13] at org.springframework.boot.actuate.health.HealthEndpointSupport.getHealth(HealthEndpointSupport.java:110) ~[spring-boot-actuator-2.6.13.jar:2.6.13] at org.springframework.boot.actuate.health.HealthEndpointSupport.getHealth(HealthEndpointSupport.java:81) ~[spring-boot-actuator-2.6.13.jar:2.6.13] at org.springframework.boot.actuate.health.HealthEndpoint.health(HealthEndpoint.java:88) ~[spring-boot-actuator-2.6.13.jar:2.6.13] at org.springframework.boot.actuate.health.HealthEndpoint.health(HealthEndpoint.java:78) ~[spring-boot-actuator-2.6.13.jar:2.6.13] at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na] at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[na:na] at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na] at java.base/java.lang.reflect.Method.invoke(Method.java:569) ~[na:na] at org.springframework.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:282) ~[spring-core-5.3.23.jar:5.3.23] at org.springframework.boot.actuate.endpoint.invoke.reflect.ReflectiveOperationInvoker.invoke(ReflectiveOperationInvoker.java:74) ~[spring-boot-actuator-2.6.13.jar:2.6.13] at org.springframework.boot.actuate.endpoint.annotation.AbstractDiscoveredOperation.invoke(AbstractDiscoveredOperation.java:60) ~[spring-boot-actuator-2.6.13.jar:2.6.13] at org.springframework.boot.actuate.endpoint.jmx.EndpointMBean.invoke(EndpointMBean.java:122) ~[spring-boot-actuator-2.6.13.jar:2.6.13] at org.springframework.boot.actuate.endpoint.jmx.EndpointMBean.invoke(EndpointMBean.java:97) ~[spring-boot-actuator-2.6.13.jar:2.6.13] at java.management/com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:814) ~[na:na] at java.management/com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:802) ~[na:na] at java.management.rmi/javax.management.remote.rmi.RMIConnectionImpl.doOperation(RMIConnectionImpl.java:1472) ~[na:na] at java.management.rmi/javax.management.remote.rmi.RMIConnectionImpl$PrivilegedOperation.run(RMIConnectionImpl.java:1310) ~[na:na] at java.management.rmi/javax.management.remote.rmi.RMIConnectionImpl.doPrivilegedOperation(RMIConnectionImpl.java:1405) ~[na:na] at java.management.rmi/javax.management.remote.rmi.RMIConnectionImpl.invoke(RMIConnectionImpl.java:829) ~[na:na] at java.base/jdk.internal.reflect.GeneratedMethodAccessor48.invoke(Unknown Source) ~[na:na] at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na] at java.base/java.lang.reflect.Method.invoke(Method.java:569) ~[na:na] at java.rmi/sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:360) ~[na:na] at java.rmi/sun.rmi.transport.Transport$1.run(Transport.java:200) ~[na:na] at java.rmi/sun.rmi.transport.Transport$1.run(Transport.java:197) ~[na:na] at java.base/java.security.AccessController.doPrivileged(AccessController.java:712) ~[na:na] at java.rmi/sun.rmi.transport.Transport.serviceCall(Transport.java:196) ~[na:na] at java.rmi/sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:587) ~[na:na] at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:828) ~[na:na] at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.lambda$run$0(TCPTransport.java:705) ~[na:na] at java.base/java.security.AccessController.doPrivileged(AccessController.java:399) ~[na:na] at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:704) ~[na:na] at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) ~[na:na] at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) ~[na:na] at java.base/java.lang.Thread.run(Thread.java:840) ~[na:na] Caused by: java.sql.SQLException: Access denied for user 'root'@'localhost' (using password: YES) at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:129) ~[mysql-connector-j-8.0.31.jar:8.0.31] at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122) ~[mysql-connector-j-8.0.31.jar:8.0.31] at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:828) ~[mysql-connector-j-8.0.31.jar:8.0.31] at com.mysql.cj.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:448) ~[mysql-connector-j-8.0.31.jar:8.0.31] at com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:241) ~[mysql-connector-j-8.0.31.jar:8.0.31] at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:198) ~[mysql-connector-j-8.0.31.jar:8.0.31] at com.zaxxer.hikari.util.DriverDataSource.getConnection(DriverDataSource.java:138) ~[HikariCP-4.0.3.jar:na] at com.zaxxer.hikari.pool.PoolBase.newConnection(PoolBase.java:364) ~[HikariCP-4.0.3.jar:na] at com.zaxxer.hikari.pool.PoolBase.newPoolEntry(PoolBase.java:206) ~[HikariCP-4.0.3.jar:na] at com.zaxxer.hikari.pool.HikariPool.createPoolEntry(HikariPool.java:476) ~[HikariCP-4.0.3.jar:na] at com.zaxxer.hikari.pool.HikariPool.checkFailFast(HikariPool.java:561) ~[HikariCP-4.0.3.jar:na] at com.zaxxer.hikari.pool.HikariPool.<init>(HikariPool.java:115) ~[HikariCP-4.0.3.jar:na] at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) ~[HikariCP-4.0.3.jar:na] at org.springframework.jdbc.datasource.DataSourceUtils.fetchConnection(DataSourceUtils.java:159) ~[spring-jdbc-5.3.23.jar:5.3.23] at org.springframework.jdbc.datasource.DataSourceUtils.doGetConnection(DataSourceUtils.java:117) ~[spring-jdbc-5.3.23.jar:5.3.23] at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:80) ~[spring-jdbc-5.3.23.jar:5.3.23] ... 47 common frames omitted 请给出原因解释 数据库配置如下spring.datasource.url=jdbc:mysql://localhost:3306/mysqlservicedbone?useSSL=false&serverTimezone=UTC spring.datasource.username=root spring.datasource.password=mysql12345 spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
07-12
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值