SpringBoot에서 war 파일을 만들기 위해서는 @SpringBootApplication에서 SpringBootServletInitializer를 확장해야 합니다. 그 방법은 다음과 같습니다.
- pom.xml의 packaging을 war로 변경합니다.
<packaging>war</packaging>
- pom.xml에 아래 dependency를 추가
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> <scope>provided</scope> </dependency>
- @SpringBootApplication 애노테이션이 있는 java 파일에 다음과 같이 SpringBootServletInitializer를 추가합니다.
import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.builder.SpringApplicationBuilder; import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; @SpringBootApplication public class SpringBootSampleApplication extends SpringBootServletInitializer { public static void main(String[] args) { SpringApplication.run(SpringBootSampleApplication.class, args); } @Override protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) { return builder.sources(SpringBootSampleApplication.class); } }
- 여기까지 하고 Maven Build ... 를 클릭하면 target 폴더에 war 파일이 생성되어 있습니다.
그렇다면 왜 SpringBootServletInitializer를 상속해야 하는 걸까요?
예전에는 Web Project에 web.xml이 있었지만 현재는 없습니다. Setvlet 3.0 스팩의 중요한 변경사항 중 하나는 web.xml없이 배포가 가능해진 것입니다.
그리고 Apache Tomcat의 경우 Servlet 3.0 스펙을 7.0부터 지원합니다.
Spring Framework는 Servlet 3.0 이상 환경에서 web.xml 대신하여 ServletContext를 프로그래밍적으로 다룰 수 있게 WebApplicationInitializer 인터페이스를 제공합니다.
또한 SpringBootServletInitializer는 WebApplicationInitializer 인터페이스의 구현체입니다.
[참고]
https://stackoverflow.com/questions/47908312/create-war-file-from-springboot-project-in-eclipse
Create war file from Spring:boot project in Eclipse
I am pretty new to Spring Boot and I have completed a application that works well on my localhost. As I have been told to deploy it outside my localhost on for example a webbhotel or simular I need...
stackoverflow.com
Spring Boot WAR 로 배포하기 (How to deploy with *.war file with Spring Boot)
Spiring Boot 는 기본적으로 jar 배포형태를 가지고 있습니다. 그 말은 그 자체로서 java 실행 프로그램이다 라는 의미로 해석될 수 있다고 생각합니다. tomcat 같은 웹서버도, db 도 다 내장으로 가질 수
4urdev.tistory.com
Spring Boot 웹 애플리케이션을 WAR로 배포할 때 왜 SpringBootServletInitializer를 상속해야 하는걸까?
Spring Boot로 웹 애플리케이션을 만들고 이를 WAR로 배포할 때에는(Apache Tomcat 같은 Servlet Container에) SpringBootServletInitializer를 상속 하도록 가이드 하고 있다.
medium.com
'웹 개발' 카테고리의 다른 글
Get Spring Security Principal in JSP EL expression (0) | 2021.07.11 |
---|---|
spring boot properties 암호화 (Jasypt) (0) | 2021.07.11 |
SpringBoot 에서 hibernate.dialect 에러 발생. (로컬서버 실행 안되는 현상) (0) | 2021.07.04 |
javax.management.InstanceNotFoundException: org.springframework.boot:type=Admin,name=SpringApplication (0) | 2021.06.04 |
class 파일의 java(jdk) 버전 확인하는 방법 (0) | 2021.05.17 |