Spring Boot 빠 른 입문 안내

최근 프로젝트 때문에 Spring Boot 를 접 해 야 합 니 다.상세 한 소 개 는 공식 문 서 를 참고 할 수 있 습 니 다.여 기 는 주로 자신 이 배 운 실천 에 따라 간단하게 공유 합 니 다.주요 기능
간단 한 소개
Spring 프레임 워 크 는 매우 유명한 자바 오픈 소스 프레임 워 크 로 십 여 년 의 발전 을 거 쳐 전체 생태 시스템 이 매우 완선 되 고 복잡 하 다.Spring Boot 는 바로 이 문 제 를 해결 하기 위해 개 발 된 것 으로 Spring 플랫폼 과 제3자 라 이브 러 리 에 상 자 를 열 고 사용 할 수 있 는 설 치 를 제공 했다.아주 적은 배치 만으로 Spring 프로젝트 를 시작 할 수 있다.물론 자바 8 을 이용 해 개발 하 는 것 을 권장 합 니 다.
Spring Boot 는 실제로 Servlet 의 노선 을 걷 기 때문에 Servlet 용기 가 필요 합 니 다.어떤 Tomcat/Jetty 도 지원 합 니 다.의외로 Undertow(Undertow 대 법 이 좋 습 니 다)도 지원 합 니 다.
설치 하 다.
간단 하고 거 칠 게 명령 행 에 직접 올 라 가 구체 적 인 소 개 는 주석 을 참고 하 세 요.

#    Java    
dawang:~ dawang$ java -version
java version "1.8.0_91"
Java(TM) SE Runtime Environment (build 1.8.0_91-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.91-b14, mixed mode)
#    Spring Boot CLI
#        
dawang:~ dawang$ brew tap pivotal/tap
==> Tapping pivotal/tap
Cloning into '/usr/local/Library/Taps/pivotal/homebrew-tap'...
remote: Counting objects: 16, done.
remote: Compressing objects: 100% (14/14), done.
remote: Total 16 (delta 2), reused 5 (delta 0), pack-reused 0
Unpacking objects: 100% (16/16), done.
Checking connectivity... done.
Tapped 9 formulae (50 files, 46.1K)
#        
dawang:~ dawang$ brew install springboot
==> Installing springboot from pivotal/tap
==> Downloading https://repo.spring.io/release/org/springframework/boot/spring-boot-cli/1.3.6.RELEASE/spring-boot-cli-1.3.6.RELEASE-bin.tar.
######################################################################## 100.0%
==> Caveats
Bash completion has been installed to:
 /usr/local/etc/bash_completion.d
zsh completion has been installed to:
 /usr/local/share/zsh/site-functions
==> Summary
:beer: /usr/local/Cellar/springboot/1.3.6.RELEASE: 6 files, 8.9M, built in 4 minutes 39 seconds
그리고 우 리 는 Spring CLI 의 강력 한 위력 을 시험 해 볼 수 있 습 니 다!app.groovy 라 는 파일 을 만 듭 니 다.

@RestController
class ThisWillActuallyRun {
 @RequestMapping("/")
 String home() {
 "Hello World"
 }
}
운행 spring run app.groovy 만 하면 됩 니 다!그러나 내 기계 에 서 는 이렇게 순 조 롭 지 않 았 다.spring 은 ruby 에 의 해 무정 하 게 점용 되 었 기 때문에'bashrc'에 별명alias springj="/usr/local/Cellar/springboot/1.3.6.RELEASE/bin/spring을 새로 만 들 고springj run app.groovy 로 운행 할 수 밖 에 없 었 다.
아직 안 돼!localhost:8080 을 열 었 을 때 기계 가 nginx 를 작 동 하고 있 는 것 을 발 견 했 기 때문에 먼저 nginx 를 꺼 야 합 니 다.구체 적 인 절 차 는?

#         
ps aux | grep nginx
#       
kill -QUIT [nginx     pid]
각종 장애물 을 해결 하고 springj run app.groovy 를 다시 실행 하면 브 라 우 저 에서 Hello World 를 볼 수 있 습 니 다.

dawang$ springj run app.groovy
Resolving dependencies.......
 . ____ _ __ _ _
 /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/ ___)| |_)| | | | | || (_| | ) ) ) )
 ' |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot :: (v1.3.6.RELEASE)
마지막 으로 우리 가 설치 해 야 할 것 은GradleIntelliJ IDEA CE가 있 는데,여 기 는 군더더기 없 이 설치 하면 우 리 는 다음 단 계 를 진행 할 수 있다.
Hello World
Spring INITIALIZR에서 간단 한 설정 을 하면 프로젝트 템 플 릿 을 생 성 할 수 있 습 니 다.다음 그림 과 같 습 니 다.
 
그리고 다운로드 한 파일 을 압축 을 풀 고 IntelliJ 에 가 져 와 잠시 기다 리 면 됩 니 다.
 
디 렉 터 리 구 조 는 위의 그림 에서 보 듯 이 main 함 수 를 직접 실행 합 니 다.콘 솔 의 출력 은?

. ____ _ __ _ _
 /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/ ___)| |_)| | | | | || (_| | ) ) ) )
 ' |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot :: (v1.3.6.RELEASE)
2016-07-19 19:29:41.235 INFO 65812 --- [ main] wdx.helloworld.HellowordApplication : Starting HellowordApplication on dawang.local with PID 65812 (/Users/dawang/Documents/DJI/Code/helloword/build/classes/main started by dawang in /Users/dawang/Documents/DJI/Code/helloword)
2016-07-19 19:29:41.239 INFO 65812 --- [ main] wdx.helloworld.HellowordApplication : No active profile set, falling back to default profiles: default
2016-07-19 19:29:41.320 INFO 65812 --- [ main] s.c.a.AnnotationConfigApplicationContext : Refreshing org.springframework.context.annotation.AnnotationConfigApplicationContext@545997b1: startup date [Tue Jul 19 19:29:41 CST 2016]; root of context hierarchy
2016-07-19 19:29:42.336 INFO 65812 --- [ main] o.s.j.e.a.AnnotationMBeanExporter : Registering beans for JMX exposure on startup
2016-07-19 19:29:42.353 INFO 65812 --- [ main] wdx.helloworld.HellowordApplication : Started HellowordApplication in 1.865 seconds (JVM running for 3.141)
2016-07-19 19:29:42.354 INFO 65812 --- [ Thread-1] s.c.a.AnnotationConfigApplicationContext : Closing org.springframework.context.annotation.AnnotationConfigApplicationContext@545997b1: startup date [Tue Jul 19 19:29:41 CST 2016]; root of context hierarchy
2016-07-19 19:29:42.356 INFO 65812 --- [ Thread-1] o.s.j.e.a.AnnotationMBeanExporter : Unregistering JMX-exposed beans on shutdown
Process finished with exit code 0
물론 우리 프로그램 에 서 는 아무런 조작 도 하지 않 았 고 웹 모듈 에 도 협조 하지 않 았 기 때문에 Spring 을 불 러 오 면 끝 납 니 다.
프로젝트 에 대응 하 는 build.gradle 를 살 펴 보 겠 습 니 다.그 중 에는 두 개의 모듈 만 포함 되 어 있 습 니 다.

dependencies {
 compile('org.springframework.boot:spring-boot-starter')
 testCompile('org.springframework.boot:spring-boot-starter-test')
}
그 중:
  • spring-boot-starter:핵심 모듈 로 자동 설정 지원,로그 와 YAML
  • 을 포함 합 니 다.
  • spring-boot-starter-test:테스트 모듈,JUnit,Hamcrest,Mockito
  • 포함
    spring-boot-starter-웹 모듈 에 가입 합 니 다.dependencies 부분 은?
    
    dependencies {
     compile('org.springframework.boot:spring-boot-starter')
     compile('org.springframework.boot:spring-boot-starter-web')
     testCompile('org.springframework.boot:spring-boot-starter-test')
    }
    그리고 wdx.helloworld.web 패키지 에 Hello Controller 클래스 를 추가 합 니 다.
    
    package wdx.helloworld.web;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    /**
     * Created by dawang on 16/7/20.
     */
    @RestController
    public class HelloController {
     @RequestMapping("/hello")
     public String index() {
     return "Hello World! This is wdxtub.";
     }
    }
    홈 프로그램 을 시작 하고 localhost:8080/hello 를 방문 하면 결 과 를 볼 수 있 습 니 다.
     
    그 다음 에 해당 하 는 테스트 HellowordApplications Tests 를 작성 해 보 겠 습 니 다.(단어 가 틀 렸 으 니 디 테 일 에 신경 쓰 지 마 세 요)static 방법 을 도입 해 야 합 니 다.
    
    package wdx.helloworld;
    import org.junit.Before;
    import org.junit.Test;
    import org.junit.runner.RunWith;
    import org.springframework.boot.test.SpringApplicationConfiguration;
    import org.springframework.http.MediaType;
    import org.springframework.mock.web.MockServletContext;
    import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
    import org.springframework.test.context.web.WebAppConfiguration;
    import org.springframework.test.web.servlet.MockMvc;
    import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
    import org.springframework.test.web.servlet.setup.MockMvcBuilders;
    import wdx.helloworld.web.HelloController;
    import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*;
    import static org.hamcrest.Matchers.equalTo;
    @RunWith(SpringJUnit4ClassRunner.class)
    @SpringApplicationConfiguration(classes = MockServletContext.class)
    @WebAppConfiguration
    public class HellowordApplicationTests {
     private MockMvc mvc;
     @Before
     public void setUp() throws Exception {
     mvc = MockMvcBuilders.standaloneSetup(new HelloController()).build();
     }
     @Test
     public void getHello() throws Exception {
     mvc.perform(MockMvcRequestBuilders.get("/hello").accept(MediaType.APPLICATION_JSON))
     .andExpect(status().isOk())
     .andExpect(content().string(equalTo("Hello World! This is wdxtub.")));
     }
    }
    구체 적 인 테스트 는 쉽게 말 하면 MockServletContext 를 사용 하여 새로운 WebApplication Context 를 만 든 다음 에 우 리 는 localhost:8080/hello 를 모 의 방문 할 수 있 습 니 다.이 테스트 를 실행 하면 모든 것 이 정상 임 을 발견 할 수 있 습 니 다.
     
    이로써 우 리 는 Spring Boot 프로젝트 를 시작 하 는 방법 을 알 게 되 었 고,대응 하 는 내용 을 표시 하기 위 한 간단 한 루트 를 만 들 었 다.다음은 개발 에 관 한 다른 지식 을 더 소개 하 겠 습 니 다.
    Starter POMs
    쉽게 말 하면 Starter POMs 는 우리 가 신속하게 응용 프로그램 에 기능 을 추가 하 는 데 편리 합 니 다.build.gradle 에 대응 하 는 starter 만 포함 하면 대량의 설정 과 의존 관 리 를 절약 할 수 있 습 니 다.다음은 자주 사용 하 는 starter 입 니 다.
  • spring-boot-starter:핵심 Spring Boot starter,자동 설정 지원,로그 와 YAML
  • 포함
  • spring-boot-starter-actuator:모니터링 과 관리 응용
  • spring-boot-starter-remote-shell:원 격 ssh 셸 지원 추가
  • spring-boot-starter-amqp:고급 메시지 큐 프로 토 콜,spring-rabbit 를 통 해 구현
  • spring-boot-starter-cloud-connectors:클 라 우 드 플랫폼 에서 서비스 연결 간소화
  • spring-boot-starter-elasticsearch:Elasticsearch 검색 및 분석 엔진 지원
  • spring-boot-starter-data-jpa:자바 지구 화 API 에 대한 지원,spring-data-jpa,spring-orm,Hibernate
  • 포함
  • spring-boot-starter-data-mongodb:MongoDB 에 대한 지원
  • spring-boot-starter-mail:javax.mail 에 대한 지원
  • spring-boot-starter-mobile:spring-mobile 에 대한 지원
  • spring-boot-starter-redis:Redis 에 대한 지원
  • spring-boot-starter-security:spring-security 에 대한 지원
  • spring-boot-starter-test:자주 사용 하 는 테스트 의존 지원,JUnit,Hamcrest,Mockito,그리고 spring-test 모듈
  • spring-boot-starter-web:전체 스 택 웹 개발 에 대한 지원,Tomcat 와 spring-webmvc
  • 포함
  • spring-boot-starter-websocket:웹 소켓 개발 에 대한 지원
  • spring-boot-starter-ws:Spring Web Service 에 대한 지원
  • 용기 와 로그 시스템 을 전환 하려 면 아래 가방 을 사용 하 십시오.
  • spring-boot-starter-jetty:Jetty HTTP 엔진 가 져 오기
  • spring-boot-starter-log4j:Log4J 로그 시스템 에 대한 지원
  • spring-boot-starter-logging:Spring Boot 의 기본 로그 시스템 가 져 오기
  • spring-boot-starter-tomcat:Spring Boot 의 기본 HTTP 엔진 가 져 오기
  • spring-boot-starter-undertow:Undertow HTTP 엔진 가 져 오기
  • 더 많은 커 뮤 니 티 에 기여 한 starter POMs 는여기,이곳에서 찾 아 볼 수 있다.
    조직 코드 최 적 실천
    default package 를 사용 하지 말고 반전 도 메 인 이름 으로 가방 이름 을 짓 는 것 을 권장 합 니 다.
    main 응용 클래스 를 루트 패키지 에 넣 고 다른 클래스 는 하위 패키지 에 넣 으 며 구 조 는 다음 과 같 습 니 다.
    
    wdx
     +- helloworld
     +- HelloworldApplication.java <- main class
     |
     +- web
     | +- HelloController.java
     |
     +- service
     | +- CustomerService.java
  • Spring Boot 는 코드 에서 설정 하 는 것 을 제창한다.일반적으로 main 방법 을 정의 하 는 종 류 는@Configuration 주 해 를 사용 하기에 좋 은 곳
  • 입 니 다.
  • 모든@Configufation 을 하나의 단독 클래스 에 넣 을 필요 가 없습니다.@Import 주 해 를 사용 하면 다른 설정 클래스 를 가 져 올 수 있 습 니 다.@Componentscan 주석 으로 모든 구성 요 소 를 자동 으로 수집 할 수 있 습 니 다.@Configuration 류
  • 를 포함 합 니 다.
  • XML 기반 설정 을 사용 하려 면@Configuration 클래스 부터 시작 한 다음@ImportResource 주 해 를 사용 하여 XML 설정 파일 을 불 러 오 는 것 이 좋 습 니 다
  • Spring Boot 의 또 다른 좋 은 기능 은 추 가 된 jar 의존 에 따라 Spring 응용 프로그램 을 설정 하 는 것 입 니 다.@EnableAutoConfiguration 을@Configuration 류 에 간단하게 추가 하면 됩 니 다
  • SpringBootApplication 주 해 는 기본적으로@Configuration,@EnableAutoConfiguration,ComponentScan 세 가 지 를 합 친 효과 입 니 다.
  • 포장 운행
    터미널 에서 gradle assemble 을 실행 하면 jar 패 키 지 를 만 들 수도 있 고 이 jar 패 키 지 를 직접 실행 하여 전체 응용 을 시작 할 수도 있 습 니 다.예 를 들 어
    dawang:helloword dawang$ java -jar build/libs/helloword-0.0.1-SNAPSHOT.jar
    
     . ____ _ __ _ _
     /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
    ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
     \\/ ___)| |_)| | | | | || (_| | ) ) ) )
     ' |____| .__|_| |_|_| |_\__, | / / / /
     =========|_|==============|___/=/_/_/_/
     :: Spring Boot :: (v1.3.6.RELEASE)
    
    2016-07-20 13:11:01.859 INFO 36943 --- [ main] wdx.helloworld.HellowordApplication : Starting HellowordApplication on dawang.local with PID 36943 (/Users/dawang/Documents/DJI/Code/helloword/build/libs/helloword-0.0.1-SNAPSHOT.jar started by dawang in /Users/dawang/Documents/DJI/Code/helloword)
    2016-07-20 13:11:01.864 INFO 36943 --- [ main] wdx.helloworld.HellowordApplication : No active profile set, falling back to default profiles: default
    2016-07-20 13:11:01.960 INFO 36943 --- [ main] ationConfigEmbeddedWebApplicationContext : Refreshing org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@67424e82: startup date [Wed Jul 20 13:11:01 CST 2016]; root of context hierarchy
    2016-07-20 13:11:03.727 INFO 36943 --- [ main] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat initialized with port(s): 8080 (http)
    2016-07-20 13:11:03.750 INFO 36943 --- [ main] o.apache.catalina.core.StandardService : Starting service Tomcat
    2016-07-20 13:11:03.752 INFO 36943 --- [ main] org.apache.catalina.core.StandardEngine : Starting Servlet Engine: Apache Tomcat/8.0.36
    2016-07-20 13:11:03.897 INFO 36943 --- [ost-startStop-1] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext
    2016-07-20 13:11:03.897 INFO 36943 --- [ost-startStop-1] o.s.web.context.ContextLoader : Root WebApplicationContext: initialization completed in 1943 ms
    2016-07-20 13:11:04.275 INFO 36943 --- [ost-startStop-1] o.s.b.c.e.ServletRegistrationBean : Mapping servlet: 'dispatcherServlet' to [/]
    2016-07-20 13:11:04.282 INFO 36943 --- [ost-startStop-1] o.s.b.c.embedded.FilterRegistrationBean : Mapping filter: 'characterEncodingFilter' to: [/*]
    2016-07-20 13:11:04.283 INFO 36943 --- [ost-startStop-1] o.s.b.c.embedded.FilterRegistrationBean : Mapping filter: 'hiddenHttpMethodFilter' to: [/*]
    2016-07-20 13:11:04.283 INFO 36943 --- [ost-startStop-1] o.s.b.c.embedded.FilterRegistrationBean : Mapping filter: 'httpPutFormContentFilter' to: [/*]
    2016-07-20 13:11:04.284 INFO 36943 --- [ost-startStop-1] o.s.b.c.embedded.FilterRegistrationBean : Mapping filter: 'requestContextFilter' to: [/*]
    2016-07-20 13:11:04.658 INFO 36943 --- [ main] s.w.s.m.m.a.RequestMappingHandlerAdapter : Looking for @ControllerAdvice: org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@67424e82: startup date [Wed Jul 20 13:11:01 CST 2016]; root of context hierarchy
    2016-07-20 13:11:04.751 INFO 36943 --- [ main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/hello]}" onto public java.lang.String wdx.helloworld.web.HelloController.index()
    2016-07-20 13:11:04.755 INFO 36943 --- [ main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/error]}" onto public org.springframework.http.ResponseEntity<java.util.Map<java.lang.String, java.lang.Object>> org.springframework.boot.autoconfigure.web.BasicErrorController.error(javax.servlet.http.HttpServletRequest)
    2016-07-20 13:11:04.755 INFO 36943 --- [ main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/error],produces=[text/html]}" onto public org.springframework.web.servlet.ModelAndView org.springframework.boot.autoconfigure.web.BasicErrorController.errorHtml(javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse)
    2016-07-20 13:11:04.810 INFO 36943 --- [ main] o.s.w.s.handler.SimpleUrlHandlerMapping : Mapped URL path [/webjars/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
    2016-07-20 13:11:04.810 INFO 36943 --- [ main] o.s.w.s.handler.SimpleUrlHandlerMapping : Mapped URL path [/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
    2016-07-20 13:11:04.875 INFO 36943 --- [ main] o.s.w.s.handler.SimpleUrlHandlerMapping : Mapped URL path [/**/favicon.ico] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
    2016-07-20 13:11:05.028 INFO 36943 --- [ main] o.s.j.e.a.AnnotationMBeanExporter : Registering beans for JMX exposure on startup
    2016-07-20 13:11:05.145 INFO 36943 --- [ main] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat started on port(s): 8080 (http)
    2016-07-20 13:11:05.151 INFO 36943 --- [ main] wdx.helloworld.HellowordApplication : Started HellowordApplication in 4.0 seconds (JVM running for 4.484)
    물론 모든 의존 을 포함해 야 하기 때문에 전체 jar 가방 이 비교적 클 것 입 니 다.원 격 디 버 깅 을 시작 하려 면 명령 은
    
    java -Xdebug -Xrunjdwp:server=y,transport=dt_socket,address=8000,suspend=n -jar build/libs/helloword-0.0.1-SNAPSHOT.jar
    Gradle 실행
    물론 내 장 된 Gradle 스 크 립 트 를 간단하게 사용 하여 실행 할 수 있 습 니 다.gradle bootRun 을 직접 사용 하면 됩 니 다.
    Undertow 설정
    기본 Tomcat 을 Undertow 로 교체 하려 면 build.gradle 에서 간단하게 설정 할 수 있 습 니 다.예 를 들 어:
    
    configurations {
     compile.exclude module: "spring-boot-starter-tomcat"
    }
    dependencies {
     compile('org.springframework.boot:spring-boot-starter')
     compile('org.springframework.boot:spring-boot-starter-web')
     compile('org.springframework.boot:spring-boot-starter-undertow')
     testCompile('org.springframework.boot:spring-boot-starter-test')
    }
    그리고 gradle bootRun 을 사용 하면 됩 니 다.
    위 에서 말씀 드 린 것 은 편집장 님 께 서 소개 해 주신 Spring Boot 빠 른 입문 안내서 입 니 다.도움 이 되 셨 으 면 합 니 다.궁금 한 점 이 있 으 시 면 메 시 지 를 남 겨 주세요.편집장 님 께 서 바로 답 해 드 리 겠 습 니 다.여기 서도 저희 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다!

    좋은 웹페이지 즐겨찾기