개발/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으로 배포를 진행하면 된다.

반응형