Spring不满足DependencyException问题



我试图创建一个到AWS DynamoDB的简单连接,但不幸的是,Spring遇到了一些问题。我使用来自亚马逊的连接凭据设置了配置文件,并将此配置文件配置为默认配置文件。现在,当我尝试启动应用程序时,它总是显示以下错误。我想这与类路径有关,但我找不到解决方案。

此练习的目标应该是在数据库中发布一些数据。

此外,我的课程:

package com.example.mfc;
import com.amazonaws.auth.AWSStaticCredentialsProvider;
import com.amazonaws.auth.BasicAWSCredentials;
import com.amazonaws.client.builder.AwsClientBuilder;
import com.amazonaws.services.dynamodbv2.AmazonDynamoDB;
import com.amazonaws.services.dynamodbv2.AmazonDynamoDBClientBuilder;
import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMapper;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class DynamoDBConfig {
@Value("${amazon.access.key}")
private String awsAccessKey;
@Value("${amazon.access.secret-key}")
private String awsSecretKey;
@Value("${amazon.region}")
private String awsRegion;
@Value("${amazon.end-point.url}")
private String awsDynamoDBEndPoint;
@Bean
public DynamoDBMapper mapper(){
return new DynamoDBMapper(amazonDynamoDBConfig());
}
public AmazonDynamoDB amazonDynamoDBConfig(){
return AmazonDynamoDBClientBuilder.standard()
.withEndpointConfiguration(new AwsClientBuilder.EndpointConfiguration(awsDynamoDBEndPoint, awsRegion))
.withCredentials(new AWSStaticCredentialsProvider(new BasicAWSCredentials(awsAccessKey, awsSecretKey)))
.build();
}
}



package com.example.mfc;
import com.example.classes.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
@RestController
@RequestMapping("/dynamoDb")
public class DynamoDBController {
@Autowired
private DynamoDBRepository repository;
@PostMapping
public String insertUserIntoDynamoDb(@RequestBody User user){
repository.insertUserIntoDynamoDB(user);
return "User successfully inserted into DynamoDB table.";
}
@GetMapping
public ResponseEntity<User> getOneUserDetail(@RequestParam String UserID, @RequestParam String lastName){
User user = repository.getOneUserDetail(UserID, lastName);
return new ResponseEntity<User>(user, HttpStatus.OK);
}
@PutMapping
public void updateUserDetail(@RequestBody User user){
repository.updateUserDetail(user);
}
@DeleteMapping(value = "{userID}/{lastName}")
public void deleteUserDetail(@PathVariable("userID") String userID, @PathVariable("lastName") String lastName){
User user = new User();
user.setUserID(userID);
user.setLastName(lastName);
repository.deleteUserDetail(user);
}
}



package com.example.mfc;
import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMapper;
import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBSaveExpression;
import com.amazonaws.services.dynamodbv2.model.AttributeValue;
import com.amazonaws.services.dynamodbv2.model.ComparisonOperator;
import com.amazonaws.services.dynamodbv2.model.ConditionalCheckFailedException;
import com.amazonaws.services.dynamodbv2.model.ExpectedAttributeValue;
import com.example.classes.User;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
import java.util.HashMap;
import java.util.Map;
import java.util.logging.Logger;
@Repository
public class DynamoDBRepository {
private static final Logger LOGGER = (Logger) LoggerFactory.getLogger(DynamoDBRepository.class);
@Autowired
private DynamoDBMapper mapper;
public void insertUserIntoDynamoDB(User user){
mapper.save(user);
}
public User getOneUserDetail(String userID, String lastName){
return mapper.load(User.class, userID, lastName);
}
public void updateUserDetail(User user) {
try {
mapper.save(user, buildDynamoDBSaveExpression(user));
} catch (ConditionalCheckFailedException exception) {
LOGGER.info("invalid data. -" + exception.getMessage());
}
}
public void deleteUserDetail(User user){
mapper.delete(user);
}
public DynamoDBSaveExpression buildDynamoDBSaveExpression(User user){
DynamoDBSaveExpression saveExpression = new DynamoDBSaveExpression();
Map<String, ExpectedAttributeValue> expected = new HashMap<>();
expected.put("userID", new ExpectedAttributeValue(new AttributeValue(user.getUserID()))
.withComparisonOperator(ComparisonOperator.EQ));
saveExpression.setExpected(expected);
return saveExpression;
}
}


package com.example.mfc;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class MfcApplication {
public static void main(String[] args) {
SpringApplication.run(MfcApplication.class, args);
}
}


package com.example.classes;
import com.amazonaws.services.dynamodbv2.datamodeling.*;
import java.io.Serializable;
@DynamoDBTable(tableName = "MFC")
public class User implements Serializable {
private static final long serialVersionUID = 1L;
private String userID;
private String lastName;
private String email;
@DynamoDBHashKey(attributeName = "UserID")
@DynamoDBAutoGeneratedKey
public String getUserID() {
return userID;
}
public void setUserID(String userID) {
this.userID = userID;
}
@DynamoDBRangeKey
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
@DynamoDBAttribute
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
}

2022-09-01 21:15:06.521  INFO 39924 --- [           main] com.example.mfc.MfcApplication           : Starting MfcApplication using Java 14.0.2 on Andreass-MBP-2 with PID 39924 (/Users/andreas/Desktop/MFC/target/classes started by andreaspichler in /Users/andreas/Desktop/MFC)
2022-09-01 21:15:06.524  INFO 39924 --- [           main] com.example.mfc.MfcApplication           : No active profile set, falling back to 1 default profile: "default"
2022-09-01 21:15:07.278  INFO 39924 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port(s): 9001 (http)
2022-09-01 21:15:07.285  INFO 39924 --- [           main] o.apache.catalina.core.StandardService   : Starting service [Tomcat]
2022-09-01 21:15:07.286  INFO 39924 --- [           main] org.apache.catalina.core.StandardEngine  : Starting Servlet engine: [Apache Tomcat/9.0.65]
2022-09-01 21:15:07.350  INFO 39924 --- [           main] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
2022-09-01 21:15:07.350  INFO 39924 --- [           main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 783 ms
2022-09-01 21:15:07.381  WARN 39924 --- [           main] ConfigServletWebServerApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'dynamoDBController': Unsatisfied dependency expressed through field 'repository'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dynamoDBRepository' defined in file [/Users/andreas/Desktop/MFC/target/classes/com/example/mfc/DynamoDBRepository.class]: Instantiation of bean failed; nested exception is java.lang.ExceptionInInitializerError
2022-09-01 21:15:07.382  INFO 39924 --- [           main] o.apache.catalina.core.StandardService   : Stopping service [Tomcat]
2022-09-01 21:15:07.391  INFO 39924 --- [           main] ConditionEvaluationReportLoggingListener : 
Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.
2022-09-01 21:15:07.405 ERROR 39924 --- [           main] o.s.boot.SpringApplication               : Application run failed
org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'dynamoDBController': Unsatisfied dependency expressed through field 'repository'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dynamoDBRepository' defined in file [/Users/andreas/Desktop/MFC/target/classes/com/example/mfc/DynamoDBRepository.class]: Instantiation of bean failed; nested exception is java.lang.ExceptionInInitializerError
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.resolveFieldValue(AutowiredAnnotationBeanPostProcessor.java:659) ~[spring-beans-5.3.22.jar:5.3.22]
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:639) ~[spring-beans-5.3.22.jar:5.3.22]
at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:119) ~[spring-beans-5.3.22.jar:5.3.22]
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessProperties(AutowiredAnnotationBeanPostProcessor.java:399) ~[spring-beans-5.3.22.jar:5.3.22]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1431) ~[spring-beans-5.3.22.jar:5.3.22]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:619) ~[spring-beans-5.3.22.jar:5.3.22]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542) ~[spring-beans-5.3.22.jar:5.3.22]
at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) ~[spring-beans-5.3.22.jar:5.3.22]
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[spring-beans-5.3.22.jar:5.3.22]
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) ~[spring-beans-5.3.22.jar:5.3.22]
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208) ~[spring-beans-5.3.22.jar:5.3.22]
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:955) ~[spring-beans-5.3.22.jar:5.3.22]
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:918) ~[spring-context-5.3.22.jar:5.3.22]
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:583) ~[spring-context-5.3.22.jar:5.3.22]
at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:147) ~[spring-boot-2.7.3.jar:2.7.3]
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:734) ~[spring-boot-2.7.3.jar:2.7.3]
at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:408) ~[spring-boot-2.7.3.jar:2.7.3]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:308) ~[spring-boot-2.7.3.jar:2.7.3]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1306) ~[spring-boot-2.7.3.jar:2.7.3]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1295) ~[spring-boot-2.7.3.jar:2.7.3]
at com.example.mfc.MfcApplication.main(MfcApplication.java:10) ~[classes/:na]
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dynamoDBRepository' defined in file [/Users/andreas/Desktop/MFC/target/classes/com/example/mfc/DynamoDBRepository.class]: Instantiation of bean failed; nested exception is java.lang.ExceptionInInitializerError
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:1334) ~[spring-beans-5.3.22.jar:5.3.22]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1232) ~[spring-beans-5.3.22.jar:5.3.22]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:582) ~[spring-beans-5.3.22.jar:5.3.22]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542) ~[spring-beans-5.3.22.jar:5.3.22]
at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) ~[spring-beans-5.3.22.jar:5.3.22]
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[spring-beans-5.3.22.jar:5.3.22]
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) ~[spring-beans-5.3.22.jar:5.3.22]
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208) ~[spring-beans-5.3.22.jar:5.3.22]
at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:276) ~[spring-beans-5.3.22.jar:5.3.22]
at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1391) ~[spring-beans-5.3.22.jar:5.3.22]
at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1311) ~[spring-beans-5.3.22.jar:5.3.22]
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.resolveFieldValue(AutowiredAnnotationBeanPostProcessor.java:656) ~[spring-beans-5.3.22.jar:5.3.22]
... 20 common frames omitted
Caused by: java.lang.ExceptionInInitializerError: null
at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[na:na]
at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) ~[na:na]
at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) ~[na:na]
at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:500) ~[na:na]
at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:481) ~[na:na]
at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:211) ~[spring-beans-5.3.22.jar:5.3.22]
at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:87) ~[spring-beans-5.3.22.jar:5.3.22]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:1326) ~[spring-beans-5.3.22.jar:5.3.22]
... 31 common frames omitted
Caused by: java.lang.ClassCastException: class ch.qos.logback.classic.Logger cannot be cast to class java.util.logging.Logger (ch.qos.logback.classic.Logger is in unnamed module of loader 'app'; java.util.logging.Logger is in module java.logging of loader 'bootstrap')
at com.example.mfc.DynamoDBRepository.<clinit>(DynamoDBRepository.java:21) ~[classes/:na]
... 39 common frames omitted
Disconnected from the target VM, address: '127.0.0.1:58138', transport: 'socket'
Process finished with exit code 1

异常显示:

ClassCastException : class ch.qos.logback.classic.Logger cannot be cast to class java.util.logging.Logger (ch.qos.logback.classic.Logger is in unnamed module of loader 'app'; java.util.logging.Logger is in module java.logging of loader 'bootstrap')

在类DynamoDBRepository中,slf4j LoggerFactory用于获取Logger,该Logger正试图转换为java.util.logging.Logger将java.util.logging.Logger替换为org.slf4j.Logger

原因:

java.lang.ClassCastException: class ch.qos.logback.classic.Logger cannot be cast to class java.util.logging.Logger (ch.qos.logback.classic.Logger is in unnamed module of loader 'app'; java.util.logging.Logger is in module java.logging of loader 'bootstrap')

最新更新