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

创建Azure SQL数据库及表时遇EmployeeRepository Bean找不到错误求助

Spring Boot 整合Azure SQL时无法找到Repository Bean的问题排查与解决

问题场景

尝试基于Spring Boot连接Microsoft Azure SQL数据库并通过JPA自动生成表,启动程序后出现依赖注入错误,提示无法找到EmployeeRepository类型的Bean。

相关代码片段

Employee实体类

package com.javatechie.azuresql;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.stereotype.Component;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@Table
@Data
@AllArgsConstructor
@NoArgsConstructor
@Component
public class Employee {
    @Id
    @GeneratedValue
    private int id;
    private String name;
    private  String dept;
    private long salary;
}

EmployeeRepository接口

package com.javatechie.azuresql;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Component;

@Component
public interface EmployeeRepository extends JpaRepository<Employee,Integer> {
}

SpringbootAzuresqlApplication主类

package com.javatechie.azuresql;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

@SpringBootApplication
@RestController
public class SpringbootAzuresqlApplication {

    @Autowired
    private EmployeeRepository repository;

    @PostMapping("/employee")
    public Employee addEmployee(@RequestBody Employee employee){
        return repository.save(employee);
    }

    @GetMapping("/employees")
    public List<Employee> getEmployees(){
        return repository.findAll();
    }

    public static void main(String[] args) {
        SpringApplication.run(SpringbootAzuresqlApplication.class, args);
    }

}

application.yml配置

spring:
  datasource:
    url: jdbc:jdbc:sqlserver://javatechi.database.windows.net:1433;encrypt=true;trustServerCertificate=false;hostNameInCertificate=*.database.windows.net;loginTimeout=30;
    username: javatechi
    password: password.123
  jpa:
    show-sql: true
    hibernate:
      ddl-auto: update
      dialect: org.hibernate.dialect.SQLServer2012Dialect

server:
  port: 9191

pom.xml依赖

<?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>2.7.1</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.javatechie</groupId>
    <artifactId>springboot-azuresql</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>springboot-azure-sql</name>
    <description>Demo project for Spring Boot</description>
    <properties>
        <java.version>17</java.version>
    </properties>
    <dependencies>
        <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>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <scope>provided</scope>
        </dependency>

        <dependency>
            <groupId>com.microsoft.sqlserver</groupId>
            <artifactId>mssql-jdbc</artifactId>
            <scope>runtime</scope>
        </dependency>

        <dependency>
            <groupId>org.springframework.data</groupId>
            <artifactId>spring-data-jpa</artifactId>
            <version>2.7.0</version>
        </dependency>

        <dependency>
            <groupId>org.webjars.npm</groupId>
            <artifactId>table</artifactId>
            <version>5.4.6</version>
        </dependency>

        <dependency>
            <groupId>javax.persistence</groupId>
            <artifactId>persistence-api</artifactId>
            <version>1.0.2</version>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

错误信息

描述:
com.javatechie.azuresql.SpringbootAzuresqlApplication中的repository字段需要一个类型为'com.javatechie.azuresql.EmployeeRepository'的Bean,但无法找到。

注入点带有以下注解:

  • @org.springframework.beans.factory.annotation.Autowired(required=true)

建议:
考虑在配置中定义一个类型为'com.javatechie.azuresql.EmployeeRepository'的Bean。

解决步骤

1. 修正Repository的注解

将EmployeeRepository上的@Component替换为@Repository,Spring Data JPA需要通过该注解识别仓库接口,并动态生成代理实现类:

package com.javatechie.azuresql;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

@Repository
public interface EmployeeRepository extends JpaRepository<Employee,Integer> {
}

2. 移除实体类的冗余注解

实体类不需要被Spring容器管理,删除Employee类上的@Component注解:

package com.javatechie.azuresql;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@Table
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Employee {
    @Id
    @GeneratedValue
    private int id;
    private String name;
    private  String dept;
    private long salary;
}

3. 优化pom.xml依赖

使用Spring Boot官方的spring-boot-starter-data-jpa替代单独的spring-data-jpa,starter会自动管理版本和依赖,同时移除不必要的persistence-api和table依赖:

<dependencies>
    <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>

    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <scope>provided</scope>
    </dependency>

    <dependency>
        <groupId>com.microsoft.sqlserver</groupId>
        <artifactId>mssql-jdbc</artifactId>
        <scope>runtime</scope>
    </dependency>

    <!-- 替换为Spring Boot JPA Starter -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>
</dependencies>

4. 修复数据库URL错误

原URL中重复了jdbc:前缀,修正为正确的格式:

spring:
  datasource:
    url: jdbc:sqlserver://javatechi.database.windows.net:1433;encrypt=true;trustServerCertificate=false;hostNameInCertificate=*.database.windows.net;loginTimeout=30;
    username: javatechi
    password: password.123
  jpa:
    show-sql: true
    hibernate:
      ddl-auto: update
      dialect: org.hibernate.dialect.SQLServer2012Dialect

server:
  port: 9191

5. 确认包扫描范围

主类SpringbootAzuresqlApplication所在包为com.javatechie.azuresql,Repository和实体类都在同一包下,@SpringBootApplication默认会扫描当前包及子包,无需额外添加@ComponentScan(若有需要可保留,但当前场景下冗余)。

完成以上修改后,重新启动应用,Spring会正确生成EmployeeRepository的Bean,并通过JPA连接Azure SQL自动生成表结构。

内容的提问来源于stack exchange,提问作者tricks. com

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 08:45:39