====== SpringBoot DevTools ======
* [[springframework:springboot|SpringBoot]] DevTools
* [[https://docs.spring.io/spring-boot/docs/current/reference/html/using-boot-devtools.html|20. Developer Tools]]
===== 설치 =====
// configurations 는 일단 안해도 되는벗(springboot version따라?)
configurations {
developmentOnly
runtimeClasspath {
extendsFrom developmentOnly
}
}
dependencies {
developmentOnly("org.springframework.boot:spring-boot-devtools")
}
* ''java -jar''로 실행될 때는 운영 시스템으로 간주하고 devtools가 비활성화 된다.
* 단, System Property ''-Dspring.devtools.restart.enabled=true|false'' 로 제어 가능하다.
===== 코드 변경 자동 반영 =====
* Java Code 가 변경되고 **빌드가 실행돼서 클래스패스의 리소스 변경이 감지되면** SpringBoot 애플리케이션을 자동 재시작해준다.
* [[https://www.jrebel.com/products/jrebel|jrebel]] 처럼 특정 클래스만 재적재해주는 방식은 아니므로 다소 느리다.
* 코드 빌드가 명시적으로 발생해야 하므로 [[:intellij_idea|IntelliJ IDEA]] 처럼 기본적으로 자동 빌드를 하지 않는 IDE 에서는 명시적 빌드를 해줘야 한다.
* 단, [[:intellij_idea|IntelliJ IDEA]] 에도 자동 빌드 기능이 있긴 하지만, 권장하고 싶지 않음. 여러 코드를 변경해야 할 경우 원하는 코드 변경을 모두 다 한 뒤에 reload가 돼야 하는데, 코드 변경을 하고 있는 도중에 빌드가 발생하게 되면 개발이 오히려 느려질 수 있어서 명시적 빌드를 선호하는 편이다.
* [[intellij_idea:config|IntelliJ IDEA Config 설정]] 에서 자동 빌드 부분 참조.
* [[https://www.jetbrains.com/help/idea/spring-boot.html#application-update-policies|Spring Boot—IntelliJ IDEA]]
* 애플리케이션이 실행중인 상황에서 코드 변경 반영 정책(애플리케이션 단위) : **Run | Edit Configurations.** -> Spring Boot 애플리케이션 선택 -> **Running Application Update Policies, -> 'Update'** 에서 원하는 Update 방식 선택.
==== reload trigger ====
* 사용중인 IDE가 지나치게 자동 갱신을 해서 오히려 더 개발 속도를 떨어뜨린다면 ''classpath'' 상의 특정 파일이 갱신될 때만 변경 사항을 자동 반영하게 할 수 있다.
* 아래와 같이 설정했다면, ''src/main/resources/.reloadtrigger'' 파일이 변경 될 때만 애플리케이션이 자동 재시작된다.
'spring.devtools.restart.trigger-file=.reloadtrigger
==== 개발 환경에서는 Template Engine의 cache 를 끌 것 ====
* 개발 환경에서는 변경을 빠르게 확인하는게 더 중요하므로 [[java:template_engine|Java HTML Template Engines]]의 cache 를 끈다.
===== Local 환경 개발자 전용 전역 설정 Override =====
* ''$HOME/.config/spring-boot/spring-boot-devtools.{properties|yml|yaml}'' 파일이 존재하면 자동으로 읽어 최우선 순위로 적용한다.
* ''$HOME/.spring-boot-devtools.properties'' 위의 파일이 없으면 적용된다.
===== Live Reload =====
* HTML 변경 사항 발생시에 Browser 자동 reload
* [[http://livereload.com/extensions/|How do I install and use the browser extensions?]]
* Live Reload 서버가 뜨는 것을 막으려면
spring.devtools.livereload.enabled=false
===== 참조 =====
* [[https://docs.spring.io/spring-boot/docs/current/reference/html/using-boot-devtools.html|20. Developer Tools]]
* [[http://haviyj.tistory.com/11|Spring boot + devtools로 편리한 개발환경 구축]]
* [[http://www.baeldung.com/spring-boot-devtools|Overview of Spring-Boot Dev Tools | Baeldung]]
* [[https://dzone.com/articles/spring-boot-developer-tools-and-live-reload|Spring Boot Developer Tools and LiveReload - DZone Java]]
* [[http://www.javabeat.net/spring-boot-devtools/|Ultimate guide to SpringBoot devtools]]
* [[https://www.vojtechruzicka.com/spring-boot-devtools/|Faster Development with Spring Boot DevTools | Vojtech Ruzicka's Programming Blog]]