Skip to content

Commit

Permalink
Merge branch '2.6.x' into 2.7.x
Browse files Browse the repository at this point in the history
Closes gh-31906
  • Loading branch information
wilkinsona committed Jul 28, 2022
2 parents 5c52882 + 348b2c2 commit 4f0dac7
Show file tree
Hide file tree
Showing 3 changed files with 67 additions and 18 deletions.
Expand Up @@ -48,6 +48,7 @@
import org.springframework.context.event.ContextRefreshedEvent;
import org.springframework.context.event.GenericApplicationListener;
import org.springframework.core.ResolvableType;
import org.springframework.core.log.LogMessage;
import org.springframework.util.StringUtils;

/**
Expand Down Expand Up @@ -107,17 +108,9 @@ static class RestartConfiguration {
}

@Bean
ApplicationListener<ClassPathChangedEvent> restartingClassPathChangedEventListener(
RestartingClassPathChangeChangedEventListener restartingClassPathChangedEventListener(
FileSystemWatcherFactory fileSystemWatcherFactory) {
return (event) -> {
if (event.isRestartRequired()) {
if (restarterLogger.isDebugEnabled()) {
restarterLogger.debug(
"Application restart required due to the following changes: " + event.getChangeSet());
}
Restarter.getInstance().restart(new FileWatchingFailureHandler(fileSystemWatcherFactory));
}
};
return new RestartingClassPathChangeChangedEventListener(fileSystemWatcherFactory);
}

@Bean
Expand Down Expand Up @@ -204,4 +197,25 @@ public int getOrder() {

}

static class RestartingClassPathChangeChangedEventListener implements ApplicationListener<ClassPathChangedEvent> {

private static final Log logger = LogFactory.getLog(RestartingClassPathChangeChangedEventListener.class);

private final FileSystemWatcherFactory fileSystemWatcherFactory;

RestartingClassPathChangeChangedEventListener(FileSystemWatcherFactory fileSystemWatcherFactory) {
this.fileSystemWatcherFactory = fileSystemWatcherFactory;
}

@Override
public void onApplicationEvent(ClassPathChangedEvent event) {
if (event.isRestartRequired()) {
logger.info(LogMessage.format("Restarting due to %s", event.overview()));
logger.debug(LogMessage.of(() -> "Change set: %s" + event.getChangeSet()));
Restarter.getInstance().restart(new FileWatchingFailureHandler(this.fileSystemWatcherFactory));
}
}

}

}
@@ -1,5 +1,5 @@
/*
* Copyright 2012-2021 the original author or authors.
* Copyright 2012-2022 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
Expand All @@ -18,6 +18,8 @@

import java.util.Set;

import org.springframework.boot.devtools.filewatch.ChangedFile;
import org.springframework.boot.devtools.filewatch.ChangedFile.Type;
import org.springframework.boot.devtools.filewatch.ChangedFiles;
import org.springframework.context.ApplicationEvent;
import org.springframework.core.style.ToStringCreator;
Expand Down Expand Up @@ -71,4 +73,37 @@ public String toString() {
.append("restartRequired", this.restartRequired).toString();
}

/**
* Return an overview of the changes that triggered this event.
* @return an overview of the changes
* @since 2.6.11
*/
public String overview() {
int added = 0;
int deleted = 0;
int modified = 0;
for (ChangedFiles changedFiles : this.changeSet) {
for (ChangedFile changedFile : changedFiles) {
Type type = changedFile.getType();
if (type == Type.ADD) {
added++;
}
else if (type == Type.DELETE) {
deleted++;
}
else if (type == Type.MODIFY) {
modified++;
}
}
}
int size = added + deleted + modified;
return String.format("%s (%s, %s, %s)", quantityOfUnit(size, "class path change"),
quantityOfUnit(added, "addition"), quantityOfUnit(deleted, "deletion"),
quantityOfUnit(modified, "modification"));
}

private String quantityOfUnit(int quantity, String unit) {
return quantity + " " + ((quantity != 1) ? unit + "s" : unit);
}

}
@@ -1,5 +1,5 @@
/*
* Copyright 2012-2020 the original author or authors.
* Copyright 2012-2022 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
Expand Down Expand Up @@ -91,14 +91,15 @@ public void onApplicationEvent(ClassPathChangedEvent event) {
try {
ClassLoaderFiles classLoaderFiles = getClassLoaderFiles(event);
byte[] bytes = serialize(classLoaderFiles);
performUpload(classLoaderFiles, bytes);
performUpload(classLoaderFiles, bytes, event);
}
catch (IOException ex) {
throw new IllegalStateException(ex);
}
}

private void performUpload(ClassLoaderFiles classLoaderFiles, byte[] bytes) throws IOException {
private void performUpload(ClassLoaderFiles classLoaderFiles, byte[] bytes, ClassPathChangedEvent event)
throws IOException {
try {
while (true) {
try {
Expand All @@ -107,11 +108,11 @@ private void performUpload(ClassLoaderFiles classLoaderFiles, byte[] bytes) thro
headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
headers.setContentLength(bytes.length);
FileCopyUtils.copy(bytes, request.getBody());
logUpload(event);
ClientHttpResponse response = request.execute();
HttpStatus statusCode = response.getStatusCode();
Assert.state(statusCode == HttpStatus.OK,
() -> "Unexpected " + statusCode + " response uploading class files");
logUpload(classLoaderFiles);
return;
}
catch (SocketException ex) {
Expand All @@ -128,9 +129,8 @@ private void performUpload(ClassLoaderFiles classLoaderFiles, byte[] bytes) thro
}
}

private void logUpload(ClassLoaderFiles classLoaderFiles) {
int size = classLoaderFiles.size();
logger.info(LogMessage.format("Uploaded %s class %s", size, (size != 1) ? "resources" : "resource"));
private void logUpload(ClassPathChangedEvent event) {
logger.info(LogMessage.format("Uploading %s", event.overview()));
}

private byte[] serialize(ClassLoaderFiles classLoaderFiles) throws IOException {
Expand Down

0 comments on commit 4f0dac7

Please sign in to comment.