gpt4 book ai didi

spring-boot - 未找到 CRUD 存储库 bean 异常

转载 作者:行者123 更新时间:2023-12-05 02:03:33 26 4
gpt4 key购买 nike

我有一个连接到 AWS DynamoDB 的应用程序。我正在尝试使用 Jedis 在此应用程序中实现 Redis 连接。

但是,就在我添加这个依赖之后——

    <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

我收到这个错误-

***************************
APPLICATION FAILED TO START
***************************

Description:

Field userInfoRepository in org.csulb.md.service.DBService required a bean of type 'org.csulb.md.repo.UserInfoRepository' that could not be found.

The injection point has the following annotations:
- @org.springframework.beans.factory.annotation.Autowired(required=true)


Action:

Consider defining a bean of type 'org.csulb.md.repo.UserInfoRepository' in your configuration.

UserInfoRepository 实现 CrudRepository。

我不确定我错过了什么。简而言之,在此代码中添加 spring-boot-starter-data-redis 依赖项会出现此错误。没有这种依赖性,代码可以正常工作。

下面是我的其余代码。

MainApp.java

package org.csulb.md;

@SpringBootApplication
public class MainApp {

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

DynamoDBConfig.java

package org.csulb.md.config;

@Configuration
@EnableDynamoDBRepositories(basePackages = "org.csulb.md.repo")
public class DynamoDBConfig {

@Value("${amazon.dynamodb.endpoint}")
private String amazonDynamoDBEndpoint;

@Value("${amazon.aws.accesskey}")
private String amazonAWSAccessKey;

@Value("${amazon.aws.secretkey}")
private String amazonAWSSecretKey;

@Value("${amazon.aws.awsSessionToken}")
private String awsSessionToken;

@Bean
public AmazonDynamoDB amazonDynamoDB() {
AmazonDynamoDB amazonDynamoDB
= new AmazonDynamoDBClient(amazonAWSCredentials());

if (!StringUtils.isEmpty(this.amazonDynamoDBEndpoint)) {
amazonDynamoDB.setEndpoint(this.amazonDynamoDBEndpoint);
}

return amazonDynamoDB;
}

@Bean
public AWSCredentials amazonAWSCredentials() {

AWSCredentials awsCredentials = null;

if(StringUtils.isEmpty(this.awsSessionToken)) {
awsCredentials = new BasicAWSCredentials(this.amazonAWSAccessKey, this.amazonAWSSecretKey);
} else {
awsCredentials = new BasicSessionCredentials(this.amazonAWSAccessKey, this.amazonAWSSecretKey, this.awsSessionToken);
}

return awsCredentials;
}

UserInfoRepository.java

package org.csulb.md.repo;

@EnableScan
public interface UserInfoRepository extends CrudRepository<UserInfo, String> {}

GreetingController.java

package org.csulb.md.controller;

@RestController
public class GreetingController {

@Autowired
private DBService dbService;

@GetMapping("/getdata")
public UserInfo greeting(@RequestParam(value = "id") String id) {

UserInfo userInfo = dbService.getUserById(id);
return userInfo;
}
}

UserInfo.java

package org.csulb.md.pojo;

@DynamoDBTable(tableName = "UserInfo")
public class UserInfo {

@DynamoDBHashKey
@DynamoDBAutoGeneratedKey
@DynamoDBAttribute(attributeName = "id")
private String id;

@DynamoDBAttribute(attributeName = "name")
private String name;

@DynamoDBAttribute(attributeName = "location")
private String location;

public String getLocation() {
return location;
}

public void setLocation(String location) {
this.location = location;
}

public String getId() {
return id;
}

public void setId(String id) {
this.id = id;
}

public String getName() {
return name;
}

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

}

DBService.java

package org.csulb.md.service;

@Component
public class DBService {

Logger logger = LoggerFactory.getLogger(DBService.class);

@Autowired
private UserInfoRepository userInfoRepository;

public UserInfo getUserById(String id){

Optional<UserInfo> userId = userInfoRepository.findById(id);
UserInfo userInfo = new UserInfo();

if(userId.isPresent()) {
logger.info("UserInfo found: "+userId.get().getId());
BeanUtils.copyProperties(userId.get(), userInfo);
} else {
logger.info("UserInfo not found: "+id);
}

return userInfo;
}

}

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.3.2.RELEASE</version>
<relativePath />
</parent>

<groupId>org.csulb.md</groupId>
<artifactId>dynamodb-connector</artifactId>
<version>0.0.1</version>
<name>dynamodb-connector</name>

<properties>
<java.version>1.8</java.version>
<docker.image.prefix>springio</docker.image.prefix>
<start-class>org.csulb.md.MainApp</start-class>
</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>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>

<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-java-sdk-dynamodb</artifactId>
<version>1.11.64</version>
</dependency>

<dependency>
<groupId>com.github.derjust</groupId>
<artifactId>spring-data-dynamodb</artifactId>
<version>5.1.0</version>
</dependency>

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

</dependencies>

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

</project>

P.S - 添加 @ComponentScan("org.csulb.md.repo") 到主类解决了这个错误,但它无法识别其他组件,因此 Controller 无法工作。我也尝试添加 @ComponentScan("org.csulb.md) ,这给出了与描述相同的错误。我尝试在 UserInfoRepository 上添加 @Repository/@Component 并发现没有运气。

最佳答案

我在尝试使用 spring-data-dynamodbspring data-redis 时遇到了同样的问题。发生此问题是因为 spring-data-dynamodb 中存在实现差距。它不支持多个数据存储设置。您也可以在日志中找到相同的内容:Spring Data DynamoDB 不支持多商店设置!

在解决方案中,使用多个数据存储,Spring 数据进入存储库扫描的严格模式。所以在我的例子中,我能够在 @EnableDynamoDBRepositories 中添加 includeFilters。添加此以启用严格的存储库扫描:

@EnableDynamoDBRepositories(basePackages = "org.csulb.md.repo",
includeFilters = @ComponentScan.Filter(type = FilterType.ANNOTATION, classes = Repository.class))

org.springframework.stereotype.Repository注解添加到UserInfoRepository.java类。

关于spring-boot - 未找到 CRUD 存储库 bean 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65058220/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com