의 생성자 매개 변수 0에는 'java.lang' 유형의 빈이 필요합니다.String'을 찾을 수 없습니다.
spring boot 2.X 어플리케이션으로 spring batch 작업을 하고 있는데, 사실 기존 코드는 git에서 체크 아웃되어 있습니다.어플리케이션 실행 중 저만 아래 오류로 인해 장애가 발생하며 다른 사용자도 동일한 코드가 작동합니다.
s.c.a.AnnotationConfigApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'inputItemReader' defined in file [C:\Users\XYZ\git\main\batch\CBatchProcessing\target\classes\com\main\batchprocessing\batch\reader\InputItemReader.class]: Unsatisfied dependency expressed through **constructor parameter 0; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'java.lang.String' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations**: {}
Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.
2018-10-16 23:23:37.411 ERROR 2384 --- [ main] o.s.b.d.LoggingFailureAnalysisReporter :
***************************
APPLICATION FAILED TO START
***************************
Description:
**Parameter 0 of constructor in com.main.batchprocessing.batch.reader.InputItemReader required a bean of type 'java.lang.String' that could not be found.**
Action:
Consider defining a bean of type 'java.lang.String' in your configuration.
아래 확인했습니다.
- 모든 스프링 컴포넌트에 @Component, @Service, @Controller, @Repository 등의 주석이 올바르게 부착되어 있습니다.
- @ComponentScan & @Enable자동 설정도 준비되어 있습니다.
- "java.lang"을 주려 했다.String"을 지정합니다.
코드:
import java.util.Map;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.batch.core.ExitStatus;
import org.springframework.batch.core.StepExecution;
import org.springframework.batch.core.StepExecutionListener;
import org.springframework.batch.item.file.FlatFileItemReader;
import org.springframework.batch.item.file.mapping.JsonLineMapper;
import
org.springframework.batch.item.file.separator.JsonRecordSeparatorPolicy;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.core.io.FileSystemResource;
import org.springframework.stereotype.Component;
@Component
public class InputItemReader extends FlatFileItemReader<Map<String,
Object>> implements StepExecutionListener {
@Autowired
private InputFileHeaderValidator inputFileHeaderValidator;
@Autowired
private FileAuditService fileAuditService;
private final Logger log =
LoggerFactory.getLogger(InputItemReader.class);
private java.lang.String inputFilePath;
public InputItemReader(String inputFilePath) {
setLineMapper(new JsonLineMapper());
setRecordSeparatorPolicy(new JsonRecordSeparatorPolicy());
setResource(new FileSystemResource(inputFilePath));
this.inputFilePath = inputFilePath;
}
}
공용 기본 생성자를 제공하지 않고 기본 생성자가 아닌 자체 생성자를 추가했으므로 인스턴스화는 실패합니다..@Value("${inputFilePath}")
방법을 하고 void로 을 붙입니다.@PostConstruct
그 안에서 초기화를 실시합니다.
클래스에 공용 기본 생성자를 추가합니다.예를들면.
public User() {
}
spring-boot-starter-data-jpa를 사용하고 있는지 확인합니다.
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
다음과 같이 정의했습니다.
@Component
public class InputItemReader{
public InputItemReader(String input){
...
}
}
클래스 이름을 보면 객체는 콩이 아니라 단순한 객체임을 알 수 있습니다.고전적인 방법으로 사용해 보십시오.
new InputItemReader(myString);
또는 String 입력을 처리하는 정적 메서드를 사용합니다.
설명: Spring IoC 컨테이너는 다음과 같은 새로운 InputItemReader 개체를 인스턴스화하려고 합니다.
new InputItemReader( -- WHAT TO PUT HERE? --)
컨스트럭터 호출에 실패합니다.실제로 무엇을 기대하고 문자열을 입력했는지 알 수 없기 때문입니다.
업데이트: @Component 주석을 삭제하고 다음과 같은 구성으로 콩을 정의하면 문제를 해결할 수 있습니다.
@Bean
public InputItemReader inputItemReader(InputFileHeaderValidator inputFileHeaderValidator, FileAuditService fileAuditService){
InputItemReader inputItemReader = new InputItemReader("--HERE SHOULD BE ACTUAL PATH---");
// set the required service, a cleaner approach would be to send them via constructor
inputItemReader.setFilteAuditService(fileAuditService);
inputItemReader.setInputFileHeaderValidator(inputFileHeaderValidator);
return inputItemReader;
}
저는 롬복의 @AllArgsConstructor 주석을 사용했기 때문입니다.제 코드는 이렇습니다.
@Service
@AllArgsConstructor
public class SampleService {
@Value("${search.page.size}")
private Integer pageSize;
private final SampleRepository sampleRepository;
그런 다음 @AllArgsConstrator를 삭제하고 @RequiredArgsConstrator 주석을 추가했습니다.문제는 해결되었습니다.
@Service
@RequiredArgsConstructor
public class SampleService {
@Value("${search.page.size}")
private Integer pageSize;
private final BatchRepository batchRepository;
같은 에러가 발생했는데 Feign Client에서 에러가 발생하였습니다.위장한 클라이언트를 사용하여 이 오류가 발생할 경우 다음을 추가해야 합니다.@EnableFeignClients
「이것들」은 다음과 같습니다.
@SpringCloudApplication
@EnableFeignClients
public class Application {
...
}
저도 같은 오류가 있었습니다.
***************************
APPLICATION FAILED TO START
***************************
Description:
Field repository in com.example.controller.CampaignController required a bean of type 'com.example.data.CustomerRepository' that could not be found.
Action:
Consider defining a bean of type 'com.example.data.CustomerRepository' in your configuration.de here
는 이 를 ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★@EnableMongoRepositories
: "Main Class :
@SpringBootApplication
@EnableMongoRepositories(basePackageClasses = CustomerRepository.class)
public class CampaignAPI {
public static void main(String[] args) {
SpringApplication.run(CampaignAPI.class, args);
}
}
저도 같은 문제를 안고 있었습니다.다음의 해결방법은 완벽하게 성공했습니다.
는 반에 을 달았습니다.@AllArgsConstructor
에 의한import lombok.AllArgsConstructor
방금 이 주석을 제거했는데 코드가 작동하기 시작합니다.
이게 누군가에게 도움이 되길 바라.
이 경우 용장 @Autowired가 문제였습니다.처음에는 @Autowired를 사용하여 의존관계를 추가했지만, 결국 코멘트를 하지 않았기 때문에 @Autowired 옆에 있는 메서드는 일종의 세터로 간주되었습니다.
중복 주석을 제거하면 올바르게 작동합니다.
위의 해결방법에 따라도 문제가 해결되지 않으면 수입명세서를 확인해 주십시오.
제 경우 @service 주석의 잘못된 Import였습니다.
제 경우 @Service 주석을 놓쳤기 때문에 일단 배치하면 동작합니다.
저 같은 경우에는 사안이 많이 달랐어요.
@SpringBootApplication
@EnableNeo4jRepositories("com.digital.api.repositories") // <-- This was non-existent.
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
@EnableNeo4jRepository 주석을 확인합니다.정의된 패키지가 존재하지 않습니다.이 패키지를 정의해 보고 Repository 인터페이스가 이 패키지에 기반을 두고 있는지 확인하십시오.그렇지 않으면 Spring은 로드해야 할 리포지토리 클래스를 찾을 수 없습니다.
저도 같은 문제에 직면해 있었습니다만, Model 클래스에서 Constructors를 삭제함으로써 문제가 해결되었습니다.아래에 샘플 스니펫을 추가하고 있습니다.
Map<String, ServiceDefinition> serviceDefinitionMapper = new HashMap<>();
A def;
B serviceCharacter;
@Autowired
public Scan(Map<String, ServiceDefinition> serviceDefinitionMapper, A def,
B serviceCharacter) {
super();
this.serviceDefinitionMapper = serviceDefinitionMapper;
this.def = def;
this.serviceCharacter = serviceCharacter;
}
주의사항:디카일이 매우 필요한 경우가 아니면 모델 클래스에 컨스트럭터/@AllArgsConstructor를 유지하지 마십시오.
에는 롬복으로 필드에 주석을 요.@NonNull
문제의 원인이었어요
롬복을 수입하다필수 ArgsConstructor;
롬복을 수입하다extern.slf4j.slf4j;
@Service
@RequiredArgsConstructor
@Transactional
@Slf4j
public class UserServiceImp implements UserService, UserDetailsService {
....
}
최근에 이 문제가 발생했는데 알고 보니 프로젝트의 서비스 파일에 '@Component' 주석을 추가하지 않았습니다.그 결과 수업은 봄콩으로 인스턴스화되지 않았다.
같은 문제에 직면했지만, 자신이 작성한 인터페이스 저장소를 찾을 수 없었습니다.답변은 Spring 2.6.3에 Java 8에 버그가 있다는 것이었습니다.java를 11버전으로 전환한 후 모든 것이 정상입니다.
이러한 문제에 대한 자세한 내용은 https://github.com/spring-projects/spring-boot/issues/6987를 참조하십시오.
에는 이런 입니다.@Component
스캔을 하고 싶지 않기 때문에 스캔하지 않는 것이 좋은 예외 코드입니다.서비스상의 예외를 처리하기 위해서 사용하고 있는 것 뿐입니다.또는 내장된 예외에 있는 주석을 삭제하려고 합니다.
내 기계로 작업했다.
JUnit으로 테스트하는 동안 문제가 발생했습니다.@MockBean 주석 작성을 잊어버려서 콩이 없어졌습니다.
위의 문제와는 관련이 없지만 스프링 부트 어플리케이션에서 빈 생성 오류가 발생하여 위의 오류가 발생할 경우 메인 스프링 부스 어플리케이션 부팅 클래스의 @ComponentScan()에서 클래스 경로를 추가했는지 확인하십시오.
내 경우 서비스 인터페이스를 정의하고 실장하는 것을 잊어버렸습니다.이것도 체크해 주세요.
이걸 넣으려면 이걸 넣어야 해@RequiredArgsConstructor
내 수업에 주석을 달았고, 그리고 나서 이것을 추가했다.@Value("${inputFilePath}")
주석을 사용하여 변수에 액세스합니다.아래를 참조해 주세요.
@Component
@RequiredArgsConstructor
public class InputItemReader extends FlatFileItemReader<Map<String,
Object>> implements StepExecutionListener {
@Value("${inputFilePath}")
private inputFilePath;
//...
}
레코드를 사용하려고 할 때 이 오류가 발생했습니다.
@Component
public record User(String Name, int Age){}
기록이 필요없다는 것이 판명되었다.@Component
. 떼어내는 것만으로 고칠 수 있습니다.
제 경우 설정에서 @EnableJpaReposities 주석을 삭제하면 문제가 해결되었습니다.저장소는 여전히 올바르게 연결되어 있습니다.
이전:
@Configuration
@EnableTransactionManagement
@EnableJpaRepositories
@EnableJpaAuditing
public class PersistenceConfig {
그 후:
@Configuration
@EnableTransactionManagement
@EnableJpaAuditing
public class PersistenceConfig {
언급URL : https://stackoverflow.com/questions/52841620/parameter-0-of-constructor-in-required-a-bean-of-type-java-lang-string-that-co
'programing' 카테고리의 다른 글
OnClick은 작동하지만 React 구성 요소에서는 OnDoubleClick이 무시됨 (0) | 2023.03.19 |
---|---|
이 파일 형식을 처리하려면 적절한 로더가 필요할 수 있습니다. 현재 이 파일을 처리하도록 구성된 로더는 없습니다." (0) | 2023.03.19 |
에 대한 JOBject를 디시리얼화하는 방법NET 객체 (0) | 2023.03.14 |
페이지 번호 링크가 작동하지 않음 /page/2 - 찾을 수 없음 - Wordpress (0) | 2023.03.14 |
Angular에서 간단한 부트스트랩 예/아니오 확인 또는 알림 경고 생성JS (0) | 2023.03.14 |