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

Spring Boot连接XAMPP本地数据库遇Unsatisfied dependency问题求助

修复Spring Boot Unsatisfied Dependency问题的步骤

1. 清理依赖冲突(核心问题)

Spring Boot 3.x基于Jakarta EE 9+,但你的POM里混合了Java EE旧版的javax.persistence-api和过时的spring-data-jpa,这会引发严重依赖冲突,是Unsatisfied dependency的主要诱因。修改POM如下:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>3.2.5</version>
        <relativePath/>
    </parent>
    <groupId>com.example</groupId>
    <artifactId>demo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>demo</name>
    <description>Demo project for Spring Boot</description>
    <properties>
        <java.version>17</java.version>
    </properties>
    <dependencies>
        <!-- Spring Boot Starter自动管理依赖版本,无需手动指定子依赖版本 -->
        <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>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <!-- JavaFX依赖 -->
        <dependency>
            <groupId>org.openjfx</groupId>
            <artifactId>javafx-controls</artifactId>
            <version>17</version>
        </dependency>
        <dependency>
            <groupId>org.openjfx</groupId>
            <artifactId>javafx-fxml</artifactId>
            <version>17</version>
        </dependency>
        <!-- MySQL驱动(Spring Boot 3.x官方推荐) -->
        <dependency>
            <groupId>com.mysql</groupId>
            <artifactId>mysql-connector-j</artifactId>
            <scope>runtime</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>
  • 移除jakarta.persistence-api、javax.persistence-api和spring-data-jpa手动依赖:spring-boot-starter-data-jpa已包含适配Spring Boot 3的Jakarta Persistence API和Spring Data JPA版本。
  • 将mysql-connector-java替换为mysql-connector-j,并设置scope=runtime(仅运行时需要)。

2. 修复AccountsRepository接口

JpaRepository<Accounts, Long>已继承CrudRepository,自带save()方法,手动定义的void save(Accounts account)会覆盖默认实现,导致Spring无法生成正确的代理Bean。删除重复方法:

@Repository
public interface AccountsRepository extends JpaRepository<Accounts, Long> {
    // 移除手动定义的save方法,使用JpaRepository自带实现
}

3. 完善Accounts实体类

  • 必须添加getter和setter:Spring Data JPA需要通过getter/setter访问实体属性,否则无法完成持久化。
  • 确保关联的Permissions和Teams实体类存在并添加@Entity注解,若暂时不需要关联,可先注释字段以优先跑通基础功能:
@Entity
@Table(name = "accounts")
public class Accounts {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long accountID;
    // 暂时注释关联,先测试基础功能
    // @ManyToOne
    // @JoinColumn(name = "permissionID")
    // private Permissions permission;

    private String name;
    private String surname;
    private String email;
    private String phoneNumber;
    private String password;
    private String login;

    // @ManyToOne
    // @JoinColumn(name = "teamID")
    // private Teams team;

    // 添加所有字段的getter和setter
    public Long getAccountID() {
        return accountID;
    }

    public void setAccountID(Long accountID) {
        this.accountID = accountID;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    // 其他字段的getter/setter同理添加
}

4. 添加数据库配置

在src/main/resources/application.properties中添加XAMPP MySQL连接配置:

# 数据库连接配置
spring.datasource.url=jdbc:mysql://localhost:3306/你的数据库名?useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true
spring.datasource.username=root
spring.datasource.password=你的MySQL密码(默认空)

# JPA配置
spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=true
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL8Dialect
  • 替换你的数据库名和你的MySQL密码为实际值(XAMPP默认用户名root,密码为空)。
  • spring.jpa.hibernate.ddl-auto=update会自动创建/更新数据库表,适合开发阶段。

5. 优化主类注解

@SpringBootApplication已包含@ComponentScan(扫描同包及子包)和@EnableJpaRepositories(默认扫描主类所在包的Repository),无需手动添加:

package com.example.kilohokla;

@SpringBootApplication
public class HelloApplication extends Application {
    private ConfigurableApplicationContext applicationContext;

    @Override
    public void init() throws Exception {
        applicationContext = SpringApplication.run(HelloApplication.class);
    }

    // 其他方法保留...
}

6. 改用构造注入(更稳定)

字段注入@Autowired易引发初始化问题,推荐使用构造注入:

AccountService修改:

@Service
public class AccountService {
    private final AccountsRepository accountsRepository;

    // 构造注入,Spring自动注入Repository
    public AccountService(AccountsRepository accountsRepository) {
        this.accountsRepository = accountsRepository;
    }

    @Transactional
    public void addAccount(Accounts account) {
        accountsRepository.saveAndFlush(account);
    }
}

AccountsController修改:

@Controller
public class AccountsController {
    private final AccountService accountService;

    public AccountsController(AccountService accountService) {
        this.accountService = accountService;
    }

    @PostMapping("/addAccount")
    public String addAccount(Accounts account) {
        accountService.addAccount(account);
        return "redirect:/";
    }
}

最后验证步骤

  1. 启动XAMPP的MySQL服务,确保目标数据库已创建。
  2. 执行mvn clean install清理旧依赖并重新构建项目。
  3. 启动应用,检查控制台日志是否存在错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 22:10:55