Tomcat启动后数据库表未创建,访问localhost:8080/demo/all报404错误
解决Spring Boot项目404与数据库表未自动创建问题
别担心,这俩问题大多是配置或扫描范围的小疏漏,咱们一步步排查解决:
一、先搞定数据库User表未创建的问题
这是基础问题,先把它解决,后续接口的问题也可能跟着迎刃而解:
- 检查JPA核心配置:打开
src/main/resources/application.properties,确认以下配置项是否正确:
重点注意spring.datasource.url=jdbc:mysql://localhost:3306/demo?useSSL=false&serverTimezone=UTC spring.datasource.username=你的数据库账号 spring.datasource.password=你的数据库密码 spring.jpa.hibernate.ddl-auto=create spring.jpa.show-sql=truespring.jpa.hibernate.ddl-auto,如果设为none或者没配置,Hibernate不会自动建表;另外spring.datasource.url里的数据库名(比如示例里的demo)要提前在MySQL中手动创建好。 - 检查实体类注解与位置:你的
User类必须添加@Entity注解,主键字段要加@Id,示例代码如下:
同时要确保这个实体类和你的Spring Boot主类(带@Entity public class User { @Id @GeneratedValue(strategy = GenerationType.AUTO) private Long id; private String name; private String email; // 记得添加上无参构造、全参构造,以及getter/setter方法 }@SpringBootApplication注解的类)在同一个包或子包下,比如主类在com.example.demo,User类放在com.example.demo.entity,这样Spring才能扫描到这个实体。 - 匹配MySQL驱动版本:因为你用的是JDK1.8,MySQL驱动要选5.x版本(比如
mysql-connector-java:5.1.49),8.x版本和JDK1.8可能存在兼容性问题,在pom.xml里确认依赖:<dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.49</version> <scope>runtime</scope> </dependency>
二、解决localhost:8080/demo/all 404问题
数据库问题解决后,咱们来排查接口访问失败的问题:
- 检查Controller的注解与路径:你的Controller类必须添加
@RestController(或者@Controller+@ResponseBody组合),同时映射路径要和你访问的URL匹配,示例代码:
和实体类一样,Controller也要放在主类的扫描包范围内,否则Spring找不到这个控制器,自然没有对应的接口映射。@RestController @RequestMapping("/demo") public class UserController { @Autowired private UserRepository userRepository; @GetMapping("/all") public List<User> getAllUsers() { return userRepository.findAll(); } } - 改用Spring Boot自带Tomcat启动:教程里的项目是Spring Boot项目,自带嵌入式Tomcat,别用外部Tomcat运行!直接在STS里找到带
@SpringBootApplication的主类,右键选择Run As > Spring Boot App启动项目。这种方式下项目上下文路径默认是空的,访问localhost:8080/demo/all就完全匹配接口路径了。用外部Tomcat部署需要打包成war包,还得配置上下文路径,反而容易出错。 - 开启调试日志排查映射:如果还是404,在
application.properties里添加日志配置,调高Web层的日志级别:
重启项目后再次访问接口,看控制台有没有打印请求的映射信息。如果找不到logging.level.org.springframework.web=DEBUG/demo/all对应的处理器,说明Controller没被Spring扫描到,再检查包路径配置即可。
最后验证
启动Spring Boot主类后,先看控制台有没有打印Hibernate建表的SQL语句(因为配置了spring.jpa.show-sql=true),如果有,说明表创建成功;接着访问localhost:8080/demo/all,正常情况下会返回空数组(表中无数据时)或者你插入的用户数据。
内容的提问来源于stack exchange,提问作者Noreen Lazo
相关产品推荐
相关产品推荐

