CLOVER🍀

That was when it all began.

Apache Geodeで、gemfire.propertiesを違う名前で読み込む

Apache Geodeは、起動時に設定ファイルとして「gemfire.properties」というファイルを読み込みます。

http://geode.docs.pivotal.io/docs/basic_config/gemfire_properties/setting_distributed_properties.html

http://geode.docs.pivotal.io/docs/reference/topics/gemfire_properties.html

ファイルが存在していれば読み込みますし、存在していなければデフォルト値で動作します。

で、ファイル名自体は決まっているのですが、これをシステムプロパティ「gemfirePropertyFile」で設定することで変更することができます。

動作確認用として、このようなGroovyスクリプトを用意。
server.groovy

@Grab('com.thoughtworks.paranamer:paranamer:2.3')
@Grab('org.apache.geode:gemfire-core:1.0.0-incubating.M1')
@GrabExclude('com.thoughtworks.paranamer:paranamer')
import com.gemstone.gemfire.cache.CacheFactory

import java.time.LocalDateTime
import java.util.concurrent.TimeUnit

def cache = new CacheFactory().create()

println("[${LocalDateTime.now()}] Server Startup.")

while (true) {
  println("self = ${cache.distributedSystem.distributedMember.name}")
  cache.members.each { println("  member = ${it.name}") }
  println()
  TimeUnit.SECONDS.sleep(3L)
}

特に、設定ファイルを明示的に読み込んでいる箇所はありませんね。

3秒おきに、メンバーとしての自分自身の名前、それからクラスタになっていれば参加メンバーの名前を出力します。ちょっとした目的で作ったスクリプトなのですが、ちょっと流用ということで。

別に、今回クラスタを組むわけではありません。

で、gemfire.propertiesを用意。
gemfire.properties

name=my-server

起動してみます。

$ groovy server.groovy

gemfire.propertiesに指定したnameの値が出力されます。

[2016-04-16T18:52:15.546] Server Startup.
self = my-server

ここで、もうひとつ別の設定ファイルを用意します。
server-gemfire.properties

name=my-geode-server

このファイルを、システムプロパティ「gemfirePropertyFile」で指定して起動。

$ groovy -DgemfirePropertyFile=server-gemfire.properties server.groovy

出力されるnameが変わります。

[2016-04-16T18:54:40.941] Server Startup.
self = my-geode-server

さらに、デフォルトで読み込まれたりシステムプロパティの指定で読み込まれたgemfire.propertiesの内容は、「gemfire.」を付与したパラメーターで上書きすることができます。

$ groovy -DgemfirePropertyFile=server-gemfire.properties -Dgemfire.name=my-simple-geode-server server.groovy

ここでは、「gemfire.name」で指定。

[2016-04-16T19:01:54.111] Server Startup.
self = my-simple-geode-server

読み込んでいるのがデフォルトのgemfire.propertiesであっても、上書き可能です。

これ以外にもプログラム内でjava.util.Propertiesで値を指定する方法もありますが、そちらについてはドキュメントを参照ということで。

http://geode.docs.pivotal.io/docs/basic_config/gemfire_properties/setting_distributed_properties.html