spring-boot-2.0.3之quartz集成,不是你想的那样哦!

本文详细介绍Spring Boot集成Quartz的全过程,从配置文件到具体代码实现,涵盖定时任务的增删改查及触发控制。深入解析Quartz的作业调度机制,包括状态变化流程和常见问题排查。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

  开心一刻

    晚上回家,爸妈正在吵架,见我回来就都不说话了,看见我妈坐在那里瞪着我爸,我就问老爸“你干什么了惹我妈生这么大气?”  我爸说“没有什么啊,倒是你,这么大了还没有媳妇,要是你有媳妇给我们生一个孙子玩,我们致于吵架吗?”我一听就感觉要坏,老爸你这是来了一招调虎离山啊,实力坑儿子啊,果然我妈改瞪我了,然后完全不理我爸,直接指着我开骂了……

  路漫漫其修远兮,吾将上下而求索!

  github:https://github.com/youzhibing

  码云(gitee):https://gitee.com/youzhibing

java定时任务调度的实现方式 

  Timer

    这个相信大家都有用过,我也用过,但用的不多;

    特点是:简单易用,但由于所有任务都是由同一个线程来调度,因此所有任务都是串行执行的,同一时间只能有一个任务在执行,前一个任务的延迟或异常都将会影响到之后的任务;能实现简单的定时任务,稍微复杂点(或要求高一些)的定时任务却不好实现。
  ScheduledExecutor

    这个我相信大家也都用过,而且用的比Timer多;正是鉴于Timer的缺陷,Java 5推出了基于线程池设计的ScheduledExecutor;

    特点:每一个被调度的任务都会由线程池中一个线程去执行,因此任务是并发执行的,相互之间不会受到干扰。需要注意的是,只有当任务的执行时间到来时,ScheduedExecutor 才会真正启动一个线程,其余时间 ScheduledExecutor 都是在轮询任务的状态。

    虽然用ScheduledExecutor和Calendar能够实现复杂任务调度,但实现起来还是比较麻烦,对开发还是不够友善。

  Spring Scheduler

    spring对任务调度的实现支持,可以指定任务的执行时间,但对任务队列和线程池的管控较弱;一般集成于项目中,小任务很方便。
  JCronTab

    JCronTab则是一款完全按照crontab语法编写的java任务调度工具。

    特点:

      可指定任务的执行时间;

      提供完全按照Unix的UNIX-POSIX crontab的格式来规定时间;

      支持多种任务调度的持久化方法,包括普通文件、数据库以及 XML 文件进行持久化;

      JCronTab内置了发邮件功能,可以将任务执行结果方便地发送给需要被通知的人;

      设计和部署是高性能并可扩展。

  Quartz

    本文主角,请往下看
  当然还有XXL-JOB、Elastic-Job、Saturn等等

quartz相关概念

  Scheduler:调度器,进行任务调度;quartz的大脑
  Job:业务job,亦可称业务组件;定时任务的具体执行业务需要实现此接口,调度器会调用此接口的execute方法完成我们的定时业务
  JobDetail:用来定义业务Job的实例,我们可以称之为quartz job,很多时候我们谈到的job指的是JobDetail
  Trigger:触发器,用来定义一个指定的Job何时被执行
  JobBuilder:Job构建器,用来定义或创建JobDetail的实例;JobDetail限定了只能是Job的实例
  TriggerBuilder:触发器构建器,用来定义或创建触发器的实例

  具体为什么要分这么细,大家可以去查阅下相关资料,你会发现很多东西

工程实现

  pom.xml

<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.lee</groupId>
    <artifactId>spring-boot-quartz</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <java.version>1.8</java.version>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
        <druid.version>1.1.10</druid.version>
        <pagehelper.version>1.2.5</pagehelper.version>
        <druid.version>1.1.10</druid.version>
    </properties>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.3.RELEASE</version>
    </parent>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-quartz</artifactId>
        </dependency>

        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>${druid.version}</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>
        <dependency>
            <groupId>com.github.pagehelper</groupId>
            <artifactId>pagehelper-spring-boot-starter</artifactId>
            <version>${pagehelper.version}</version>
        </dependency>

        <!-- 日志 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-logging</artifactId>
            <exclusions>            <!-- 排除spring-boot-starter-logging中的全部依赖 -->
                <exclusion>
                    <groupId>*</groupId>
                    <artifactId>*</artifactId>
                </exclusion>
            </exclusions>
            <scope>test</scope>     <!-- 打包的时候不打spring-boot-starter-logging.jar -->
        </dependency>
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-classic</artifactId>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
    </dependencies>

    <build>
        <finalName>spring-boot-quartz</finalName>
        <plugins>
            <!-- 打包项目 mvn clean package -->
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>
View Code

  application.xml

server:
  port: 9001
  servlet:
    context-path: /quartz
spring:
  thymeleaf:
    mode: HTML
    cache: false
  #连接池配置
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    druid:
      driver-class-name: com.mysql.jdbc.Driver
      url: jdbc:mysql://localhost:3306/spring-boot-quartz?useSSL=false&useUnicode=true
      username: root
      password: 123456
      initial-size: 1                     #连接池初始大小
      max-active: 20                      #连接池中最大的活跃连接数
      min-idle: 1                         #连接池中最小的活跃连接数
      max-wait: 60000                     #配置获取连接等待超时的时间
      pool-prepared-statements: true    #打开PSCache,并且指定每个连接上PSCache的大小
      max-pool-prepared-statement-per-connection-size: 20
      validation-query: SELECT 1 FROM DUAL
      validation-query-timeout: 30000
      test-on-borrow: false             #是否在获得连接后检测其可用性
      test-on-return: false             #是否在连接放回连接池后检测其可用性
      test-while-idle: true             #是否在连接空闲一段时间后检测其可用性
  quartz:
    #相关属性配置
    properties:
      org:
        quartz:
          scheduler:
            instanceName: quartzScheduler
            instanceId: AUTO
          jobStore:
            class: org.quartz.impl.jdbcjobstore.JobStoreTX
            driverDelegateClass: org.quartz.impl.jdbcjobstore.StdJDBCDelegate
            tablePrefix: QRTZ_
            isClustered: false
            clusterCheckinInterval: 10000
            useProperties: false
          threadPool:
            class: org.quartz.simpl.SimpleThreadPool
            threadCount: 10
            threadPriority: 5
            threadsInheritContextClassLoaderOfInitializingThread: true
    #数据库方式
    job-store-type: JDBC
    #初始化表结构
    jdbc:
      initialize-schema: NEVER
#mybatis配置
mybatis:
  type-aliases-package: com.lee.quartz.entity
  mapper-locations: classpath:mybatis/mapper/*.xml
#分页配置, pageHelper是物理分页插件
pagehelper:
  #4.0.0以后版本可以不设置该参数,该示例中是5.1.4
  helper-dialect: mysql
  #启用合理化,如果pageNum<1会查询第一页,如果pageNum>pages会查询最后一页
  reasonable: true
logging:
  level:
    com.lee.quartz.mapper: debug
View Code

  这样,quartz就配置好了,应用里面直接用即可

  JobController.java

package com.lee.quartz.web;


import com.github.pagehelper.PageInfo;
import com.lee.quartz.common.Result;
import com.lee.quartz.entity.QuartzJob;
import com.lee.quartz.service.IJobService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/job")
public class JobController {
    private final static Logger LOGGER = LoggerFactory.getLogger(JobController.class);

    @Autowired
    private IJobService jobService;
    
    @SuppressWarnings({ "unchecked", "rawtypes" })
    @PostMapping("/add")
    public Result save(QuartzJob quartz){
        LOGGER.info("新增任务");
        Result result = jobService.saveJob(quartz);
        return result;
    }
    @PostMapping("/list")
    public PageInfo list(String jobName,Integer pageNo,Integer pageSize){
        LOGGER.info("任务列表");
        PageInfo pageInfo = jobService.listQuartzJob(jobName, pageNo, pageSize);
        return pageInfo;
    }

    @PostMapping("/trigger")
    public  Result trigger(String jobName, String jobGroup) {
        LOGGER.info("触发任务");
        Result result = jobService.triggerJob(jobName, jobGroup);
        return result;
    }

    @PostMapping("/pause")
    public  Result pause(String jobName, String jobGroup) {
        LOGGER.info("停止任务");
        Result result = jobService.pauseJob(jobName, jobGroup);
        return result;
    }

    @PostMapping("/resume")
    public  Result resume(String jobName, String jobGroup) {
        LOGGER.info("恢复任务");
        Result result = jobService.resumeJob(jobName, jobGroup);
        return result;
    }

    @PostMapping("/remove")
    public  Result remove(String jobName, String jobGroup) {
        LOGGER.info("移除任务");
        Result result = jobService.removeJob(jobName, jobGroup);
        return result;
    }
}
View Code

  JobServiceImpl.java

package com.lee.quartz.service.impl;

import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.lee.quartz.common.Result;
import com.lee.quartz.entity.QuartzJob;
import com.lee.quartz.mapper.JobMapper;
import com.lee.quartz.service.IJobService;
import org.quartz.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class JobServiceImpl implements IJobService {

    @Autowired
    private Scheduler scheduler;

    @Autowired
    private JobMapper jobMapper;

    @Override
    public PageInfo listQuartzJob(String jobName, Integer pageNum, Integer pageSize) {
        PageHelper.startPage(pageNum, pageSize);
        List<QuartzJob> jobList = jobMapper.listJob(jobName);
        PageInfo pageInfo = new PageInfo(jobList);
        return pageInfo;
    }

    @Override
    public Result saveJob(QuartzJob quartz){
        try {
            //如果是修改  展示旧的 任务
            if(quartz.getOldJobGroup() != null && !"".equals(quartz.getOldJobGroup())){
                JobKey key = new JobKey(quartz.getOldJobName(),quartz.getOldJobGroup());
                scheduler.deleteJob(key);
            }

            //构建job信息
            Class cls = Class.forName(quartz.getJobClassName()) ;
            cls.newInstance();
            JobDetail job = JobBuilder.newJob(cls).withIdentity(quartz.getJobName(),
                    quartz.getJobGroup())
                    .withDescription(quartz.getDescription()).build();
            // 触发时间点
            CronScheduleBuilder cronScheduleBuilder = CronScheduleBuilder.cronSchedule(quartz.getCronExpression().trim());
            Trigger trigger = TriggerBuilder.newTrigger().withIdentity("trigger"+quartz.getJobName(), quartz.getJobGroup())
                    .startNow().withSchedule(cronScheduleBuilder).build();
            //交由Scheduler安排触发
            scheduler.scheduleJob(job, trigger);
        } catch (Exception e) {
            e.printStackTrace();
            return Result.error();
        }
        return Result.ok();
    }

    @Override
    public Result triggerJob(String jobName, String jobGroup) {
        JobKey key = new JobKey(jobName,jobGroup);
        try {
            scheduler.triggerJob(key);
        } catch (SchedulerException e) {
            e.printStackTrace();
            return Result.error();
        }
        return Result.ok();
    }

    @Override
    public Result pauseJob(String jobName, String jobGroup) {
        JobKey key = new JobKey(jobName,jobGroup);
        try {
            scheduler.pauseJob(key);
        } catch (SchedulerException e) {
            e.printStackTrace();
            return Result.error();
        }
        return Result.ok();
    }

    @Override
    public Result resumeJob(String jobName, String jobGroup) {
        JobKey key = new JobKey(jobName,jobGroup);
        try {
            scheduler.resumeJob(key);
        } catch (SchedulerException e) {
            e.printStackTrace();
            return Result.error();
        }
        return Result.ok();
    }

    @Override
    public Result removeJob(String jobName, String jobGroup) {
        try {
            TriggerKey triggerKey = TriggerKey.triggerKey(jobName, jobGroup);
            // 停止触发器
            scheduler.pauseTrigger(triggerKey);
            // 移除触发器
            scheduler.unscheduleJob(triggerKey);
            // 删除任务
            scheduler.deleteJob(JobKey.jobKey(jobName, jobGroup));
            System.out.println("removeJob:"+JobKey.jobKey(jobName));
        } catch (Exception e) {
            e.printStackTrace();
            return Result.error();
        }
        return Result.ok();
    }
}
View Code

  主要就是以上文件,详情请查看spring-boot-quartz

  工程里面数据源用的druid,springboot默认也会将该数据源应用到quartz,如果想给quartz单独配置数据源,可配合@QuartzDataSource来实现

  最终效果如下

trigger状态

  org.quartz.impl.jdbcjobstore.Constants中存放了一些列的常量,源代码如下

/* 
 * All content copyright Terracotta, Inc., unless otherwise indicated. All rights reserved.
 * 
 * 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 
 * 
 *   http://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.
 * 
 */

package org.quartz.impl.jdbcjobstore;

/**
 * <p>
 * This interface can be implemented by any <code>{@link
 * org.quartz.impl.jdbcjobstore.DriverDelegate}</code>
 * class that needs to use the constants contained herein.
 * </p>
 * 
 * @author <a href="mailto:jeff@binaryfeed.org">Jeffrey Wescott</a>
 * @author James House
 */
public interface Constants {

    /*
     * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     * 
     * Constants.
     * 
     * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     */

    // Table names
    String TABLE_JOB_DETAILS = "JOB_DETAILS";

    String TABLE_TRIGGERS = "TRIGGERS";

    String TABLE_SIMPLE_TRIGGERS = "SIMPLE_TRIGGERS";

    String TABLE_CRON_TRIGGERS = "CRON_TRIGGERS";

    String TABLE_BLOB_TRIGGERS = "BLOB_TRIGGERS";

    String TABLE_FIRED_TRIGGERS = "FIRED_TRIGGERS";

    String TABLE_CALENDARS = "CALENDARS";

    String TABLE_PAUSED_TRIGGERS = "PAUSED_TRIGGER_GRPS";

    String TABLE_LOCKS = "LOCKS";

    String TABLE_SCHEDULER_STATE = "SCHEDULER_STATE";

    // TABLE_JOB_DETAILS columns names
    
    String COL_SCHEDULER_NAME = "SCHED_NAME";
    
    String COL_JOB_NAME = "JOB_NAME";

    String COL_JOB_GROUP = "JOB_GROUP";

    String COL_IS_DURABLE = "IS_DURABLE";

    String COL_IS_VOLATILE = "IS_VOLATILE";

    String COL_IS_NONCONCURRENT = "IS_NONCONCURRENT";

    String COL_IS_UPDATE_DATA = "IS_UPDATE_DATA";

    String COL_REQUESTS_RECOVERY = "REQUESTS_RECOVERY";

    String COL_JOB_DATAMAP = "JOB_DATA";

    String COL_JOB_CLASS = "JOB_CLASS_NAME";

    String COL_DESCRIPTION = "DESCRIPTION";

    // TABLE_TRIGGERS columns names
    String COL_TRIGGER_NAME = "TRIGGER_NAME";

    String COL_TRIGGER_GROUP = "TRIGGER_GROUP";

    String COL_NEXT_FIRE_TIME = "NEXT_FIRE_TIME";

    String COL_PREV_FIRE_TIME = "PREV_FIRE_TIME";

    String COL_TRIGGER_STATE = "TRIGGER_STATE";

    String COL_TRIGGER_TYPE = "TRIGGER_TYPE";

    String COL_START_TIME = "START_TIME";

    String COL_END_TIME = "END_TIME";

    String COL_PRIORITY = "PRIORITY";

    String COL_MISFIRE_INSTRUCTION = "MISFIRE_INSTR";

    String ALIAS_COL_NEXT_FIRE_TIME = "ALIAS_NXT_FR_TM";

    // TABLE_SIMPLE_TRIGGERS columns names
    String COL_REPEAT_COUNT = "REPEAT_COUNT";

    String COL_REPEAT_INTERVAL = "REPEAT_INTERVAL";

    String COL_TIMES_TRIGGERED = "TIMES_TRIGGERED";

    // TABLE_CRON_TRIGGERS columns names
    String COL_CRON_EXPRESSION = "CRON_EXPRESSION";

    // TABLE_BLOB_TRIGGERS columns names
    String COL_BLOB = "BLOB_DATA";

    String COL_TIME_ZONE_ID = "TIME_ZONE_ID";

    // TABLE_FIRED_TRIGGERS columns names
    String COL_INSTANCE_NAME = "INSTANCE_NAME";

    String COL_FIRED_TIME = "FIRED_TIME";

    String COL_SCHED_TIME = "SCHED_TIME";
    
    String COL_ENTRY_ID = "ENTRY_ID";

    String COL_ENTRY_STATE = "STATE";

    // TABLE_CALENDARS columns names
    String COL_CALENDAR_NAME = "CALENDAR_NAME";

    String COL_CALENDAR = "CALENDAR";

    // TABLE_LOCKS columns names
    String COL_LOCK_NAME = "LOCK_NAME";

    // TABLE_LOCKS columns names
    String COL_LAST_CHECKIN_TIME = "LAST_CHECKIN_TIME";

    String COL_CHECKIN_INTERVAL = "CHECKIN_INTERVAL";

    // MISC CONSTANTS
    String DEFAULT_TABLE_PREFIX = "QRTZ_";

    // STATES
    String STATE_WAITING = "WAITING";

    String STATE_ACQUIRED = "ACQUIRED";

    String STATE_EXECUTING = "EXECUTING";

    String STATE_COMPLETE = "COMPLETE";

    String STATE_BLOCKED = "BLOCKED";

    String STATE_ERROR = "ERROR";

    String STATE_PAUSED = "PAUSED";

    String STATE_PAUSED_BLOCKED = "PAUSED_BLOCKED";

    String STATE_DELETED = "DELETED";

    /**
     * @deprecated Whether a trigger has misfired is no longer a state, but 
     * rather now identified dynamically by whether the trigger's next fire 
     * time is more than the misfire threshold time in the past.
     */
    String STATE_MISFIRED = "MISFIRED";

    String ALL_GROUPS_PAUSED = "_$_ALL_GROUPS_PAUSED_$_";

    // TRIGGER TYPES
    /** Simple Trigger type. */
    String TTYPE_SIMPLE = "SIMPLE";

    /** Cron Trigger type. */
    String TTYPE_CRON = "CRON";

    /** Calendar Interval Trigger type. */
    String TTYPE_CAL_INT = "CAL_INT";

    /** Daily Time Interval Trigger type. */
    String TTYPE_DAILY_TIME_INT = "DAILY_I";

    /** A general blob Trigger type. */
    String TTYPE_BLOB = "BLOB";
}

// EOF
View Code

  里面有quartz的表名、各个表包含的列名、trigger状态、trigger类型等内容

  状态包括

    WAITING:等待中
    ACQUIRED:将触发,此时还未到trigger真正的触发时刻
    EXECUTING:触发,亦可理解成执行中,trigger真正的触发时刻
    COMPLETE:完成,不再触发
    BLOCKED:受阻,不允许并发执行job时会出现(@DisallowConcurrentExecution)
    ERROR:出错
    PAUSED:暂停中
    PAUSED_BLOCKED:暂停受阻,不允许并发执行job时会出现(@DisallowConcurrentExecution)
    DELETED:已删除
    MISFIRED:触发失败,已弃用,由另外的替代方式

  状态变化流程图如下所示

  trigger的初始状态是WAITING,处于WAITING状态的trigger等待被触发。调度线程会不停地扫triggers表,根据NEXT_FIRE_TIME提前拉取即将触发的trigger,如果这个trigger被该调度线程拉取到,它的状态就会变为ACQUIRED。因为是提前拉取trigger,并未到达trigger真正的触发时刻,所以调度线程会等到真正触发的时刻,再将trigger状态由ACQUIRED改为EXECUTING。如果这个trigger不再执行,就将状态改为COMPLETE,否则为WAITING,开始新的周期。如果这个周期中的任何环节抛出异常,trigger的状态会变成ERROR。如果手动暂停这个trigger,状态会变成PAUSED。

总结

  Quartz作为一个开源的作业调度框架,提供了巨大的灵活性而不牺牲简单性。我们能够用它来为执行一个作业而创建简单的或复杂的调度。它有很多特征,如:数据库、集群、插件、JavaMail支持,EJB作业预构建,支持cron-like表达式等等;

  springboot集成quartz非常简单,最简单的情况下只需要引入依赖我们就可以享受quartz提供的功能,springboot默认会帮我们配置好quartz;当然我们也可以自定义配置来实现quartz的定制;

参考

  几种任务调度的Java实现方法与比较

  小柒2012 / spring-boot-quartz

  boot-features-quartz

  作业调度系统—Quartz

  记一次Quartz重复调度(任务重复执行)的问题排查

  Quartz FAQ

运行后报错:"C:\Program Files\Java\jdk-11\bin\java.exe" -XX:TieredStopAtLevel=1 -noverify -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:\IntelliJ IDEA 2023.2.5\lib\idea_rt.jar=7344:D:\IntelliJ IDEA 2023.2.5\bin" -Dfile.encoding=UTF-8 -classpath D:\A-work\cas-sso-demo\cas-server\target\classes;D:\IDEA\maven\maven_repository\org\apereo\cas\cas-server-webapp\6.6.14\cas-server-webapp-6.6.14.war;D:\IDEA\maven\maven_repository\org\apereo\cas\cas-server-support-jdbc\6.6.14\cas-server-support-jdbc-6.6.14.jar;D:\IDEA\maven\maven_repository\javax\xml\bind\jaxb-api\2.3.1\jaxb-api-2.3.1.jar;D:\IDEA\maven\maven_repository\javax\xml\ws\jaxws-api\2.3.1\jaxws-api-2.3.1.jar;D:\IDEA\maven\maven_repository\org\glassfish\main\javaee-api\javax.jws\3.1.2.2\javax.jws-3.1.2.2.jar;D:\IDEA\maven\maven_repository\org\glassfish\main\javaee-api\javax.jms\3.1.2.2\javax.jms-3.1.2.2.jar;D:\IDEA\maven\maven_repository\javax\xml\soap\javax.xml.soap-api\1.4.0\javax.xml.soap-api-1.4.0.jar;D:\IDEA\maven\maven_repository\org\glassfish\jaxb\jaxb-runtime\2.3.6\jaxb-runtime-2.3.6.jar;D:\IDEA\maven\maven_repository\com\sun\istack\istack-commons-runtime\4.1.1\istack-commons-runtime-4.1.1.jar;D:\IDEA\maven\maven_repository\io\swagger\core\v3\swagger-annotations\2.2.2\swagger-annotations-2.2.2.jar;D:\IDEA\maven\maven_repository\org\slf4j\slf4j-api\1.7.36\slf4j-api-1.7.36.jar;D:\IDEA\maven\maven_repository\org\slf4j\jul-to-slf4j\1.7.36\jul-to-slf4j-1.7.36.jar;D:\IDEA\maven\maven_repository\com\google\guava\guava\30.1.1-jre\guava-30.1.1-jre.jar;D:\IDEA\maven\maven_repository\com\google\guava\failureaccess\1.0.1\failureaccess-1.0.1.jar;D:\IDEA\maven\maven_repository\com\google\guava\listenablefuture\9999.0-empty-to-avoid-conflict-with-guava\listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar;D:\IDEA\maven\maven_repository\com\google\code\findbugs\jsr305\3.0.2\jsr305-3.0.2.jar;D:\IDEA\maven\maven_repository\org\checkerframework\checker-qual\3.8.0\checker-qual-3.8.0.jar;D:\IDEA\maven\maven_repository\com\google\j2objc\j2objc-annotations\1.3\j2objc-annotations-1.3.jar;D:\IDEA\maven\maven_repository\de\cronn\reflection-util\2.14.0\reflection-util-2.14.0.jar;D:\IDEA\maven\maven_repository\net\bytebuddy\byte-buddy\1.12.12\byte-buddy-1.12.12.jar;D:\IDEA\maven\maven_repository\org\objenesis\objenesis\3.2\objenesis-3.2.jar;D:\IDEA\maven\maven_repository\org\springmodules\spring-modules-cache\0.8\spring-modules-cache-0.8.jar;D:\IDEA\maven\maven_repository\commons-attributes\commons-attributes-api\2.1\commons-attributes-api-2.1.jar;D:\IDEA\maven\maven_repository\qdox\qdox\1.5\qdox-1.5.jar;D:\IDEA\maven\maven_repository\commons-attributes\commons-attributes-compiler\2.1\commons-attributes-compiler-2.1.jar;D:\IDEA\maven\maven_repository\concurrent\concurrent\1.3.4\concurrent-1.3.4.jar;D:\IDEA\maven\maven_repository\cglib\cglib-nodep\2.1_3\cglib-nodep-2.1_3.jar;D:\IDEA\maven\maven_repository\geronimo-spec\geronimo-spec-jta\1.0.1B-rc4\geronimo-spec-jta-1.0.1B-rc4.jar;D:\IDEA\maven\maven_repository\opensymphony\oscache\2.1.1\oscache-2.1.1.jar;D:\IDEA\maven\maven_repository\oro\oro\2.0.8\oro-2.0.8.jar;D:\IDEA\maven\maven_repository\commons-io\commons-io\2.11.0\commons-io-2.11.0.jar;D:\IDEA\maven\maven_repository\org\apache\commons\commons-jexl3\3.2.1\commons-jexl3-3.2.1.jar;D:\IDEA\maven\maven_repository\org\apache\commons\commons-text\1.10.0\commons-text-1.10.0.jar;D:\IDEA\maven\maven_repository\org\apache\commons\commons-pool2\2.11.1\commons-pool2-2.11.1.jar;D:\IDEA\maven\maven_repository\commons-cli\commons-cli\1.5.0\commons-cli-1.5.0.jar;D:\IDEA\maven\maven_repository\commons-beanutils\commons-beanutils\1.9.4\commons-beanutils-1.9.4.jar;D:\IDEA\maven\maven_repository\commons-validator\commons-validator\1.7\commons-validator-1.7.jar;D:\IDEA\maven\maven_repository\commons-codec\commons-codec\1.15\commons-codec-1.15.jar;D:\IDEA\maven\maven_repository\org\apache\commons\commons-lang3\3.12.0\commons-lang3-3.12.0.jar;D:\IDEA\maven\maven_repository\commons-lang\commons-lang\2.6\commons-lang-2.6.jar;D:\IDEA\maven\maven_repository\org\jooq\jool\0.9.14\jool-0.9.14.jar;D:\IDEA\maven\maven_repository\commons-collections\commons-collections\3.2.2\commons-collections-3.2.2.jar;D:\IDEA\maven\maven_repository\org\apache\commons\commons-collections4\4.4\commons-collections4-4.4.jar;D:\IDEA\maven\maven_repository\org\apereo\inspektr\inspektr-audit\1.8.21.GA\inspektr-audit-1.8.21.GA.jar;D:\IDEA\maven\maven_repository\org\apereo\inspektr\inspektr-common\1.8.21.GA\inspektr-common-1.8.21.GA.jar;D:\IDEA\maven\maven_repository\org\apereo\inspektr\inspektr-support-spring\1.8.21.GA\inspektr-support-spring-1.8.21.GA.jar;D:\IDEA\maven\maven_repository\org\apereo\service\persondir\person-directory-impl\2.0.13\person-directory-impl-2.0.13.jar;D:\IDEA\maven\maven_repository\aopalliance\aopalliance\1.0\aopalliance-1.0.jar;D:\IDEA\maven\maven_repository\org\apereo\service\persondir\person-directory-api\2.0.13\person-directory-api-2.0.13.jar;D:\IDEA\maven\maven_repository\com\microsoft\alm\oauth2-useragent\0.11.3\oauth2-useragent-0.11.3.jar;D:\IDEA\maven\maven_repository\org\springframework\spring-aop\5.3.22\spring-aop-5.3.22.jar;D:\IDEA\maven\maven_repository\org\springframework\spring-beans\5.3.22\spring-beans-5.3.22.jar;D:\IDEA\maven\maven_repository\org\springframework\spring-context\5.3.22\spring-context-5.3.22.jar;D:\IDEA\maven\maven_repository\org\springframework\spring-context-support\5.3.22\spring-context-support-5.3.22.jar;D:\IDEA\maven\maven_repository\org\springframework\retry\spring-retry\1.3.3\spring-retry-1.3.3.jar;D:\IDEA\maven\maven_repository\org\springframework\spring-core\5.3.22\spring-core-5.3.22.jar;D:\IDEA\maven\maven_repository\org\springframework\spring-jcl\5.3.22\spring-jcl-5.3.22.jar;D:\IDEA\maven\maven_repository\org\springframework\data\spring-data-commons\2.7.2\spring-data-commons-2.7.2.jar;D:\IDEA\maven\maven_repository\org\springframework\spring-jms\5.3.22\spring-jms-5.3.22.jar;D:\IDEA\maven\maven_repository\org\springframework\spring-messaging\5.3.22\spring-messaging-5.3.22.jar;D:\IDEA\maven\maven_repository\org\springframework\spring-expression\5.3.22\spring-expression-5.3.22.jar;D:\IDEA\maven\maven_repository\org\springframework\spring-jdbc\5.3.22\spring-jdbc-5.3.22.jar;D:\IDEA\maven\maven_repository\org\springframework\spring-orm\5.3.22\spring-orm-5.3.22.jar;D:\IDEA\maven\maven_repository\org\springframework\spring-tx\5.3.22\spring-tx-5.3.22.jar;D:\IDEA\maven\maven_repository\org\springframework\spring-web\5.3.22\spring-web-5.3.22.jar;D:\IDEA\maven\maven_repository\org\springframework\spring-webmvc\5.3.22\spring-webmvc-5.3.22.jar;D:\IDEA\maven\maven_repository\com\fasterxml\jackson\core\jackson-databind\2.13.4\jackson-databind-2.13.4.jar;D:\IDEA\maven\maven_repository\com\fasterxml\jackson\core\jackson-core\2.13.4\jackson-core-2.13.4.jar;D:\IDEA\maven\maven_repository\com\fasterxml\jackson\datatype\jackson-datatype-guava\2.13.4\jackson-datatype-guava-2.13.4.jar;D:\IDEA\maven\maven_repository\com\fasterxml\jackson\core\jackson-annotations\2.13.4\jackson-annotations-2.13.4.jar;D:\IDEA\maven\maven_repository\com\fasterxml\jackson\jaxrs\jackson-jaxrs-json-provider\2.13.4\jackson-jaxrs-json-provider-2.13.4.jar;D:\IDEA\maven\maven_repository\com\fasterxml\jackson\jaxrs\jackson-jaxrs-base\2.13.4\jackson-jaxrs-base-2.13.4.jar;D:\IDEA\maven\maven_repository\com\fasterxml\jackson\module\jackson-module-jaxb-annotations\2.13.4\jackson-module-jaxb-annotations-2.13.4.jar;D:\IDEA\maven\maven_repository\com\fasterxml\jackson\datatype\jackson-datatype-jsr310\2.13.4\jackson-datatype-jsr310-2.13.4.jar;D:\IDEA\maven\maven_repository\com\fasterxml\jackson\module\jackson-module-parameter-names\2.13.4\jackson-module-parameter-names-2.13.4.jar;D:\IDEA\maven\maven_repository\com\fasterxml\jackson\datatype\jackson-datatype-jdk8\2.13.4\jackson-datatype-jdk8-2.13.4.jar;D:\IDEA\maven\maven_repository\org\hjson\hjson\3.0.1\hjson-3.0.1.jar;D:\IDEA\maven\maven_repository\com\fasterxml\jackson\dataformat\jackson-dataformat-yaml\2.13.4\jackson-dataformat-yaml-2.13.4.jar;D:\IDEA\maven\maven_repository\com\fasterxml\jackson\dataformat\jackson-dataformat-xml\2.13.4\jackson-dataformat-xml-2.13.4.jar;D:\IDEA\maven\maven_repository\org\codehaus\woodstox\stax2-api\4.2.1\stax2-api-4.2.1.jar;D:\IDEA\maven\maven_repository\com\fasterxml\woodstox\woodstox-core\6.3.1\woodstox-core-6.3.1.jar;D:\IDEA\maven\maven_repository\com\fasterxml\jackson\dataformat\jackson-dataformat-properties\2.13.4\jackson-dataformat-properties-2.13.4.jar;D:\IDEA\maven\maven_repository\org\apache\httpcomponents\httpclient\4.5.13\httpclient-4.5.13.jar;D:\IDEA\maven\maven_repository\org\apache\httpcomponents\httpcore\4.4.15\httpcore-4.4.15.jar;D:\IDEA\maven\maven_repository\org\quartz-scheduler\quartz\2.3.2\quartz-2.3.2.jar;D:\IDEA\maven\maven_repository\com\mchange\mchange-commons-java\0.2.15\mchange-commons-java-0.2.15.jar;D:\IDEA\maven\maven_repository\org\apache\bval\bval-jsr\2.0.6\bval-jsr-2.0.6.jar;D:\IDEA\maven\maven_repository\javax\persistence\javax.persistence-api\2.2\javax.persistence-api-2.2.jar;D:\IDEA\maven\maven_repository\org\apache\groovy\groovy-jsr223\4.0.4\groovy-jsr223-4.0.4.jar;D:\IDEA\maven\maven_repository\org\apache\groovy\groovy-json\4.0.4\groovy-json-4.0.4.jar;D:\IDEA\maven\maven_repository\org\apache\groovy\groovy-xml\4.0.4\groovy-xml-4.0.4.jar;D:\IDEA\maven\maven_repository\org\apache\groovy\groovy\4.0.4\groovy-4.0.4.jar;D:\IDEA\maven\maven_repository\org\apache\groovy\groovy-datetime\4.0.4\groovy-datetime-4.0.4.jar;D:\IDEA\maven\maven_repository\org\apache\groovy\groovy-templates\4.0.4\groovy-templates-4.0.4.jar;D:\IDEA\maven\maven_repository\org\apache\groovy\groovy-sql\4.0.4\groovy-sql-4.0.4.jar;D:\IDEA\maven\maven_repository\org\apache\groovy\groovy-groovysh\4.0.4\groovy-groovysh-4.0.4.jar;D:\IDEA\maven\maven_repository\jline\jline\2.14.6\jline-2.14.6.jar;D:\IDEA\maven\maven_repository\com\github\ben-manes\caffeine\caffeine\3.1.1\caffeine-3.1.1.jar;D:\IDEA\maven\maven_repository\com\google\errorprone\error_prone_annotations\2.14.0\error_prone_annotations-2.14.0.jar;D:\IDEA\maven\maven_repository\com\github\ben-manes\caffeine\guava\3.1.1\guava-3.1.1.jar;D:\IDEA\maven\maven_repository\org\springframework\cloud\spring-cloud-starter-bootstrap\3.1.3\spring-cloud-starter-bootstrap-3.1.3.jar;D:\IDEA\maven\maven_repository\org\springframework\cloud\spring-cloud-starter\3.1.3\spring-cloud-starter-3.1.3.jar;D:\IDEA\maven\maven_repository\org\springframework\cloud\spring-cloud-commons\3.1.3\spring-cloud-commons-3.1.3.jar;D:\IDEA\maven\maven_repository\org\springframework\cloud\spring-cloud-context\3.1.3\spring-cloud-context-3.1.3.jar;D:\IDEA\maven\maven_repository\org\springframework\boot\spring-boot-starter-aop\2.7.3\spring-boot-starter-aop-2.7.3.jar;D:\IDEA\maven\maven_repository\org\springframework\boot\spring-boot-starter-web\2.7.3\spring-boot-starter-web-2.7.3.jar;D:\IDEA\maven\maven_repository\org\springframework\boot\spring-boot-autoconfigure\2.7.3\spring-boot-autoconfigure-2.7.3.jar;D:\IDEA\maven\maven_repository\org\springframework\boot\spring-boot\2.7.3\spring-boot-2.7.3.jar;D:\IDEA\maven\maven_repository\org\springframework\boot\spring-boot-properties-migrator\2.7.3\spring-boot-properties-migrator-2.7.3.jar;D:\IDEA\maven\maven_repository\org\springframework\boot\spring-boot-configuration-metadata\2.7.3\spring-boot-configuration-metadata-2.7.3.jar;D:\IDEA\maven\maven_repository\org\springframework\boot\spring-boot-starter-actuator\2.7.3\spring-boot-starter-actuator-2.7.3.jar;D:\IDEA\maven\maven_repository\org\springframework\boot\spring-boot-actuator-autoconfigure\2.7.3\spring-boot-actuator-autoconfigure-2.7.3.jar;D:\IDEA\maven\maven_repository\io\micrometer\micrometer-core\1.9.3\micrometer-core-1.9.3.jar;D:\IDEA\maven\maven_repository\org\hdrhistogram\HdrHistogram\2.1.12\HdrHistogram-2.1.12.jar;D:\IDEA\maven\maven_repository\org\latencyutils\LatencyUtils\2.0.3\LatencyUtils-2.0.3.jar;D:\IDEA\maven\maven_repository\org\springframework\boot\spring-boot-starter-validation\2.7.3\spring-boot-starter-validation-2.7.3.jar;D:\IDEA\maven\maven_repository\org\springframework\boot\spring-boot-actuator\2.7.3\spring-boot-actuator-2.7.3.jar;D:\IDEA\maven\maven_repository\org\springframework\security\spring-security-core\5.7.3\spring-security-core-5.7.3.jar;D:\IDEA\maven\maven_repository\org\springframework\security\spring-security-rsa\1.0.11.RELEASE\spring-security-rsa-1.0.11.RELEASE.jar;D:\IDEA\maven\maven_repository\org\springframework\security\spring-security-cas\5.7.3\spring-security-cas-5.7.3.jar;D:\IDEA\maven\maven_repository\org\springframework\security\spring-security-web\5.7.3\spring-security-web-5.7.3.jar;D:\IDEA\maven\maven_repository\org\springframework\integration\spring-integration-core\5.5.14\spring-integration-core-5.5.14.jar;D:\IDEA\maven\maven_repository\io\projectreactor\reactor-core\3.4.21\reactor-core-3.4.21.jar;D:\IDEA\maven\maven_repository\org\reactivestreams\reactive-streams\1.0.4\reactive-streams-1.0.4.jar;D:\IDEA\maven\maven_repository\org\springframework\integration\spring-integration-jmx\5.5.14\spring-integration-jmx-5.5.14.jar;D:\IDEA\maven\maven_repository\org\springframework\webflow\spring-webflow\2.5.1.RELEASE\spring-webflow-2.5.1.RELEASE.jar;D:\IDEA\maven\maven_repository\org\springframework\webflow\spring-binding\2.5.1.RELEASE\spring-binding-2.5.1.RELEASE.jar;D:\IDEA\maven\maven_repository\javax\el\javax.el-api\3.0.0\javax.el-api-3.0.0.jar;D:\IDEA\maven\maven_repository\org\glassfish\web\el-impl\2.2\el-impl-2.2.jar;D:\IDEA\maven\maven_repository\javax\servlet\javax.servlet-api\4.0.1\javax.servlet-api-4.0.1.jar;D:\IDEA\maven\maven_repository\javax\annotation\javax.annotation-api\1.3.2\javax.annotation-api-1.3.2.jar;D:\IDEA\maven\maven_repository\org\aspectj\aspectjrt\1.9.9.1\aspectjrt-1.9.9.1.jar;D:\IDEA\maven\maven_repository\org\aspectj\aspectjweaver\1.9.9.1\aspectjweaver-1.9.9.1.jar;D:\IDEA\maven\maven_repository\javax\validation\validation-api\2.0.1.Final\validation-api-2.0.1.Final.jar;D:\IDEA\maven\maven_repository\org\apereo\cas\cas-server-core-authentication-api\6.6.14\cas-server-core-authentication-api-6.6.14.jar;D:\IDEA\maven\maven_repository\org\apereo\cas\cas-server-core-api-services\6.6.14\cas-server-core-api-services-6.6.14.jar;D:\IDEA\maven\maven_repository\org\apereo\cas\cas-server-core-api-ticket\6.6.14\cas-server-core-api-ticket-6.6.14.jar;D:\IDEA\maven\maven_repository\org\apereo\cas\cas-server-core-authentication-mfa-api\6.6.14\cas-server-core-authentication-mfa-api-6.6.14.jar;D:\IDEA\maven\maven_repository\org\apereo\cas\cas-server-core-configuration-api\6.6.14\cas-server-core-configuration-api-6.6.14.jar;D:\IDEA\maven\maven_repository\org\yaml\snakeyaml\1.31\snakeyaml-1.31.jar;D:\IDEA\maven\maven_repository\org\apereo\cas\cas-server-core-util-api\6.6.14\cas-server-core-util-api-6.6.14.jar;D:\IDEA\maven\maven_repository\org\apereo\cas\cas-server-core-api-configuration-model\6.6.14\cas-server-core-api-configuration-model-6.6.14.jar;D:\IDEA\maven\maven_repository\org\springframework\boot\spring-boot-configuration-processor\2.7.3\spring-boot-configuration-processor-2.7.3.jar;D:\IDEA\maven\maven_repository\org\jsoup\jsoup\1.15.3\jsoup-1.15.3.jar;D:\IDEA\maven\maven_repository\org\json\json\20160810\json-20160810.jar;D:\IDEA\maven\maven_repository\org\apereo\cas\cas-server-core-api-mfa\6.6.14\cas-server-core-api-mfa-6.6.14.jar;D:\IDEA\maven\maven_repository\org\apereo\cas\cas-server-core-api-web\6.6.14\cas-server-core-api-web-6.6.14.jar;D:\IDEA\maven\maven_repository\org\bitbucket\b_c\jose4j\0.8.0\jose4j-0.8.0.jar;D:\IDEA\maven\maven_repository\org\pac4j\pac4j-config\5.4.6\pac4j-config-5.4.6.jar;D:\IDEA\maven\maven_repository\org\pac4j\pac4j-javaee\5.4.6\pac4j-javaee-5.4.6.jar;D:\IDEA\maven\maven_repository\org\pac4j\pac4j-http\5.4.6\pac4j-http-5.4.6.jar;D:\IDEA\maven\maven_repository\org\pac4j\pac4j-core\5.4.6\pac4j-core-5.4.6.jar;D:\IDEA\maven\maven_repository\org\pac4j\spring-webmvc-pac4j\6.0.3\spring-webmvc-pac4j-6.0.3.jar;D:\IDEA\maven\maven_repository\com\nimbusds\nimbus-jose-jwt\9.24.3\nimbus-jose-jwt-9.24.3.jar;D:\IDEA\maven\maven_repository\com\nimbusds\oauth2-oidc-sdk\9.42\oauth2-oidc-sdk-9.42.jar;D:\IDEA\maven\maven_repository\com\nimbusds\content-type\2.2\content-type-2.2.jar;D:\IDEA\maven\maven_repository\com\nimbusds\lang-tag\1.7\lang-tag-1.7.jar;D:\IDEA\maven\maven_repository\net\minidev\json-smart\2.4.9\json-smart-2.4.9.jar;D:\IDEA\maven\maven_repository\net\minidev\accessors-smart\2.4.9\accessors-smart-2.4.9.jar;D:\IDEA\maven\maven_repository\org\ow2\asm\asm\9.3\asm-9.3.jar;D:\IDEA\maven\maven_repository\com\github\stephenc\jcip\jcip-annotations\1.0-1\jcip-annotations-1.0-1.jar;D:\IDEA\maven\maven_repository\com\vdurmont\semver4j\3.1.0\semver4j-3.1.0.jar;D:\IDEA\maven\maven_repository\com\github\oshi\oshi-core\6.2.2\oshi-core-6.2.2.jar;D:\IDEA\maven\maven_repository\org\apache\velocity\velocity-engine-core\2.3\velocity-engine-core-2.3.jar;D:\IDEA\maven\maven_repository\org\apereo\cas\cas-server-support-jdbc-authentication\6.6.14\cas-server-support-jdbc-authentication-6.6.14.jar;D:\IDEA\maven\maven_repository\org\apache\shiro\shiro-core\1.9.1\shiro-core-1.9.1.jar;D:\IDEA\maven\maven_repository\org\apache\shiro\shiro-lang\1.9.1\shiro-lang-1.9.1.jar;D:\IDEA\maven\maven_repository\org\apache\shiro\shiro-cache\1.9.1\shiro-cache-1.9.1.jar;D:\IDEA\maven\maven_repository\org\apache\shiro\shiro-crypto-hash\1.9.1\shiro-crypto-hash-1.9.1.jar;D:\IDEA\maven\maven_repository\org\apache\shiro\shiro-crypto-core\1.9.1\shiro-crypto-core-1.9.1.jar;D:\IDEA\maven\maven_repository\org\apache\shiro\shiro-crypto-cipher\1.9.1\shiro-crypto-cipher-1.9.1.jar;D:\IDEA\maven\maven_repository\org\apache\shiro\shiro-config-core\1.9.1\shiro-config-core-1.9.1.jar;D:\IDEA\maven\maven_repository\org\apache\shiro\shiro-config-ogdl\1.9.1\shiro-config-ogdl-1.9.1.jar;D:\IDEA\maven\maven_repository\org\apache\shiro\shiro-event\1.9.1\shiro-event-1.9.1.jar;D:\IDEA\maven\maven_repository\org\apereo\cas\cas-server-support-jpa-util\6.6.14\cas-server-support-jpa-util-6.6.14.jar;D:\IDEA\maven\maven_repository\com\zaxxer\HikariCP\5.0.1\HikariCP-5.0.1.jar;D:\IDEA\maven\maven_repository\org\apereo\cas\cas-server-support-jdbc-drivers\6.6.14\cas-server-support-jdbc-drivers-6.6.14.jar;D:\IDEA\maven\maven_repository\org\apereo\cas\cas-server-core-api\6.6.14\cas-server-core-api-6.6.14.jar;D:\IDEA\maven\maven_repository\org\hsqldb\hsqldb\2.7.0\hsqldb-2.7.0.jar;D:\IDEA\maven\maven_repository\org\postgresql\postgresql\42.5.0\postgresql-42.5.0.jar;D:\IDEA\maven\maven_repository\org\mariadb\jdbc\mariadb-java-client\3.0.7\mariadb-java-client-3.0.7.jar;D:\IDEA\maven\maven_repository\net\sourceforge\jtds\jtds\1.3.1\jtds-1.3.1.jar;D:\IDEA\maven\maven_repository\com\microsoft\sqlserver\mssql-jdbc\10.2.1.jre11\mssql-jdbc-10.2.1.jre11.jar;D:\IDEA\maven\maven_repository\com\oracle\ojdbc\ojdbc10\19.3.0.0\ojdbc10-19.3.0.0.jar;D:\IDEA\maven\maven_repository\com\oracle\ojdbc\ucp\19.3.0.0\ucp-19.3.0.0.jar;D:\IDEA\maven\maven_repository\com\oracle\ojdbc\oraclepki\19.3.0.0\oraclepki-19.3.0.0.jar;D:\IDEA\maven\maven_repository\com\oracle\ojdbc\osdt_cert\19.3.0.0\osdt_cert-19.3.0.0.jar;D:\IDEA\maven\maven_repository\com\oracle\ojdbc\osdt_core\19.3.0.0\osdt_core-19.3.0.0.jar;D:\IDEA\maven\maven_repository\com\oracle\ojdbc\simplefan\19.3.0.0\simplefan-19.3.0.0.jar;D:\IDEA\maven\maven_repository\com\oracle\ojdbc\ons\19.3.0.0\ons-19.3.0.0.jar;D:\IDEA\maven\maven_repository\com\h2database\h2\1.4.197\h2-1.4.197.jar;D:\IDEA\maven\maven_repository\org\apereo\cas\cas-server-support-redis-ticket-registry\6.6.14\cas-server-support-redis-ticket-registry-6.6.14.jar;D:\IDEA\maven\maven_repository\org\apereo\cas\cas-server-core-api-util\6.6.14\cas-server-core-api-util-6.6.14.jar;D:\IDEA\maven\maven_repository\io\github\classgraph\classgraph\4.8.149\classgraph-4.8.149.jar;D:\IDEA\maven\maven_repository\org\springframework\data\spring-data-redis\2.7.2\spring-data-redis-2.7.2.jar;D:\IDEA\maven\maven_repository\org\springframework\data\spring-data-keyvalue\2.7.2\spring-data-keyvalue-2.7.2.jar;D:\IDEA\maven\maven_repository\org\springframework\spring-oxm\5.3.22\spring-oxm-5.3.22.jar;D:\IDEA\maven\maven_repository\org\springframework\integration\spring-integration-redis\5.5.14\spring-integration-redis-5.5.14.jar;D:\IDEA\maven\maven_repository\io\lettuce\lettuce-core\6.2.0.RELEASE\lettuce-core-6.2.0.RELEASE.jar;D:\IDEA\maven\maven_repository\io\netty\netty-common\4.1.79.Final\netty-common-4.1.79.Final.jar;D:\IDEA\maven\maven_repository\io\netty\netty-handler\4.1.79.Final\netty-handler-4.1.79.Final.jar;D:\IDEA\maven\maven_repository\io\netty\netty-resolver\4.1.79.Final\netty-resolver-4.1.79.Final.jar;D:\IDEA\maven\maven_repository\io\netty\netty-buffer\4.1.79.Final\netty-buffer-4.1.79.Final.jar;D:\IDEA\maven\maven_repository\io\netty\netty-transport-native-unix-common\4.1.79.Final\netty-transport-native-unix-common-4.1.79.Final.jar;D:\IDEA\maven\maven_repository\io\netty\netty-codec\4.1.79.Final\netty-codec-4.1.79.Final.jar;D:\IDEA\maven\maven_repository\io\netty\netty-transport\4.1.79.Final\netty-transport-4.1.79.Final.jar;D:\IDEA\maven\maven_repository\org\apereo\cas\cas-server-core-logging\6.6.14\cas-server-core-logging-6.6.14.jar;D:\IDEA\maven\maven_repository\org\apereo\cas\cas-server-core-api-cookie\6.6.14\cas-server-core-api-cookie-6.6.14.jar;D:\IDEA\maven\maven_repository\org\apereo\cas\cas-server-core-logging-api\6.6.14\cas-server-core-logging-api-6.6.14.jar;D:\IDEA\maven\maven_repository\org\apereo\cas\cas-server-core-cookie-api\6.6.14\cas-server-core-cookie-api-6.6.14.jar;D:\IDEA\maven\maven_repository\org\apereo\cas\cas-server-core-web-api\6.6.14\cas-server-core-web-api-6.6.14.jar;D:\IDEA\maven\maven_repository\org\springframework\boot\spring-boot-starter-log4j2\2.7.3\spring-boot-starter-log4j2-2.7.3.jar;D:\IDEA\maven\maven_repository\org\apache\logging\log4j\log4j-jul\2.17.2\log4j-jul-2.17.2.jar;D:\IDEA\maven\maven_repository\org\apache\logging\log4j\log4j-api\2.18.0\log4j-api-2.18.0.jar;D:\IDEA\maven\maven_repository\org\apache\logging\log4j\log4j-core\2.18.0\log4j-core-2.18.0.jar;D:\IDEA\maven\maven_repository\org\apache\logging\log4j\log4j-jcl\2.18.0\log4j-jcl-2.18.0.jar;D:\IDEA\maven\maven_repository\org\apache\logging\log4j\log4j-web\2.18.0\log4j-web-2.18.0.jar;D:\IDEA\maven\maven_repository\org\apache\logging\log4j\log4j-slf4j-impl\2.18.0\log4j-slf4j-impl-2.18.0.jar;D:\IDEA\maven\maven_repository\org\apache\logging\log4j\log4j-layout-template-json\2.18.0\log4j-layout-template-json-2.18.0.jar;D:\IDEA\maven\maven_repository\com\lmax\disruptor\3.4.4\disruptor-3.4.4.jar;D:\IDEA\maven\maven_repository\org\apereo\cas\cas-server-core-tickets-api\6.6.14\cas-server-core-tickets-api-6.6.14.jar;D:\IDEA\maven\maven_repository\org\apereo\cas\cas-server-core-api-logout\6.6.14\cas-server-core-api-logout-6.6.14.jar;D:\IDEA\maven\maven_repository\org\apereo\cas\cas-server-core-services-authentication\6.6.14\cas-server-core-services-authentication-6.6.14.jar;D:\IDEA\maven\maven_repository\org\apereo\cas\cas-server-core-services\6.6.14\cas-server-core-services-6.6.14.jar;D:\IDEA\maven\maven_repository\org\apereo\cas\cas-server-core-api-audit\6.6.14\cas-server-core-api-audit-6.6.14.jar;D:\IDEA\maven\maven_repository\org\apereo\cas\cas-server-core-services-api\6.6.14\cas-server-core-services-api-6.6.14.jar;D:\IDEA\maven\maven_repository\org\apereo\cas\cas-server-core-services-registry\6.6.14\cas-server-core-services-registry-6.6.14.jar;D:\IDEA\maven\maven_repository\org\apereo\cas\cas-server-core-authentication-attributes\6.6.14\cas-server-core-authentication-attributes-6.6.14.jar;D:\IDEA\maven\maven_repository\org\apereo\cas\cas-server-core-events-api\6.6.14\cas-server-core-events-api-6.6.14.jar;D:\IDEA\maven\maven_repository\org\apereo\cas\cas-server-core-notifications\6.6.14\cas-server-core-notifications-6.6.14.jar;D:\IDEA\maven\maven_repository\org\springframework\boot\spring-boot-starter-mail\2.7.3\spring-boot-starter-mail-2.7.3.jar;D:\IDEA\maven\maven_repository\com\sun\mail\jakarta.mail\1.6.7\jakarta.mail-1.6.7.jar;D:\IDEA\maven\maven_repository\com\sun\activation\jakarta.activation\1.2.1\jakarta.activation-1.2.1.jar;D:\IDEA\maven\maven_repository\org\apereo\cas\cas-server-support-redis-core\6.6.14\cas-server-support-redis-core-6.6.14.jar;D:\IDEA\maven\maven_repository\com\mysql\mysql-connector-j\8.0.33\mysql-connector-j-8.0.33.jar;D:\IDEA\maven\maven_repository\com\google\protobuf\protobuf-java\3.21.9\protobuf-java-3.21.9.jar;D:\IDEA\maven\maven_repository\org\springframework\boot\spring-boot-starter-data-redis\2.7.18\spring-boot-starter-data-redis-2.7.18.jar;D:\IDEA\maven\maven_repository\org\springframework\boot\spring-boot-starter\2.7.18\spring-boot-starter-2.7.18.jar;D:\IDEA\maven\maven_repository\org\springframework\boot\spring-boot-starter-logging\2.7.18\spring-boot-starter-logging-2.7.18.jar;D:\IDEA\maven\maven_repository\ch\qos\logback\logback-classic\1.2.12\logback-classic-1.2.12.jar;D:\IDEA\maven\maven_repository\ch\qos\logback\logback-core\1.2.12\logback-core-1.2.12.jar;D:\IDEA\maven\maven_repository\org\apache\logging\log4j\log4j-to-slf4j\2.17.2\log4j-to-slf4j-2.17.2.jar;D:\IDEA\maven\maven_repository\org\springframework\boot\spring-boot-starter-tomcat\2.7.18\spring-boot-starter-tomcat-2.7.18.jar;D:\IDEA\maven\maven_repository\jakarta\annotation\jakarta.annotation-api\1.3.5\jakarta.annotation-api-1.3.5.jar;D:\IDEA\maven\maven_repository\org\apache\tomcat\embed\tomcat-embed-core\9.0.83\tomcat-embed-core-9.0.83.jar;D:\IDEA\maven\maven_repository\org\apache\tomcat\embed\tomcat-embed-el\9.0.83\tomcat-embed-el-9.0.83.jar;D:\IDEA\maven\maven_repository\org\apache\tomcat\embed\tomcat-embed-websocket\9.0.83\tomcat-embed-websocket-9.0.83.jar;D:\IDEA\maven\maven_repository\org\apereo\cas\cas-server-core-configuration\6.6.14\cas-server-core-configuration-6.6.14.jar;D:\IDEA\maven\maven_repository\org\apereo\cas\cas-server-core-api-configuration\6.6.14\cas-server-core-api-configuration-6.6.14.jar;D:\IDEA\maven\maven_repository\org\apereo\cas\cas-server-core-api-authentication\6.6.14\cas-server-core-api-authentication-6.6.14.jar;D:\IDEA\maven\maven_repository\org\apereo\cas\cas-server-core-api-protocol\6.6.14\cas-server-core-api-protocol-6.6.14.jar;D:\IDEA\maven\maven_repository\org\apereo\cas\cas-server-core-api-monitor\6.6.14\cas-server-core-api-monitor-6.6.14.jar;D:\IDEA\maven\maven_repository\org\apereo\cas\cas-server-core-api-webflow\6.6.14\cas-server-core-api-webflow-6.6.14.jar;D:\IDEA\maven\maven_repository\org\apereo\cas\cas-server-core-api-events\6.6.14\cas-server-core-api-events-6.6.14.jar;D:\IDEA\maven\maven_repository\org\apereo\cas\cas-server-core-api-validation\6.6.14\cas-server-core-api-validation-6.6.14.jar;D:\IDEA\maven\maven_repository\org\jasypt\jasypt\1.9.3\jasypt-1.9.3.jar;D:\IDEA\maven\maven_repository\org\bouncycastle\bcpkix-jdk15on\1.70\bcpkix-jdk15on-1.70.jar;D:\IDEA\maven\maven_repository\org\bouncycastle\bcutil-jdk15on\1.70\bcutil-jdk15on-1.70.jar;D:\IDEA\maven\maven_repository\org\cryptacular\cryptacular\1.2.5\cryptacular-1.2.5.jar;D:\IDEA\maven\maven_repository\org\bouncycastle\bcprov-jdk18on\1.71\bcprov-jdk18on-1.71.jar;D:\IDEA\maven\maven_repository\org\bouncycastle\bcprov-jdk15on\1.70\bcprov-jdk15on-1.70.jar;D:\IDEA\maven\maven_repository\org\springframework\security\spring-security-crypto\5.7.8\spring-security-crypto-5.7.8.jar;D:\IDEA\maven\maven_repository\jakarta\xml\bind\jakarta.xml.bind-api\2.3.3\jakarta.xml.bind-api-2.3.3.jar;D:\IDEA\maven\maven_repository\jakarta\activation\jakarta.activation-api\1.2.2\jakarta.activation-api-1.2.2.jar com.example.casserver.CasServerApplication SLF4J: Class path contains multiple SLF4J bindings. SLF4J: Found binding in [jar:file:/D:/IDEA/maven/maven_repository/org/apache/logging/log4j/log4j-slf4j-impl/2.18.0/log4j-slf4j-impl-2.18.0.jar!/org/slf4j/impl/StaticLoggerBinder.class] SLF4J: Found binding in [jar:file:/D:/IDEA/maven/maven_repository/ch/qos/logback/logback-classic/1.2.12/logback-classic-1.2.12.jar!/org/slf4j/impl/StaticLoggerBinder.class] SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation. SLF4J: Actual binding is of type [org.apache.logging.slf4j.Log4jLoggerFactory] Exception in thread "main" java.lang.ExceptionInInitializerError at com.example.casserver.CasServerApplication.main(CasServerApplication.java:10) Caused by: org.apache.logging.log4j.LoggingException: log4j-slf4j-impl cannot be present with log4j-to-slf4j at org.apache.logging.slf4j.Log4jLoggerFactory.validateContext(Log4jLoggerFactory.java:60) at org.apache.logging.slf4j.Log4jLoggerFactory.newLogger(Log4jLoggerFactory.java:44) at org.apache.logging.slf4j.Log4jLoggerFactory.newLogger(Log4jLoggerFactory.java:33) at org.apache.logging.log4j.spi.AbstractLoggerAdapter.getLogger(AbstractLoggerAdapter.java:53) at org.apache.logging.slf4j.Log4jLoggerFactory.getLogger(Log4jLoggerFactory.java:33) at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:363) at org.apache.commons.logging.LogAdapter$Slf4jAdapter.createLocationAwareLog(LogAdapter.java:130) at org.apache.commons.logging.LogAdapter.createLog(LogAdapter.java:91) at org.apache.commons.logging.LogFactory.getLog(LogFactory.java:67) at org.apache.commons.logging.LogFactory.getLog(LogFactory.java:59) at org.springframework.boot.SpringApplication.<clinit>(SpringApplication.java:179) ... 1 more Process finished with exit code 1
最新发布
07-03
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值