Spring Boot集成MongoDB启动报错No bean named 'mongoTemplate' available求助
问题根因
你的项目启动类LoginApplication中手动排除了MongoAutoConfiguration类,该类是Spring Boot MongoDB自动配置的核心实现,负责自动初始化MongoDB连接、创建mongoTemplate实例注入Spring容器。你将其排除后,容器中不会自动生成mongoTemplate Bean,而MongoRepository的实现依赖mongoTemplate,因此抛出找不到Bean的错误。
同时你的代码还有两个会导致后续运行报错的问题:
UserController中的UserRepository未加@Autowired注解,Spring不会自动注入依赖,运行调用接口会触发空指针异常deleteUser接口的@DeleteMapping没有配置/{id}路径规则,调用时会返回404错误
修复步骤
1. 修改启动类注解
移除@EnableAutoConfiguration中对MongoAutoConfiguration的排除,修改后启动类代码如下:
package com.example.login; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; import org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration; @SpringBootApplication @EnableAutoConfiguration(exclude = { DataSourceAutoConfiguration.class,WebMvcAutoConfiguration.class}) public class LoginApplication { public static void main(String[] args) { SpringApplication.run(LoginApplication.class, args); } }
如果你没有特殊需求不需要排除WebMvcAutoConfiguration,也可以直接删除整个@EnableAutoConfiguration注解,@SpringBootApplication默认已经包含自动配置能力。
2. 新增MongoDB连接配置
在项目的src/main/resources目录下的application.properties(如果是yml格式同理)中添加MongoDB连接配置,本地默认无密码Mongo配置示例:
spring.data.mongodb.uri=mongodb://localhost:27017/test
如果你的MongoDB设置了账号密码,使用以下格式配置:
spring.data.mongodb.uri=mongodb://你的账号:你的密码@localhost:27017/要连接的数据库名?authSource=admin
3. 修复UserController代码
补全依赖注入注解和删除接口的路径配置:
package com.example.login.User; import java.util.List; import java.util.Optional; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.DeleteMapping; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RestController; @RestController public class UserController { @Autowired private UserRepository userRepository; @PostMapping("/addUser") public String addUser(@RequestBody User user) { userRepository.save(user); return "added user with id: " + user.getId(); } @GetMapping("/getAllUsers") public List<User> getAllUsers() { return userRepository.findAll(); } @GetMapping("/getAllUsers/{id}") public Optional<User> getUser(@PathVariable String id) { return userRepository.findById(id); } @DeleteMapping("/removeUser/{id}") public String deleteUser(@PathVariable String id) { userRepository.deleteById(id); return "removed user with id: " + id; } }
完成以上修改后,先启动本地MongoDB服务,再启动Spring Boot项目即可正常运行。
内容的提问来源于stack exchange,提问作者cspurdue
相关产品推荐
相关产品推荐

