|
@@ -9,12 +9,15 @@ import io.micronaut.http.HttpResponse;
|
|
|
import io.micronaut.http.annotation.Controller;
|
|
|
import io.micronaut.http.annotation.Get;
|
|
|
import io.micronaut.http.annotation.QueryValue;
|
|
|
+import io.micronaut.scheduling.TaskExecutors;
|
|
|
+import jakarta.inject.Named;
|
|
|
import views.fortunes;
|
|
|
|
|
|
import java.util.ArrayList;
|
|
|
import java.util.Comparator;
|
|
|
import java.util.List;
|
|
|
import java.util.concurrent.CompletionStage;
|
|
|
+import java.util.concurrent.Executor;
|
|
|
|
|
|
import static java.util.Comparator.comparing;
|
|
|
|
|
@@ -24,11 +27,14 @@ public class AsyncBenchmarkController extends AbstractBenchmarkController {
|
|
|
|
|
|
private final AsyncWorldRepository worldRepository;
|
|
|
private final AsyncFortuneRepository fortuneRepository;
|
|
|
+ private final Executor executor;
|
|
|
|
|
|
public AsyncBenchmarkController(AsyncWorldRepository worldRepository,
|
|
|
- AsyncFortuneRepository fortuneRepository) {
|
|
|
+ AsyncFortuneRepository fortuneRepository,
|
|
|
+ @Named(TaskExecutors.BLOCKING) Executor executor) {
|
|
|
this.worldRepository = worldRepository;
|
|
|
this.fortuneRepository = fortuneRepository;
|
|
|
+ this.executor = executor;
|
|
|
}
|
|
|
|
|
|
@Get("/prepare-data-for-test")
|
|
@@ -39,7 +45,7 @@ public class AsyncBenchmarkController extends AbstractBenchmarkController {
|
|
|
// https://github.com/TechEmpower/FrameworkBenchmarks/wiki/Project-Information-Framework-Tests-Overview#single-database-query
|
|
|
@Get("/db")
|
|
|
public CompletionStage<World> db() {
|
|
|
- return worldRepository.findById(randomId());
|
|
|
+ return worldRepository.findById(randomId()).thenApplyAsync(world -> world, executor);
|
|
|
}
|
|
|
|
|
|
// https://github.com/TechEmpower/FrameworkBenchmarks/wiki/Project-Information-Framework-Tests-Overview#multiple-database-queries
|
|
@@ -50,20 +56,20 @@ public class AsyncBenchmarkController extends AbstractBenchmarkController {
|
|
|
for (int i = 0; i < count; i++) {
|
|
|
ids.add(randomId());
|
|
|
}
|
|
|
- return worldRepository.findByIds(ids);
|
|
|
+ return worldRepository.findByIds(ids).thenApplyAsync(worlds -> worlds, executor);
|
|
|
}
|
|
|
|
|
|
// https://github.com/TechEmpower/FrameworkBenchmarks/wiki/Project-Information-Framework-Tests-Overview#fortunes
|
|
|
@Get(value = "/fortunes", produces = "text/html;charset=utf-8")
|
|
|
public CompletionStage<HttpResponse<String>> fortune() {
|
|
|
- return fortuneRepository.findAll().thenApply(fortuneList -> {
|
|
|
+ return fortuneRepository.findAll().thenApplyAsync(fortuneList -> {
|
|
|
List<Fortune> all = new ArrayList<>(fortuneList.size() + 1);
|
|
|
all.add(new Fortune(0, "Additional fortune added at request time."));
|
|
|
all.addAll(fortuneList);
|
|
|
all.sort(comparing(Fortune::message));
|
|
|
String body = fortunes.template(all).render().toString();
|
|
|
return HttpResponse.ok(body).contentType("text/html;charset=utf-8");
|
|
|
- });
|
|
|
+ }, executor);
|
|
|
}
|
|
|
|
|
|
// https://github.com/TechEmpower/FrameworkBenchmarks/wiki/Project-Information-Framework-Tests-Overview#database-updates
|
|
@@ -74,7 +80,7 @@ public class AsyncBenchmarkController extends AbstractBenchmarkController {
|
|
|
world.setRandomNumber(randomWorldNumber());
|
|
|
}
|
|
|
worlds.sort(Comparator.comparingInt(World::getId)); // Avoid deadlock
|
|
|
- return worldRepository.updateAll(worlds).thenApply(ignore -> worlds);
|
|
|
+ return worldRepository.updateAll(worlds).thenApplyAsync(ignore -> worlds, executor);
|
|
|
});
|
|
|
}
|
|
|
|