SpringBoot的配置項

2019獨角獸企業重金招聘Python工程師標準>>> hot3.png

spring?Boot 其默認是集成web容器的,啟動方式由像普通Java程序一樣,main函數入口啟動。其內置Tomcat容器或Jetty容器,具體由配置來決定(默認Tomcat)。當然你也可以將項目打包成war包,放到獨立的web容器中(Tomcat、weblogic等等),當然在此之前你要對程序入口做簡單調整。

項目構建我們使用Maven或Gradle,這將使項目依賴、jar包管理、以及打包部署變的非常方便。

一、內嵌 Server 配置

Spring Boot將容器內置后,它通過配置文件的方式類修改相關server配置。?
先看一下下面的圖,為關于server的配置列項:?
配置?
配置

其中常用的配置只有少數幾個,已經用紫色標記起來。紅框圈起來的部分,看名稱分類就可以明白其作用。?
對server的幾個常用的配置做個簡單說明:

# 項目contextPath,一般在正式發布版本中,我們不配置
server.context-path=/myspringboot
# 錯誤頁,指定發生錯誤時,跳轉的URL。請查看BasicErrorController源碼便知
server.error.path=/error
# 服務端口
server.port=9090
# session最大超時時間(分鐘),默認為30
server.session-timeout=60
# 該服務綁定IP地址,啟動服務器時如本機不是該IP地址則拋出異常啟動失敗,只有特殊需求的情況下才配置
# server.address=192.168.16.11

Tomcat?
Tomcat為Spring Boot的默認容器,下面是幾個常用配置:

# tomcat最大線程數,默認為200
server.tomcat.max-threads=800
# tomcat的URI編碼
server.tomcat.uri-encoding=UTF-8
# 存放Tomcat的日志、Dump等文件的臨時文件夾,默認為系統的tmp文件夾(如:C:\Users\Shanhy\AppData\Local\Temp)
server.tomcat.basedir=H:/springboot-tomcat-tmp
# 打開Tomcat的Access日志,并可以設置日志格式的方法:
#server.tomcat.access-log-enabled=true
#server.tomcat.access-log-pattern=
# accesslog目錄,默認在basedir/logs
#server.tomcat.accesslog.directory=
# 日志文件目錄
logging.path=H:/springboot-tomcat-tmp
# 日志文件名稱,默認為spring.log
logging.file=myapp.log
  • ?

Jetty?
如果你要選擇Jetty,也非常簡單,就是把pom中的tomcat依賴排除,并加入Jetty容器的依賴,如下:

<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><exclusions><exclusion><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-tomcat</artifactId></exclusion></exclusions></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-jetty</artifactId></dependency>
<dependencies> 
  • ?

打包?
打包方法:?
CMD進入項目目錄,使用 mvn clean package 命令打包,以我的項目工程為例:

E:\spring-boot-sample>mvn clean package
  • ?

可以追加參數 -Dmaven.test.skip=true 跳過測試。?
打包后的文件存放于項目下的target目錄中,如:spring-boot-sample-0.0.1-SNAPSHOT.jar?
如果pom配置的是war包,則為spring-boot-sample-0.0.1-SNAPSHOT.war

二、部署到JavaEE容器

  1. 修改啟動類,繼承 SpringBootServletInitializer 并重寫 configure 方法
public class SpringBootSampleApplication extends SpringBootServletInitializer{private static final Logger logger = LoggerFactory.getLogger(SpringBootSampleApplication.class);@Overrideprotected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {return builder.sources(this.getClass());}}
  • ?
  1. 修改pom文件中jar 為 war
<!-- <packaging>jar</packaging> -->
<packaging>war</packaging>
  • ?
  1. 修改pom,排除tomcat插件
        <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><exclusions><exclusion><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-tomcat</artifactId></exclusion></exclusions></dependency>
  1. 打包部署到容器?
    使用命令 mvn clean package 打包后,同一般J2EE項目一樣部署到web容器。

三、使用Profile區分環境

spring boot 可以在 “配置文件”、“Java代碼類”、“日志配置” 中來配置profile區分不同環境執行不同的結果

1、配置文件?
使用配置文件application.yml 和 application.properties 有所區別?
以application.properties 為例,通過文件名來區分環境 application-{profile}.properties?
application.properties

app.name=MyApp
server.port=8080
spring.profiles.active=dev
  • ?

application-dev.properties

server.port=8081
  • ?

application-stg.properties

server.port=8082
  • ?

在啟動程序的時候通過添加 –spring.profiles.active={profile} 來指定具體使用的配置?
例如我們執行 java -jar demo.jar –spring.profiles.active=dev 那么上面3個文件中的內容將被如何應用??
Spring Boot 會先加載默認的配置文件,然后使用具體指定的profile中的配置去覆蓋默認配置。

app.name 只存在于默認配置文件 application.properties 中,因為指定環境中不存在同樣的配置,所以該值不會被覆蓋?
server.port 默認為8080,但是我們指定了環境后,將會被覆蓋。如果指定stg環境,server.port 則為 8082?
spring.profiles.active 默認指定dev環境,如果我們在運行時指定 –spring.profiles.active=stg 那么將應用stg環境,最終 server.port 的值為8082

2、Java類中@Profile注解?
下面2個不同的類實現了同一個接口,@Profile注解指定了具體環境

// 接口定義
public interface SendMessage {// 發送短信方法定義public void send();}// Dev 環境實現類
@Component
@Profile("dev")
public class DevSendMessage implements SendMessage {@Overridepublic void send() {System.out.println(">>>>>>>>Dev Send()<<<<<<<<");}}// Stg環境實現類
@Component
@Profile("stg")
public class StgSendMessage implements SendMessage {@Overridepublic void send() {System.out.println(">>>>>>>>Stg Send()<<<<<<<<");}}// 啟動類
@SpringBootApplication
public class ProfiledemoApplication {@Value("${app.name}")private String name;@Autowiredprivate SendMessage sendMessage;@PostConstructpublic void init(){sendMessage.send();// 會根據profile指定的環境實例化對應的類}}
  • ?

3、logback-spring.xml也支持有節點來支持區分

<?xml version="1.0" encoding="UTF-8"?>
<configuration><include resource="org/springframework/boot/logging/logback/base.xml" /><logger name="org.springframework.web" level="INFO"/><springProfile name="default"><logger name="org.springboot.sample" level="TRACE" /></springProfile><springProfile name="dev"><logger name="org.springboot.sample" level="DEBUG" /></springProfile><springProfile name="staging"><logger name="org.springboot.sample" level="INFO" /></springProfile></configuration>
  • ?

再說一遍文件名不要用logback.xml 請使用logback-spring.xml

四、指定外部的配置文件

有些系統,關于一些數據庫或其他第三方賬戶等信息,由于安全問題,其配置并不會提前配置在項目中暴露給開發人員。?
對于這種情況,我們在運行程序的時候,可以通過參數指定一個外部配置文件。?
以 demo.jar 為例,方法如下:

java -jar demo.jar --spring.config.location=/opt/config/application.properties
  • ?

其中文件名隨便定義,無固定要求。

五、創建一個Linux 應用的sh腳本

下面幾個腳本僅供參考,請根據自己需要做調整?
start.sh

#!/bin/shrm -f tpidnohup java -jar myapp.jar --spring.config.location=application.yml > /dev/null 2>&1 &echo $! > tpidecho Start Success!
  • ?

stop.sh

#!/bin/sh
APP_NAME=myapptpid=`ps -ef|grep $APP_NAME|grep -v grep|grep -v kill|awk '{print $2}'`
if [ ${tpid} ]; thenecho 'Stop Process...'kill -15 $tpid
fi
sleep 5
tpid=`ps -ef|grep $APP_NAME|grep -v grep|grep -v kill|awk '{print $2}'`
if [ ${tpid} ]; thenecho 'Kill Process!'kill -9 $tpid
elseecho 'Stop Success!'
fi
  • ?

check.sh

#!/bin/sh
APP_NAME=myapptpid=`ps -ef|grep $APP_NAME|grep -v grep|grep -v kill|awk '{print $2}'`
if [ ${tpid} ]; thenecho 'App is running.'
elseecho 'App is NOT running.'
fi
  • ?

kill.sh

#!/bin/sh
APP_NAME=myapptpid=`ps -ef|grep $APP_NAME|grep -v grep|grep -v kill|awk '{print $2}'`
if [ ${tpid} ]; thenecho 'Kill Process!'kill -9 $tpid
fi
  • ?

六、使用Linux服務的方式啟動、停止、重啟

1、首先在 pom.xml 中配置插件

    <build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><configuration><executable>true</executable></configuration></plugin></plugins></build>
  • ?

特別注意一下?<executable>true</executable>

2、然后正常使用?mvn clean package -Dmaven.test.skip=true?將工程打成jar包

3、上傳jar包到服務器,假設部署路徑為?/var/apps/myapp.jar?,使用命令做一個軟連接到?/etc/init.d?目錄,命令:

ln -s /var/apps/myapp.jar /etc/init.d/myapp
  • 1
  • 1

其中?/etc/init.d/myapp?最后的 myapp 可以是別的名字,這個就是服務名,我們后面使用?service [服務名] start?來啟動(下面有說明)。

4、給jar文件授予可執行權限,命令:

chmod +x myapp.jar
  • ?

5、接下來,就可以使用我們熟悉的?service myapp start|stop|restart|status?來對應用進行啟停了。?
執行命令后將得到形如 Started|Stopped [PID] 的結果反饋。?
默認PID文件路徑:/var/run/appname/appname.pid?
默認服務日志文件路徑:/var/log/appname.log(可以通過下面.conf 的方式修改LOG_FOLDER

6、使用自定義的.conf文件來變更默認配置,方法如下:?
在jar包相同路徑下創建一個.conf文件,名稱應該與.jar的名稱相同,如myapp.conf(如果我們打包的文jar文件為 myapp-1.0.0.jar 那么這里的conf文件也應該是 myapp-1.0.0.conf),其內容配置可以如下:

JAVA_HOME=/usr/local/jdk
JAVA_OPTS=-Xmx1024M
LOG_FOLDER=/data/logs/myapp
  • ?

注:LOG_FOLDER 對應的文件夾目錄要必須存在,如果目錄不存在,服務并不會自從創建目錄。

(結束)

轉載于:https://my.oschina.net/qiangzigege/blog/904253

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/258715.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/258715.shtml
英文地址,請注明出處:http://en.pswp.cn/news/258715.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

北大OJ百練——4075:矩陣旋轉(C語言)

百練的這道題很簡單&#xff0c;通過率也達到了86%&#xff0c;所以我也就來貼個代碼了。。。下面是題目&#xff1a; 不過還是說一下我的思路&#xff1a; 這道題對一個新來說&#xff0c;可能是會和矩陣的轉置相混淆&#xff0c;這題并不是要我們去求矩陣的轉置。 這題&#…

編譯py-faster-rcnn全過程

編譯py-faster-rcnn&#xff0c;花費了好幾天&#xff0c;中間遇到好多問題&#xff0c;今天終于成功編譯。下面詳述我的整個編譯過程。 【注記&#xff1a;】其實下面的依賴庫可以安裝在統一的一個本地目錄下&#xff0c;相關安裝指南&#xff0c;可以參考《深度學習&#xf…

翻譯python語言命令_有道詞典命令行快速翻譯,Python編程的利器

本文的文字及圖片來源于網絡,僅供學習、交流使用,不具有任何商業用途,版權歸原作者所有,如有問題請及時聯系我們以作處理。以下文章來源于Python實用寶典&#xff0c;作者Python實用寶典在編程時經常會遇到需要將中文詞匯翻譯成英文的情況。比如變量名的定義、取一個合適的函數…

不是世界不好,而是你見得太少

轉載于:https://www.cnblogs.com/yymn/p/4590333.html

MonoBehaviour.FixedUpdate 固定更新

function FixedUpdate () : void Description描述 This function is called every fixed framerate frame, if the MonoBehaviour is enabled. 當MonoBehaviour啟用時&#xff0c;其 FixedUpdate 在每一幀被調用。 FixedUpdate should be used instead of Update when dealing …

用Heartbeat實現web服務器高可用

用Heartbeat實現web服務器高可用heartbeat概述: Heartbeat 項目是 Linux-HA 工程的一個組成部分&#xff0c;它實現了一個高可用集群系統。心跳服務和集群通信是高可用集群的兩個關鍵組件&#xff0c;在 Heartbeat 項目里&#xff0c;由 heartbeat 模塊實現了這兩個功能。端口號…

scp創建遠程目錄_在Linux系統中使用Vim讀寫遠程文件

大家好&#xff0c;我是良許。 今天我們討論一個 Vim 使用技巧——用 Vim 讀寫遠程文件。要實現這個目的&#xff0c;我們需要使用到一個叫 netrw.vim 的插件。從 Vim 7.x 開始&#xff0c;netrw.vim 就被設置為默認安裝的標準插件了。這個插件允許用戶通過 ftp、rcp、scp、htt…

softmax logistic loss詳解

softmax函數–softmax layer softmax用于多分類過程中&#xff0c;它將多個神經元的輸出&#xff0c;映射到&#xff08;0,1&#xff09;區間內&#xff0c;可以看成概率來理解&#xff0c;從而來進行多分類&#xff01; 假設我們有一個數組z(z1,z2,...zm),則其softmax函數定…

poj3254 Corn Fields

Description Farmer John has purchased a lush new rectangular pasture composed of M by N (1 ≤ M ≤ 12; 1 ≤ N ≤ 12) square parcels. He wants to grow some yummy corn for the cows on a number of squares. Regrettably, some of the squares are infertile and ca…

Android獲取程序路徑 (/data/data/appname)

Android獲取文件夾路徑 /data/data/ http://www.2cto.com/kf/201301/186614.html String printTxtPath getApplicationContext().getPackageResourcePath() "/files/" fileName;> /data/app/com.example.fileoperation-2.apk/files/printMenu.txt String print…

javascript做極簡時鐘特效,再簡單沒思路你也做不出來

點擊查看時鐘特效極簡主義&#xff0c;程序員javascript打造極簡時鐘特效對于javascript特效的學習&#xff0c;重要的是邏輯思路&#xff0c;所以這個時鐘特效不是很華麗&#xff0c;但是功能都展現出來了&#xff0c;而學習javascript并不是單純的扣代碼&#xff0c;很多人都…

ubuntu中怎么打開python_如何在Linux Ubuntu 16.04下安裝及打開PyCharm

下載安裝 PyCharm下載好的文件的名稱可能是 ‘pycharm-community-2017.2.3.tar.gz’首先打開終端&#xff0c;然后通過下面的命令進入下載文件所在的文件夾&#xff1a;cd ~/Downloads或者如果文件夾是中文cd ~/下載然后&#xff0c;通過運行下面的命令找到你下載的文件的名字&…

圖像極坐標變換及在OCR中的應用

極坐標變換定義 我們知道在二維坐標系中&#xff0c;有直角坐標系&#xff0c;也有極坐標系&#xff0c;二者的轉換關系是&#xff1a; 如下圖&#xff1a; 如圖&#xff0c;直角坐標系的圓心與極坐標系的圓心一一對應&#xff0c;且圓弧BA可以通過極坐標變換到極坐標系ρr的…

Light OJ 1406 Assassin`s Creed 減少國家DP+支撐點甚至通縮+最小路徑覆蓋

標題來源&#xff1a;Light OJ 1406 Assassins Creed 意甲冠軍&#xff1a;向圖 派出最少的人經過全部的城市 而且每一個人不能走別人走過的地方 思路&#xff1a;最少的的人能夠走全然圖 明顯是最小路徑覆蓋問題 這里可能有環 所以要縮點 可是看例子又發現 一個強連通分量可能…

bootstrap-表單控件——單選按鈕水平排列

1.運行效果如圖所示2.實現代碼如下<!DOCTYPE html> <html> <head><meta charset"utf-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><title>表單控件——單選按鈕水平排列</title><!-- 最…

python中memoryerror_解決python報錯MemoryError

{"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],"search_count":[{"count_phone":4,"count":4}]},"card":[{"des":"阿里技術人對外發布原創技術內容的最大平臺&…

MongoDB使用小結:一些常用操作分享

MongoDB使用小結&#xff1a;一些常用操作分享 本文整理了一年多以來我常用的MongoDB操作&#xff0c;涉及mongo-shell、pymongo&#xff0c;既有運維層面也有應用層面&#xff0c;內容有淺有深&#xff0c;這也就是我從零到熟練的歷程。 MongoDB的使用之前也分享過一篇&#x…

【論文閱讀】Illuminating Pedestrians via Simultaneous Detection Segmentation

論文來源 ICCV2017arXiv reportgithub代碼(caffe-matlab) 本文的主要問題是行人檢測。作者探討了如何將語義分割應用在行人檢測上&#xff0c;提高檢測率&#xff0c;同時也不損壞檢測效率。作者提出了一種語義融合網絡&#xff08;segmentation infusion networks&#xff0…

跨域獲取json電商數據

url:http://www.darlingbank.com/cutpage/index.php/promote/edit/getfun/json/源碼&#xff1a; <ul class"cf" dataurl"http://www.paipai.com/sinclude/xml/tjw/tjw2014/tjw4/tjw179255804475.js" commlen"4" commsta"1" commtp…

Python ORM框架之 Peewee入門

之前在學Django時&#xff0c;發現它的模型層非常好用&#xff0c;把對數據庫的操作映射成對類、對象的操作&#xff0c;避免了我們直接寫在Web項目中SQL語句&#xff0c;當時想&#xff0c;如果這個模型層可以獨立出來使用就好了&#xff0c;那我們平臺操作數據庫也可以這么玩…