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

Spring Boot CRUD项目时区配置错误引发JDBC及Bean问题求助

解决MySQL时区配置错误及Spring Boot CRUD项目中的其他小问题

嘿,我看你这是遇到了MySQL时区配置导致的连锁问题,先别着急,咱们一步步把这些坑填上:

1. 先搞定核心的时区错误

你看到的"服务器时区值'unknown'无法识别"是MySQL JDBC驱动的典型问题,尤其是用了6.0+版本的驱动时,必须明确指定时区。直接修改application.properties里的数据库URL就行:

spring.datasource.url=jdbc:mysql://localhost:3306/digital?serverTimezone=Asia/Shanghai&useSSL=false&allowPublicKeyRetrieval=true
  • serverTimezone=Asia/Shanghai:换成你所在的时区就行,比如UTC也可以,关键是要明确指定
  • useSSL=false:开发环境可以先关了SSL,生产环境按需开启
  • allowPublicKeyRetrieval=true:解决某些情况下的公钥检索报错

另外,驱动类也建议换成新版的:

spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

你用的mysql-connector-java是6.0.3,已经属于cj系列驱动了,旧的com.mysql.jdbc.Driver早就被废弃啦。

2. 给Controller补上关键注解

你的DigitalController没加@RestController和基础路径注解,Spring根本识别不了这是个REST控制器,请求肯定映射不上:

package com.eg.demo.controller;

import com.eg.demo.model.DigitalEmployee;
import com.eg.demo.service.DigitalEmployeeService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController // 必须加这个,让Spring知道这是REST接口
@RequestMapping("/api") // 加个基础路径,避免和其他接口冲突
public class DigitalController {
    @Autowired
    DigitalEmployeeService digitalEmployeeService;

    // 你的其他接口方法保持不变...
}

3. 优化Service里的Optional处理

在DigitalEmployeeServiceImpl的findById方法里,直接.get()会在找不到数据时炸锅,建议改成优雅的空值处理:

public DigitalEmployee findById(Long id) {
    return digitalEmployeeRepo.findById(id)
            .orElseThrow(() -> new RuntimeException("DigitalEmployee not found with id: " + id));
}

或者直接返回Optional<DigitalEmployee>,让Controller层去处理空值,这样更符合Spring Data的最佳实践。

4. 清理pom.xml里的重复依赖

你的pom里Swagger依赖重复了好几个,springfox-boot-starter已经包含了所有Swagger相关的东西,直接精简成这样就行:

<dependencies>
    <dependency>
        <groupId>io.springfox</groupId>
        <artifactId>springfox-boot-starter</artifactId>
        <version>3.0.0</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-hateoas</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>8.0.33</version> <!-- 建议升级到最新稳定版,兼容性更好 -->
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
        <exclusions>
            <exclusion>
                <groupId>org.junit.vintage</groupId>
                <artifactId>junit-vintage-engine</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
</dependencies>

5. 最后确认数据库存在

别忘了提前在MySQL里创建digital数据库,不然JDBC连接时会找不到库:

CREATE DATABASE digital;

把这些修改都做完,重新启动项目,应该就能解决时区错误和其他连锁问题了。要是还有其他报错,再把日志贴出来就行~

内容的提问来源于stack exchange,提问作者Ashish Shrestha

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 10:47:44