You need to enable JavaScript to run this app. Kotlin+Gradle开发Spring Boot对接PostgreSQL:接口通Postman但数据不入库无报错
优惠活动
大模型
产品
解决方案
定价
更多

Kotlin+Gradle开发Spring Boot对接PostgreSQL:接口通Postman但数据不入库无报错

数据不写入PostgreSQL的核心根因与修复方案

核心问题点(无报错、不写库的直接原因)

  • 控制器类上错误配置了数据源排除规则:@EnableAutoConfiguration(exclude = [DataSourceAutoConfiguration::class]) 直接关闭了Spring的数据源自动装配能力,整个运行环境根本没有建立和PostgreSQL的连接,所有请求都在内存中处理,自然不会触发数据库写入操作,也不会抛出连接类错误。同时@EnableAutoConfiguration 本应配置在项目启动类上,放置在Controller类上属于配置位置错误。
  • 业务逻辑完全未使用数据库仓储层:所有接口的增删改查操作全部针对内存中的userMap 集合实现,哪怕配置好了数据库连接,代码流程里没有任何调用仓储层写入数据库的逻辑,数据永远不会落到PostgreSQL中。
  • 仓储接口定义与技术栈不匹配:你定义的ReactiveCrudRepository 是响应式栈下搭配R2DBC使用的仓储接口,但当前项目用的是javax.persistence 注解的JPA实体、传统JDBC方式连接PostgreSQL,技术栈完全不兼容;同时该接口的代码存在语法缺失,连右括号都没有补全,根本无法正常编译生效。
  • 缺失JPA核心配置:仅配置了数据库连接参数,没有开启JPA的表自动生成、SQL打印等配置,就算连接打通也无法完成实体映射、表创建的流程。

按优先级执行的修复步骤

  • 移除Controller类上的@EnableAutoConfiguration 及对应的exclude排除配置,确认项目启动类上保留标准的@SpringBootApplication 注解(该注解本身已经包含自动配置能力,不需要额外在Controller上重复声明)。
  • 调整Controller的业务逻辑,注入修正后的UserRepository,将所有内存Map操作替换为数据库交互:
    示例代码逻辑:
    @RestController
    class UserController {
        // 注入仓储实例,替换原来的内存Map
        @Autowired
        private lateinit var userRepository: UserRepository
    
        @GetMapping(path = ["/user/{id}"])
        fun getUserInfo(@PathVariable("id") id: String) = userRepository.findById(id)
    
        @GetMapping(path = ["/user/all"])
        fun getUserInfoAll() = userRepository.findAll()
    
        @PutMapping(path = ["/user/{id}"])
        fun putUserInfo(@PathVariable("id") id: String, @RequestParam("pw") pw: String,
                        @RequestParam("name") name: String, @RequestParam("birth") birth: String) {
            val userInfo = UserInfo(id,pw, name, birth)
            // 调用save方法写入数据库
            userRepository.save(userInfo)
        }
    
        @PostMapping(path = ["/user/{id}"])
        fun postUserInfo(@PathVariable("id") id: String, @RequestParam("pw") pw: String,
                         @RequestParam("name") name: String, @RequestParam("birth") birth: String){
            val userInfo = userRepository.findById(id).orElseThrow()
            userInfo.pw = pw
            userInfo.name = name
            userInfo.birth = birth
            userRepository.save(userInfo)
        }
    
        @DeleteMapping(path = ["/user/{id}"])
        fun deleteUserInfo(@PathVariable("id") id: String) {
            userRepository.deleteById(id)
        }
    }
    
  • 修正UserRepository的定义,替换为和JPA技术栈匹配的接口,补全语法:
    import org.springframework.data.jpa.repository.JpaRepository
    import org.springframework.stereotype.Repository
    
    @Repository
    interface UserRepository : JpaRepository<UserInfo, String>
    
  • 补全application.properties 中的JPA配置,实现实体自动建表、执行SQL可观测:
    spring.datasource.url=jdbc:postgresql://localhost:5432/spring
    spring.datasource.username=postgres
    spring.datasource.password=1234
    # JPA配置块
    spring.jpa.hibernate.ddl-auto=update
    spring.jpa.show-sql=true
    spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect
    
  • 检查Gradle依赖配置,确保引入了spring-boot-starter-data-jpa、postgresql 驱动两个核心依赖,移除不必要的响应式Web/数据访问依赖,避免技术栈混杂。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.07 11:06:10