스프링부트 전쟁 문제

9981 단어 SpringBoot

스프링부트 전쟁 문제


SpringBoot Maven 관련 소개 참조: 공식 소개 및 사례 문서https://docs.spring.io/spring-boot/docs/1.5.10.RELEASE/maven-plugin/usage.html
SpringBoot은 기본적으로jar 방식으로 패키지를 하고jar 방식으로 서비스를 시작합니다.Spring Boot에 여러 서버가 내장되어 있으므로 이렇게 시작할 수 있습니다. SpringBoot 1.5.14 버전에서 지원되는 내장 서버는 다음과 같습니다.
Name
Servlet Version
Java Version
Tomcat 8
3.1
Java 7+
Tomcat 7
3.0
Java 6+
Jetty 9.3
3.1
Java 8+
Jetty 9.2
3.1
Java 7+
Jetty 8
3.0
Java 6+
Undertow 1.3
3.1
Java 7+
많은 장면에서 외부 서버 War 패키지를 통해 실행해야 한다.SpringBoot을 War 가방으로 만들면 자주 구덩이에 부딪힌다. 예를 들어 War 가방이 성공하지 못하고, War 가방을 서버에 던져 도망가지 못하는 등 문제가 있다.

1. POM 구성


spring-boot-starter-parent 의존을 추가합니다. 이 의존은 POM 파일일 뿐입니다.
<dependency>
    <groupId>org.springframework.bootgroupId>
    <artifactId>spring-boot-starter-parentartifactId>
    <version>${boot.starter.version}version>
    <type>pomtype>
dependency>

상속
<parent>
    <groupId>org.springframework.bootgroupId>
    <artifactId>spring-boot-starter-parentartifactId>
    <version>1.5.7.RELEASEversion>
    <relativePath/> 
parent>

공식 문서에는 spring-boot-starter-parent POM에는 리패키지 목표를 결합하기 위한 구성이 포함되어 있습니다.If you are not using the parent POM you will need to declare this configuration yourself.
즉, 프로젝트에서spring-boot-starter-parent를 사용하면 POM 파일에 패키지와 관련된 MAVEN 플러그인을 설정해 놓았습니다. 그렇지 않으면pom 파일에 플러그인을 표시해야 합니다. 다음과 같이 설정할 수 있습니다.

    team.seagull.bookbase.service.ServiceApplication



  ...
  
    ...
    
        org.springframework.boot
        spring-boot-maven-plugin
        
            
                
                    repackage
                
            
        
        
            ${start-class}
        
    
  ...

그 중에서 start-class 자리 표시자는 프로그램이 시작하는 입구, 즉 SpringBoot에서main 방법을 정의하는 시작 클래스를 가리키는 데 사용됩니다.spring-boot-starter-parent의 자리 차지 문자도 ${start-class}입니다. 자리 차지 문자에 값을 표시하기 위해서는properties에 현재 시작 클래스를 표시해야 합니다. 예를 들어:
<properties>
    <start-class>com.test.service.ServiceApplicationstart-class>
properties>

프로젝트에 여러 개의 모듈이 있으면 모든 모듈에서 패키지 방식을 설명해야 합니다. 하위 모듈은jar로 성명하고, 메인 모듈은war로 성명합니다. 패키지 방식을 jar로 설정하면pom에 다음과 같은 설정을 추가해야 합니다.
<packaging>jarpackaging>

부팅 클래스가 있는 모듈이라면 시스템 부팅 입구로서 패키지 방식을war로 바꿔야 합니다.

2. 의존 배제

  • 내장된tomcat 용기를 배제합니다. SpringBoot은 기본적으로 내장된tomcat 용기를 사용하기 때문에,war 패키지로 포장하려면 제거해야 합니다..
  • 
    <dependency>
        <groupId>org.springframework.bootgroupId>
        <artifactId>spring-boot-starter-tomcatartifactId>
        <optional>trueoptional>
    dependency>
  • 열배치 배제 Devtools(열배치)는 기본적으로 배제되었지만, 때로는 개발 효율을 제공하기 위해 이를 도입하기도 한다. 개발 과정에서 devtools는 클래스 경로의 파일이 변경될 때 자동으로 재부팅되고 코드 변경에 매우 빠른 피드백 순환을 제공한다. Inorder to make that work with war packaging, thespring-boot-devtools dependency must be set as optional or with the provided scope.
  • <dependency>
        <groupId>org.springframework.bootgroupId>
        <artifactId>spring-boot-devtoolsartifactId>
        <version>1.5.7.RELEASEversion>
        <optional>trueoptional>
    dependency>

    3. Servlet 초기화 리소스 지정


    SpringBoot에 웹이 없습니다.xml의 설정은 SpringBoot Servlet Initializer를 통해 이루어지며 용기를 시작할 때 관련 설정을 불러오는 주요 역할을 합니다.용기가 이 시작 클래스를 식별하기 위해서는 SpringBootServlet Initializer를 계승하고 configure 방법을 다시 써야 합니다
    @SpringBootApplication(scanBasePackages = {"com.example.testwar"})
    public class DeployApplication extends SpringBootServletInitializer {
        public static void main(String[] args) {
            SpringApplication.run(DeployApplication.class, args);
        }
    
        /**
         *  web war tomcat 
         */
        @Override
        protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
            return builder.sources(DeployApplication.class);
        }
    }
    

    4.other


    Could not register MBean for endpoint 오류가 발생하여 서비스가 시작되지 않습니다. 프로필에서 Spring을 할 수 있습니다.jmx 닫기,
    spring:
        jmx:
            enabled: false 

    보고된 예외:
    o.s.b.a.e.jmx.EndpointMBeanExporter      : Could not register MBean for endpoint [requestMappingEndpoint]
    
    org.springframework.jmx.export.UnableToRegisterMBeanException: Unable to register MBean [org.springframework.boot.actuate.endpoint.jmx.AuditEventsJmxEndpoint@9a90bd3] with key 'auditEventsEndpoint'; nested exception is javax.management.InstanceAlreadyExistsException: bookClient:type=Endpoint,name=auditEventsEndpoint
        at org.springframework.jmx.export.MBeanExporter.registerBeanNameOrInstance(MBeanExporter.java:628) ~[spring-context-4.3.11.RELEASE.jar:4.3.11.RELEASE]
        at org.springframework.boot.actuate.endpoint.jmx.EndpointMBeanExporter.registerJmxEndpoints(EndpointMBeanExporter.java:174) [spring-boot-actuator-1.5.7.RELEASE.jar:1.5.7.RELEASE]
        at 
        ......

    좋은 웹페이지 즐겨찾기