幾周以來,我一直在努力建立一個新專案。所需的專案屬性:
目標:
- Springboot 2.7.3 Kotlin 和 Gradle
- Java 18 或 Kotlin SDK
- MySQL 最新
- Gradle 最新
- IDE Intellij 最新
- WSL、Web 服務器和資料庫服務器上的 Docker Compose(帶有作業通信鏈接)
- 熱多載和其他開發工具功能正常作業。
- 包管理所需的 NPM。
問題
- 我發現的問題之一是我有很多方法來啟動應用程式;npm start、gradle bootrun、docker-compose up app 等。我不知道何時使用每一個似乎都不能完全發揮良好的開發設定功能。
- mysql 連接問題一直存在,根據應用程式的啟動方式,似乎需要不同的配置。
- application.yml,我不確定在每個運行配置中何時使用它。
應用程式 非常簡單的 hello world REST API、簡單的 hello world DB 表、JPA、spring web、lombok。
應用程式.yml
development: true
server:
port: '8080'
servlet:
context-path: /api
spring:
datasource:
url: 'jdbc:mysql://localhost:3306/farnsworthy'
username: farnsworthy
password: password
jpa:
hibernate:
ddl-auto: update
database-platform: org.hibernate.dialect.MySQL8Dialect
sql:
init:
mode: always
Dockerfile
FROM openjdk:18-alpine
WORKDIR /app
LABEL maintainer="[email protected]"
VOLUME /main-app
ADD build/libs/farnsworthy-pics-backend-0.0.1-SNAPSHOT.jar /app/app.jar
ADD /src/main/resources/application.properties /app/application.properties
EXPOSE 8080 5005
ENTRYPOINT ["java", "-Dspring.config.location=/app/application-properties", "-jar","/app/app.jar"]
Docker-compose.yml
version: '3.8'
services:
api_service:
build: .
container_name: api_service
restart: always
ports:
- "8080:8080"
- "5005:5005"
depends_on:
- mysql_db
command: sh -c './wait-for mysql_db:3306 -- npm start'
mysql_db:
image: "mysql:8.0"
container_name: mysql_db
restart: always
ports:
- "3306:3306"
expose:
- "3306"
environment:
MYSQL_DATABASE: farnsworthy
MYSQL_USER: farnsworthy
MYSQL_PASSWORD: password
MYSQL_ROOT_PASSWORD: password
構建.gradle.kts
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
plugins {
id("org.springframework.boot") version "2.7.3"
id("io.spring.dependency-management") version "1.0.13.RELEASE"
id("idea")
kotlin("jvm") version "1.6.21"
kotlin("plugin.spring") version "1.6.21"
kotlin("plugin.jpa") version "1.6.21"
}
group = "com.farnsworthy.pics"
version = "0.0.1-SNAPSHOT"
java.sourceCompatibility = JavaVersion.VERSION_17
configurations {
compileOnly {
extendsFrom(configurations.annotationProcessor.get())
}
}
repositories {
mavenCentral()
}
dependencies {
implementation("org.springframework.boot:spring-boot-starter-data-jpa")
implementation("org.springframework.boot:spring-boot-starter-data-rest")
implementation("org.springframework.boot:spring-boot-starter-web")
implementation("com.fasterxml.jackson.module:jackson-module-kotlin")
implementation("org.jetbrains.kotlin:kotlin-reflect")
implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8")
//implementation("org.springframework.data:spring-data-rest-hal-explorer")
compileOnly("org.projectlombok:lombok")
implementation("org.springframework.boot:spring-boot-devtools")
runtimeOnly("mysql:mysql-connector-java")
annotationProcessor("org.projectlombok:lombok")
testImplementation("org.springframework.boot:spring-boot-starter-test")
}
tasks.withType<KotlinCompile> {
kotlinOptions {
freeCompilerArgs = listOf("-Xjsr305=strict")
jvmTarget = "18"
}
}
tasks.withType<Test> {
useJUnitPlatform()
}
uj5u.com熱心網友回復:
我很難理解您的專案結構,但我會做出假設:
在生產中,您有兩個程序:
- 一個也服務于前端的 Spring Boot 應用程式(npm 部分)
- 一個 MySQL 資料庫。
如果是這樣,那么我在 dev 中的做法是有三件單獨的事情:
- 只有 MySQL 在 docker 中運行。
- 后端將使用 Gradle 或來自 Kotlins 主函式??的 IntelliJ 和
Run/Debug. 它也可能服務于構建的 frondend,但這不是您將在開發環境中使用的。 - 前端將單獨啟動
npm start,您可以將其從 package.json 配置為代理到 dev 中的后端埠。
現在,如果您想為生產環境構建,您可能還想擴展您的 Gradle 腳本以呼叫npm build(查看:https ://github.com/srs/gradle-node-plugin/ )。如果一切都構建好了,它就是一個單獨的 JAR 檔案,可以打包到一個單獨的 docker 容器中,因為在實際生產中,您的應用程式將在一個行程中,除了資料庫。
試圖在 docker-single-build-works-with-IDE 中完成所有作業,恕我直言,因為您通常甚至不需要啟動整個堆疊來開發某些東西。
此外,在 dev 中單獨旋轉可以為您提供更多的靈活性。您可以運行后端/前端的任何隨機組合(例如,一個處于除錯模式,另一個帶有“watch”)。如果你通過 docker-compose 來做,那就更難了。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/509882.html
上一篇:任務:react-native-gradle-plugin:compileKotlinFAILED,“compileJava”任務(當前目標是1.8)和“compileKotlin”任務(當前目標是1
