[经验记录] SpringBoot报错解决方案汇总

本文档记录了在使用MyBatisPlusGenerator并尝试启动SpringBoot应用时遇到的两个常见错误:1) 缺少AutowireCandidate的Bean错误,主要是由于缺少对学生Mapper的扫描;2) 缺少特定Bean的错误,可能源于未配置DataSource或在Service层注入了错误的对象。解决方案包括在启动类中添加@MapperScan注解以扫描Mapper,以及确保在配置文件中指定数据库连接信息。此外,还应注意避免在Service层错误地注入Model对象。

1. 运行时报错runtime error

1.1 expected at least 1 bean which qualifies as autowire candidate

1.1.1 整体错误描述

org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name ‘studentController’: Unsatisfied dependency expressed through field ‘studentService’; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name ‘studentServiceImpl’: Unsatisfied dependency expressed through field ‘baseMapper’; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type ‘com.case02.scu.student.mapper.StudentMapper’ available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}

1.1.2 背景

使用MyBatisPlusGenerator生成器,生成了所有的文件,编译没有任何错误。但直接启动springBoot application时报错。

1.1.3 错误关键信息及分析

从整体错误里,可以看到从controller 到service 到ServiceImpl 到Mapper都有提及,那到底问题在哪里呢?可以看到整个错误是一个嵌套的,也就是说最前面的是Exception的最上层,需要顺着提示,找到最底层throw exception的地方。这里关键就是:

No qualifying bean of type ‘com.case02.scu.student.mapper.StudentMapper’ available
这里可以看到根源是Mapper有问题,那么针对这个类型找如何解决。

1.1.4 解决方案-临时

临时的解决方案就是在SprintBoot启动程序加上Mapper的映射。见代码中@MapperScan部分。

@MapperScan("com/case02/scu/student/mapper")
@SpringBootApplication
public class myApplication {
    public static void main(String[] args) {
        //启动SpringBoot
        SpringApplication.run(myApplication.class,args);
    }
}

比如报错是com.case02.scu.student.mapper.StudentMapper
那mapperscan中的路径就是com/case02/scu/student/mapper
之所以说是临时方案,是因为学习时没见到有这么写的,应该是哪里掌握程度不够导致。后面会学习看整体方案是什么。

1.2 No bean named ‘org.springframework.context.annotation.ConfigurationClassPostProcessor.importRegistry’ available

1.2.1 整体错误描述

org.springframework.beans.factory.BeanCreationException: Error creating bean with name ‘org.springframework.boot.autoconfigure.availability.ApplicationAvailabilityAutoConfiguration’: Initialization of bean failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name ‘org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration’: Initialization of bean failed; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named ‘org.springframework.context.annotation.ConfigurationClassPostProcessor.importRegistry’ available

1.2.2 背景

使用mybatisplus generator生成文件之后,添加了SpringBoot Application直接运行。编译没报错,运行springboot启动时报错。

1.2.3 错误关键信息及分析

在网上查了,这个错误原因真是非常非常多,总结就是SpringBoot启动错误后抛出的统一异常,再往前看,其实可以看到更详细的信息。

1.2.4 错误关键信息及分析 - 情况1

***************************
APPLICATION FAILED TO START
***************************

Description:

Failed to configure a DataSource: 'url' attribute is not specified and no embedded datasource could be configured.

Reason: Failed to determine a suitable driver class


Action:

Consider the following:
	If you want an embedded database (H2, HSQL or Derby), please put it on the classpath.
	If you have database settings to be loaded from a particular profile you may need to activate it (no profiles are currently active).

2022-04-18 13:53:36.680  WARN 24260 --- [           main] o.s.boot.SpringApplication               : Unable to close ApplicationContext

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.boot.autoconfigure.availability.ApplicationAvailabilityAutoConfiguration': Initialization of bean failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration': Initialization of bean failed; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'org.springframework.context.annotation.ConfigurationClassPostProcessor.importRegistry' available

所以关键信息是:

Description:
Failed to configure a DataSource: ‘url’ attribute is not specified and no embedded datasource could be configured.
Reason: Failed to determine a suitable driver class

那么解决方案 就是:
引入application.yaml 或者application.properties,配置数据库信息

1.2.4 错误关键信息及分析 - 情况2

***************************
APPLICATION FAILED TO START
***************************

Description:

Field studentDO in com.case02.scu.student.service.impl.StudentServiceImpl required a bean of type 'com.case02.scu.student.model.StudentDO' that could not be found.

The injection point has the following annotations:
	- @org.springframework.beans.factory.annotation.Autowired(required=true)


Action:

Consider defining a bean of type 'com.case02.scu.student.model.StudentDO' in your configuration.

2022-04-18 14:53:05.036  WARN 11228 --- [           main] o.s.boot.SpringApplication               : Unable to close ApplicationContext

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.boot.autoconfigure.availability.ApplicationAvailabilityAutoConfiguration': Initialization of bean failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration': Initialization of bean failed; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'org.springframework.context.annotation.ConfigurationClassPostProcessor.importRegistry' available

以上的关键信息就是

Field studentDO in com.case02.scu.student.service.impl.StudentServiceImpl required a bean of type ‘com.case02.scu.student.model.StudentDO’ that could not be found.
The injection point has the following annotations:
- @org.springframework.beans.factory.annotation.Autowired(required=true)

看了我的代码,原来是StudentServiceImpl 里抄了这样的语句:

public class StudentServiceImpl extends ServiceImpl<StudentMapper, StudentDO> implements StudentService {
    @Autowired
    private StudentMapper studentMapper;

    @Autowired
    private StudentDO studentDO;

把以下语句删掉即可

    @Autowired
    private StudentDO studentDO;
根据您提供的 `common.yaml` 配置文件和之前的讨论,以下是针对您提到的报错信息的具体分析和解决方案。我们将重点分析日志中提到的错误信息,并提供详细的解决步骤。 ### 日志中的报错信息 您提到的日志信息是: ``` 2025-07-10 13:24:49,880 INFO No TaskScheduler/ScheduledExecutorService bean found for scheduled processing ``` 以及可能存在的其他潜在问题。我们还会结合 `common.yaml` 文件内容进行全面分析。 ### 报错信息及解决方案 #### 1. **Nacos 配置加载问题** **报错信息**: - 日志中提到 `Ignore the empty nacos configuration`,这表示 Nacos 配置为空或格式有问题。 **解决方案**: - **检查 Nacos 服务状态**:确保 Nacos 服务正常运行,可以通过 `curl` 或其他工具测试 Nacos 服务是否可达。 - **检查配置文件内容**:确认 `common.yaml` 文件内容正确且不为空。可以尝试简化配置文件,逐步添加内容以排查问题。 - **日志级别**:如果配置为空,可能是因为配置未正确加载。检查日志级别是否设置得过高,导致调试信息未记录。 #### 2. **数据库连接配置中的弱密码和不安全配置** ```yaml antimoney: view: dburl: jdbc:sqlserver://10.221.1.200:3306;DatabaseName=kd_master_dev dbuser: root dbpassword: qwer520.QWER dx: enabled: true dcdb: dbtype: 3 dburl: jdbc:sqlserver://10.221.1.200:3306;DatabaseName=kd_master_dev dbuser: root dbpassword: qwer520.QWER impindex: jydatabase: dbtype: 3 dburl: jdbc:sqlserver://10.221.1.200:3306;DatabaseName=kd_master_dev dbuser: root dbpassword: qwer520.QWER ``` **报错信息**: - 使用 `root` 用户和弱密码 `qwer520.QWER` 存在安全风险。 - **SQL Server 端口错误**:SQL Server 默认端口是 `1433`,而不是 `3306`,可能导致连接失败。 **解决方案**: - **创建专用数据库用户**:为每个应用创建专用的数据库用户,并赋予最小权限。 - **使用强密码**:确保密码复杂且足够长,推荐使用密码管理工具生成强密码。 - **更正端口号**:将 SQL Server 的端口号更正为 `1433`。 - **检查驱动类**:确保使用的驱动类为 `com.microsoft.sqlserver.jdbc.SQLServerDriver`。 #### 3. **P6Spy 驱动配置** ```yaml jdbc: defaultDataSourceId: default dataSources: - id: default pool: url: jdbc:mysql://10.221.1.200:3306/kd_master_dev?characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&allowMultiQueries=true&useUnicode=true&useSSL=false dataSourceClassName: org.apache.commons.dbcp2.BasicDataSource username: root password: qwer520.QWER driverClassName: com.p6spy.engine.spy.P6SpyDriver dbType: mysql initialSize: 2 minIdle: 2 maxActive: 100 maxWait: 60000 ``` **报错信息**: - 使用 `P6SpyDriver` 作为 `driverClassName`,可能会导致实际数据库驱动缺失。 - **弱密码和不安全配置**:同样存在使用 `root` 用户和弱密码的问题。 **解决方案**: - **检查 P6Spy 配置**:确保 P6Spy 配置正确,并且 P6Spy 依赖已正确引入项目中。 - **使用原生驱动**:如果不使用 P6Spy 进行 SQL 调试,建议将 `driverClassName` 更改为 `com.mysql.cj.jdbc.Driver`。 - **创建专用数据库用户**:为每个应用创建专用的数据库用户,并赋予最小权限。 - **使用强密码**:确保密码复杂且足够长。 #### 4. **邮件配置中的授权码** ```yaml spring: mail: default-encoding: UTF-8 host: smtp.qq.com port: 587 username: caoyuxuan317@qq.com password: zhtxitbynzidbfbe properties: mail: transport: protocol: smtp smtp: auth: true ``` **报错信息**: - 如果邮件发送失败,可能是由于 `password` 设置不正确或未启用 SMTP 服务。 **解决方案**: - **验证授权码**:确保 `password` 是正确的 QQ 邮箱 SMTP 授权码,而不是登录密码。 - **启用 SMTP 服务**:确保 QQ 邮箱已启用 SMTP 服务,并允许第三方客户端访问。 - **测试邮件发送**:使用简单的邮件发送测试代码,确认配置是否正确。 #### 5. **文件路径配置** ```yaml export: dir: /data/queryexport file: savePath: /data/sdata-share/excelfile/ ``` **报错信息**: - 如果指定的路径不存在或权限不足,可能会导致文件写入失败。 **解决方案**: - **检查路径存在**:确保 `/data/queryexport` 和 `/data/sdata-share/excelfile/` 目录存在。 - **检查文件权限**:确保应用程序有足够的权限写入这些目录,可以使用 `chmod` 和 `chown` 命令调整权限。 #### 6. **DingTalk API URL 格式问题** ```yaml dingtalk: ding: DingTokenUrl: https://oapi.dingtalk.com/gettoken DingUserIdUrl: https://oapi.dingtalk.com/topapi/v2/user/getbymobile DingSendMsgUrl: https://oapi.dingtalk.com/topapi/message/corpconversation/asyncsend_v2 ``` **报错信息**: - URL 格式中包含 `https://` 和 `/`,确保 URL 末端不包含多余斜杠。 **解决方案**: - **统一 URL 格式**:确保所有 URL 格式一致,去除多余斜杠,例如: ```yaml DingTokenUrl: https://oapi.dingtalk.com/gettoken DingUserIdUrl: https://oapi.dingtalk.com/topapi/v2/user/getbymobile DingSendMsgUrl: https://oapi.dingtalk.com/topapi/message/corpconversation/asyncsend_v2 ``` ### 报错汇总 1. **Nacos 配置加载问题**: - **报错信息**:`Ignore the empty nacos configuration` - **解决方案**:检查 Nacos 服务状态和配置文件内容。 2. **数据库连接配置中的弱密码和不安全配置**: - **报错信息**:使用 `root` 用户和弱密码 `qwer520.QWER`,SQL Server 端口错误 - **解决方案**:创建专用数据库用户,使用强密码,更正端口号,检查驱动类。 3. **P6Spy 驱动配置**: - **报错信息**:`P6SpyDriver` 可能导致实际数据库驱动缺失 - **解决方案**:检查 P6Spy 配置,考虑使用原生驱动,创建专用数据库用户,使用强密码。 4. **邮件配置中的授权码**: - **报错信息**:`password` 设置不正确或未启用 SMTP 服务 - **解决方案**:验证授权码,启用 SMTP 服务,测试邮件发送。 5. **文件路径配置**: - **报错信息**:指定路径不存在或权限不足 - **解决方案**:检查路径存在,检查文件权限。 6. **DingTalk API URL 格式问题**: - **报错信息**:URL 格式中包含多余斜杠 - **解决方案**:统一 URL 格式,去除多余斜杠。 ### 具体针对您提到的日志报错 #### 报错信息: ``` 2025-07-10 13:24:49,880 INFO No TaskScheduler/ScheduledExecutorService bean found for scheduled processing ``` **分析**: - 这是一条 **INFO 级别的日志**,表示 Spring 框架在启动时没有找到用于定时任务调度的 `TaskScheduler` 或 `ScheduledExecutorService` Bean。 - 如果您确实需要使用定时任务功能(例如,通过 `@Scheduled` 注解来定期执行某些方法),那么这条信息提示您还没有配置好相应的调度器 Bean。 - 如果您不需要定时任务功能,可以忽略此日志信息,因为它不会影响程序的其他功能。 **解决方案**: - **如果您需要使用定时任务功能**: - 确保您的 Spring Boot 应用中启用了定时任务支持:在主类或配置类上添加注解 `@EnableScheduling`。 - 示例代码如下: ```java import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.scheduling.annotation.EnableScheduling; @SpringBootApplication @EnableScheduling public class MyApplication { public static void main(String[] args) { SpringApplication.run(MyApplication.class, args); } } ``` - **如果您不需要定时任务功能**: - 您可以忽略此日志信息,因为它是提示性的,并不影响程序的正常运行。 ### 知识点 1. **Nacos 配置加载**:检查 Nacos 服务状态和配置文件内容,确保配置正确加载。(34字) 2. **数据库安全配置**:创建专用数据库用户,使用强密码,更正端口号,检查驱动类。(36字) 3. **P6Spy 驱动配置**:确保 P6Spy 配置正确,考虑使用原生驱动。(32字) 4. **邮件配置验证**:确保使用正确的授权码并启用 SMTP 服务,验证邮件配置。(34字) 5. **文件路径权限检查**:确保路径存在,调整文件权限,避免写入失败。(32字) 6. **API URL 格式验证**:统一 URL 格式,去除多余斜杠,确保 API 调用成功。(32字) 7. **定时任务配置**:确保 `@EnableScheduling` 注解已添加,确认配置正确。(34字) 希望这些信息能帮助您识别并解决 `common.yaml` 配置文件中的报错问题。如果有更多具体问题或进一步的需求,请继续提问!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值