S-JIS[2024-02-17/2024-03-05] 変更履歴

GlassFish7 プロパティー

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に書かれている。

glassfish7/glassfish/domains/domain1/config/domain.xml:

<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もクラスパスに含まれるので、そこに置かれたファイルも読むことが出来る。


glassfish7/glassfish/domains/domain1/lib/classes/example1.properties

file-p1=valueF1

ClassLoaderを使って読む方法

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;
    }

ResourceBundleを使って読む方法

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は英語とか日本語とかによってメッセージファイルを変えたいときに使うものなので、ただ単にプロパティーファイルを読むのに使うのは不適切かも。


GlassFish7へ戻る / GlassFishへ戻る / 技術メモへ戻る
メールの送信先:ひしだま