21 Eylül 2021 Salı

SpringBoot Developer Tools

Giriş
Kodda değişiklik yapınca Spring'i tekrar yüklüyor. Böylece geliştirme hızlanıyor. Aslında restart yaptığı, yani reloading yapmadığı için bence halen çok faydalı değil.

Maven
Şu satırı dahil ederiz
<dependency>
<groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <scope>runtime</scope> <optional>true</optional> </dependency>
Bunu ekleyince Spring'i çalıştırınca LiveReload 35729 portunun kullanıldığını görebiliriz. Açıklaması şöyle
Once you start the application you can see below logs saying that the application is started and the LiveReload server is running on port 35729.
This means our application's live restart is enabled. now any change you do in code will be directly available. 
Örnek
Şöyle yaparız
spring:
  devtools:
    restart:
      enabled: true  # Set to enable hot deployment
      additional-paths: src/main/java # restart directory
      exclude: WEB-INF/**
  thymeleaf:
    cache: false # Use Thymeleaf template engine, turn off caching
Açıklaması şöyle
By default, changing resources in /META-INF/maven, /META-INF/resources, /resources, /static, /public, or /templates does not trigger a restart but does trigger a live reload.
If you want to customize these exclusions, you can use the sprint.devtools.restart.exclude property.

For example, exclude only /static, /public you would set the following properties:

spring:
  devtools:
    restart:
      exclude: "static/**,public/**"

If you want to keep these defaults and add additional exclusions, use the sprint.devtools.restart.additional-exclude property instead.

IntelliJ IDEA Community Edition İle Tetikleme
Ben başka bir yolunu bulamadım. Açıklaması şöyle. Yani kısaca Build menüsü altındaki seçenekler kullanılıyor. Daha kolay bir yolunu bilen varsa söylesin :)
As DevTools monitors classpath resources, the only way to trigger a restart is to update the classpath. The way in which you cause the classpath to be updated depends on the IDE that you are using. In Eclipse, saving a modified file will cause the classpath to be updated and trigger a restart. In IntelliJ IDEA, building the project (Build → Make Project) will have the same effect.
IntelliJ IDEA Ultimate Edition İle Tetikleme
Sanırım yolu böyle

Tarayıcılar/Browsers İçin Livereload
Livereload iki kısımdan oluşuyor. 
1. Livereload Sunucusu
2. Tarayıcıdaki Livereload eklentisi

Bir örnek burada.

Livereload sunucusunu kapatmak için şöyle yaparız
spring.devtools.livereload=false
  
Docker
Linux'ta kullanılan bir yöntem burada. inotify-tools ile src dizini izleniyor ve değişikli varsa tekrar derleniyor.

FileSystemWatcher  Sınıfı
Şu satırı dahil ederizz
import org.springframework.boot.devtools.filewatch.FileSystemWatcher;
Örnek
Şöyle yaparız
@Configuration
public class FileWatcherConfig {
  @Bean
  public FileSystemWatcher fileSystemWatcher() {
    FileSystemWatcher fileSystemWatcher = new FileSystemWatcher(true,
      Duration.ofMillis(5000L), Duration.ofMillis(3000L));
    fileSystemWatcher.addSourceDirectory(new File(“C:/opt”));
    fileSystemWatcher.addListener(new MyFileChangeListener());
    fileSystemWatcher.start();
    return fileSystemWatcher;
  }
  @PreDestroy
  public void onDestroy() throws Exception {
    fileSystemWatcher().stop();
  }
}
public class MyFileChangeListener implements FileChangeListener {
  @Override
  public void onChange(Set<ChangedFiles> changeSet) {
    for (ChangedFiles cfiles:changeSet) {
      for (ChangedFile cfile:cfiles.getFiles()) {
        System.out.println(cfile.getType()+”:”+cfile.getFile().getName());
      }
    }
  }
}


Hiç yorum yok:

Yorum Gönder