成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Spring Boot 應(yīng)用 Docker 化 《Spring Boot 2.0極簡教程》(陳光劍)

Donne / 2745人閱讀

摘要:應(yīng)用化極簡教程陳光劍基于的企業(yè)級(jí)應(yīng)用開發(fā)最佳實(shí)踐前面的章節(jié)中,我們都是在環(huán)境中開發(fā)運(yùn)行測(cè)試應(yīng)用程序。關(guān)鍵字是分布式應(yīng)用微服務(wù)容器虛擬化。通常,在企業(yè)項(xiàng)目實(shí)踐中,會(huì)實(shí)現(xiàn)一套應(yīng)用部署發(fā)布的自動(dòng)化運(yùn)維平臺(tái)工具。

Spring Boot 應(yīng)用 Docker 化
《Spring Boot 2.0極簡教程》(陳光劍)
—— 基于 Gradle + Kotlin的企業(yè)級(jí)應(yīng)用開發(fā)最佳實(shí)踐

前面的章節(jié)中,我們都是在IDE環(huán)境中開發(fā)運(yùn)行測(cè)試 Spring Boot 應(yīng)用程序。在開發(fā)測(cè)試發(fā)布整個(gè)軟件生命周期的過程中,我們通常需要完成打包部署發(fā)布到日常、預(yù)發(fā)、線上機(jī)器運(yùn)行等運(yùn)維相關(guān)工作。
本章前半部分介紹 Spring Boot 應(yīng)用的打包和部署,后半部分重點(diǎn)介紹如何使用 Docker 來構(gòu)建部署運(yùn)行 Spring Boot 應(yīng)用。

1.1 準(zhǔn)備工作

首先,使用http://start.spring.io/ 創(chuàng)建一個(gè)打包方式為 war 的 Spring Boot Kotlin 應(yīng)用,采用 Gradle 構(gòu)建。點(diǎn)擊 Generate Project 等待創(chuàng)建完畢,下載 zip 包,導(dǎo)入 IDEA 中??梢钥吹剑啾扔陧?xiàng)目打成jar 包方式,打成 war 包的項(xiàng)目中多了一個(gè)用于初始化Servlet的ServletInitializer類。代碼如下

class ServletInitializer : SpringBootServletInitializer() {

    override fun configure(application: SpringApplicationBuilder) : SpringApplicationBuilder {
        return application.sources(DemoPackageAndDeployApplication::class.java)
    }

}

我們知道Spring Boot 默認(rèn)集成了內(nèi)嵌web容器(例如 Tomcat、Jetty 等),這個(gè)時(shí)候,Spring Boot 應(yīng)用支持“一鍵啟動(dòng)”,像一個(gè)普通Java程序一樣,從main函數(shù)入口開始啟動(dòng)?,F(xiàn)在,我們是將項(xiàng)目打包成war包,放到獨(dú)立的web容器中。
而如果我們這個(gè) war 包中沒有配置Spring MVC 的 DispatcherServlet 的 web.xml 文件或者初始化 Servlet的類,那么這個(gè) war 包就不會(huì)被 Tomcat識(shí)別啟動(dòng) 。這個(gè)時(shí)候,我們需要告訴 Tomcat 這個(gè) war 包的啟動(dòng)入口。而SpringBootServletInitializer就是來完成這件事情的。
通過重寫configure (SpringApplicationBuilder) 方法,使用SpringApplicationBuilder 來配置應(yīng)用程序的sources類。為了測(cè)試應(yīng)用運(yùn)行的效果,我們?cè)贒emoPackageAndDeployApplication.kt 中添加HelloWorld REST接口方便測(cè)試

@SpringBootApplication
open class DemoPackageAndDeployApplication

fun main(args: Array) {
    runApplication(*args)
}

@RestController
class HelloWorld {
    @GetMapping(value = ["", "/"])
    fun hello(): Map {
        val result = mutableMapOf()
        result["msg"] = "Hello,World"
        result["time"] = Date()
        return result
    }
}
1.2 項(xiàng)目打包成可執(zhí)行 jar

在 IDEA 的右邊的 Gradle 工具欄中列出了 Gradle 構(gòu)建項(xiàng)目的命令,如下圖

圖16-1 Gradle 構(gòu)建項(xiàng)目的命令
我們可以直接點(diǎn)擊 bootJar 把項(xiàng)目打成 jar 包。當(dāng)然,在運(yùn)維部署腳本中通常使用命令行: gradle bootJar 。執(zhí)行日志如下

17:44:21: Executing task "bootJar"...

:compileKotlin UP-TO-DATE
:compileJava NO-SOURCE
:processResources UP-TO-DATE
:classes UP-TO-DATE
:bootJar UP-TO-DATE

BUILD SUCCESSFUL in 1s
3 actionable tasks: 3 up-to-date
17:44:22: Task execution finished "bootJar".

執(zhí)行完畢,我們可以在項(xiàng)目的build/libs 目錄下看到打好的 jar 包,如下圖所示

圖16-2 項(xiàng)目的build/libs 目錄下打好的 jar 包
然后,我們就可以直接使用 java –jar 命令執(zhí)行該 jar 包了
$ java -jar build/libs/demo_package_and_deploy-0.0.1-SNAPSHOT.jar
此時(shí),我們?yōu)g覽器訪問 http://127.0.0.1:8080/ , 可以看到輸出

{
  "msg": "Hello,World",
  "time": "2018-02-09T09:38:31.933+0000"
}

不過,使用java –jar 命令行來啟動(dòng)系統(tǒng)的這種方式
java -jar build/libs/demo_package_and_deploy-0.0.1-SNAPSHOT.jar
只要控制臺(tái)關(guān)閉,服務(wù)就不能訪問了。我們可以使用nohup 與 & 命令讓進(jìn)程在后臺(tái)運(yùn)行:
nohup java -jar build/libs/demo_package_and_deploy-0.0.1-SNAPSHOT.jar &

1.3 定制配置文件啟動(dòng)應(yīng)用

我們也可以在啟動(dòng)的時(shí)候選擇讀取不同的配置文件。例如,在項(xiàng)目src/main/resources 目錄下面有不同環(huán)境下的配置文件。如下圖所示:

圖16-3 不同環(huán)境的屬性配置文件
其中,application-dev.properties中配置服務(wù)器端口號(hào)為9000:

server.port=9000

執(zhí)行 bootJar重新打jar 包,執(zhí)行下面的命令:

java -jar 
build/libs/demo_package_and_deploy-0.0.1-SNAPSHOT.jar       
--spring.profiles.active=dev

可以看到應(yīng)用成功啟動(dòng),并監(jiān)聽9000端口:

…
o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 9000 (http) with context path ""
2018-02-09 18:18:47.336  INFO 69156 --- [           main] .e.s.d.DemoPackageAndDeployApplicationKt : Started DemoPackageAndDeployApplicationKt in 6.493 seconds (JVM running for 7.589)
1.4 項(xiàng)目打包成 war 包

在上面創(chuàng)建的項(xiàng)目中,Gradle 構(gòu)建配置文件 build.gradle 內(nèi)容如下:

buildscript {
    …
}
…
apply plugin: "war"
…
configurations {
    providedRuntime
}
dependencies {
    …
    providedRuntime("org.springframework.boot:spring-boot-starter-tomcat")
}

其中,apply plugin: "war" 是使用 war 插件來完成項(xiàng)目的打包工作。
直接使用 gradle bootWar,即可把項(xiàng)目打成 war包。然后,就可以像普通J2EE項(xiàng)目一樣部署到web容器。同樣的,war 包的路徑默認(rèn)也是放在 build/libs 下面。
另外,如果下面這行代碼還在:

@SpringBootApplication
open class DemoPackageAndDeployApplication

fun main(args: Array) {
    runApplication(*args)
}

項(xiàng)目打成的war包,依然支持java –jar 運(yùn)行:

$ java -jar build/libs/demo_package_and_deploy-0.0.1-SNAPSHOT.war 

這個(gè) war 包很不錯(cuò),既可以直接扔到 Tomcat 容器中執(zhí)行,也可以直接命令行啟動(dòng)運(yùn)行。
提示:項(xiàng)目打 war包的示例項(xiàng)目源代碼:https://github.com/EasySpring...

1.5 Spring Boot應(yīng)用運(yùn)維

本節(jié)簡單介紹一些 Spring Boot 應(yīng)用的生產(chǎn)運(yùn)維的一些內(nèi)容。

1.5.1 查看JVM參數(shù)的值

使用命令:

ps -ef|grep java 

拿到對(duì)于Java程序的pid (第2列):

  501 69156 68678   0  6:18PM ttys002    0:21.59 /usr/bin/java -jar build/libs/demo_package_and_deploy-0.0.1-SNAPSHOT.jar --spring.profiles.active=dev

可以根據(jù)java自帶的jinfo命令:

jinfo -flags 69156

來查看jar 啟動(dòng)后使用的是什么gc、新生代、老年代,分批的內(nèi)存都是多少,示例如下:

$ jinfo -flags 69156
Attaching to process ID 69156, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 25.40-b25
Non-default VM flags: -XX:CICompilerCount=3 -XX:InitialHeapSize=134217728 -XX:MaxHeapSize=2147483648 -XX:MaxNewSize=715653120 -XX:MinHeapDeltaBytes=524288 -XX:NewSize=44564480 -XX:OldSize=89653248 -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:+UseFastUnorderedTimeStamps -XX:+UseParallelGC 

其中的參數(shù)簡單說明如表16-1所示。

表16-1 JVM參數(shù)
參數(shù)說明
-XX:CICompilerCount
最大的并行編譯數(shù)
-XX:InitialHeapSize 和 -XX:MaxHeapSize
指定JVM的初始堆內(nèi)存和最大堆內(nèi)存大小
-XX:MaxNewSize
JVM堆區(qū)域新生代內(nèi)存的最大可分配大小
-XX:+UseParallelGC
垃圾回收使用Parallel收集器
我們可以在 Java 命令行中配置我們需要的JVM參數(shù)指標(biāo)。

提示:更多關(guān)于 JVM 選項(xiàng)參數(shù)配置參考:http://www.oracle.com/technet... 。

1.5.2 應(yīng)用重啟

要想重啟應(yīng)用,要首先找到該應(yīng)用的 java進(jìn)程,然后kill掉 java 進(jìn)程。完成這個(gè)邏輯的shell 腳本如下:

kill -9 $(ps -ef|grep java|awk "{print $2}")

然后,再使用命令行重新啟動(dòng)應(yīng)用即可。

1.6 使用 Docker 構(gòu)建部署運(yùn)行Spring Boot應(yīng)用

本節(jié)介紹如何使用 Docker 來構(gòu)建部署 Spring Boot 應(yīng)用。

1.6.1 Docker 簡介

Docker 是一個(gè)Go語言開發(fā)的開源的輕量級(jí)應(yīng)用容器引擎,誕生與2013年。Docker的核心概念是:鏡像、容器、倉庫。關(guān)鍵字是: 分布式應(yīng)用(distributed applications), 微服務(wù)( microservices), 容器( containers ), 虛擬化(docker virtualization)。
Docker容器“輕量級(jí)”的含義主要是跟傳統(tǒng)的虛擬機(jī)方式的對(duì)比而言。如下圖所示:

圖16-4 Docker “輕量級(jí)”容器VS.傳統(tǒng)的虛擬機(jī)方式
傳統(tǒng)的虛擬機(jī)技術(shù)是在硬件層面實(shí)現(xiàn)虛擬化,需要額外的虛擬機(jī)管理軟件跟虛擬機(jī)操作系統(tǒng)這層。而 Docker 是在操作系統(tǒng)層面上的虛擬化,直接使用的是本地操作系統(tǒng)資源,因此更加輕量級(jí)。
Docker 的主要目標(biāo)是通過對(duì)應(yīng)用組件的封裝、分發(fā)、部署、運(yùn)行等生命周期的管理,做到“一次封裝,到處運(yùn)行”。
Docker 是實(shí)現(xiàn)微服務(wù)( microservices )應(yīng)用程序開發(fā)的理想選擇。開發(fā)、部署和回滾都將變成“一鍵操作”。傳統(tǒng)的在服務(wù)器上進(jìn)行各種軟件包的安裝、環(huán)境配置、應(yīng)用程序的打包部署、啟動(dòng)進(jìn)程等零散的運(yùn)維操作——被更高層次的“抽象”,放到了一個(gè)“集裝箱”中,我們只是“開箱即用”。Docker把交付運(yùn)行環(huán)境比作“海運(yùn)”:OS如同一個(gè)貨輪,每一個(gè)在OS上運(yùn)行的軟件都如同一個(gè)集裝箱,用戶可以通過標(biāo)準(zhǔn)化手段自由組裝運(yùn)行環(huán)境,同時(shí)集裝箱的內(nèi)容可以由用戶自定義,也可以由專業(yè)人員制造——這樣交付一個(gè)軟件,就是一系列標(biāo)準(zhǔn)化組件集的交付,如同樂高積木,用戶只需要選擇合適的積木組合,最后個(gè)標(biāo)準(zhǔn)化組件就是給用戶的應(yīng)用程序。這就是基于docker的PaaS()產(chǎn)品的原型。
一個(gè)完整的Docker有以下幾個(gè)部分組成:

? DockerClient客戶端
? Docker Daemon守護(hù)進(jìn)程
? Docker Image鏡像
? DockerContainer容器
? 在docker的網(wǎng)站上介紹了使用docker的典型場景:
? Automating the packaging and deployment of applications(應(yīng)用打包部署自動(dòng)化)
? Creation of lightweight, private PAAS environments(創(chuàng)建輕量、私有的PaaS環(huán)境)
? Automated testing and continuous integration/deployment(實(shí)現(xiàn)自動(dòng)化測(cè)試和持續(xù)的集成/部署)
? Deploying and scaling web apps, databases and backend services(部署與擴(kuò)展web app、數(shù)據(jù)庫和后端服務(wù))

由于Docker 基于LXC的輕量級(jí)虛擬化的特點(diǎn),相比 KVM 之類虛擬機(jī)而言,最明顯的特點(diǎn)就是啟動(dòng)快,資源占用小(輕量級(jí))——這正是構(gòu)建隔離的標(biāo)準(zhǔn)化的運(yùn)行環(huán)境,輕量級(jí)的PaaS,構(gòu)建自動(dòng)化測(cè)試和持續(xù)集成環(huán)境,以及一切可以橫向擴(kuò)展的應(yīng)用等場景的最佳選擇。
提示:更多關(guān)于 Docker 的介紹參考: https://docs.docker.com 。Dockers Github 項(xiàng)目空間是:https://github.com/docker

1.6.2 環(huán)境搭建

本小節(jié)介紹如何搭建 Docker 環(huán)境。
安裝 Docker
去 docker 官網(wǎng) https://docs.docker.com/install/ 下載對(duì)應(yīng)的操作系統(tǒng)上的安裝包。安裝完畢,打開Docker運(yùn)行,可以看到Mac 系統(tǒng)菜單欄上的顯示的 Docker 應(yīng)用信息如下

圖16-5 Mac 系統(tǒng)菜單欄上的 Docker 圖標(biāo)
想知道 docker 提供了哪些命令行操作嗎?執(zhí)行docker help即可看到一個(gè)詳細(xì)的命令說明。例如,在命令行查看 Docker 版本信息:

$ docker version
Client:
 Version: 17.12.0-ce
 API version: 1.35
 Go version:  go1.9.2
 Git commit:  c97c6d6
 Built: Wed Dec 27 20:03:51 2017
 OS/Arch: darwin/amd64

Server:
 Engine:
  Version:  17.12.0-ce
  API version:  1.35 (minimum version 1.12)
  Go version: go1.9.2
  Git commit: c97c6d6
  Built:  Wed Dec 27 20:12:29 2017
  OS/Arch:  linux/amd64
  Experimental: false

查看詳細(xì)的 docker 信息

$ docker info
Containers: 0
 Running: 0
 Paused: 0
 Stopped: 0
Images: 1
Server Version: 17.12.0-ce
…

從倉庫 pull Java 環(huán)境鏡像
使用sudo docker pull java命令從 Docker 官方倉庫獲取 Java 運(yùn)行環(huán)境鏡像:

$ sudo docker pull java
Password:
Using default tag: latest
latest: Pulling from library/java
...
bb9cdec9c7f3: Pull complete 
Digest: sha256:c1ff613e8ba25833d2e1940da0940c3824f03f802c449f3d1815a66b7f8c0e9d
Status: Downloaded newer image for java:latest

下載完畢之后,可以通過docker images命令查看鏡像列表:

$ docker images
REPOSITORY TAG     IMAGE ID            CREATED         SIZE
Java       latest  d23bdf5b1b1b        12 months ago   643MB

可以看到,本地鏡像中已經(jīng)有了 java 運(yùn)行環(huán)境。

1.7 Spring Boot 項(xiàng)目 Docker化實(shí)戰(zhàn)

本節(jié)介紹如何把上面的 Spring Boot 項(xiàng)目 Docker 容器化。過程主要分為如下3步:
1)添加 docker構(gòu)建插件。
2)配置Dockerfile文件創(chuàng)建自定義的鏡像。
3)構(gòu)建Docker鏡像。
下面我們就來分別詳細(xì)介紹。

1.7.1 添加 docker 構(gòu)建插件

在 Gradle 項(xiàng)目構(gòu)建配置文件build.gradle 中添加com.palantir.docker插件:

buildscript {
    ext {
        kotlinVersion = "1.2.20"
        springBootVersion = "2.0.0.RC1"
    }
    repositories {
        // gradle-docker plugin repo
        maven { url "https://plugins.gradle.org/m2/" }
        ...
    }
    dependencies {
        ...
        classpath("gradle.plugin.com.palantir.gradle.docker:gradle-docker:0.17.2")
    }
}


apply plugin: "com.palantir.docker"

...

docker {
    name "${project.group}/${jar.baseName}"
    files jar.archivePath
    buildArgs(["JAR_FILE": "${jar.archiveName}"])
}

其中,buildArgs(["JAR_FILE": "${jar.archiveName}"]) 中配置的"JAR_FILE": "${jar.archiveName}" 是我們的 Spring Boot 項(xiàng)目打成 jar包的名稱,會(huì)傳遞到Dockerfile文件中使用(下一步驟中將會(huì)看到)。
提示:關(guān)于Docker 插件com.palantir.docker的介紹參考文檔: https://github.com/palantir/g...

這個(gè)插件發(fā)布在https://plugins.gradle.org/m2...,所以我們添加 maven 倉庫的依賴

    repositories {
        // gradle-docker plugin repo
        maven { url "https://plugins.gradle.org/m2/" }
        ...
    }

gradle-docker提供的版本有:
https://plugins.gradle.org/m2...

1.7.2 配置 Dockerfile 文件創(chuàng)建自定義的鏡像

Dockerfile文件放置在項(xiàng)目根目錄:

圖16-6 Dockerfile文件放置在項(xiàng)目根目錄
Dockerfile文件內(nèi)容如下:

FROM java:latest
VOLUME /tmp
ARG JAR_FILE
ADD ${JAR_FILE} app.jar
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]

配置構(gòu)建參數(shù)JAR_FILE,這里的JAR_FILE是在 build.gradle 中buildArgs中配置的

docker {
    name "${project.group}/${jar.baseName}"
    files jar.archivePath
    buildArgs(["JAR_FILE": "${jar.archiveName}"])
} 
ADD ${JAR_FILE} app.jar

將文件${JAR_FILE}拷貝到docker container的文件系統(tǒng)對(duì)應(yīng)的路徑app.jar

ENTRYPOINT ["java",
"-Djava.security.egd=
file:/dev/./urandom",
"-jar",
"/app.jar"]

Docker container啟動(dòng)時(shí)執(zhí)行的命令。注意:一個(gè)Dockerfile中只能有一條ENTRYPOINT命令。如果多條,則只執(zhí)行最后一條。

-Djava.security.egd=file:/dev/./urandom

配置 JRE 使用非阻塞的 Entropy Source。SecureRandom generateSeed 使用 /dev/random 生成種子。但是 /dev/random 是一個(gè)阻塞數(shù)字生成器,如果它沒有足夠的隨機(jī)數(shù)據(jù)提供,它就一直等,這迫使 JVM 等待。通過在 JVM 啟動(dòng)參數(shù)中配置這么一行:-Djava.security.egd=file:/dev/./urandom 解決這個(gè)阻塞問題。

Dockerfile是一個(gè)文本格式的配置文件,我們可以使用Dockerfile文件快速創(chuàng)建自定義的鏡像。Dockerfile支持的豐富的運(yùn)維指令。這些指令分為4部分:

? 基礎(chǔ)鏡像信息
? 維護(hù)者信息
? 鏡像操作指令
? 容器啟動(dòng)時(shí)的執(zhí)行指令
...

1.7.5 啟動(dòng) Docker 應(yīng)用鏡像運(yùn)行

直接在命令行執(zhí)行:

$ docker run -p 8080:9000 -t com.easy.springboot/demo_package_and_deploy

即可啟動(dòng)我們構(gòu)建發(fā)布在 Docker 鏡像倉庫中的Spring Boot 應(yīng)用鏡像了。

1.7.6 端口映射

我們的 Spring Boot 應(yīng)用鏡像運(yùn)行在 Docker容器沙箱環(huán)境中,端口號(hào)是9000,作為外部Host OS環(huán)境要訪問這個(gè)服務(wù), 需要添加TCP端口映射:把本機(jī)8080端口映射到 Docker 容器端口9000,如下圖所示:

圖16-7 把本機(jī)8080端口映射到 Docker 容器端口9000
其中:
? -p 是將容器的端口9000映射到 docker 所在操作系統(tǒng)的端口8080;
? -t 是打開一個(gè)偽終端,以便后續(xù)可以進(jìn)入查看控制臺(tái) log。
使用 docker ps 命令查看運(yùn)行中的容器:

$ docker ps
CONTAINER ID        IMAGE                                         COMMAND                  CREATED             STATUS              PORTS                    NAMES
36fbfaf05359        com.easy.springboot/demo_package_and_deploy   "java -Djava.securit…"   25 minutes ago      Up 25 minutes       0.0.0.0:8080->9000/tcp   infallible_kare

……
然后,執(zhí)行 push 命令即可:

$ docker push com.easy.springboot/demo_package_and_deploy

提示:本節(jié)項(xiàng)目源代碼:https://github.com/EasySpring...

1.8 本章小結(jié)

本章簡單介紹了Spring Boot項(xiàng)目的打包、分環(huán)境運(yùn)行、生產(chǎn)運(yùn)維等操作。通常,在企業(yè)項(xiàng)目實(shí)踐中,會(huì)實(shí)現(xiàn)一套 Spring Boot應(yīng)用部署發(fā)布的自動(dòng)化運(yùn)維平臺(tái)工具。本章還給出了一個(gè)完整的 Spring Boot項(xiàng)目 Docker 化的實(shí)戰(zhàn)案例。
經(jīng)過前面的學(xué)習(xí),相信您已經(jīng)對(duì)如何使用基于 Kotlin 編程語言的 Spring Boot項(xiàng)目開發(fā)有了一個(gè)比較好的掌握。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/27280.html

相關(guān)文章

  • Spring Boot 應(yīng)用 Docker Spring Boot 2.0極簡教程》(陳光)

    摘要:應(yīng)用化極簡教程陳光劍基于的企業(yè)級(jí)應(yīng)用開發(fā)最佳實(shí)踐前面的章節(jié)中,我們都是在環(huán)境中開發(fā)運(yùn)行測(cè)試應(yīng)用程序。關(guān)鍵字是分布式應(yīng)用微服務(wù)容器虛擬化。通常,在企業(yè)項(xiàng)目實(shí)踐中,會(huì)實(shí)現(xiàn)一套應(yīng)用部署發(fā)布的自動(dòng)化運(yùn)維平臺(tái)工具。 Spring Boot 應(yīng)用 Docker 化 《Spring Boot 2.0極簡教程》(陳光劍)—— 基于 Gradle + Kotlin的企業(yè)級(jí)應(yīng)用開發(fā)最佳實(shí)踐 前面的章節(jié)中,...

    rose 評(píng)論0 收藏0
  • 初探Kotlin+SpringBoot聯(lián)合編程

    摘要:是一門最近比較流行的靜態(tài)類型編程語言,而且和一樣同屬系。這個(gè)生成的構(gòu)造函數(shù)是合成的,因此不能從或中直接調(diào)用,但可以使用反射調(diào)用。 showImg(https://segmentfault.com/img/remote/1460000012958496); Kotlin是一門最近比較流行的靜態(tài)類型編程語言,而且和Groovy、Scala一樣同屬Java系。Kotlin具有的很多靜態(tài)語言...

    xiaokai 評(píng)論0 收藏0
  • Spring Boot Admin 2.0開箱體驗(yàn)

    摘要:概述在我之前的應(yīng)用監(jiān)控實(shí)戰(zhàn)一文中,講述了如何利用版本來可視化地監(jiān)控應(yīng)用。接下來我們就來創(chuàng)建一個(gè)待監(jiān)控的示例。 showImg(https://segmentfault.com/img/remote/1460000015671446); 概述 在我之前的 《Spring Boot應(yīng)用監(jiān)控實(shí)戰(zhàn)》 一文中,講述了如何利用 Spring Boot Admin 1.5.X 版本來可視化地監(jiān)控 ...

    CastlePeaK 評(píng)論0 收藏0
  • Spring筆記1——極簡入門教程

    摘要:創(chuàng)建工程將框架代碼包解壓后放到工作目錄。方便起見,本教程使用為例。添加創(chuàng)建一個(gè),負(fù)責(zé)響應(yīng)相關(guān)的業(yè)務(wù)請(qǐng)求。添加標(biāo)注在中,對(duì)輸入?yún)?shù)進(jìn)行校驗(yàn)通常使用標(biāo)注。在本教程,我們將實(shí)現(xiàn)的增和查的工作。創(chuàng)建用戶用戶名重啟并提交創(chuàng)建請(qǐng)求。 環(huán)境準(zhǔn)備 系統(tǒng):MacOS 開發(fā):IntelliJ IDEA 語言:Java8 其它:Mysql、Redis 腳手架代碼 Spring提供了一個(gè)創(chuàng)建項(xiàng)目腳手架的官...

    ChristmasBoy 評(píng)論0 收藏0
  • 寫這么多系列博客,怪不得找不到女朋友

    摘要:前提好幾周沒更新博客了,對(duì)不斷支持我博客的童鞋們說聲抱歉了。熟悉我的人都知道我寫博客的時(shí)間比較早,而且堅(jiān)持的時(shí)間也比較久,一直到現(xiàn)在也是一直保持著更新狀態(tài)。 showImg(https://segmentfault.com/img/remote/1460000014076586?w=1920&h=1080); 前提 好幾周沒更新博客了,對(duì)不斷支持我博客的童鞋們說聲:抱歉了!。自己這段時(shí)...

    JerryWangSAP 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<