할 수 없습니다 자동으로 묶어 HttpServletRequest의 멀티 모듈 Gradle을 응용 프로그램에

user1660256 :

나는 Gradle을 관리하는 여러 봄 부팅 microservice 애플 리케이션을 가지고있다. 과 같이 조직 공통의 항아리와 도메인 특정 단지가있다 :

| common/
|-- common.jar
| p/
|-- p-ingest.jar
| g/
|-- g-ingest.jar

내 일반적인 항아리가 클래스를 가지고 BaseRESTService, 그 autowires HttpServletRequest(내가 이미 알고 나쁜 생각입니다 - 나의 코드). p 측 공통 ingest.jar 수입이 아니라 g 인제 항아리한다. geoalloc 문제없이 실행됩니다. 그러나 P-인제 스트, 말 그대로 g-인제에서 복사 , 실행되지 않습니다. 상황에 맞는 시도가 초기화 할 때 P-인제는 다음과 같은 예외를 가져옵니다

Field request in com.company.common.BaseRESTService required a bean of type 'javax.servlet.http.HttpServletRequest' that could not be found.

나는 봄에 새로운 아니에요, 난 구성 요소 검사 및 autowiring에 모든 것을 이해하지만 나는 2 일 동안이 작업을 봤는데 무슨 일이 일어나고 있는지 알아낼 수 없습니다. 나는 도망 gradle dependencies두 프로젝트에, 그리고 나무는 동일합니다. 다음은 P-인제의 부팅 응용 프로그램의 클래스입니다 :

@SpringBootApplication
@ComponentScan(
        basePackageClasses = com.company.common.ConfigurationSearchCriteriaFactory.class,
        basePackages = {"com.company.erd"})
@EnableJpaRepositories(basePackages = "com.company.erd")
@EntityScan(basePackages = {"com.company.erd"})
public class PortfolioRiskIngestApplication implements ApplicationRunner {

    private static final Log logger = LogFactory.getLog(IngestApplication.class);
    @Autowired
    private IngestService ingestService;

    public PIngestApplication(PIngestService ingestService) {this.ingestService = ingestService;}

    public static void main(String[] args) {

        SpringProfileHelper.setProfileFromAwsEnvironment();
        SpringApplication app = new SpringApplication(PIngestApplication.class);
        app.setWebEnvironment(false);
        app.run(args);
    }

    @PostConstruct
      void started() {
        TimeZone.setDefault(TimeZone.getTimeZone("UTC"));
      }

    @Override
    public void run(ApplicationArguments applicationArguments) {
        // define the log info
        LogInfo info = LogInfo.newInstance("run", new Object[] { StringUtility.arrayToString(applicationArguments.getSourceArgs()) });

        // log entry
        logger.info(info.entry());

        ingestService.run(applicationArguments.getSourceArgs());

        // log exit
        logger.info(info.exit());
    }
}

그리고 여기 발췌에서이다 BaseRestService:

public class BaseRESTService 
{
    private static final Log logger = LogFactory.getLog(BaseRESTService.class);

    @Autowired
    private HttpServletRequest request;

    @ResponseStatus(HttpStatus.NOT_FOUND)  
    @ExceptionHandler(value = EntityNotFoundException.class)  
    public ErrorResponse handleEntityNotFoundException(EntityNotFoundException e){  
        ErrorResponse errorResponse = new ErrorResponse();
        errorResponse.setErrorCode(HttpStatus.NOT_FOUND.value());
        errorResponse.setErrorMessage(e.getMessage());
        logger.error(e.getMessage(), e);
        return errorResponse;  
    } 

아무것도 특별한. 관련된 모든 클래스는 매우 간단하다. 나는 누군가가 내가 잘못하고 있어요 무엇으로 가지고 모든 아이디어를 환영합니다 ...

user1660256 :

나는 내 문제를 파악하고는 신인 실수였다. 게으름 중, 나는 우리가 우리의 REST 응용 프로그램에 대한 의미 된 일반적인 항아리에 있던 컨트롤러를 집어 우리의 전체 코드베이스에 걸쳐 구성 요소 검사를했다. 구성 요소 검사는 실제 원하는 패키지를했다.

추천

출처http://43.154.161.224:23101/article/api/json?id=312392&siteId=1