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