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)
마지막 으로 우리 가 설치 해 야 할 것 은Gradle과IntelliJ 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-웹 모듈 에 가입 합 니 다.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 입 니 다.
조직 코드 최 적 실천
default package 를 사용 하지 말고 반전 도 메 인 이름 으로 가방 이름 을 짓 는 것 을 권장 합 니 다.
main 응용 클래스 를 루트 패키지 에 넣 고 다른 클래스 는 하위 패키지 에 넣 으 며 구 조 는 다음 과 같 습 니 다.
wdx
+- helloworld
+- HelloworldApplication.java <- main class
|
+- web
| +- HelloController.java
|
+- service
| +- CustomerService.java
터미널 에서 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 빠 른 입문 안내서 입 니 다.도움 이 되 셨 으 면 합 니 다.궁금 한 점 이 있 으 시 면 메 시 지 를 남 겨 주세요.편집장 님 께 서 바로 답 해 드 리 겠 습 니 다.여기 서도 저희 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
thymeleaf로 HTML 페이지를 동적으로 만듭니다 (spring + gradle)지난번에는 에서 화면에 HTML을 표시했습니다. 이번에는 화면을 동적으로 움직여보고 싶기 때문에 입력한 문자를 화면에 표시시키고 싶습니다. 초보자의 비망록이므로 이상한 점 등 있으면 지적 받을 수 있으면 기쁩니다! ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.