본문 바로가기

IT/SpringBoot

스프링 부트 #3. 사용

반응형

3. 스프링 부트 사용

이 섹션에서는 스프링 부트을 사용하는 방법에 대해 자세히 설명합니다. 빌드 시스템, 자동 구성 및 응용 프로그램을 실행하는 방법과 같은 주제를 다룹니다. 우리는 또한 몇 가지 스프링 부트 모범 사례를 다룹니다. 스프링 부트에 대해 특별히 특별한 것은 없지만 (소비 할 수있는 또 다른 라이브러리일 뿐입니다), 다음 에 따라 개발 프로세스를 좀 더 쉽게 만드는 몇 가지 권장 사항이 있습니다.

스프링 부트을 시작하려면 이 섹션으로 다이빙하기 전에 시작 안내서를 읽어야 합니다.

3.1. 시스템 구축

종속성 관리를 지원하고 "Maven Central" 리포지토리에 게시된 아티팩트를 사용할 수 있는 빌드 시스템을 선택하는 것이 좋습니다. 메이븐이나 그라드를 선택하는 것이 좋습니다. 스프링 부트을 다른 빌드 시스템(예: Ant)과 함께 작업할 수 있지만 특별히 지원되지는 않습니다.

3.1.1. 종속성 관리

스프링 부트의 각 릴리스는 지원되는 종속성의 큐레이터 목록을 제공합니다. 실제로 스프링 부트이 관리하므로 빌드 구성에서 이러한 종속성에 대한 버전을 제공할 필요가 없습니다. 스프링 부트 자체를 업그레이드하면 이러한 종속성은 일관된 방식으로 업그레이드됩니다.

  그래도 버전을 지정하고 스프링 부트의 권장 사항을 재정의할 수 있습니다.

큐레이터 목록에는 스프링 부트과 함께 사용할 수 있는 모든 스프링 모듈과 타사 라이브러리의 세련된 목록이 포함되어 있습니다. 이 목록은 메이븐과 그라드모두에서 사용할 수 있는 표준 재료 청구서()로 사용할 수 있습니다.spring-boot-dependencies

  스프링 부트의 각 릴리스는 스프링 프레임워크의 기본 버전과 연결됩니다. 해당 버전을 지정하지 않는 것이 좋습니다.

3.1.2. 메이븐

메이븐과 스프링 부트을 사용하는 방법에 대해 알아보려면 스프링 부츠의 메이븐 플러그인에 대한 문서를 참조하십시오 :

3.1.3. 그라드

그라드와 스프링 부트을 사용 하 여 에 대 한 자세한 내용은 스프링 부트의 그라드 플러그인에 대 한 문서를 참조 하십시오.

3.1.4. 개미

아파치 앤트 +아이비를 사용하여 스프링 부트 프로젝트를 구축 할 수 있습니다. "AntLib" 모듈은 Ant가 실행 가능한 항아리를 만드는 데 도움을 줄 수도 있습니다.spring-boot-antlib

종속성을 선언하려면 일반적인 파일은 다음과 같은 것으로 보입니다.ivy.xml

<ivy-module version="2.0">
    <info organisation="org.springframework.boot" module="spring-boot-sample-ant" />
    <configurations>
        <conf name="compile" description="everything needed to compile this module" />
        <conf name="runtime" extends="compile" description="everything needed to run this module" />
    </configurations>
    <dependencies>
        <dependency org="org.springframework.boot" name="spring-boot-starter"
            rev="${spring-boot.version}" conf="compile" />
    </dependencies>
</ivy-module>

일반적인 예제와 같습니다.build.xml

<project
    xmlns:ivy="antlib:org.apache.ivy.ant"
    xmlns:spring-boot="antlib:org.springframework.boot.ant"
    name="myapp" default="build">

    <property name="spring-boot.version" value="2.3.1.RELEASE" />

    <target name="resolve" description="--> retrieve dependencies with ivy">
        <ivy:retrieve pattern="lib/[conf]/[artifact]-[type]-[revision].[ext]" />
    </target>

    <target name="classpaths" depends="resolve">
        <path id="compile.classpath">
            <fileset dir="lib/compile" includes="*.jar" />
        </path>
    </target>

    <target name="init" depends="classpaths">
        <mkdir dir="build/classes" />
    </target>

    <target name="compile" depends="init" description="compile">
        <javac srcdir="src/main/java" destdir="build/classes" classpathref="compile.classpath" />
    </target>

    <target name="build" depends="compile">
        <spring-boot:exejar destfile="build/myapp.jar" classes="build/classes">
            <spring-boot:lib>
                <fileset dir="lib/runtime" />
            </spring-boot:lib>
        </spring-boot:exejar>
    </target>
</project>
  모듈을 사용하지 않으려면 스프링 부트 앤트리브 "How-to"를 사용하지 않고 Ant에서 실행 가능한 아카이브 빌드를 참조하십시오. spring-boot-antlib

3.1.5. 스타터

스타터는 응용 프로그램에 포함할 수 있는 편리한 종속성 설명자 집합입니다. 샘플 코드를 탐색하고 종속성 설명자의 복사본 붙여넣기 부하를 통해 검색할 필요 없이 필요한 모든 스프링 및 관련 기술에 대한 원스톱 상점을 얻을 수 있습니다. 예를 들어 데이터베이스 액세스에 대해 Spring 및 JPA를 사용하려면 프로젝트에 종속성을 포함합니다.spring-boot-starter-data-jpa

스타터에는 일관되고 지원되는 관리형 전이 종속성 집합을 사용하여 프로젝트를 신속하게 실행하고 실행하는 데 필요한 많은 종속성이 포함되어 있습니다.

이름에 무엇이 있는가

모든 공식 스타터는 유사한 명명 패턴을 따릅니다. , 응용 프로그램의 특정 유형은 어디입니다. 이 명명 구조는 스타터를 찾아야 할 때 도움이 됩니다. 많은 IdEs의 메이븐 통합을 사용하면 이름으로 종속성을 검색할 수 있습니다. 예를 들어 적절한 이클립스 또는 STS 플러그인이 설치되어 있으면 POM 편집기에서 누름을 내고 전체 목록에 대해 "스프링 부트 스타터"를 입력할 수 있습니다.spring-boot-starter-**ctrl-space

"자신의 스타터만들기"섹션에서 설명한 바와 같이, 제3자 스타터는 공식 스프링 부트 아티팩트를 위해 예약되어 있으므로 시작해서는 안됩니다. 오히려 타사 스타터는 일반적으로 프로젝트 이름으로 시작합니다. 예를 들어 일반적으로 라는 타사 시작 프로젝트의 이름을 지정합니다.spring-bootthirdpartyprojectthirdpartyproject-spring-boot-starter

다음 응용 프로그램 스타터는 그룹 아래 스프링 부트에서 제공됩니다.org.springframework.boot

Table 1. Spring Boot application starters
이름 설명

spring-boot-starter

자동 구성 지원, 로깅 및 YAML을 포함한 코어 스타터

spring-boot-starter-activemq

아파치 액티브MQ를 이용한 JMS 메시징 스타터

spring-boot-starter-amqp

스프링 AMQP 및 토끼 MQ 사용 시 스타터

spring-boot-starter-aop

스프링 AOP 및 AspectJ를 갖춘 측면 지향 프로그래밍 스타터

spring-boot-starter-artemis

아파치 아르테미스를 이용한 JMS 메시징 스타터

spring-boot-starter-batch

스프링 배치 사용 시 스타터

spring-boot-starter-cache

스프링 프레임워크의 캐싱 지원 사용 시작

spring-boot-starter-data-cassandra

카산드라 분산 데이터베이스 및 스프링 데이터 카산드라 를 사용하기위한 스타터

spring-boot-starter-data-cassandra-reactive

카산드라 분산 데이터베이스 및 스프링 데이터 카산드라 반응성 사용 스타터

spring-boot-starter-data-couchbase

Couchbase 문서 지향 데이터베이스 및 스프링 데이터 카우치베이스 를 사용하기위한 스타터

spring-boot-starter-data-couchbase-reactive

Couchbase 문서 지향 데이터베이스 및 스프링 데이터 소파베이스 반응성 사용 시

spring-boot-starter-data-elasticsearch

Elasticsearch 검색 및 분석 엔진 및 스프링 데이터 Elasticsearch 사용 시

spring-boot-starter-data-jdbc

스프링 데이터 JDBC 사용 시 시작

spring-boot-starter-data-jpa

최대 절전 모드와 스프링 데이터 JPA를 사용 하기 위한 스타터

spring-boot-starter-data-ldap

스프링 데이터 LDAP 사용 스타터

spring-boot-starter-data-mongodb

MongoDB 문서 지향 데이터베이스 및 스프링 데이터 MongoDB 사용 시작

spring-boot-starter-data-mongodb-reactive

MongoDB 문서 지향 데이터베이스 및 스프링 데이터 MongoDB 반응성 사용 시작

spring-boot-starter-data-neo4j

Neo4j 그래프 데이터베이스 및 스프링 데이터 Neo4j 를 사용하기위한 스타터

spring-boot-starter-data-r2dbc

스프링 데이터 R2DBC 사용 시 시작

spring-boot-starter-data-redis

스프링 데이터 레디스와 양상추 클라이언트를 사용하여 Redis 키 가치 데이터 저장소 사용 시작

spring-boot-starter-data-redis-reactive

스프링 데이터 레디반응및 양상추 클라이언트가 있는 Redis 키 가치 데이터 저장소 사용 시작

spring-boot-starter-data-rest

스프링 데이터 REST를 사용하여 REST를 통해 스프링 데이터 리포지토리 노출 을위한 스타터

spring-boot-starter-data-solr

스프링 데이터 솔러와 아파치 솔러 검색 플랫폼 사용 시작

spring-boot-starter-freemarker

FreeMarker 뷰를 사용하여 MVC 웹 응용 프로그램 구축 을 위한 스타터

spring-boot-starter-groovy-templates

그루비 템플릿 보기를 사용하여 MVC 웹 응용 프로그램 구축 을 위한 시작

spring-boot-starter-hateoas

스프링 MVC 및 봄 HATEOAS와 하이퍼 미디어 기반 RESTful 웹 응용 프로그램 구축 을위한 스타터

spring-boot-starter-integration

스프링 통합 사용 스타터

spring-boot-starter-jdbc

히카리CP 연결 풀과 JDBC 사용 시작

spring-boot-starter-jersey

JAX-RS 및 저지를 사용하여 RESTful 웹 응용 프로그램을 구축하기 위한 스타터. 스프링 부츠 스타터 웹에 대한 대안

spring-boot-starter-jooq

jOOQ를 사용하여 SQL 데이터베이스에 액세스하기 위한 시작 단계입니다. 스프링 부츠 스타터-데이터 jpa 또는 스프링 부츠 스타터-jdbc에 대한 대안

spring-boot-starter-json

독서와 쓰기 json에 대한 스타터

spring-boot-starter-jta-atomikos

아토미코스를 이용한 JTA 거래 스타터

spring-boot-starter-jta-bitronix

Bitronix를 사용하여 JTA 거래에 대한 스타터. 2.3.0 이후 비하

spring-boot-starter-mail

자바 메일 및 스프링 프레임 워크의 이메일 전송 지원을 사용 하기 위한 시작

spring-boot-starter-mustache

콧수염 뷰를 사용하여 웹 응용 프로그램을 구축하기 위한 스타터

spring-boot-starter-oauth2-client

스프링 시큐리티의 OAuth2/OpenID 커넥트 클라이언트 기능 사용 시작

spring-boot-starter-oauth2-resource-server

스프링 시큐리티의 OAuth2 리소스 서버 기능 사용 시작

spring-boot-starter-quartz

석영 스케줄러 사용 시작

spring-boot-starter-rsocket

RSocket 클라이언트 및 서버 구축 을 위한 스타터

spring-boot-starter-security

스프링 시큐리티 사용 스타터

spring-boot-starter-test

JUnit, 햄크레스트, 모키토 등 라이브러리를 사용하여 스프링 부트 응용 프로그램을 테스트하기 위한 스타터

spring-boot-starter-thymeleaf

타임리프 뷰를 사용하여 MVC 웹 응용 프로그램 구축 시작

spring-boot-starter-validation

최대 절전 모드 유효성 검사기와 자바 콩 유효성 검사를 사용하기위한 스타터

spring-boot-starter-web

스프링 MVC를 사용하는 RESTful 응용 프로그램을 포함하여 웹 구축을 위한 스타터. Tomcat을 기본 임베디드 컨테이너로 사용

spring-boot-starter-web-services

스프링 웹 서비스 사용 시작

spring-boot-starter-webflux

스프링 프레임워크의 반응성 웹 지원을 사용하여 웹플럭스 응용 프로그램 구축 시작

spring-boot-starter-websocket

스프링 프레임워크의 WebSocket 지원을 사용하여 WebSocket 응용 프로그램 구축 시작

응용 프로그램 시작 사항 외에도 다음 스타터를 사용하여 프로덕션 준비 기능을 추가할 수 있습니다.

Table 2. Spring Boot production starters
이름 설명

spring-boot-starter-actuator

응용 프로그램을 모니터링하고 관리하는 데 도움이 되는 프로덕션 준비 기능을 제공하는 스프링 부트액터 사용 시작

마지막으로 스프링 부트에는 특정 기술 측면을 제외하거나 교체하려는 경우 사용할 수 있는 다음 스타터도 포함됩니다.

Table 3. Spring Boot technical starters
이름 설명

spring-boot-starter-jetty

제티를 임베디드 서베렛 용기로 사용하기 위한 스타터. 스프링 부츠 스타터 톰캣의 대안

spring-boot-starter-log4j2

로깅을 위해 Log4j2를 사용하기 위한 스타터입니다. 스프링 부츠 스타터 로깅에 대한 대안

spring-boot-starter-logging

로그백을 사용하여 로깅을 위한 스타터입니다. 기본 로깅 시작

spring-boot-starter-reactor-netty

임베디드 반응성 HTTP 서버로 반응기 쐐기풀을 사용하기 위한 스타터.

spring-boot-starter-tomcat

Tomcat을 임베디드 서베렛 용기로 사용하기 위한 스타터. 스프링 부트 스타터 웹에서 사용하는 기본 서스렛 컨테이너 스타터

spring-boot-starter-undertow

언더토우를 임베디드 서베렛 용기로 사용하기 위한 스타터. 스프링 부츠 스타터 톰캣의 대안

  추가 커뮤니티 기여 스타터 목록은 GitHub의 모듈에 있는 README 파일을 참조하십시오. spring-boot-starters

3.2. 코드 구조화

스프링 부트은 작동하도록 특정 코드 레이아웃이 필요하지 않습니다. 그러나 도움이 되는 몇 가지 모범 사례가 있습니다.

3.2.1. "기본" 패키지 사용

클래스에 선언이 포함되지 않으면 "기본 패키지"에 있는 것으로 간주됩니다. "기본 패키지"의 사용은 일반적으로 권장되지 않으며 피해야 합니다. 모든 항아리의 모든 클래스를 읽기 때문에 스프링 부트 응용 프로그램에 대한 특정 문제가 발생할 수 있습니다.package@ComponentScan@ConfigurationPropertiesScan@EntityScan@SpringBootApplication

  Java에서 권장하는 패키지 명명 규칙을 따르고 반전된 도메인 이름(예:)을 사용하는 것이 좋습니다. com.example.project

3.2.2. 기본 응용 프로그램 클래스 찾기

일반적으로 다른 클래스 위의 루트 패키지에서 기본 응용 프로그램 클래스를 찾는 것이 좋습니다. @SpringBootApplication 성항목은 종종 기본 클래스에 배치되며 특정 항목에 대한 기본 "검색 패키지"를 암시적으로 정의합니다. 예를 들어 JPA 응용 프로그램을 작성하는 경우 인가된 클래스의 패키지가 항목을 검색하는 데 사용됩니다. 루트 패키지를 사용하면 구성 요소 스캔을 프로젝트에만 적용할 수 있습니다.@SpringBootApplication@Entity

  사용하지 않으려면 가져오는 주석과 주석은 해당 동작을 정의하므로 대신 사용할 수도 있습니다. @SpringBootApplication@EnableAutoConfiguration@ComponentScan

다음 목록은 일반적인 레이아웃을 보여 주습니다.

com
 +- example
     +- myapplication
         +- Application.java
         |
         +- customer
         |   +- Customer.java
         |   +- CustomerController.java
         |   +- CustomerService.java
         |   +- CustomerRepository.java
         |
         +- order
             +- Order.java
             +- OrderController.java
             +- OrderService.java
             +- OrderRepository.java

파일은 다음과 같이 기본 메서드와 함께 메서드를 선언합니다.Application.javamain@SpringBootApplication

package com.example.myapplication;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class Application {

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

}

3.3. 구성 클래스

스프링 부트은 Java 기반 구성을 선호합니다. XML 소스와 함께 사용할 수 있지만 일반적으로 기본 소스가 단일 클래스인 것이 좋습니다. 일반적으로 메서드를 정의하는 클래스는 기본으로 좋은 후보입니다.SpringApplication@Configurationmain@Configuration

  XML 구성을 사용하는 많은 스프링 구성 예제가 인터넷에 게시되었습니다. 가능하면 항상 동등한 Java 기반 구성을 사용하려고 합니다. 주석을 검색하는 것은 좋은 출발점이 될 수 있습니다. Enable*

3.3.1. 추가 구성 클래스 가져오기

당신은 하나의 클래스에 모든 넣어 필요가 없습니다. 이 어반기를 사용하여 추가 구성 클래스를 가져올 수 있습니다. 또는 클래스를 포함하여 모든 Spring 구성 요소를 자동으로 선택하는 데 사용할 수 있습니다.@Configuration@Import@ComponentScan@Configuration

3.3.2. XML 구성 가져오기

XML 기반 구성을 절대적으로 사용해야 하는 경우 클래스로 시작하는 것이 좋습니다. 그런 다음 기권부로 XML 구성 파일을 로드할 수 있습니다.@Configuration@ImportResource

3.4. 자동 구성

Spring Boot 자동 구성은 추가한 jar 종속성에 따라 스프링 응용 프로그램을 자동으로 구성하려고 시도합니다. 예를 들어 클래스패스에 있고 데이터베이스 연결 빈을 수동으로 구성하지 않은 경우 Spring Boot는 메모리 내 데이터베이스를 자동으로 구성합니다.HSQLDB

클래스 중 하나에 주석 또는 주석을 추가하여 자동 구성에 옵트인해야 합니다.@EnableAutoConfiguration@SpringBootApplication@Configuration

  하나 또는 도형만 추가해야 합니다. 일반적으로 기본 클래스에하나 또는 다른 클래스만 추가하는 것이 좋습니다. @SpringBootApplication@EnableAutoConfiguration@Configuration

3.4.1. 자동 구성을 점진적으로 교체

자동 구성은 비침습적입니다. 언제든지 자동 구성의 특정 부분을 대체하기 위해 자체 구성을 정의할 수 있습니다. 예를 들어, 자신의 콩을 추가하는 경우 기본 임베디드 데이터베이스는 뒤로 물러나게 됩니다.DataSource

현재 적용 중인 자동 구성과 스위치로 응용 프로그램을 시작하는 이유를 확인해야 하는 경우 이렇게 하면 디버그 로그를 사용하여 코어 로거를 선택할 수 있으며 콘솔에 보고하는 조건을 기록합니다.--debug

3.4.2. 특정 자동 구성 클래스 비활성화

원하지 않는 특정 자동 구성 클래스가 적용되고 있는 경우 다음 예제와 같이 제외 특성을 사용하여 사용하지 않도록 설정할 수 있습니다.@SpringBootApplication

import org.springframework.boot.autoconfigure.*;
import org.springframework.boot.autoconfigure.jdbc.*;

@SpringBootApplication(exclude={DataSourceAutoConfiguration.class})
public class MyApplication {
}

클래스가 클래스 경로에 없는 경우 어반의 속성을 사용하고 대신 정규화된 이름을 지정할 수 있습니다. 사용보다는 사용하려는 경우, 또한 사용할 수 있습니다. 마지막으로 속성을 사용하여 제외할 자동 구성 클래스 목록을 제어할 수도 있습니다.excludeName@EnableAutoConfiguration@SpringBootApplicationexcludeexcludeNamespring.autoconfigure.exclude

  항목 수준에서 속성을 사용하여 제외를 정의할 수 있습니다.
  자동 구성 클래스는 공용 API로 간주되는 클래스의 유일한 측면은 자동 구성을 사용하지 않도록 설정하는 데 사용할 수 있는 클래스의 이름입니다. 중첩 된 구성 클래스 또는 콩 방법과 같은 해당 클래스의 실제 내용은 내부 용도로만 사용되며 직접 사용하지 않는 것이 좋습니다. public

3.5. 봄 콩 및 의존성 주입

표준 스프링 프레임워크 기술을 사용하여 콩과 주입된 종속성을 자유롭게 정의할 수 있습니다. 단순성으로, 우리는 종종 (당신의 콩을 찾기 위해) 사용하고 (생성자 주입을 할) 잘 작동 찾을 수 있습니다.@ComponentScan@Autowired

위에서 제안한 대로 코드를 구성하는 경우(루트 패키지에서 응용 프로그램 클래스 찾기) 인수 없이 추가할 수 있습니다. 모든 응용 프로그램 구성 요소(등)는 스프링 빈으로 자동으로 등록됩니다.@ComponentScan@Component@Service@Repository@Controller

다음 예제에서는 생성자 주입을 사용하여 필요한 콩을 얻는 콩을 보여 주는 예제입니다.@ServiceRiskAssessor

package com.example.service;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class DatabaseAccountService implements AccountService {

    private final RiskAssessor riskAssessor;

    @Autowired
    public DatabaseAccountService(RiskAssessor riskAssessor) {
        this.riskAssessor = riskAssessor;
    }

    // ...

}

콩에 생성자가 있는 경우 다음 예제와 같이 생성자가 생략할 수 있습니다.@Autowired

@Service
public class DatabaseAccountService implements AccountService {

    private final RiskAssessor riskAssessor;

    public DatabaseAccountService(RiskAssessor riskAssessor) {
        this.riskAssessor = riskAssessor;
    }

    // ...

}
  생성자 주입을 사용하면 필드를 나중에 변경할 수 없음을 나타내는 필드로 표시할 수 있습니다. riskAssessorfinal

3.6. @SpringBootApplication 어노션 사용

많은 Spring Boot 개발자는 앱과 같은 앱에서 자동 구성, 구성 요소 스캔을 사용하고 "응용 프로그램 클래스"에서 추가 구성을 정의할 수 있습니다. 단일 어노피를 사용하여 다음 세 가지 기능을 사용하도록 설정할 수 있습니다.@SpringBootApplication

package com.example.myapplication;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication // same as @Configuration @EnableAutoConfiguration @ComponentScan
public class Application {

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

}
  @SpringBootApplication 또한 별칭을 제공하여 의 속성을 사용자 정의하고 . @EnableAutoConfiguration@ComponentScan
 

이러한 기능 중 어느 것도 필수항목이 아니며 이 단일 항목이 활성화된 기능중 하나에 의해 이 단일 어조를 대체할 수 있습니다. 예를 들어 응용 프로그램에서 구성 요소 검사 또는 구성 속성 검사를 사용하지 않을 수 있습니다.

package com.example.myapplication;

import org.springframework.boot.SpringApplication;
import org.springframework.context.annotation.ComponentScan
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;

@Configuration(proxyBeanMethods = false)
@EnableAutoConfiguration
@Import({ MyConfig.class, MyAnotherConfig.class })
public class Application {

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

}

이 예제에서는 -에추가 된 클래스및 -notated 클래스가 자동으로 감지되지 않고 사용자 정의 콩을 명시적으로 가져온다는 점을 제외한 다른 스프링 부트 응용 프로그램과 유사합니다(참조).Application@Component@ConfigurationProperties@Import

3.7. 응용 프로그램 실행

응용 프로그램을 jar로 포장하고 임베디드 HTTP 서버를 사용하는 가장 큰 장점 중 하나는 다른 응용 프로그램과 마찬가지로 응용 프로그램을 실행할 수 있다는 것입니다. 스프링 부트 응용 프로그램을 디버깅하는 것도 쉽습니다. 당신은 특별한 IDE 플러그인이나 확장이 필요하지 않습니다.

  이 섹션에서는 항아리 기반 포장만 포함합니다. 응용 프로그램을 전쟁 파일로 패키징하도록 선택한 경우 서버 및 IDE 문서를 참조해야 합니다.

3.7.1. IDE에서 실행

간단한 Java 응용 프로그램으로 IDE에서 스프링 부트 응용 프로그램을 실행할 수 있습니다. 그러나 먼저 프로젝트를 가져와야 합니다. 가져오기 단계는 IDE 및 빌드 시스템에 따라 다릅니다. 대부분의 ID는 메이븐 프로젝트를 직접 가져올 수 있습니다. 예를 들어 이클립스 사용자는 메뉴에서 →를 선택할 수 있습니다.Import…​Existing Maven ProjectsFile

프로젝트를 IDE로 직접 가져올 수 없는 경우 빌드 플러그인을 사용하여 IDE 메타데이터를 생성할 수 있습니다. 메이븐은 이클립스와 IDEA에대한 플러그인을 포함한다. Gradle은 다양한 IDEs용플러그인을 제공합니다.

  실수로 웹 응용 프로그램을 두 번 실행하면 "이미 사용 중이되는 포트" 오류가 표시됩니다. STS 사용자는 버튼이 아닌 단추를 사용하여 기존 인스턴스가 닫혀 있는지 확인할 수 있습니다. RelaunchRun

3.7.2. 패키지 응용 프로그램으로 실행

스프링 부트 메이븐 또는 그라드 플러그인을 사용하여 실행 가능한 항아리를 만드는 경우 다음 예제와 같이 응용 프로그램을 사용하여 실행할 수 있습니다.java -jar

$ java -jar target/myapplication-0.0.1-SNAPSHOT.jar

원격 디버깅 지원이 활성화된 패키지 응용 프로그램을 실행할 수도 있습니다. 이렇게 하면 다음 예제와 같이 패키지된 응용 프로그램에 디버거를 연결할 수 있습니다.

$ java -Xdebug -Xrunjdwp:server=y,transport=dt_socket,address=8000,suspend=n \
       -jar target/myapplication-0.0.1-SNAPSHOT.jar

3.7.3. 메이븐 플러그인 사용

스프링 부트 메이븐 플러그인은 신속하게 컴파일하고 응용 프로그램을 실행하는 데 사용할 수있는 목표를 포함한다. 응용 프로그램은 IDE에서와 마찬가지로 폭발된 형태로 실행됩니다. 다음 예제에서는 스프링 부트 응용 프로그램을 실행하는 일반적인 메이븐 명령을 보여 줄 수 있습니다.run

$ mvn spring-boot:run

다음 예제와 같이 운영 체제 환경 변수를 사용할 수도 있습니다.MAVEN_OPTS

$ export MAVEN_OPTS=-Xmx1024m

3.7.4. 그라드 플러그인 사용

스프링 부트 그라드 플러그인에는 폭발된 형태로 응용 프로그램을 실행하는 데 사용할 수 있는 작업도 포함되어 있습니다. 작업은 당신이 적용 하고 플러그인을 적용 할 때마다 추가되며 다음 예제에 표시됩니다 :bootRunbootRunorg.springframework.bootjava

$ gradle bootRun

다음 예제와 같이 운영 체제 환경 변수를 사용할 수도 있습니다.JAVA_OPTS

$ export JAVA_OPTS=-Xmx1024m

3.7.5. 핫 스왑

스프링 부트 응용 프로그램은 일반 자바 응용 프로그램이므로 JVM 핫 스왑은 상자에서 작동해야합니다. JVM 핫 스왑은 교체할 수 있는 바이트코드로 다소 제한됩니다. 보다 완벽한 솔루션을 위해 JRebel을 사용할 수 있습니다.

이 모듈에는 빠른 응용 프로그램 다시 시작에 대한 지원도 포함되어 있습니다. 자세한 내용은 이 장의 후반부 개발자 도구 섹션과 핫 스왑 "How-to"를 참조하십시오.spring-boot-devtools

3.8. 개발자 도구

Spring Boot에는 응용 프로그램 개발 경험을 좀 더 쾌적하게 만들 수 있는 추가 도구 세트가 포함되어 있습니다. 모듈을 모든 프로젝트에 포함하여 추가 개발 시간 기능을 제공할 수 있습니다. 개발자 도구 지원을 포함하려면 메이븐 및 Gradle에 대한 다음 목록에서 와 같이 빌드에 모듈 종속성을 추가합니다.spring-boot-devtools

Maven
<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-devtools</artifactId>
        <optional>true</optional>
    </dependency>
</dependencies>
그라들 ()
dependencies {
    developmentOnly("org.springframework.boot:spring-boot-devtools")
}
  완전히 패키지된 응용 프로그램을 실행할 때 개발자 도구가 자동으로 비활성화됩니다. 응용 프로그램이 시작또는 특수 클래스 로더에서 시작된 경우 "프로덕션 응용 프로그램"으로 간주됩니다. 컨테이너에서 응용 프로그램을 실행하는 경우와 같은 응용 프로그램이 적용되지 않는 경우 개발자를 제외하거나 시스템 속성을 설정하는 것이 좋습니다. java -jar-Dspring.devtools.restart.enabled=false
  종속성을 Maven에서 선택 사항으로 플래그지정하거나 Gradle의 구성을 사용하여(위와 같이) 개발자도구가 프로젝트를 사용하는 다른 모듈에 전이적으로 적용되지 않습니다. developmentOnly
  재포장된 아카이브에는 기본적으로 devtools가 포함되어 있지 않습니다. 특정 원격 devtools 기능을사용하려면 포함해야 합니다. 메이븐 플러그인을 사용하는 경우 속성을 설정합니다. 그라드 플러그인을 사용하는 경우 작업의 클래스 경로를 구성하여 개발만 구성을 포함합니다. excludeDevtoolsfalse

3.8.1. 속성 기본값

Spring Boot에서 지원하는 여러 라이브러리는 캐시를 사용하여 성능을 향상시킵니다. 예를 들어 템플릿 엔진은 템플릿 파일을 반복적으로 구문 분석하지 않도록 컴파일된 템플릿을 캐시합니다. 또한 Spring MVC는 정적 리소스를 제공할 때 응답에 HTTP 캐싱 헤더를 추가할 수 있습니다.

캐싱은 생산에 매우 유익하지만 개발 중에 비생산적일 수 있으므로 응용 프로그램에서 변경한 내용을 볼 수 없습니다. 이러한 이유로 스프링 부트-devtools는 기본적으로 캐싱 옵션을 비활성화합니다.

캐시 옵션은 일반적으로 파일의 설정으로 구성됩니다. 예를 들어, 타임리프는 숙소를 제공합니다. 이러한 속성을 수동으로 설정할 필요가 없는 대신 모듈은 합리적인 개발 시간 구성을 자동으로 적용합니다.application.propertiesspring.thymeleaf.cachespring-boot-devtools

Spring MVC 및 Spring WebFlux 응용 프로그램을 개발하는 동안 웹 요청에 대한 자세한 정보가 필요하기 때문에 개발자 도구를 사용하면 로깅 그룹에 대한 로깅이 활성화됩니다. 이렇게 하면 들어오는 요청, 처리기가 처리중인 요청, 응답 결과 등에 대한 정보를 제공합니다. 모든 요청 세부 정보(잠재적으로 중요한 정보 포함)를 기록하려는 경우 또는 구성 속성을 켤 수 있습니다.DEBUGwebspring.mvc.log-request-detailsspring.codec.log-request-details

  속성 기본값을 적용하지 않으려면 . spring.devtools.add-propertiesfalseapplication.properties
  개발자도구에서 적용되는 속성의 전체 목록은 DevToolsPropertyDefaultsPostProcessor를참조하십시오.

3.8.2. 자동 재시작

클래스패스의 파일이 변경될 때마다 자동으로 다시 시작하는 응용 프로그램이 자동으로 시작됩니다. 이 기능은 IDE에서 작업할 때 코드 변경에 대한 매우 빠른 피드백 루프를 제공하기 때문에 유용한 기능일 수 있습니다. 기본적으로 디렉터리를 가리키는 클래스 패스의 모든 항목은 변경 사항에 대해 모니터링됩니다. 정적 자산 및 보기 템플릿과 같은 특정 리소스는 응용 프로그램을 다시 시작할 필요가 없습니다.spring-boot-devtools

다시 시작 트리거링

DevTools가 클래스패스 리소스를 모니터링하는 경우 다시 시작을 트리거하는 유일한 방법은 클래스 경로를 업데이트하는 것입니다. 클래스 경로를 업데이트하는 방법은 사용 중인 IDE에 따라 다릅니다. Eclipse에서 수정된 파일을 저장하면 클래스 경로가 업데이트되고 다시 시작됩니다. IntelliJ IDEA에서 프로젝트()를 구축하는 것은 동일한 효과가 있습니다.Build +→+ Build Project

  포크가 활성화된 한 DevTools는 제대로 작동하려면 격리된 응용 프로그램 클래스로더가 필요하기 때문에 지원되는 빌드 플러그인(메이븐 및 그라들)을 사용하여 응용 프로그램을 시작할 수도 있습니다. 기본적으로 그라들과 메이븐 플러그인은 응용 프로그램 프로세스를 포크합니다.
  LiveReload와 함께 사용하면 자동 다시 시작이 매우 효과적입니다. 자세한 내용은 LiveReload 섹션을 참조하십시오. JRebel을 사용하는 경우 동적 클래스 재장전을 위해 자동 다시 시작이 비활성화됩니다. LiveReload 및 속성 재정의와 같은 다른 개발 도구 기능을 계속 사용할 수 있습니다.
  DevTools는 다시 시작하는 동안 응용 프로그램 컨텍스트의 종료 후크에 의존하여 닫습니다. 종료 후크()를 비활성화한 경우 제대로 작동하지 않습니다. SpringApplication.setRegisterShutdownHook(false)
  클래스 패스의 항목이 변경될 때 다시 시작을 트리거하는지 여부를 결정할 때 DevTools는 자동으로 명명된 프로젝트를 무시합니다. spring-bootspring-boot-devtoolsspring-boot-autoconfigurespring-boot-actuatorspring-boot-starter
  DevTools는 에서 사용하는 사용자 지정해야 합니다. 응용 프로그램이 이미 하나를 제공하는 경우 포장될 것입니다. 메서드의 직접 재정의는 지원되지 않습니다. ResourceLoaderApplicationContextgetResourceApplicationContext
다시 시작 vs 다시 로드

Spring Boot에서 제공하는 다시 시작 기술은 두 개의 클래스 로더를 사용하여 작동합니다. 변경되지 않는 클래스(예: 타사 jars의 클래스)는 기본 클래스 로더에 로드됩니다. 적극적으로 개발하는 클래스는 다시 시작 클래스 로더에 로드됩니다. 응용 프로그램이 다시 시작되면 다시 시작 클래스 로더가 버려지고 새 클래스 로더가 만들어집니다. 이 방법은 기본 클래스 로더를 이미 사용할 수 있고 채워지기 때문에 응용 프로그램 다시 시작이 일반적으로 "콜드 스타트"보다 훨씬 빠릅니다.

재시작이 응용 프로그램에 충분히 빠르지 않거나 클래스로드 문제가 발생하는 경우 ZeroTurnaround에서 JRebel과 같은 기술을 다시 로드하는 것이 좋습니다. 이러한 작업은 클래스를 로드할 때 다시 작성하여 다시 로드할 수 있도록 합니다.

조건 평가의 로깅 변경

기본적으로 응용 프로그램이 다시 시작될 때마다 조건 평가 델타를 보여주는 보고서가 기록됩니다. 이 보고서에는 콩 추가 또는 제거 및 구성 속성 설정과 같이 변경할 때 응용 프로그램의 자동 구성이 변경된 내용을 보여 줍니다.

보고서 로깅을 비활성화하려면 다음 속성을 설정합니다.

spring.devtools.restart.log-condition-evaluation-delta=false
리소스 제외

특정 리소스가 변경될 때 다시 시작할 필요는 없습니다. 예를 들어 타임리프 템플릿을 제자리에 편집할 수 있습니다. 기본적으로 , , , , , 에서 리소스를 변경하거나 다시 시작하지 않지만 라이브 재로드를트리거하지 않습니다. 이러한 제외를 사용자 지정하려면 속성을 사용할 수 있습니다. 예를 들어 제외하려면 다음 속성을 설정합니다./META-INF/maven/META-INF/resources/resources/static/public/templatesspring.devtools.restart.exclude/static/public

spring.devtools.restart.exclude=static/**,public/**
  이러한 기본값을 유지하고 추가 제외를 추가하려면 대신 속성을 사용합니다. spring.devtools.restart.additional-exclude
추가 경로 보기

클래스 경로에 없는 파일을 변경할 때 응용 프로그램을 다시 시작하거나 다시 로드할 수 있습니다. 이렇게 하려면 속성을 사용하여 변경 사항을 감시할 추가 경로를 구성합니다. 앞서 설명한 속성을 사용하여 추가 경로 아래에 변경사항이 전체 다시 시작또는 라이브 재로드를트리거하는지 여부를 제어할 수 있습니다.spring.devtools.restart.additional-pathsspring.devtools.restart.exclude

다시 시작 비활성화

다시 시작 기능을 사용하지 않으려면 속성을 사용하여 사용하지 않도록 설정할 수 있습니다. 대부분의 경우 이 속성을 설정할 수 있습니다(이렇게 하면 다시 시작 클래스 로더가 초기화되지만 파일 변경내용은 감시하지 않습니다).spring.devtools.restart.enabledapplication.properties

다시 시작 지원(예: 특정 라이브러리에서 작동하지 않으므로)을 완전히 사용하지 않도록 설정해야 하는 경우 다음 예제와 같이 속성을 호출하기 전에 설정해야 합니다.spring.devtools.restart.enabledSystemfalseSpringApplication.run(…​)

public static void main(String[] args) {
    System.setProperty("spring.devtools.restart.enabled", "false");
    SpringApplication.run(MyApp.class, args);
}
트리거 파일 사용

변경된 파일을 지속적으로 컴파일하는 IDE로 작업하는 경우 특정 시간에만 다시 시작트리거하는 것이 좋습니다. 이렇게 하려면 실제로 다시 시작 검사를 트리거할 때 수정해야 하는 특수 파일인 "트리거 파일"을 사용할 수 있습니다.

  파일에 대한 모든 업데이트는 검사를 트리거하지만, Devtools가 할 일이 있다는 것을 감지한 경우에만 실제로 다시 시작됩니다.

트리거 파일을 사용하려면 속성을 트리거 파일의 이름(경로 제외)으로 설정합니다. 트리거 파일은 클래스 경로의 어딘가에 표시되어야 합니다.spring.devtools.restart.trigger-file

예를 들어 다음 구조가 있는 프로젝트가 있는 경우 다음을 수행합니다.

src
+- main
   +- resources
      +- .reloadtrigger

그런 다음 귀하의 재산은 다음과 같은 것입니다.trigger-file

spring.devtools.restart.trigger-file=.reloadtrigger

이제 다시 시작은 업데이트될 때만 발생합니다.src/main/resources/.reloadtrigger

  모든 프로젝트가 동일한 방식으로 행동하도록 전역 설정으로설정할 수 있습니다. spring.devtools.restart.trigger-file

일부 IdI에는 트리거 파일을 수동으로 업데이트할 필요가 없는 기능이 있습니다. 이클립스와 IntelliJ IDEA (얼티밋 에디션)를위한 스프링 도구는 모두 이러한 지원을 제공합니다. Spring 도구를 사용하면 콘솔 보기에서 "다시 로드" 버튼을 사용할 수 있습니다(이름이 지정된 한). IntelliJ의 경우 문서의 지침을따를 수 있습니다.trigger-file.reloadtrigger

재시작 클래스 로더 사용자 지정

이전 설명과 다시 로드 대 재로드 섹션에서 설명한 것처럼 두 클래스 로더를 사용하여 다시 시작 기능이 구현됩니다. 대부분의 응용 프로그램에서이 방법은 잘 작동합니다. 그러나 클래스로딩 문제가 발생할 수 있습니다.

기본적으로 IDE의 모든 열린 프로젝트에는 "다시 시작" 클래스 로더가 로드되고 일반 파일은 "기본" 클래스 로더로 로드됩니다. 다중 모듈 프로젝트에서 작업하는 경우 모든 모듈을 IDE로 가져오는 것이 아니라 사물을 사용자 지정해야 할 수 있습니다. 이렇게 하려면 파일을 만들 수 있습니다..jarMETA-INF/spring-devtools.properties

파일에는 사전 고정된 속성및 . 요소는 "다시 시작" 클래스 로더로 끌어올려야 하는 항목이며 요소는 "기본" 클래스 로더로 밀어야 하는 항목입니다. 속성의 값은 다음 예제와 같이 클래스 경로에 적용되는 레텍스 패턴입니다.spring-devtools.propertiesrestart.excluderestart.includeincludeexclude

restart.exclude.companycommonlibs=/mycorp-common-[\\w\\d-\.]+\.jar
restart.include.projectcommon=/mycorp-myproj-[\\w\\d-\.]+\.jar
  모든 속성 키는 고유해야 합니다. 속성이 시작하거나 고려되는 한. restart.include.restart.exclude.
  클래스 경로에서 모두 로드됩니다. 프로젝트 내부 또는 프로젝트가 소비하는 라이브러리에서 파일을 패키지로 포장할 수 있습니다. META-INF/spring-devtools.properties
알려진 제한 사항

다시 시작 기능은 표준을 사용하여 분류된 개체와 잘 작동하지 않습니다. 데이터를 직렬화해야 하는 경우 스프링과 함께 사용해야 할 수 있습니다.ObjectInputStreamConfigurableObjectInputStreamThread.currentThread().getContextClassLoader()

안타깝게도 여러 타사 라이브러리는 컨텍스트 클래스 로더를 고려하지 않고 분류됩니다. 이러한 문제가 발견되면 원래 작성자에게 수정 프로그램을 요청해야 합니다.

3.8.3. 라이브리로드

이 모듈에는 리소스가 변경될 때 브라우저 새로 고침을 트리거하는 데 사용할 수 있는 임베디드 LiveReload 서버가 포함되어 있습니다. LiveReload 브라우저 확장은 크롬에 대 한 무료로 사용할 수 있습니다., 파이어 폭스와 사파리 에서 livereload.com.spring-boot-devtools

응용 프로그램이 실행될 때 LiveReload 서버를 시작하지 않으려면 속성을 로 설정할 수 있습니다.spring.devtools.livereload.enabledfalse

  한 번에 하나의 LiveReload 서버만 실행할 수 있습니다. 응용 프로그램을 시작하기 전에 다른 LiveReload 서버가 실행되지 않았는지 확인합니다. IDE에서 여러 응용 프로그램을 시작하는 경우 첫 번째 응용 프로그램만 LiveReload 지원을 제공합니다.

3.8.4. 글로벌 설정

디렉터리에 다음 파일을 추가하여 전역 개발자 설정을 구성할 수 있습니다.$HOME/.config/spring-boot

  1. spring-boot-devtools.properties
  2. spring-boot-devtools.yaml
  3. spring-boot-devtools.yml

이러한 파일에 추가된 모든 속성은 devtools를 사용하는 컴퓨터의 모든 스프링 부트 응용 프로그램에 적용됩니다. 예를 들어 항상 트리거 파일을사용하도록 다시 시작하도록 구성하려면 다음 속성을 추가합니다.

~//.config/스프링 부츠/스프링 부츠-devtools.properties
spring.devtools.restart.trigger-file=.reloadtrigger
  devtools 구성 파일이 없는 경우 디렉터리 루트가 파일의 존재를 검색합니다. 이렇게 하면 위치를 지원하지 않는 이전 버전의 Spring Boot에 있는 응용 프로그램과 개발자 글로벌 구성을 공유할 수 있습니다. $HOME/.config/spring-boot$HOME.spring-boot-devtools.properties$HOME/.config/spring-boot
 

프로필은 devtools 속성/yaml 파일에서 지원되지 않습니다.

활성화된 모든 프로파일은 프로필별 구성 파일의로드에 영향을 주지 않습니다. 프로필 특정 파일 이름(양식의) 및 YAML 파일의 하위 문서는 지원되지 않습니다..spring-boot-devtools.propertiesspring-boot-devtools-<profile>.propertiesspring.profile

파일 시스템 감시자 구성

FileSystemWatcher는 일정 시간 간격으로 클래스 변경 내용을 폴링한 다음 미리 정의된 조용한 기간을 기다리면서 더 이상 변경 사항이 없는지 확인합니다. Spring Boot는 IDE에 전적으로 의존하여 스프링 부트이 읽을 수 있는 위치에서 파일을 컴파일하고 복사하므로 개발자도구가 응용 프로그램을 다시 시작할 때 특정 변경 사항이 반영되지 않는 경우가 있습니다. 이러한 문제를 지속적으로 관찰하는 경우 개발 환경에 맞는 값에 따라 매개 변수와 매개 변수를 늘려보세요.spring.devtools.restart.poll-intervalspring.devtools.restart.quiet-period

spring.devtools.restart.poll-interval=2s
spring.devtools.restart.quiet-period=1s

모니터링된 클래스패스 디렉터리(Classpath 디렉터리)는 이제 변경에 대해 2초마다 폴링되고 1초의 조용한 기간이 유지되어 추가 클래스 변경 사항이 없는지 확인합니다.

3.8.5. 원격 응용 프로그램

스프링 부트 개발자 도구는 로컬 개발에만 국한되지 않습니다. 응용 프로그램을 원격으로 실행할 때 여러 기능을 사용할 수도 있습니다. 원격 지원은 보안 위험이 될 수 있으므로 옵트인입니다. 신뢰할 수 있는 네트워크에서 실행하거나 SSL로 보호될 때만 활성화해야 합니다. 이러한 옵션 중 어느 것도 사용할 수 없는 경우 DevTools의 원격 지원을 사용해서는 안 됩니다. 프로덕션 배포에 대한 지원을 활성화해서는 안 됩니다.

이를 활성화하려면 다음 목록에서 와 같이 재포장된 아카이브에 포함되어 있는지 확인해야 합니다.devtools

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <configuration>
                <excludeDevtools>false</excludeDevtools>
            </configuration>
        </plugin>
    </plugins>
</build>

그런 다음 속성을 설정해야합니다. 중요한 암호 나 비밀과 마찬가지로, 값은 추측하거나 짐승 강제 할 수 없도록 독특하고 강해야합니다.spring.devtools.remote.secret

원격 devtools 지원은 연결을 허용하는 서버 측 끝점과 IDE에서 실행되는 클라이언트 응용 프로그램의 두 부분으로 제공됩니다. 속성이 설정되면 서버 구성 요소가 자동으로 활성화됩니다. 클라이언트 구성 요소를 수동으로 시작해야 합니다.spring.devtools.remote.secret

원격 클라이언트 응용 프로그램 실행

원격 클라이언트 응용 프로그램은 IDE 내에서 실행되도록 설계되었습니다. 연결하는 원격 프로젝트와 동일한 클래스패스로 실행해야 합니다. 응용 프로그램의 단일 필수 인수는 연결하는 원격 URL입니다.org.springframework.boot.devtools.RemoteSpringApplication

예를 들어 Eclipse 또는 STS를 사용하고 클라우드 파운드리에 배포한 프로젝트라는 프로젝트가 있는 경우 다음을 수행합니다.my-app

  • 메뉴에서 선택합니다.Run Configurations…​Run
  • 새 "시작 구성"을 만듭니다.Java Application
  • 프로젝트를 찾아봅보시면 됩니다.my-app
  • 메인 클래스로 사용하십시오.org.springframework.boot.devtools.RemoteSpringApplication
  • (또는 원격 URL이 무엇이든)에 추가합니다.https://myapp.cfapps.ioProgram arguments

실행 중인 원격 클라이언트는 다음 목록과 유사할 수 있습니다.

  .   ____          _                                              __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _          ___               _      \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` |        | _ \___ _ __  ___| |_ ___ \ \ \ \
 \\/  ___)| |_)| | | | | || (_| []::::::[]   / -_) '  \/ _ \  _/ -_) ) ) ) )
  '  |____| .__|_| |_|_| |_\__, |        |_|_\___|_|_|_\___/\__\___|/ / / /
 =========|_|==============|___/===================================/_/_/_/
 :: Spring Boot Remote :: 2.3.1.RELEASE

2015-06-10 18:25:06.632  INFO 14938 --- [           main] o.s.b.devtools.RemoteSpringApplication   : Starting RemoteSpringApplication on pwmbp with PID 14938 (/Users/pwebb/projects/spring-boot/code/spring-boot-project/spring-boot-devtools/target/classes started by pwebb in /Users/pwebb/projects/spring-boot/code)
2015-06-10 18:25:06.671  INFO 14938 --- [           main] s.c.a.AnnotationConfigApplicationContext : Refreshing org.springframework.context.annotation.AnnotationConfigApplicationContext@2a17b7b6: startup date [Wed Jun 10 18:25:06 PDT 2015]; root of context hierarchy
2015-06-10 18:25:07.043  WARN 14938 --- [           main] o.s.b.d.r.c.RemoteClientConfiguration    : The connection to http://localhost:8080 is insecure. You should use a URL starting with 'https://'.
2015-06-10 18:25:07.074  INFO 14938 --- [           main] o.s.b.d.a.OptionalLiveReloadServer       : LiveReload server is running on port 35729
2015-06-10 18:25:07.130  INFO 14938 --- [           main] o.s.b.devtools.RemoteSpringApplication   : Started RemoteSpringApplication in 0.74 seconds (JVM running for 1.105)
  원격 클라이언트가 실제 응용 프로그램과 동일한 클래스 경로를 사용하고 있으므로 응용 프로그램 속성을 직접 읽을 수 있습니다. 이렇게 하면 속성을 읽고 인증을 위해 서버로 전달됩니다. spring.devtools.remote.secret
  트래픽이 암호화되고 암호를 가로챌 수 없도록 항상 연결 프로토콜로 사용하는 것이 좋습니다. https://
  프록시를 사용하여 원격 응용 프로그램에 액세스해야 하는 경우 및 속성을 구성합니다. spring.devtools.remote.proxy.hostspring.devtools.remote.proxy.port
원격 업데이트

원격 클라이언트는 로컬 다시 시작과 동일한 방식으로 변경하려면 응용 프로그램 클래스 경로를 모니터링합니다. 업데이트된 모든 리소스는 원격 응용 프로그램으로 푸시되고(필요한경우)다시 시작이 트리거됩니다. 로컬에 없는 클라우드 서비스를 사용하는 기능을 반복하는 경우 이 에 도움이 될 수 있습니다. 일반적으로 원격 업데이트 및 재시작은 전체 다시 빌드 및 배포 주기보다 훨씬 빠름입니다.

느린 개발 환경에서는 조용한 기간이 충분하지 않고 클래스의 변경 내용이 일괄 처리로 분할될 수 있습니다. 클래스 변경의 첫 번째 일괄 처리가 업로드된 후 서버가 다시 시작됩니다. 서버가 다시 시작되므로 다음 일괄 처리를 응용 프로그램으로 보낼 수 없습니다.

일반적으로 로그에 일부 클래스를 업로드하지 못하고 결과적으로 다시 시도해야 한다는 경고가 표시됩니다. 그러나 첫 번째 변경 일괄 처리가 업로드된 후 응용 프로그램 코드 불일치및 다시 시작하지 못할 수도 있습니다. 이러한 문제를 지속적으로 관찰하는 경우 개발 환경에 맞는 값에 따라 매개 변수와 매개 변수를 늘려 보세요. 이러한 속성을 구성하기 위한 파일 시스템 감시자 구성 섹션을 참조하십시오.RemoteSpringApplicationspring.devtools.restart.poll-intervalspring.devtools.restart.quiet-period

  파일은 원격 클라이언트가 실행 중일 때만 모니터링됩니다. 원격 클라이언트를 시작하기 전에 파일을 변경하면 원격 서버로 푸시되지 않습니다.

3.9. 생산 용 응용 프로그램 포장

실행 가능한 항아리는 프로덕션 배포에 사용할 수 있습니다. 자체 포함된 이 제품은 클라우드 기반 배포에도 이상적입니다.

상태, 감사 및 메트릭 REST 또는 JMX 종점과 같은 추가 "프로덕션 준비" 기능을 보려면 추가하는 것이 좋습니다. 스프링 부트 액추에이터: 프로덕션 준비 기능 에서 자세한 내용을 확인하세요.spring-boot-actuator

3.10. 다음에 읽어야 할 것

이제 스프링 부트을 사용하는 방법과 따라야 할 몇 가지 모범 사례를 이해해야 합니다. 이제 특정 스프링 부트 기능에 대해 자세히 알아보거나 미리 건너뛰고 스프링 부트의"프로덕션 준비"측면에 대해 읽을 수 있습니다.

 

Spring Boot Reference Documentation

Phillip Webb, Dave Syer, Josh Long, Stéphane Nicoll, Rob Winch, Andy Wilkinson, Marcel Overdijk, Christian Dupuis, Sébastien Deleuze, Michael Simons, Vedran Pavić, Jay Bryant, Madhura Bhave, Eddú Meléndez, Scott Frederick

2.3.1.RELEASE

Copyright © 2012-2020

Copies of this document may be made for your own use and for distribution to others, provided that you do not charge any fee for such copies and further provided that each copy contains this Copyright Notice, whether distributed in print or electronically.

출처 : https://docs.spring.io/spring-boot/docs/2.3.1.RELEASE/reference/htmlsingle/#using-boot

반응형