반응형
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
728x90
반응형
'웹 개발' 카테고리의 다른 글
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 |