Pyohwan / english-study

0 stars 0 forks source link

Using Spring Boot #24

Open Pyohwan opened 4 years ago

Pyohwan commented 4 years ago

https://docs.spring.io/spring-boot/docs/2.2.2.RELEASE/reference/html/using-spring-boot.html#using-boot

1. Build Systems

1.5. Starters

2. Structuring Your Code

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. Configuration Classes
* Spring Boot 는 Java-based 구성을 선호 함 (XML 싫음)
* primary source 는 하나의 `@Configuration` 클래스가 좋다
## 3.1. Importing Additional Configuration Classes
* `@Configuration` 을 꼭 안써도 되고, `@Import` 로 추가 가능하다.
* 또는, @ComponentScan 에서 선택 가능
## 3.2. Importing XML Configuration
* XML 기반 구성을 반드시 해야 하면, @ImportResource 를 써라

# 4. Auto-configuration
* jar 디펜던시를 기반으로 자동 구성을 하려고 함
  * 예를 들어, HSQLDB 가 클래스패스에 있고, DB 연결 Bean 이 따로 없다면, Spring Boot 는 인메모리 디비를 자동 구성 함

## 4.1. Gradually Replacing Auto-configuration
* 자동구성은 non-invasive 하다.
  * DataSource Bean 을 선언 하면, 임베디드 디비 지원은 취소 됨
## 4.2. Disabling Specific Auto-configuration Classes
* 원하지 않는 자동 구성이 있다면, @EnableAutoConfiguration 에서 exclude 로 비활성화 가능

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

@Configuration(proxyBeanMethods = false) @EnableAutoConfiguration(exclude={DataSourceAutoConfiguration.class}) public class MyConfiguration { }

# 5. Spring Beans and Dependency Injection
* Bean 및 디펜던시 inject 를 자유롭게 사용 가능
  * @ComponentScan (to find your beans) 와 @Autowired (to do constructor injection) 를 쓰면 좋음
* root package 에 @ComponentScan 를 추가하면, 모든 애플리케이션 컴포넌트들(@Component, @Service, @Repository, @Controller etc.) 은 자동으로 Spring Bean 으로 등록 됨

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;
}

// ...

}

* Bean 생성자가 하나이면 @Autowired 생략 가능

@Service public class DatabaseAccountService implements AccountService {

private final RiskAssessor riskAssessor;

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

// ...

}

> 생성자에서 injection 하면, riskAssessor 필드가 final 이기 때문에 나중에 변경시킬수 없음을 알 수 있음

# 6. Using the @SpringBootApplication Annotation
* @SpringBootApplication 를 붙히면 세가지 기능이 활성화 됨
  * @EnableAutoConfiguration : Spring Boot 의 자동 등록 메카니즘이 활성화
  * @ComponentScan : package 내에서 @Component 를 찾음
  * @Configuration : 컨텍스트에 추가적으로 Bean 을 등록할 수 있음

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);
}

}


# 7. Running Your Application
* 애플리케이션을 jar 로 패키징 하고, 내장 HTTP 서버를 사용하는 장점 중 하나는, 다른 방법으로 애플리케이션을 실행 가능 하다는 것
## 7.1. Running from an IDE
* IDE 에서 프로젝트를 import 한 후, Java 애플리케이션으로 실행 가능
## 7.2. Running as a Packaged Application
* Maven, Gradle 로 executable jar 를 만들고, `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

## Using the Maven Plugin
* maven 으로 Spring Boot 애플리케이션 실행 가능

$ mvn spring-boot:run

* `MAVEN_OPTS` 처럼 운영체제 환경 변수 사용 가능

$ export MAVEN_OPTS=-Xmx1024m


## 7.4. Using the Gradle Plugin
* gradle 으로 Spring Boot 애플리케이션 실행 가능

$ gradle bootRun

* `JAVA_OPTS ` 처럼 운영체제 환경 변수 사용 가능

$ export JAVA_OPTS=-Xmx1024m


## 7.5. Hot Swapping (class 를 런타임으로 바로 적용)
* JVM hot swapping 은 대체할 수 있는 바이트코드라몬 제한 함
  * JRebel 추천
* spring-boot-devtools 모듈도 빠른 애플리케이션 재시작이 포함되어 있음
Pyohwan commented 4 years ago

8. Developer Tools

8.1. Property Defaults

8.2. Automatic Restart

Triggering a restart

8.2.1. Logging changes in condition evaluation

8.2.3. Watching Additional Paths

8.2.4. Disabling Restart

8.2.5. Using a Trigger File

8.2.6. Customizing the Restart Classloader

8.2.7. Known Limitations

8.3. LiveReload

8.4. Global Settings

8.5. Remote Applications

8.5.1. Running the Remote Client Application

8.5.3. Configuring File System Watcher

9. Packaging Your Application for Production