微服務(wù)時代抗俄,每個項目有多個微服務(wù)組成炉抒,每個微服務(wù)又會有多個配置環(huán)境奢讨,本地開發(fā)環(huán)境,測試環(huán)境焰薄,線上環(huán)境等等拿诸。每次啟動要指定配置文件啟動。
這里說一下啟動項目或Jar包時指定配置文件塞茅。
1. 在ide中
我習(xí)慣用的是Eclipse亩码,多個環(huán)境配置文件是這樣的
1.1 指定配置環(huán)境
如果沒有用到像nacos這樣的配置中心,那我們直接指定配置環(huán)境就行(指定配置文件也可以)野瘦,如下圖
注意:
Profile
那里只需要填環(huán)境名稱描沟,不是配置文件名稱,如圖就會去加載application-ali
這個配置文件鞭光。同時注意:如果指定了配置環(huán)境吏廉,那配置文件中不能含有
spring.profiles.active
、spring.profiles.include
配置惰许,否則報錯席覆。要想使用這個,可以使用下面的指定配置文件的方法啡省,或者添加
bootstrap.yml
文件娜睛,在bootstrap.yml
中配置nacos地址,使用spring.profiles.active
等
1.2 指定配置文件
如果用到了微服務(wù)的配置中心卦睹,這樣配置很可能啟動不起來的畦戒,需要在配置環(huán)境的Arguments
標(biāo)簽頁中配置,如圖:
配置內(nèi)容:
-Dfile.encoding=utf-8
-Dspring.config.location=classpath:/application-test.yml
其中结序,第一條是配置編碼為utf-8
的障斋,這樣讀取配置文件不會出錯亂碼;
第二條是指定配置文件位置徐鹤,classpath
是指定在src/main/resource
目錄下的
2. Jar包啟動
在服務(wù)器上垃环,我通常用的,Jar包啟動命令時這樣的
1. 指定配置環(huán)境
nohup java -jar -Dfile.encoding=utf-8 -Dspring.profiles.active=dev test.jar >/tmp/null 2>&1 &
這樣啟動時會去加載Jar包中Resource
目錄下application-dev.yml
文件返敬。需要注意的同在IDE中一樣遂庄。
2. 指定配置文件
nohup java -jar -Dfile.encoding=utf-8 -Dspring.config.location=classpath:/application-dev.yml test.jar >/dev/null 2>&1 &
若配置文件在Jar包外面,-Dspring.config.location=
后面不用classpath
劲赠,直接使用配置文件的相對或絕對路徑就行:-Dspring.config.location=app-dev.yml
涛目。
3. 命令分析
啟動命令中,有幾部分解釋一下:
nohup
>/dev/null
2>&1
&
3.1 nohup
和&
凛澎。
這2個都是要后臺啟動的命令霹肝,在xshell等ssh工具中,
若命令中只有nohup
這一個:
- 使用
Ctrl + C
快捷鍵塑煎,程序會關(guān)閉 - 關(guān)閉
session
即斷開xshell連接沫换,程序不會關(guān)閉
若命令中只有&
這一個:
- 使用
Ctrl + C
快捷鍵,程序不會關(guān)閉 - 關(guān)閉
session
即斷開xshell連接最铁,程序會關(guān)閉
所以讯赏,經(jīng)常nohup
和&
配合使用來啟動程序nohup ./test &
3.2 >/dev/null
這個是設(shè)置輸出文件的。也可以是>>/dev/null
- 其中
>
或者>>
表示輸出重定向的意思炭晒。>
會覆蓋目標(biāo)的原有內(nèi)容待逞,當(dāng)文件存在時,會先清空网严,然后把內(nèi)容寫入該文件识樱,否則直接創(chuàng)建文件。>>
是將輸出內(nèi)容追加到目標(biāo)文件中震束。如果文件不存在怜庸,就創(chuàng)建文件,如果文件存在垢村,則將新的內(nèi)容追加到那個文件的末尾割疾,該文件中的原有內(nèi)容不受影響。 - 這里使用
/dev/null
是因為在項目xml文件中配置了日志嘉栓,所以不想使用linux中輸出的日志宏榕,就指向了null文件拓诸,這樣就不會生成linux帶的日志了,只用我們在配置中指定的那個麻昼。若想要這個日志奠支,指定位置和文件名就行:>/logs/nohup-test.out
。 - 需要注意抚芦,文件不存在時倍谜,使用
>
和>>
是一樣的,會新建文件叉抡。
3.3 2>&1
首先要知道尔崔,bash中0,1褥民,2三個數(shù)字分別代表STDIN_FILENO
季春、STDOUT_FILENO
、STDERR_FILENO
消返,即標(biāo)準(zhǔn)輸入(一般是鍵盤)鹤盒,標(biāo)準(zhǔn)輸出(一般是顯示屏,準(zhǔn)確的說是用戶終端控制臺)侦副,標(biāo)準(zhǔn)錯誤(出錯信息輸出)侦锯。
-
2>&1
也就表示將錯誤重定向到標(biāo)準(zhǔn)輸出上,即在日志中能看到錯誤信息秦驯。&
表示整個過程在后臺進(jìn)行尺碰。
4. shell腳本停止命令
這是從阿里的nacos停止腳本拷出來的,直接用
#!/bin/bash
pid=`ps ax | grep -i 'test-server.jar' | grep java | grep -v grep | awk '{print $1}'`
if [ -z "$pid" ] ; then
echo "No Test-Server running."
exit -1;
fi
echo "The Test-Server(${pid}) is running..."
kill ${pid}
echo "Send shutdown request to Test-Server(${pid}) OK"
總結(jié)
- 指定配置環(huán)境有各種限制和條件译隘,所以建議直接使用指定配置文件的方式
- 弄明白shell腳本中各個命令的意思亲桥,可以靈活配置日志文件和后臺啟動以及指定配置文件