1 问题描述
java.lang.ClassNotFoundException: testTask
2 问题分析
2.1 Spring Boot
1、使用Class.forName(beanName).newInstance()创建实例,但是beanName不是包名加类名,而是Spring里面的@Component("testTask")实例名。
解决办法:
public Object getBean(String beanName){
Object bean = null;
if (beanName.indexOf(".") < 0) {
//bean名为自定义的实例名@Component
bean = SpringUtil.getBean(beanName);
} else {
//bean名带包名路径
bean = Class.forName(beanName).newInstance();
}
}
注:
SpringUtil.getBean()方法源码请查看以下博客。
Quartz 实现数据库配置定时任务https://blog.csdn.net/qq_38974638/article/details/114962987
2.2 Swagger
1、Swagger 3使用第三方的Swagger UI插件(swagger-bootstrap-ui),因为swagger-bootstrap-ui只支持Swagger 2,导致报错。
<!-- Swagger 3 API接口调试工具 -->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-boot-starter</artifactId>
<version>3.0.0</version>
</dependency>
<!-- 引入swagger-bootstrap-ui包 /doc.html-->
<dependency>
<groupId>com.github.xiaoymin</groupId>
<artifactId>swagger-bootstrap-ui</artifactId>
<version>1.9.1</version>
</dependency>
问题解决:
(1)将Swagger 3改为Swagger 2,swagger-bootstrap-ui依赖不变。
<!-- Swagger 2 API接口调试工具 -->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.9.2</version>
</dependency>
<!--这个swagger-ui是官方提供的一个前端页面,用来查看并导出生成的api文档-->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.9.2</version>
</dependency>
<!-- 引入swagger-bootstrap-ui包 /doc.html-->
<dependency>
<groupId>com.github.xiaoymin</groupId>
<artifactId>swagger-bootstrap-ui</artifactId>
<version>1.9.1</version>
</dependency>
(2)Swagger 3依赖不变,swagger-bootstrap-ui依赖改为knife4j-spring-boot-starter依赖,因为knife4j是swagger-bootstrap-ui的升级版,支持Swagger 3。
<!-- Swagger 3 API接口调试工具 -->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-boot-starter</artifactId>
<version>3.0.0</version>
</dependency>
<!-- 引入knife4j-spring-ui包 /doc.html-->
<dependency>
<groupId>com.github.xiaoymin</groupId>
<artifactId>knife4j-spring-boot-starter</artifactId>
<version>3.0.3</version>
</dependency>