提问人:Loopinfility 提问时间:10/18/2022 更新时间:6/4/2023 访问量:4025
注入点具有以下注释:@org.springframework.beans.factory.annotation.Autowired(required=true)
The injection point has the following annotations: @org.springframework.beans.factory.annotation.Autowired(required=true)
问:
您好,我是Spring Boot的新手,一段时间以来我收到此错误,不幸的是无法修复它。从那时起,我一直在谷歌上搜索,但仍然找不到我做错了什么。我相信服务类中存在错误。我试图删除字段注入 ( @Autowired) 并实现为构造函数注入,但效果不佳 在我的代码下面找到:
实体:
package com.devops.maven.cars_api_maven.model;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import javax.persistence.*;
@JsonIgnoreProperties({"hibernateLazyInitializer", "handler"})
@Entity
@Table(name = "CARS")
@SequenceGenerator(name="seq", initialValue=4, allocationSize=100)
public class Car {
@Id
@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="seq")
private Long id;
String manufacturer;
String model;
int build;
public Car() {
}
public Car(Long id, String manufacturer, String model, int build) {
this.id = id;
this.manufacturer = manufacturer;
this.model = model;
this.build = build;
}
public Long getId() {
return id;
}
public String getManufacturer() {
return manufacturer;
}
public String getModel() {
return model;
}
public int getBuild() {
return build;
}
public void setId(Long id) {
this.id = id;
}
public void setManufacturer(String manufacturer) {
this.manufacturer = manufacturer;
}
public void setModel(String model) {
this.model = model;
}
public void setBuild(int build) {
this.build = build;
}
}
道
package com.devops.maven.cars_api_maven.repositories;
import com.devops.maven.cars_api_maven.model.Car;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
@Repository
public interface CarsRepository extends JpaRepository<Car, Long> {
}
主要
package com.devops.maven.cars_api_maven;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
@SpringBootApplication (
exclude = {DataSourceAutoConfiguration.class },
scanBasePackages={
"com.devops.maven", "com.devop.application"}
)
public class CarsApplication {
public static void main(String[] args) {
SpringApplication.run(CarsApplication.class, args);
}
}
服务等级
package com.devops.maven.cars_api_maven;
import com.devops.maven.cars_api_maven.model.Car;
import com.devops.maven.cars_api_maven.repositories.CarsRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@RestController
@RequestMapping("cars")
@Service
public class CarsController {
@Autowired
private CarsRepository repository;
@GetMapping
public List<Car> getCars() {
return repository.findAll();
}
@PostMapping
public Car addCar(@RequestBody Car car) {
return repository.save(car);
}
@SuppressWarnings("deprecation")
@GetMapping(value = "/{id}")
public Car getCarById(@PathVariable("id") long id) {
return repository.getOne(id);
}
@DeleteMapping(value = "/{id}")
public void removeCarById(@PathVariable("id") long id) {
repository.deleteById(id);
}
}
错误输出:
应用程序无法启动
描述:
com.devops.maven.cars_api_maven 中的字段存储库。汽车控制器 需要 bean type 'com.devops.maven.cars_api_maven.repositories.CarsRepository' 无法找到。
进样点具有以下注释:
- @org.springframework.beans.factory.annotation.Autowired(required=true)
行动:
考虑定义 bean type “com.devops.maven.cars_api_maven.repositories.CarsRepository”在您的 配置。
答:
0赞
Rohit Agarwal
10/18/2022
#1
请从下面的类中删除并重新运行。它将解决问题。exclude = {DataSourceAutoConfiguration.class }
package com.devops.maven.cars_api_maven;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
@SpringBootApplication (
exclude = {DataSourceAutoConfiguration.class },
scanBasePackages={
"com.devops.maven", "com.devop.application"}
)
public class CarsApplication {
public static void main(String[] args) {
SpringApplication.run(CarsApplication.class, args);
}
}
评论
0赞
Loopinfility
10/18/2022
当我删除它时,我收到以下错误描述:无法配置 DataSource:未指定“url”属性,无法配置嵌入数据源。原因:无法确定合适的驱动程序类 动作: 请考虑以下事项: 如果您想要一个嵌入式数据库(H2、HSQL 或 Derby),请将其放在类路径上。如果要从特定配置文件加载数据库设置,则可能需要激活它(当前没有处于活动状态的配置文件)。
0赞
Rohit Agarwal
10/18/2022
是的,您需要使用 H2 数据库或其他数据库。如果要创建 Repository 和 Entity 类,则需要数据库。如果您将使用 H2 数据库,则无需在 application.properties 中添加任何 JPA 属性
0赞
Loopinfility
10/18/2022
你能帮我怎么做吗?
0赞
Rohit Agarwal
10/18/2022
请在 pom.xml <dependency> <groupId>com.h2database</groupId> <artifactId>h2</artifactId> <scope>runtime</scope> </dependency 中添加以下依赖>
0赞
Rohit Agarwal
10/18/2022
很高兴听到它解决了您的问题:)
0赞
Avijit Nagare
6/4/2023
#2
我曾经遇到过这个问题。我没有遵循包约定,因此 spring boot 无法正确找到这些类/bean。甚至“scanBasePackages”也不起作用。
错误的包声明:
Ex. com.example.course.dao
services
com.example.controller
course.entities
正确声明:
Ex. com.example.course.dao
com.example.course.services
com.example.course.controller
com.example.course.entities
我希望这可以帮助某人。
评论