Kotlinマイクロサービスパターン

新しいサービスの作成には、ビルドスクリプト、依存関係、テスト、Docker、k8s記述子などの多くのルーチン構成が必要であることは開発者にとって秘密ではありません。この作業を行っているため、現在のIDEテンプレートでは不十分です。カットの下で、コード、例、および最終結果を伴うすべてのクロスプラットフォームの「うまくいく」ボタンを自動化しようと試みました。





ワンクリックでサービスを作成し、その後Digital Oceanで自動展開する可能性がある場合は、この記事が役に立ちます。



テンプレートの作成を開始し、まずアセンブリ組織について考えてみましょう。シンプルさと宣言性で多くの人がMavenを愛しているにもかかわらず、gradleを使用します。これは、gradleがより現代的であり、プロジェクトと同じ言語でビルドスクリプトを記述できるためです。Kotlinプラグイン自体に加えて、もう1つ必要です。





plugins {
  kotlin("jvm") version "1.4.30"

  //     jvm
  id("org.beryx.runtime") version "1.12.1"
}
      
      



依存関係のうち、「ネイティブ」のKotlinKtorフレームワークがサーバーフレームワークとして選択されましたテストでは、一連のJUnit + Hamkrestがその表現力豊かなDSLとともに使用されます。これにより、次のようにテストを記述できます。





assertThat("xyzzy", startsWith("x") and endsWith("y") and !containsSubstring("a"))
      
      



Java 15+に焦点を当てて、すべてをまとめます





dependencies {
  implementation("com.github.ajalt.clikt:clikt:3.1.0")
  implementation("io.ktor:ktor-server-netty:1.5.1")
  testImplementation("org.junit.jupiter:junit-jupiter:5.8.0-M1")
  testImplementation("com.natpryce:hamkrest:1.8.0.1")
  testImplementation("io.mockk:mockk:1.10.6")
}

application {
  mainClass.set("AppKt")
}

tasks {
  test {
    useJUnitPlatform()
  }
  compileKotlin {
    kotlinOptions.jvmTarget = "15"
  }
}
      
      



entry-point , , ( Hamkrest).





, Kotlin codestyle - .editorsconfig:





[*.{kt, kts, java, xml, html, js}]
max_line_length = 120
indent_size = 2
continuation_indent_size = 2
      
      



, , , , , .







gradle clean test runtime
      
      



( build/image) , build/image/bin



Dockerfile, . :





# syntax = docker/dockerfile:experimental
FROM gradle:jdk15 as builder
WORKDIR /app
COPY src ./src
COPY build.gradle.kts ./build.gradle.kts
RUN --mount=type=cache,target=./.gradle gradle clean test install

FROM openjdk:15 as backend
WORKDIR /root
COPY --from=builder /app/build/install/app ./
      
      



jdk ( jvm) c jstack/jmap jdk.



Docker Compose:





version: "3.9"

services:
  backend:
    build: .
    command: bin/app
    ports:
      - "80:80"
      
      



, jdk/gradle,





docker-compose up
      
      



? Digital Ocean - . , Apps Platform ... ! Docker , , , , , . 5$ :





master , , .





最後に、この記事で説明されていることはすべて、テンプレートのREADME.mdファイルに詳細に記載されているため、プロジェクトの作成後、その後のビルドと展開で問題が発生することはありません。



テンプレートを使用して、"Use this template"



GitHubのボタンクリックするだけで既製のリポジトリを取得できます:

github.com/demidko/Projekt-portable



または、ポータブルjvmなしで自己実行可能なjarオプションが必要な場合:

github.com/demidko / Projekt-jar



その後は、ロジックを書き込むだけです:)他のアプローチと同様に、このテンプレートには欠陥がないわけではないので、提案、コメント、批判を聞くのは興味深いことです。








All Articles