스프링 부트:다른 jar 라이브러리에서 클래스를 자동으로 연결할 수 없음
구현이 다른 두 가지 데이터 프로젝트에 종속된 SpringBoot 애플리케이션(예: MyApp)을 개발하고 있습니다.
data-jdbc.jar
- 를 사용하여 구축된
spring-boot-starter-jdbc
그러면 애플리케이션에서 사용할 JDBC DataService 클래스가 표시됩니다.
샘플 코드:
@Service
public class JDBCDataServiceImpl implements JDBCDataService {
@Autowired
private JDBCDataRepository jdbcDataRepository;
...
}
- 꾸러미와 함께
my.data.jdbc
- SpringBoot 메인 클래스가 없습니다.유닛 테스트 클래스에 대해서만 스프링 구성이 생성됨
- 사용 중인 리포지토리 클래스
JDBCTemplate
샘플 저장소:
@Repository
public class JDBCDataRepositoryImpl implements JDBCDataRepository {
@Autowired
protected JdbcTemplate jdbcTemplate;
...
}
data-jpa.jar
- 를 사용하여 구축된
spring-boot-starter-data-jpa
또한 내 애플리케이션에서도 사용될 JPADataService 클래스를 공개합니다.
샘플 코드:
@Service
public class JPADataServiceImpl implements JPADataService {
@Autowired
private JPADataRepository jpaDataRepository;
...
}
- 꾸러미와 함께
my.data.jpa
- SpringBoot 메인 클래스가 없습니다.유닛 테스트 클래스에 대해서만 스프링 구성이 생성됨
- 리포지토리 클래스가 확장됩니다.
CrudRepository
인터페이스
샘플 저장소:
@Repository
public interface JPADataRepository extends CrudRepository<MyObject, Integer{
...
}
SpringBoot 프로젝트에는 다음과 같은 SpringBoot 메인 응용 프로그램이 있습니다.
@SpringBootApplication
public class MyApp extends SpringBootServletInitializer {
}
나의 비즈니스 서비스에서MainService
반, 나는 다음과 같은 주사를 맞았습니다.
@Service
public class MainServiceImpl implements MainService {
@Autowired
private JDBCDataService jdbcDataService;
@Autowired
private JPADataService jpaDataService;
하지만, 나는 그 문제에 직면했습니다."Could not Autowire. No beans of 'JPADataService' type found"
클래스에만 존재하는JPADataService
하지만 잘 작동합니다.JDBCService
학급.
다음 질문에서 찾은 솔루션을 사용해 보았지만 이 경우에는 이러한 솔루션이 전혀 작동하지 않습니다.
종속 라이브러리 병에 있는 빈을 @자동 배선할 수 없습니까?
@ComponentScan(basePackages = {"org.example.main", "package.of.user.class"})
외부 항아리에서 만든 봄콩을 @자동 배선하려면 어떻게 해야 합니까?
@Configuration
@ComponentScan("com.package.where.my.class.is")
class Config {
...
}
저는 이제 제 문제에 대한 해결책을 찾았습니다.데이터 라이브러리를 스캔하려면 메인 MyApp.java 패키지 레벨을 한 단계 높여야 합니다.
나의 것을 넣는 대신에.MyApp.java
아래my.app
소포, 나는 그것을 아래로 옮겨야 합니다.my
라이브러리를 성공적으로 스캔하려면my.data.jpa
그리고.my.data.jdbc
꾸러미
저는 이제 제 문제에 대한 해결책을 찾았습니다.데이터 라이브러리를 스캔하려면 메인 MyApp.java 패키지 레벨을 한 단계 높여야 합니다.
나의 것을 넣는 대신에.MyApp.java
아래my.app
소포, 나는 그것을 아래로 옮겨야 합니다.my
라이브러리를 성공적으로 스캔하려면my.data.jpa
그리고.my.data.jdbc
꾸러미
추가 중@ComponentScan
자동 배선하려는 클래스에 주석을 달지 않으면 작동하지 않습니다.@Component
이 작업을 수행하려면 다음 작업에서 메서드에 주석을 달아야 합니다.@Configuration
클래스. 다음과 같은 방법으로 클래스를 자동 배선할 수 있습니다.
@Configuration
public class ConfigClass{
@Bean
public JPADataService jpaDataService(){
return new JPADataService();
}
}
구성해야 합니다.spring.factories
외부 병:
external-jar-project
|--java
|--resources
|-- META-INF
|-- spring.factories
다음과 같은 spring.ires의 개념:
org.springframework.boot.autoconfigure.EnableAutoConfiguration=xxx
이 문제 또한 오랫동안 저를 괴롭혀 왔습니다.springboot는 당신이 소개한 jar package path 아래의 관련 클래스를 스캔할 수 없습니다.
클래스를 검색하려면 @EnableJpaRespository("cn.XXX") @EntityScan("cn.XXX")과 같은 주석을 사용해야 할 수 있습니다.
언급URL : https://stackoverflow.com/questions/38790344/springboot-cant-autowire-class-from-other-jar-library
'programing' 카테고리의 다른 글
Oracle SQL Developer의 이전 SQL 기록 (0) | 2023.07.10 |
---|---|
Rubocop 선 길이:댓글이 달린 줄을 무시하는 방법은? (0) | 2023.07.10 |
문서를 찾을 때 MongoDB가 객체 ID를 반환하지 않도록 방지하는 방법은 무엇입니까? (0) | 2023.07.10 |
ASP.Net MVC 앵커가 있는 작업으로 리디렉션 (0) | 2023.07.10 |
치명적 오류: mysql.h: mariadb를 설치할 때 해당 파일 또는 디렉토리가 없습니다. (0) | 2023.07.05 |