You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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=true
    
    重点注意spring.jpa.hibernate.ddl-auto,如果设为none或者没配置,Hibernate不会自动建表;另外spring.datasource.url里的数据库名(比如示例里的demo)要提前在MySQL中手动创建好。
  • 检查实体类注解与位置:你的User类必须添加@Entity注解,主键字段要加@Id,示例代码如下:
    @Entity
    public class User {
        @Id
        @GeneratedValue(strategy = GenerationType.AUTO)
        private Long id;
        private String name;
        private String email;
        // 记得添加上无参构造、全参构造,以及getter/setter方法
    }
    
    同时要确保这个实体类和你的Spring Boot主类(带@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匹配,示例代码:
    @RestController
    @RequestMapping("/demo")
    public class UserController {
        @Autowired
        private UserRepository userRepository;
    
        @GetMapping("/all")
        public List<User> getAllUsers() {
            return userRepository.findAll();
        }
    }
    
    和实体类一样,Controller也要放在主类的扫描包范围内,否则Spring找不到这个控制器,自然没有对应的接口映射。
  • 改用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 10:20:28