2017-01-13 3 views
1

웹 사이트에서 많은 서클 스크래치와 원을 그리면서 스프링 백 RESTful 웹 서비스를 gradle을 사용하여 Tomcat에 war 파일로 배포 할 수있었습니다. 그것은 문서 나 다른 웹 사이트가 만드는 것보다 훨씬 간단했습니다.WAR/JAR 파일에 대한 스프링 부트 질문

  1. 가 어떻게 내 13 메가 바이트 파일에서 스프링의 팽창을 제거 할 수 있습니다 대신 대신 공유/배포 봄 버전을 사용 이보다 쉽게 ​​업데이트 라이브러리를 지원하기 :

    그러나, 나는 몇 가지 질문이?

  2. 임베디드 tomcat이 내 war 파일 (WEB-INF \ lib-supplied)에 여전히 저장되는 이유는 무엇입니까?

  3. 개발을 위해 만들어진 간단한 jar 버전도 사용할 수 있습니까?

  4. 생산 시스템의 경우 jar 파일은 컨테이너에 배포 된 war 파일만큼 좋은가? 구성을 쉽게 수정할 수 없으며 확장 할 수 없으며 웹 서버를로드 균형 조정할 수 없습니다. 관리 프론트 엔드 그것을. Spring (또는 Spring Boot)의 의도가 자체 내장 된 마이크로 서버를 실제로 만드는 것이라면 콘솔 응용 프로그램이 아닌 Windows에서 jar 파일을 실행하는 방법이나 심지어 콘솔 응용 프로그램이 아닌 콘솔 응용 프로그램을 이해하는 데 여전히 어려움이 있습니다 ...

여기 내 파일의 두드러진 점은 다음과 같습니다

apply plugin: 'java' 
apply plugin: 'org.springframework.boot' 
apply plugin: 'war' 

dependencies { 
    compile("org.springframework.boot:spring-boot-starter-web") 
    testCompile('org.springframework.boot:spring-boot-starter-test') 
    providedRuntime 'org.springframework.boot:spring-boot-starter-tomcat' 
} 

코드 :

@SpringBootApplication 
public class Application extends SpringBootServletInitializer { 

    public static void main(String[] args) { 
     SpringApplication.run(Application.class, args); 
    } 

    @Override 
    protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) { 
     return builder.sources(Application.class); 
    } 

} 

감사합니다.

답변

1

이 질문은 아마도 몇 가지 질문 일 수 있으므로 가능한 답변을 드리겠습니다. 나는 Gradle을 사용하지 않지만, Maven을 꽤 잘 알고 있으며 원리는 같습니다.

. 왜 13Mb jar 파일이 문제의 원인인지는 알 수 없지만 종속성을 compileOnly scope.으로 선언 할 수 있습니다. 서버의 클래스 경로에 필요한 종속성이 있다고 가정하면 테스트하지는 않았지만 작동해야합니다.

그러나 여기에는 다른 잠재적 인 문제가 있습니다. 목표 : "공유 라이브러리/배포 된 스프링 버전을 대신 사용하여 라이브러리 업데이트를보다 쉽게 ​​지원할 수 있습니까?"은 서버에서 버전을 업데이트하고 응용 프로그램을 중단 할 때까지는 좋은 생각입니다. 각 응용 프로그램이 자체 종속성을 관리하고 종속성 업그레이드를 테스트 한 후에 만 ​​새로운 버전의 응용 프로그램으로 배포하는 것이 훨씬 안전합니다.

2. 포함 된 Tomcat은 spring-boot-starter-web에 포함 된 종속성입니다. 당신은 간단하게 정의하려면 어떻게

configurations { 
    runtime.exclude module: 'spring-boot-starter-tomcat' 
} 

3. : 당신은이 방법을 배제 할 수 있어야한다? 다시 말하지만, 문제는 보이지 않지만 어쨌든 나쁜 생각처럼 보입니다. 나는 내가 생산에 투입 할 것을 정확하게 (또는 가능한 한 가깝게) 비추는 작업을 원한다.

4. 모든 접근 방식에는 장단점이 있습니다.당신은 자신의 상황에 가장 적합한 것을 사용합니다. JAR은 자체 포함될 수 있으며, 소규모 서비스의 경우 JAR이 더 좋을 수도 있습니다.

+0

감사합니다. 3에 관해서는 코드/테스트 사이클을 클릭 한 다음 빌드를 클릭 한 다음 빌드를 실행 한 다음 실행하여 실행하는 것보다 훨씬 빠릅니다. 정말로 나는 항아리와 전쟁을 만들기 위해 코드/글씨를 수동으로 수정하지 않아도되었다. –

+0

아, 알겠습니다. 나는 그런 식으로 일하지 않는다. (직장에서의 제한 때문에, 나는 Spring/Java를 사용하지 않는다.) 환경에 따라 Maven 프로파일을 설정한다. 그렇게했다면 아마도 그 문제를 해결할 것입니다. 포장을 조건부로 만들 수 있습니다. 다음을 참조하십시오 : https://gradle.org/blog/feature-spotlight-gradles-support-maven-pom-profiles/ –