설치는 SDKMAN 이나 Brew등으로 가능.
$spring --version 으로 버전확인 가능.
$spring shell : sh도 제공
하지만, 대부분 IDEA를 이용하므로,
IntelliJ를 이용할 경우, gradle프로젝트를 만들고, springboot는 dependency로 삽입하면 된다. REF
<어노테이션>
@SpringBootApplication : component-scan 과 자동config제공.
- @Conditional 도 가능( jdbcTemplate과 같이 dataSource존재여부에 따라...조건부 Bean제공 가능)
한데 자동 config은 이런식으로 Tomcat, ORM, web매핑(/static) 등으로 classpath등을 보고 자동판단한다.
*물론 이러한 자동config도 override를 통해 수정할수 있다.(@Configuration)
<빌드 & run - gradle 사용시>
$ gradle bootRun : 빌드와 run동시 수행.
= $gradle build + $java -jar build/libs/..-0.0.1-SNAPSHOT.jar(or war)
maven : $spring-boot:run
($ mvn package ) : just package
<설정>
application.properties는 첨엔 비어있으므로 필요한걸 추가하면 됨.
dependency가 2개가 있는데(gradle.plugin 등)
- 위에껀 spring boot plugin dependency이고
- 밑에껀 starter dependency 이다. (참고로 maven은 순서가 바뀌어있지만.. plugin tag보면 알수 있음)
- dependency 일부를 제거하고 싶을 땐, exclude group등으로 가능.
<TEST용 어노테이션>
@WithMockUser
@WithUserDetails
@WebIntegrationTest
@Value (${local.server.port}) 등도 spring에서부터 사용가능.
물론 웹은 Sellenium과 연동테스트 된다.
<groovy> - C L I 와 궁합이 잘 맞음
Grabs.groovy 파일에 아래 3줄만 넣으면 spring-boot가 자동으로 못한 것들도, startup 시에 dependency를 자동으로 넣으면서 구동 가능.
@Grab("h2")
@Grab("spring-boot-starter-thymeleaf")
class Grabs {}
==> 그 후에 $ spring run .
Groovy로 test unit작성 시에는..
$ spring test tests/myTest.groovy 로 하나 실행 혹은
$ spring test tests 로 폴더통째로 실행 가능.
<패키징>
$ spring jar MyProject.jar . 하면 jar로 패키징 됨..
war는 ?
-gradle 의 경우
war {
baseName = 'readinglist'
version = '0.0.1-SNAPSHOT'
}
- maven 의 경우
<packaging> war </packaging>
만 추가하면 된다.
<Actuator>
CLI 환경에선 @Grab('spring-boot-starter-actuator') 추가하는 방법이 간단함.
그리고 Actuator중에선 아래 3가지가 특히 유용하다. .
https://localhost:8080/beans - 모든 bean과 dependency.
https://localhost:8080/dump - 모든thread 현황
https://localhost:8080/trace
그 외 enable을 시킨후에
curl -X POST http://localhost:8080/shutdown 명령어로 CLI상에서 shut-down도 가능하다.
SSH 로도 actuator접속이 가능한데
@Grab("spring-boot-starter-remote-shell") 이런형태로나 maven/gradle에 dependency추가 후
$ ssh user@localhost -p 2000 하면 된다.