Apache Geodeは、起動時に設定ファイルとして「gemfire.properties」というファイルを読み込みます。
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で値を指定する方法もありますが、そちらについてはドキュメントを参照ということで。