SpringBoot启动报错:loginController中userDao依赖注入失败求助
问题排查与修复方案
核心错误原因
- 启动类排除了数据源自动配置:
@SpringBootApplication注解添加了exclude= {DataSourceAutoConfiguration.class}参数,直接禁用了SpringBoot的数据源自动装配逻辑,Mybatis运行必须依赖的DataSource、SqlSessionFactory、SqlSessionTemplate等核心组件无法初始化,是触发本次报错的直接原因。 - 冗余配置问题:
- 启动类已添加全局
@MapperScan,LoginController类上的@MapperScan完全多余 - UserDao上的
@Repository为冗余注解,Mybatis的Mapper接口被@MapperScan扫描后会自动注册为Bean,无需额外添加该注解(该问题不会触发报错) - 未配置数据库连接参数和Mybatis的Mapper文件扫描路径
- 启动类已添加全局
具体修复步骤
1. 修正启动类配置
修改CourseworkApplication.java代码,删除数据源排除配置,精准指定Mapper扫描路径:
package com.xrg.coursework; import org.mybatis.spring.annotation.MapperScan; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication @MapperScan("com.xrg.coursework.dao") // 精准指定Mapper包路径,比通配符更稳妥 public class CourseworkApplication { public static void main(String[] args) { SpringApplication.run(CourseworkApplication.class, args); } }
2. 删除LoginController的冗余注解
移除LoginController类上的@MapperScan注解:
package com.xrg.coursework.controller; import com.xrg.coursework.bean.User; import com.xrg.coursework.dao.UserDao; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class LoginController { @Autowired UserDao userDao; @RequestMapping("/login") public String login(@RequestBody User user){ User us = userDao.getUserByMassage(user.getUsername(), user.getPassword()); System.out.println("user:" + us); return "ok"; } }
3. 添加项目配置文件
在resources目录下新建application.yml(若使用properties格式可自行转换),添加数据库和Mybatis配置:
spring: datasource: driver-class-name: com.mysql.cj.jdbc.Driver # MySQL5版本请替换为com.mysql.jdbc.Driver url: jdbc:mysql://localhost:3306/你的数据库名?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8 username: 你的数据库用户名 password: 你的数据库密码 mybatis: # 对应Mapper.xml文件的存放路径,若直接放在resources下可改为classpath:*.xml mapper-locations: classpath:mapper/*.xml type-aliases-package: com.xrg.coursework.bean # 实体类包路径,配置后xml中resultType可直接写类名
4. 检查Mapper文件存放位置
确保UserMapping.xml放在上一步mapper-locations配置的对应路径下,比如配置为classpath:mapper/*.xml,就需要在resources目录下新建mapper文件夹,将xml文件放入其中。
5. 检查pom依赖完整性
确认pom.xml中已引入Mybatis和MySQL驱动依赖,缺失的话添加如下配置:
<dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.2.2</version> <!-- 可根据你的SpringBoot版本调整对应适配版本 --> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope> </dependency>
内容的提问来源于stack exchange,提问作者Rightcan Tse
相关产品推荐
相关产品推荐

