Skip to content

Commit 7dfc809

Browse files
committed
VirtualThreadApiApplication
1 parent 4d85b78 commit 7dfc809

File tree

6 files changed

+75
-3
lines changed

6 files changed

+75
-3
lines changed

README.md

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,27 @@
88
- JVM 20
99
- Kotlin 1.9.0-Beta
1010
- Spring Boot 3.1.0
11+
- Apache Tomcat 10.1.8
1112

1213
참고
14+
1315
- https://youtrack.jetbrains.com/issue/KT-57669
14-
- Kotlin 1.9.0-Beta 부터 JVM 20 지원
16+
- Kotlin 1.9.0-Beta 부터 JVM 20 지원
17+
18+
## 관련 아티클
19+
20+
- https://spring.io/blog/2022/10/11/embracing-virtual-threads
1521

1622
## Trouble Shooting
1723

18-
#### ![img.png](README-image/img.png)
24+
### Kotlin JVM 버전 관련 컴파일러 에러
25+
26+
#### 문제
27+
28+
![img.png](README-image/img.png)
29+
30+
#### 해결
31+
1932
- project settings에서 Language Level 변경
20-
- ![img_1.png](README-image/img_1.png)
33+
- ![img_1.png](README-image/img_1.png)
34+
- IntelliJ 버그인지, 껐다 켜줘야 적용됨

settings.gradle.kts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11

22
rootProject.name = "java-concurrency-practice"
33
include("platform-thread-api")
4+
include("virtual-thread-api")
45
include("domain")
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
dependencies {
2+
implementation(project(":domain"))
3+
implementation("org.springframework.boot:spring-boot-starter-web")
4+
implementation(kotlin("stdlib-jdk8"))
5+
}
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
package info.log.virtualthreadapi
2+
3+
import org.apache.coyote.ProtocolHandler
4+
import org.springframework.boot.autoconfigure.SpringBootApplication
5+
import org.springframework.boot.autoconfigure.task.TaskExecutionAutoConfiguration
6+
import org.springframework.boot.runApplication
7+
import org.springframework.boot.web.embedded.tomcat.TomcatProtocolHandlerCustomizer
8+
import org.springframework.context.annotation.Bean
9+
import org.springframework.core.task.AsyncTaskExecutor
10+
import org.springframework.core.task.support.TaskExecutorAdapter
11+
import java.util.concurrent.Executors
12+
13+
14+
@SpringBootApplication
15+
class VirtualThreadApiApplication {
16+
@Bean(TaskExecutionAutoConfiguration.APPLICATION_TASK_EXECUTOR_BEAN_NAME)
17+
fun asyncTaskExecutor(): AsyncTaskExecutor {
18+
return TaskExecutorAdapter(Executors.newVirtualThreadPerTaskExecutor())
19+
}
20+
21+
@Bean
22+
fun protocolHandlerVirtualThreadExecutorCustomizer(): TomcatProtocolHandlerCustomizer<*> {
23+
return TomcatProtocolHandlerCustomizer { protocolHandler: ProtocolHandler ->
24+
protocolHandler.executor = Executors.newVirtualThreadPerTaskExecutor()
25+
}
26+
}
27+
}
28+
29+
fun main(args: Array<String>) {
30+
runApplication<VirtualThreadApiApplication>(*args)
31+
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package info.log.virtualthreadapi.web
2+
3+
import info.log.domain.Person
4+
import org.springframework.web.bind.annotation.GetMapping
5+
import org.springframework.web.bind.annotation.RestController
6+
7+
8+
@RestController
9+
class HelloController {
10+
11+
@GetMapping("/hello")
12+
fun hello(): List<Person> {
13+
return Person.createPeopleListRandomly()
14+
}
15+
}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
server:
2+
port: 10000
3+
tomcat:
4+
max-connections: 8192
5+
accept-count: 100
6+
connection-timeout: 20000

0 commit comments

Comments
 (0)