將 kotlin web 項目部署至服務(wù)器

在本地實現(xiàn)了一個簡單的 CURD 應(yīng)用后(Spring + Kotlin 實現(xiàn)最簡 CURD 應(yīng)用),就可以將其部署在服務(wù)器上供遠(yuǎn)程訪問了,所以首先要有一臺服務(wù)器。

如何部署

部署方式有很多種,比如本地打好jar包,上傳到服務(wù)器使用tomcat容器運行?

不過我準(zhǔn)備使用github實現(xiàn)代碼傳輸,首先將本地項目上傳至github,再在服務(wù)器拉取代碼,之所以這樣是因為感覺簡單些。而且后面代碼有更新,也可以在服務(wù)器拉取更新后重新打包部署。

服務(wù)器端環(huán)境配置

  • java 環(huán)境
  • docker
  • git

安裝教程網(wǎng)上可以搜索。

打包配置

在將代碼上傳至github前,先配置好如何打包,修改build.gradle文件,增加如下內(nèi)容即可:

apply plugin: 'application'
jar {
    manifest {
        attributes 'Main-Class': 'com.example.koltinDemo.KoltinDemoApplicationKt'
    }
}

重點在于com.example.koltinDemo.KoltinDemoApplicationKt必須和文件結(jié)構(gòu)匹配,文件名也不能錯誤(就是這里發(fā)現(xiàn)之前的博客將 kotlin 寫成 koltin),以及入口文件的后綴這里也寫上了。

數(shù)據(jù)丟失問題

之前在開發(fā)過程中,重啟服務(wù)后,表數(shù)據(jù)都會丟失,每次都要新插入數(shù)據(jù),這是因為在resource/application.properties中的spring.jpa.hibernate.ddl-auto字段為create-drop,將其修改為update即可。

部署

OK,修改好之后,將代碼上傳至github,再在服務(wù)器端clone,然后就可以打包了,在打包前,最好將服務(wù)器運行起來,可以使用之前的docker命令:

docker run --name store_db -d -e MYSQL_ROOT_PASSWORD=123 -e MYSQL_DATABASE=store -p 3306:3306 mysql:latest

與之對應(yīng)的application.properties配置需要是這樣的:

spring.datasource.driverClassName=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/store?autoReconnect=true&useSSL=false
spring.datasource.username=root
spring.datasource.password=123
# Hibernate ddl auto (create, create-drop, update)
spring.jpa.hibernate.ddl-auto = update

然后是打包命令,確保在項目根目錄下執(zhí)行:

./gradlew build

順利的話,就會在當(dāng)前目錄生成build/src/bookstore-kotlin-0.0.1-SNAPSHOT.jar這個文件了,這就是我們最終使用的jar包了。

使用命令

java -jar build/src/bookstore-kotlin-0.0.1-SNAPSHOT.jar

即可啟動服務(wù),正常來說就和我們之前本地運行一樣,沒有報錯且顯示

Tomcat initialized with port(s): 8080 (http)

現(xiàn)在就可以使用Ip訪問我們的應(yīng)用了!

但是關(guān)閉命令行的話,服務(wù)器也被關(guān)閉了,所以要讓服務(wù)常駐,使用:

nohup java -jar build/libs/bookstore-kotlin-0.0.1-SNAPSHOT.jar &

回車后再次回車,即可回到正常的命令行,此時服務(wù)會在后臺啟動,而我們可以繼續(xù)做其他事,即使退出也不會關(guān)閉服務(wù)器。

如果打包過程出現(xiàn)問題,可以使用:

./gradlew clean build
./gradlew bootRepackage

遇到的問題

Can't execute jar- file: “no main manifest attribute”

因為build.gradlejarMain-Class配置錯誤,檢查下。或者沒有apply plugin: 'application'這一項。

如果服務(wù)成功啟動,但無法通過地址訪問,可能檢查下安全組是否開放了8080端口。

總結(jié)

之所以寫了這兩篇筆記,是因為在計劃實現(xiàn)一個小應(yīng)用,自己的生詞本。

英語對于程序員來說很重要啊,但是自己的英語卻一直不好(從上面 kotlin 都會拼錯就能發(fā)現(xiàn)了),在閱讀英文文檔的時候經(jīng)常要翻譯,但生詞總是這次翻譯了下次再遇到還是要翻譯。。。

于是萌生出了這個想法,使用命令行fanyi工具,當(dāng)我查詢某個單詞,會同時將結(jié)果發(fā)送到服務(wù)器保存。這樣我就能復(fù)習(xí)這些對我來說屬于生詞的單詞了,所以之后的計劃是先使用Kotlin實現(xiàn)一個安卓客戶端,只要簡單的顯示我保存在數(shù)據(jù)庫中的記錄即可。

當(dāng)然考慮交互的話,會實現(xiàn)卡片式,左劃表示單詞已經(jīng)熟悉,不再出現(xiàn)(或者根據(jù)記憶曲線設(shè)定一個時間點再次出現(xiàn)),右劃顯示下一個生詞這樣。

作為程序員,有趣的地方就是有創(chuàng)造力,尤其是能夠使用自己開發(fā)的應(yīng)用的時候。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容