2017-12-18 9 views
0

DB로 작업하는 스프링 부트 응용 프로그램의 인스턴스가 여러 개 있습니다. 각 인스턴스는 별도의 JVM에서 실행됩니다.
하나의 JVM에서이를 테스트하기 위해 Java로 테스트를 작성하는 방법입니까? 다음과 같이 :테스트에서 여러 스프링 부팅 응용 프로그램을 인스턴스화하십시오.

  1. 테스트 목적으로 일부 임베디드 DB를 설정하거나 조롱 할 수 있습니다. 내 봄 부팅 응용 프로그램
  2. 시작 2-5 인스턴스를 모두 중지는
  3. DB를 확인하고 모든 조건이 충족되었는지 확인 인스턴스를 시작 시간
  4. 기다립니다.

각 인스턴스에는 자체 컨텍스트와 클래스 경로가 있습니다.
필자는 일부 쉘 스크립트 시나리오에서이를 달성 할 수 있다고 생각하지만 자바로 만들고 싶습니다.
가장 좋은 방법은 무엇입니까?

답변

1

다른 포트를 사용하여 여러 번 실행할 수 있습니다.

나는

@RunWith(SpringJUnit4ClassRunner.class) 
public class ServicesIntegrationTest { 

    private RestTemplate restTemplate = new RestTemplate(); 

    @Test 
    public void runTest() throws Exception { 
     SpringApplicationBuilder uws = new SpringApplicationBuilder(UserWebApplication.class) 
       .properties("server.port=8081", 
         "server.contextPath=/UserService", 
         "SOA.ControllerFactory.enforceProxyCreation=true"); 
     uws.run(); 

     SpringApplicationBuilder pws = new SpringApplicationBuilder(ProjectWebApplication.class) 
       .properties("server.port=8082", 
         "server.contextPath=/ProjectService", 
         "SOA.ControllerFactory.enforceProxyCreation=true"); 
     pws.run(); 

     String url = "http://localhost:8081/UserService/users"; 
     ResponseEntity<SimplePage<UserDTO>> response = restTemplate.exchange(
       url, 
       HttpMethod.GET, 
       null, 
       new ParameterizedTypeReference<SimplePage<UserDTO>>() { 
       }); 

here 소스 비슷한 일을했다.

+0

감사합니다. 그것은 작동합니다. 스프링 부트 앱을 2 부 인스턴스화하면 문제없이 실행됩니다. – aleksei

+0

당신이 아는 한 가지. 실행중인 앱을 흔적으로 구별하려고하는데 여기에 갇혀 있습니다. ''logging.pattern.level = App-1 ''/' "logging.pattern.level = App-2"'속성을 추가하려고 시도했지만 항상 첫 번째''SpringApplicationBuilder.properties''의 내용을 보여줍니다. . 왜 그런 일이 일어나고 구별을위한 올바른 방법이 무엇인지 알고 있습니까? – aleksei

+0

2 가지 일 수 있습니다 - 구성 속성이 적용되기 전에 로거가 초기화됩니다. OR 속성 소스는 SpringApplicationBuilder의 속성보다 우선 순위가 높습니다. 값을 검색하는 데 사용되는 소스의 순서를 보았지만 지금은 찾을 수 없습니다. Google에보십시오. – StanislavL

관련 문제