programing

스프링 부트:다른 jar 라이브러리에서 클래스를 자동으로 연결할 수 없음

i4 2023. 7. 10. 22:00
반응형

스프링 부트:다른 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

반응형