개발/SpringBoot
SpringBoot 외장Tomcat과 SpringBootServletInitializer
궁즉변 변즉통 통즉구
2021. 12. 9. 10:20
반응형
SpringBoot를 사용하면 일반적으로 내장Tomcat을 사용한 jar로 배포를 한다.
가끔 상황에 따라서 외장Tomcat으로 war형태로 배포를 진행해야하는 경우가 있는데 이때 SpringBootServletInitializer가 필요하다.
@SpringBootApplication
public class Application extends SpringBootServletInitializer {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(Application.class);
}
}
외장Tomcat을 사용해서 어플리케이션 실행 시 전통적으로 web.xml 파일을 읽어서 실행을 한다. 그러나 Servlet 3.0부터는 web.xml이 없이 WebApplicationInitializer 인터페이스를 구현해서 대신 할 수 있게됐다.
그리고 SpringBoot에서는 외장Tomcat 사용 시 WebApplicationInitializer를 구현한 SpringBootServletInitializer를 상속 받아서 처리하게 된다.
추가적으로 외장Tomcat으로 어플리케이션을 실행 시 spring-boot-starter-tomcat 의존성 설정을 provided로 변경이 필요한다.
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
<!-- JSP -->
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
</dependency>
packaging 설정도 jar -> war로 변경해준다.
<packaging>war</packaging>
위와 같이 적용 후 war로 빌드 후 외장 Tomcat으로 배포를 진행하면 된다.
반응형