質問: eclipseについて質問があります。 外部フォルダにあるpropertiesファイルを 読み込みたいのですが、 eclipseのVM引数から Javaのビルドパス>ライブラリー>クラスパスの 外部フォルダーを設定する方法はありますか。 よろしくお願いいたします。 補足 Thymeleafを使ってhtmlに直接messages.propertiesの値をを読み込んでいるため、 外部ディレクトリをクラスパスに追加したいです。
回答: Eclipse(STS)から実行する際は "Javaのビルドパス>ライブラリー>クラスパスの外部フォルダー" によって外部の `messages.properties` を読めるようにしているが、 `java -jar ` コマンドで実行する場合にどう指定すれば良いか、という意図の質問ということでよいでしょうか。 メッセージソース(リソースバンドル)のロケーション指定は `spring.massages.basename`で行いますが、ここでは`file:`でファイルシステム上のファイル(のベースネーム)を指定することもできます(参考: How to externalize i18n properties files in spring-boot applications - Stack Overflow)。 またプロパティ設定はコマンドライン引数で指定できます(4.2.2. Accessing Command Line Properties)。 したがって、例えば `./external-resources/messages.properties` が読ませたいファイルだとすると、 ``` java -jar .jar --spring.messages.basename=file:external-resources/messages ``` で実現可能です。 実行サンプルコード, Thymeleafを使ったwarバージョン Tomcatにデプロイする場合、Tomcat側に指示する必要があります。設定方法はこちらに詳しいです: * Can I create a custom classpath on a per application basis in Tomcat - Stack Overflow * Apache Tomcat 9 Configuration Reference (9.0.34) - The Resources Component 前出したwarをTomcat9にデプロイし `/tmp/external-resources` ディレクトリ配下のメッセージリソースを読む場合を例にすると、 * `messages.properties` ファイルを `/tmp/external-resources/` ディレクトリ下に移動する * Tomcatの本体配下に `conf/Catalina/localhost/demo-0.0.1-SNAPSHOT.xml` ファイルを作成する。内容は次の通り: ``` ``` この設定で `/tmp/external-resources` ディレクトリがwarファイル内 `/WEB-INF/classes` に差し込まれますのでアプリケーションはメッセージリソースをクラスパス内で見つけることができるようになります。