1.META-INF에 Jetty 추가

이 구성들은 자동 구성 방식에 의해 AutoConfiguration의 imports 파일에 기술

 

2. 잘 올라갔는지 grale에서 확인

 

3. 톰캣과 마찬가지로 config 파일 생성

Tomcat Seblet Container 말고 Jetty Seblet Container 사용할 수 있도록 스타터 추가 후

Configuration 클래스를 만들어 Jetty 사용하는 웹서버 Factory bean이 만들어지도록 등록

 

이 구성들은 자동 구성 방식에 의해 AutoConfiguration의 imports 파일에 기술

 

톰캣과 두 개 이름이 동일할 경우 충동한다고 스프링 컨테이너가 초기화할 때 에러 발생 할 수 있으므로 이름 구분해주기

TomcatWebServerConfig 파일에서도 이름 지정

@Bean("tomcatWebServerFactory")

 

4. 설정만 해줬을때는 아래와 같은 오류 발생

2개 있다고 안됨

Unable to start ServletWebServerApplicationContext due to multiple ServletWebServerFactory beans : tomcatWebServerFactory,JettyWebServerFactory

 

 조건을 달아서 어떤 구성 정보를 활용할건지 알려줘야함

 

5.JettyWebServerConfig에 @Condition 추가

@Conditional(JettyWebServerConfig.JettyCondition.class)
static public class JettyCondition implements Condition {
    @Override
    public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
        return false;    // true 반환하면 이 빈 구성 정보를 사용하겠다는 뜻, tomcat 말고 jetty 사용
    }
}

 

true 반환하면 이 빈 구성 정보를 사용하겠다는 뜻

jetty 사용하고 싶으면JettyWebServerConfig에서 반환값 true 설정해주고

나머지 TomcatWebServerConfig은 false 반환

 

Tomcat을 사용하고 싶으면 반대로 설정해주면 됨

 

 

6. 실행하고 console 확인

'SpringBoot > 프로젝트' 카테고리의 다른 글

자동 구성 정보 대체하기  (0) 2023.11.30
@Conditional 학습 테스트  (0) 2023.11.30
Test Code 작성  (0) 2023.11.27
DI를 이용한 Decorator  (2) 2023.11.27
섹션2. 스프링 부트 시작하기  (0) 2023.11.21

Test Code 란 ?

의도된 대로 정확히 작동하는지 검증하는 절차

 

  • 작성한 코드가 제대로된 기능을 수행하는지 검증
  • 빠른 시간에 테스트 가능

 

성공하는 경우 Test

@Test
void helloApi(){
    TestRestTemplate rest = new TestRestTemplate();

    ResponseEntity<String> res =
            rest.getForEntity("http://localhost:8080/hello?name={name}", String.class, "Spring");


    assertThat(res.getStatusCode()).isEqualTo(HttpStatus.OK);
    assertThat(res.getHeaders().getFirst(HttpHeaders.CONTENT_TYPE)).startsWith(MediaType.TEXT_PLAIN_VALUE);
    assertThat(res.getBody()).isEqualTo("*HelloSpring*");
}

 

TestRestTemplate rest = new TestRestTemplate();
  • RestTemplate : 오류나면 예외를 던짐
  • TestRestTemplate : 오류나도 해당 결과값을 보내줌

 응답 검증 3가지

assertThat(res.getStatusCode()).isEqualTo(HttpStatus.OK);

  1.statis code 200 ,enum값과 일치하는 지 학인 -> HttpStatus.OK
        static + import 단축키 alt + Enter

 

assertThat(res.getHeaders().getFirst(HttpHeaders.CONTENT_TYPE)).startsWith(MediaType.TEXT_PLAIN_VALUE);


  2. header(content-type) text/plain

 

assertThat(res.getBody()).isEqualTo("*HelloSpring*");


  3. body Hello Spring

 

 

실패하는 경우


//실패하는 테스트
@Test
void failHelloApi(){
    TestRestTemplate rest = new TestRestTemplate();

    ResponseEntity<String> res =
            rest.getForEntity("http://localhost:8080/hello?name=", String.class);

    assertThat(res.getStatusCode()).isEqualTo(HttpStatus.INTERNAL_SERVER_ERROR);
}

 

'SpringBoot > 프로젝트' 카테고리의 다른 글

자동 구성 정보 대체하기  (0) 2023.11.30
@Conditional 학습 테스트  (0) 2023.11.30
[Spring Boot] jetty 서버 구성 추가하기  (0) 2023.11.29
DI를 이용한 Decorator  (2) 2023.11.27
섹션2. 스프링 부트 시작하기  (0) 2023.11.21

[오류 내용]

HelloControll가 필요한 bean인 HelloService가 2개 존재할 경우(여러 빈이 조회되었을시 ) 발생하는 오류

 

 

[해결방안]

현대 helloDecorator과 simplerHelloService에 총 2개가 존재하는데 이때 어디꺼를 쓸것인지 우선 순위를 정해줘야함

@Primary우선순위 부여하여 해결

@Service
@Primary    //HelloController가 필요한 bean이 2개 존재할때 얘를 우선적으로 가져다가 쓰겠다는 의미
public class HelloDecorator implements HelloService{

@Primary : 우선적으로 가져다가 쓰겠다는 의미

'SpringBoot > 프로젝트' 카테고리의 다른 글

자동 구성 정보 대체하기  (0) 2023.11.30
@Conditional 학습 테스트  (0) 2023.11.30
[Spring Boot] jetty 서버 구성 추가하기  (0) 2023.11.29
Test Code 작성  (0) 2023.11.27
섹션2. 스프링 부트 시작하기  (0) 2023.11.21

[오류내용]

프로젝트를 수행 중 test run해보니 아래와 같은 오류 발생

Unable to find a @SpringBootConfiguration, you need to use @ContextConfiguration or @SpringBootTest(classes=...) with your test

 

[오류해결]

@SpringBootTest(classes = HellobootApplication.class)

test 파일에 해당 java 파일 아래 해당 파일 경로 추가 해주면 오류 해결됨

+ Recent posts