Zeroc Ice 入門(六) slice配置

Ice使用一種配置機(jī)制,允許您在運(yùn)行時(shí)控制Ice應(yīng)用程序行為的許多方面人芽,例如最大消息大小望几、線程數(shù)或是否生成網(wǎng)絡(luò)跟蹤消息。配置機(jī)制不僅用于配置Ice萤厅,還用于配置自己的應(yīng)用程序橄抹。配置機(jī)制使用的API非常簡(jiǎn)單,但是可以靈活地處理大多數(shù)應(yīng)用程序的需求惕味。

Ice和它的各種子系統(tǒng)是由properties配置的楼誓。一個(gè)屬性(property)是一個(gè)鍵值對(duì),例如:

? ? ? Ice.UDP.SndSize=65535

配置Ice屬性的完整列表:

官方原文

中文翻譯

請(qǐng)注意名挥,Ice讀取的屬性控制了Ice run time和它的服務(wù)(也就是說疟羹,在啟動(dòng)時(shí),創(chuàng)建一個(gè)通信器時(shí)禀倔,只有第一次啟動(dòng)時(shí)才開始使用一個(gè)保留前綴的屬性值榄融,比如Ice、Glacier2救湖,等等)剃袍。這意味著在創(chuàng)建通信器之前,必須將與Ice相關(guān)的屬性設(shè)置為正確的值捎谨。如果在那之后改變與Ice相關(guān)的屬性值民效,那么新的設(shè)置很可能會(huì)被忽略憔维。

Ice 屬性推薦這樣命名:

sub-category是可選的,不是所有的屬性都必須畏邢。這也僅僅是推薦方案业扒,如果你使用Ice屬性來配置自己的應(yīng)用,可以使用任意層級(jí)的屬性名稱

Ice保留具有以下前綴的屬性

Ice

IceBox

IceGrid

IcePatch2

IceSSL

IceStorm

Freeze

Glacier2

你不能使用以這些前綴之一開頭的屬性來配置自己的應(yīng)用程序舒萎。

屬性名稱語法

屬性名稱由任意數(shù)量的字符組成程储。 例如,以下是有效的屬性名稱:

請(qǐng)注意臂寝,屬性名稱中的句號(hào)(.)沒有特殊意義章鲤。 (句號(hào)用于使屬性名稱更易于閱讀,不會(huì)被屬性解析器特別處理咆贬。

屬性名稱不能包含前導(dǎo)或尾隨的空格败徊。 (如果創(chuàng)建一個(gè)帶有前導(dǎo)或尾隨空格的屬性名稱,則該空白將被靜默地剝離掏缎。)

屬性值語法

屬性值也可以由任意數(shù)量的字符組成皱蹦。 例如,以下是有效的屬性值:

未使用的屬性

在銷毀通信器(communicator)時(shí)眷蜈,Ice run time可以選擇為已設(shè)置但從未讀取的屬性發(fā)出警告沪哺。 要啟用此警告,請(qǐng)將Ice.Warn.UnusedProperties設(shè)置為非零值酌儒。 此屬性可用于檢測(cè)錯(cuò)誤拼寫的屬性辜妓,例如Filesystem.MaxFilSize。 默認(rèn)情況下忌怎,警告禁用籍滴。

配置文件格式

一個(gè)配置文件包含任意數(shù)量的鍵值對(duì),每一對(duì)在一個(gè)單獨(dú)的行上呆躲。 完全由空白字符構(gòu)成的空行將被忽略刽漂。 #字符引入了一個(gè)擴(kuò)展到當(dāng)前行結(jié)尾的注釋该溯。 配置文件可以是ASCII文本文件,也可以在文件開頭使用UTF?8字符編碼與字節(jié)順序標(biāo)記(BOM)陶舞。 這是一個(gè)簡(jiǎn)單的配置文件:

屬性鍵和值中的空白會(huì)被保留翁巍,無論是用反斜杠轉(zhuǎn)義還是不轉(zhuǎn)義狡忙。對(duì)于屬性名稱祟绊,始終忽略前導(dǎo)和尾隨的空格(無論空格是否被轉(zhuǎn)義),例如:

對(duì)于屬性值璃弄,您可以通過使用反斜杠轉(zhuǎn)義空格來保留前導(dǎo)和尾隨空格要销,例如:

此示例顯示,除非用反斜杠轉(zhuǎn)義夏块,否則將忽略屬性值的前導(dǎo)和尾隨空格疏咐,而非空白字符包圍的白色空間將被精確保留纤掸,無論是否被轉(zhuǎn)義。 像往常一樣浑塞,您可以使用雙反斜杠將字面反斜杠插入屬性值借跪。

如果您多次設(shè)置相同的屬性,則以上一個(gè)設(shè)置為準(zhǔn)酌壕,并覆蓋任何以前的設(shè)置掏愁。 請(qǐng)注意,為屬性賦值不會(huì)清除該屬性(即將其設(shè)置為空字符串)卵牍。

Ice處理包含空字符串的屬性(如前面的示例中的Ice.Trace.Protocol)果港,就像一個(gè)沒有設(shè)置的屬性,我們建議您的基于Ice的應(yīng)用程序也是一樣的糊昙。 使用getProperty辛掠,getPropertyAsInt,getPropertyAsIntWithDefault溅蛉,getPropertyAsList和getPropertyAsListWithDefault公浪,您無法區(qū)分未設(shè)置的屬性和設(shè)置為空字符串的屬性; 然而他宛,getPropertyWithDefault允許您做出這一區(qū)分船侧,例如:

配置文件中的特殊字符

character =和#在配置文件中有特殊含義:

=標(biāo)記屬性名稱的結(jié)尾和屬性值的開頭

#開始一條延伸到行尾的注釋

這些字符在屬性名稱中顯示時(shí)必須進(jìn)行轉(zhuǎn)義。 請(qǐng)考慮以下示例:

在屬性值中厅各,必須轉(zhuǎn)義#字符以防止它發(fā)起注釋镜撩,但是=字符不需要轉(zhuǎn)義。

請(qǐng)注意队塘,屬性值中的兩個(gè)連續(xù)反斜杠變?yōu)閱蝹€(gè)反斜杠袁梗。 要獲得兩個(gè)連續(xù)的反斜杠,您必須使用另一個(gè)反斜線來轉(zhuǎn)義每個(gè)反斜杠:

除了在配置文件中設(shè)置屬性之外憔古,還可以在命令行中設(shè)置屬性遮怜,例如:

? ? ? ? ? $ ./server --Ice.UDP.SndSize=65535 --IceSSL.Trace.Security=2

任何命令行選項(xiàng)以 - 并且后面跟著一個(gè)保留的前綴進(jìn)行讀取,并在創(chuàng)建通訊器時(shí)轉(zhuǎn)換為屬性設(shè)置鸿市。 命令行上的屬性設(shè)置會(huì)覆蓋配置文件中的設(shè)置锯梁。 如果在相同的命令行上多次設(shè)置相同的屬性,則最后一個(gè)設(shè)置會(huì)覆蓋任何先前的設(shè)置焰情。

為方便起見陌凳,未明確設(shè)置為值的任何屬性都設(shè)置為值1.例如,

? ? ? ? ? ?$ ./server --Ice.Trace.Protocol

等價(jià)于

? ? ? ? ?$ ./server --Ice.Trace.Protocol=1

請(qǐng)注意内舟,此功能僅適用于在命令行上設(shè)置的屬性合敦,但不適用于從配置文件設(shè)置的屬性。

你還可以從命令行清除屬性验游,如下所示:

$ ./server --Ice.Trace.Protocol=

對(duì)于從配置文件設(shè)置的屬性充岛,對(duì)屬性不分配將清除該屬性保檐。

外部配置應(yīng)用程序的屬性的能力提供了很大的靈活性:你可以使用命令行選項(xiàng)和配置文件的任意組合來實(shí)現(xiàn)所需的設(shè)置,而無需修改應(yīng)用程序崔梗。

ICE_CONFIG環(huán)境變量?

Ice自動(dòng)加載ICE_CONFIG環(huán)境變量中指定的配置文件的內(nèi)容(假設(shè)滿足先決條件)展东。例如:?

? ? $ export ICE_CONFIG = / usr / local / filesystem / config $ ./server?

這將導(dǎo)致服務(wù)器從/ usr / local / filesystem / config中的配置文件讀取其屬性設(shè)置。 如果將ICE_CONFIG環(huán)境變量與其他屬性的命令行選項(xiàng)一起使用炒俱,則命令行上的設(shè)置會(huì)覆蓋配置文件中的設(shè)置盐肃。例如:

? ? $ export ICE_CONFIG = / usr / local / filesystem / config?

? ? $ ./server --Ice.MessageSizeMax = 4096?

這將Ice.MessageSizeMax屬性的值設(shè)置為4096,而不管/ usr / local / filesystem / config中是否具有此屬性的任何設(shè)置权悟。 您可以通過指定以逗號(hào)分隔的配置文件名稱列表來使用多個(gè)配置文件砸王。例如:?

? ? ? ?$ export ICE_CONFIG = / usr / local / filesystem / config,峦阁。/ config?

? ? ? ?$ ./server?

這會(huì)導(dǎo)致從/ usr / local / filesystem / config中檢索屬性設(shè)置谦铃,后跟當(dāng)前目錄中的文件config中的任何設(shè)置;設(shè)置在./config中覆蓋設(shè)置/ usr / local / filesystem / config。

Ice.Config屬性

Ice.Config屬性對(duì)Ice run time具有特殊的意義:它決定了從中讀取屬性設(shè)置的配置文件的路徑名榔昔。例如:

? ? ? ? ? ? ? ? $ ./server --Ice.Config = / usr / local / filesystem / config

這將導(dǎo)致從/ usr / local / filesystem / config中的配置文件讀取屬性設(shè)置驹闰。

--Ice.Config命令行選項(xiàng)將覆蓋ICE_CONFIG環(huán)境變量的任何設(shè)置,也就是說撒会,如果設(shè)置了ICE_CONFIG環(huán)境變量嘹朗,并且還使用了--Ice.Config命令行選項(xiàng),則由ICE_CONFIG環(huán)境變量被忽略诵肛。

如果將--Ice.Config命令行選項(xiàng)與其他屬性的設(shè)置一起使用屹培,則命令行上的設(shè)置會(huì)覆蓋配置文件中的設(shè)置。例如:

? ? ? ? ? ? ? ? $ ./server --Ice.Config = / usr / local / filesystem / config?

? ? ? ? ? ? ? ? ?--Ice.MessageSizeMax = 4096

這將Ice.MessageSizeMax屬性的值設(shè)置為4096怔檩,而不管/ usr / local / filesystem / config中是否具有此屬性的任何設(shè)置褪秀。在命令行上放置--Ice.Config選項(xiàng)對(duì)此優(yōu)先級(jí)沒有影響。例如薛训,以下命令與上述命令相同:

? ? ? ? ? ? ? $ ./server --Ice.MessageSizeMax = 4096?

? ? ? ? ? ? ? ?--Ice.Config = / usr / local / filesystem / config

配置文件中的Ice.Config屬性的設(shè)置將被忽略媒吗,也就是說,您只能在命令行中設(shè)置Ice.Config乙埃。

如果多次使用--Ice.Config選項(xiàng)闸英,則僅使用該選項(xiàng)的最后一個(gè)設(shè)置,并忽略前面的設(shè)置膊爪。例如:

? ? ? ? ? ? ? ?$ ./server --Ice.Config = file1?

? ? ? ? ? ? ? ?--Ice.Config = file2

這相當(dāng)于使用:

? ? ? ? ? ? ? ? $ ./server --Ice.Config = file2

您可以通過指定以逗號(hào)分隔的配置文件名稱列表來使用多個(gè)配置文件自阱。例如:

? ? ? ? ? ? ? $ ./server --Ice.Config = / usr / local / filesystem / config,米酬。/ config

這會(huì)導(dǎo)致從/ usr / local / filesystem / config中檢索屬性設(shè)置沛豌,后跟當(dāng)前目錄中的文件config中的任何設(shè)置;在./config中的設(shè)置覆蓋/ usr / local / filesystem / config。

Ice屬性機(jī)制不僅可用于配置Ice,還可以用于自己的應(yīng)用程序的配置機(jī)制。例如加派,我們可以引入一個(gè)屬性來控制文件系統(tǒng)應(yīng)用程序的最大文件大薪腥贰:

Ice run time存儲(chǔ)Filesystem.MaxFileSize屬性,就像任何其他屬性一樣芍锦,可以通過Properties界面訪問它竹勉。

要從程序中訪問屬性值,您需要通過調(diào)用getProperties獲取通信器的屬性:

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末娄琉,一起剝皮案震驚了整個(gè)濱河市次乓,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌孽水,老刑警劉巖票腰,帶你破解...
    沈念sama閱讀 212,454評(píng)論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異女气,居然都是意外死亡杏慰,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,553評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門炼鞠,熙熙樓的掌柜王于貴愁眉苦臉地迎上來缘滥,“玉大人,你說我怎么就攤上這事谒主〕螅” “怎么了?”我有些...
    開封第一講書人閱讀 157,921評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵瘩将,是天一觀的道長(zhǎng)吟税。 經(jīng)常有香客問我凹耙,道長(zhǎng)姿现,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,648評(píng)論 1 284
  • 正文 為了忘掉前任肖抱,我火速辦了婚禮备典,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘意述。我一直安慰自己提佣,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,770評(píng)論 6 386
  • 文/花漫 我一把揭開白布荤崇。 她就那樣靜靜地躺著拌屏,像睡著了一般。 火紅的嫁衣襯著肌膚如雪术荤。 梳的紋絲不亂的頭發(fā)上倚喂,一...
    開封第一講書人閱讀 49,950評(píng)論 1 291
  • 那天,我揣著相機(jī)與錄音瓣戚,去河邊找鬼端圈。 笑死焦读,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的舱权。 我是一名探鬼主播矗晃,決...
    沈念sama閱讀 39,090評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼宴倍!你這毒婦竟也來了张症?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,817評(píng)論 0 268
  • 序言:老撾萬榮一對(duì)情侶失蹤鸵贬,失蹤者是張志新(化名)和其女友劉穎吠冤,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體恭理,經(jīng)...
    沈念sama閱讀 44,275評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡拯辙,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,592評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了颜价。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片涯保。...
    茶點(diǎn)故事閱讀 38,724評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖周伦,靈堂內(nèi)的尸體忽然破棺而出夕春,到底是詐尸還是另有隱情,我是刑警寧澤专挪,帶...
    沈念sama閱讀 34,409評(píng)論 4 333
  • 正文 年R本政府宣布及志,位于F島的核電站,受9級(jí)特大地震影響寨腔,放射性物質(zhì)發(fā)生泄漏速侈。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,052評(píng)論 3 316
  • 文/蒙蒙 一迫卢、第九天 我趴在偏房一處隱蔽的房頂上張望倚搬。 院中可真熱鬧,春花似錦乾蛤、人聲如沸每界。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,815評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)眨层。三九已至,卻和暖如春上荡,著一層夾襖步出監(jiān)牢的瞬間趴樱,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,043評(píng)論 1 266
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留伊佃,地道東北人窜司。 一個(gè)月前我還...
    沈念sama閱讀 46,503評(píng)論 2 361
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像航揉,于是被迫代替她去往敵國(guó)和親塞祈。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,627評(píng)論 2 350

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