-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
10 changed files
with
609 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,116 @@ | ||
# Read Me First | ||
The following was discovered as part of building this project: | ||
|
||
# Getting Started | ||
|
||
### Reference Documentation | ||
For further reference, please consider the following sections: | ||
|
||
* [Official Gradle documentation](https://docs.gradle.org) | ||
* [Spring Boot Gradle Plugin Reference Guide](https://docs.spring.io/spring-boot/3.4.0/gradle-plugin) | ||
* [Create an OCI image](https://docs.spring.io/spring-boot/3.4.0/gradle-plugin/packaging-oci-image.html) | ||
* [Coroutines section of the Spring Framework Documentation](https://docs.spring.io/spring-framework/reference/6.2.0/languages/kotlin/coroutines.html) | ||
* [GraalVM Native Image Support](https://docs.spring.io/spring-boot/3.4.0/reference/packaging/native-image/introducing-graalvm-native-images.html) | ||
* [Spring Boot Testcontainers support](https://docs.spring.io/spring-boot/3.4.0/reference/testing/testcontainers.html#testing.testcontainers) | ||
* [Testcontainers R2DBC support Reference Guide](https://java.testcontainers.org/modules/databases/r2dbc/) | ||
* [Testcontainers Kafka Modules Reference Guide](https://java.testcontainers.org/modules/kafka/) | ||
* [Spring Data R2DBC](https://docs.spring.io/spring-boot/3.4.0/reference/data/sql.html#data.sql.r2dbc) | ||
* [Spring Data Reactive Redis](https://docs.spring.io/spring-boot/3.4.0/reference/data/nosql.html#data.nosql.redis) | ||
* [Docker Compose Support](https://docs.spring.io/spring-boot/3.4.0/reference/features/dev-services.html#features.dev-services.docker-compose) | ||
* [Spring Reactive Web](https://docs.spring.io/spring-boot/3.4.0/reference/web/reactive.html) | ||
* [Testcontainers](https://java.testcontainers.org/) | ||
* [Spring Boot Actuator](https://docs.spring.io/spring-boot/3.4.0/reference/actuator/index.html) | ||
* [Spring Configuration Processor](https://docs.spring.io/spring-boot/3.4.0/specification/configuration-metadata/annotation-processor.html) | ||
* [Spring for Apache Kafka](https://docs.spring.io/spring-boot/3.4.0/reference/messaging/kafka.html) | ||
|
||
### Guides | ||
The following guides illustrate how to use some features concretely: | ||
|
||
* [Accessing data with R2DBC](https://spring.io/guides/gs/accessing-data-r2dbc/) | ||
* [Messaging with Redis](https://spring.io/guides/gs/messaging-redis/) | ||
* [Building a Reactive RESTful Web Service](https://spring.io/guides/gs/reactive-rest-service/) | ||
* [Building a RESTful Web Service with Spring Boot Actuator](https://spring.io/guides/gs/actuator-service/) | ||
|
||
### Additional Links | ||
These additional references should also help you: | ||
|
||
* [Gradle Build Scans – insights for your project's build](https://scans.gradle.com#gradle) | ||
* [Configure AOT settings in Build Plugin](https://docs.spring.io/spring-boot/3.4.0/how-to/aot.html) | ||
* [R2DBC Homepage](https://r2dbc.io) | ||
|
||
### Docker Compose support | ||
This project contains a Docker Compose file named `compose.yaml`. | ||
In this file, the following services have been defined: | ||
|
||
* redis: [`redis:latest`](https://hub.docker.com/_/redis) | ||
|
||
Please review the tags of the used images and set them to the same as you're running in production. | ||
|
||
## GraalVM Native Support | ||
|
||
This project has been configured to let you generate either a lightweight container or a native executable. | ||
It is also possible to run your tests in a native image. | ||
|
||
### Lightweight Container with Cloud Native Buildpacks | ||
If you're already familiar with Spring Boot container images support, this is the easiest way to get started. | ||
Docker should be installed and configured on your machine prior to creating the image. | ||
|
||
To create the image, run the following goal: | ||
|
||
``` | ||
$ ./gradlew bootBuildImage | ||
``` | ||
|
||
Then, you can run the app like any other container: | ||
|
||
``` | ||
$ docker run --rm netty-native:0.0.1-SNAPSHOT | ||
``` | ||
|
||
### Executable with Native Build Tools | ||
Use this option if you want to explore more options such as running your tests in a native image. | ||
The GraalVM `native-image` compiler should be installed and configured on your machine. | ||
|
||
NOTE: GraalVM 22.3+ is required. | ||
|
||
To create the executable, run the following goal: | ||
|
||
``` | ||
$ ./gradlew nativeCompile | ||
``` | ||
|
||
Then, you can run the app as follows: | ||
``` | ||
$ build/native/nativeCompile/netty-native | ||
``` | ||
|
||
You can also run your existing tests suite in a native image. | ||
This is an efficient way to validate the compatibility of your application. | ||
|
||
To run your existing tests in a native image, run the following goal: | ||
|
||
``` | ||
$ ./gradlew nativeTest | ||
``` | ||
|
||
### Gradle Toolchain support | ||
|
||
There are some limitations regarding Native Build Tools and Gradle toolchains. | ||
Native Build Tools disable toolchain support by default. | ||
Effectively, native image compilation is done with the JDK used to execute Gradle. | ||
You can read more about [toolchain support in the Native Build Tools here](https://graalvm.github.io/native-build-tools/latest/gradle-plugin.html#configuration-toolchains). | ||
|
||
## Missing R2DBC Driver | ||
|
||
Make sure to include a [R2DBC Driver](https://r2dbc.io/drivers/) to connect to your database. | ||
### Testcontainers support | ||
|
||
This project uses [Testcontainers at development time](https://docs.spring.io/spring-boot/3.4.0/reference/features/dev-services.html#features.dev-services.testcontainers). | ||
|
||
Testcontainers has been configured to use the following Docker images: | ||
|
||
* [`apache/kafka-native:latest`](https://hub.docker.com/r/apache/kafka-native) | ||
* [`redis:latest`](https://hub.docker.com/_/redis) | ||
|
||
Please review the tags of the used images and set them to the same as you're running in production. | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
# Netty Native | ||
See [Help.md](HELP.md) for framework hints | ||
|
||
## Run and use | ||
```shell | ||
./gradlew bootBuildImage | ||
docker-compose up -d | ||
http http://localhost:8080/hello | ||
``` |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,76 @@ | ||
plugins { | ||
kotlin("jvm") version "1.9.25" | ||
kotlin("plugin.spring") version "1.9.25" | ||
id("com.diffplug.spotless") version "6.19.0" | ||
id("org.springframework.boot") version "3.4.0" | ||
id("io.spring.dependency-management") version "1.1.6" | ||
id("org.graalvm.buildtools.native") version "0.10.3" | ||
} | ||
|
||
group = "graalvm" | ||
version = "0.0.1-SNAPSHOT" | ||
|
||
java { | ||
toolchain { | ||
languageVersion = JavaLanguageVersion.of(21) | ||
} | ||
} | ||
|
||
spotless { | ||
kotlin { | ||
target("src/**/*.kt") | ||
ktlint() | ||
} | ||
|
||
kotlinGradle { | ||
target("*.kts") | ||
ktlint() | ||
} | ||
} | ||
tasks.named("build") { | ||
finalizedBy("spotlessApply") | ||
} | ||
|
||
configurations { | ||
compileOnly { | ||
extendsFrom(configurations.annotationProcessor.get()) | ||
} | ||
} | ||
|
||
repositories { | ||
mavenCentral() | ||
} | ||
|
||
dependencies { | ||
implementation("org.springframework.boot:spring-boot-starter-actuator") | ||
implementation("org.springframework.boot:spring-boot-starter-data-r2dbc") | ||
implementation("org.springframework.boot:spring-boot-starter-data-redis-reactive") | ||
implementation("org.springframework.boot:spring-boot-starter-webflux") | ||
implementation("com.fasterxml.jackson.module:jackson-module-kotlin") | ||
implementation("io.projectreactor.kotlin:reactor-kotlin-extensions") | ||
implementation("org.jetbrains.kotlin:kotlin-reflect") | ||
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-reactor") | ||
implementation(platform("software.amazon.awssdk:bom:2.29.17")) | ||
implementation("software.amazon.awssdk:rds") | ||
implementation("org.mariadb:r2dbc-mariadb:1.3.0") | ||
runtimeOnly("com.h2database:h2") | ||
developmentOnly("org.springframework.boot:spring-boot-docker-compose") | ||
annotationProcessor("org.springframework.boot:spring-boot-configuration-processor") | ||
testImplementation("org.springframework.boot:spring-boot-starter-test") | ||
testImplementation("org.springframework.boot:spring-boot-testcontainers") | ||
testImplementation("io.projectreactor:reactor-test") | ||
testImplementation("org.jetbrains.kotlin:kotlin-test-junit5") | ||
testImplementation("org.testcontainers:junit-jupiter") | ||
testImplementation("org.testcontainers:r2dbc") | ||
testRuntimeOnly("org.junit.platform:junit-platform-launcher") | ||
} | ||
|
||
kotlin { | ||
compilerOptions { | ||
freeCompilerArgs.addAll("-Xjsr305=strict") | ||
} | ||
} | ||
|
||
tasks.withType<Test> { | ||
useJUnitPlatform() | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,26 @@ | ||
services: | ||
redis: | ||
image: 'redis:latest' | ||
ports: | ||
- 6379:6379 | ||
mariadb: | ||
image: 'mariadb:latest' | ||
ports: | ||
- 3306:3306 | ||
environment: | ||
MYSQL_ROOT_PASSWORD: admin | ||
MYSQL_DATABASE: admin | ||
netty-native: | ||
image: docker.io/library/netty-native:0.0.1-SNAPSHOT | ||
ports: | ||
- 8080:8080 | ||
healthcheck: | ||
test: ["CMD", "curl", "-f", "http://localhost:8080/actuator/health"] | ||
interval: 10s | ||
retries: 5 | ||
depends_on: | ||
- redis | ||
- mariadb | ||
environment: | ||
- SPRING_DATA_REDIS_HOST=redis | ||
- SPRING_R2DBC_URL=r2dbc:mariadb://mariadb |
Oops, something went wrong.