나는 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;
}
아무것도 특별한. 관련된 모든 클래스는 매우 간단하다. 나는 누군가가 내가 잘못하고 있어요 무엇으로 가지고 모든 아이디어를 환영합니다 ...
나는 내 문제를 파악하고는 신인 실수였다. 게으름 중, 나는 우리가 우리의 REST 응용 프로그램에 대한 의미 된 일반적인 항아리에 있던 컨트롤러를 집어 우리의 전체 코드베이스에 걸쳐 구성 요소 검사를했다. 구성 요소 검사는 실제 원하는 패키지를했다.