GlassFish7のプロパティーについて。
|
アプリケーションの外でプロパティーを設定して、アプリケーションから読み出す方法はいくつかある。
ドメイン毎にシステムプロパティーを設定できる。
「name=value」形式で、コロン「:」で区切って複数を同時に指定可能。
プロパティーを設定する > asadmin create-system-properties name1=value1:name2=value2:… ドメインの管理コンソールを指定してプロパティーを設定する > asadmin --host localhost --port 4848 create-system-properties name1=value1:name2=value2:…
プロパティーにコロン「:」を含めたい場合は「\」でエスケープする。[2024-03-05]
「\」自身を指定したい場合は「\\」とする。
設定されているプロパティーを表示する > asadmin list-system-properties
プロパティーを削除する > asadmin delete-system-property name1
設定されたシステムプロパティーは、domain.xmlのserverに書かれている。
<domain application-root="${com.sun.aas.instanceRoot}/applications" version="7.0.12" log-root="${com.sun.aas.instanceRoot}/logs">
〜
<servers>
<server config-ref="server-config" name="server">
<system-property name="name1" value="value1"></system-property>
<system-property name="name2" value="value2"></system-property>
〜
</server>
</servers>
〜
</domain>
管理コンソールだと、左側のツリーの「server (Admin Server)」を選択し、右側の「Properties」タブで確認・変更できる。
設定されたシステムプロパティーは、ウェブアプリケーションから取得できる。
@Path("/resource1")
public class Resource1 {
@GET
@Produces(MediaType.TEXT_PLAIN)
public String hello() {
String name1 = System.getProperty("name1");
return "name1=" + name1;
}
}
Javaではクラスパスに含まれるファイルを読み込むことが出来る。
GlassFish7だと、warファイル内のクラスやjarファイル以外に、glassfish7/glassfish/domains/domain1/lib/classesもクラスパスに含まれるので、そこに置かれたファイルも読むことが出来る。
file-p1=valueF1
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.nio.charset.StandardCharsets; import java.util.Properties;
@GET
@Produces(MediaType.TEXT_PLAIN)
public String hello() throws IOException {
var properties = new Properties();
try (var is = getClass().getClassLoader().getResourceAsStream("example1.properties")) {
// ファイルが見つからない場合はisがnullになる
if (is != null) {
try (var reader = new BufferedReader(new InputStreamReader(is, StandardCharsets.UTF_8))) {
properties.load(reader);
}
}
}
String value = properties.getProperty("file-p1");
return value;
}
import java.util.ResourceBundle;
@GET
@Produces(MediaType.TEXT_PLAIN)
public String hello() {
// ファイルが見つからない場合はMissingResourceExceptionがスローされる
ResourceBundle bundle = ResourceBundle.getBundle("example1"); // プロパティーファイルのファイル名部分
String value = bundle.getString("file-p1");
return value;
}
ResourceBundleは英語とか日本語とかによってメッセージファイルを変えたいときに使うものなので、ただ単にプロパティーファイルを読むのに使うのは不適切かも。