Web アプリにメール送信機能を追加しています。SMTP サーバーの設定はjava.util.Properties
ファイルから読み込まれます。このファイルへのパスをハードコーディングしたくありません。
このファイルはどこに保管すればよいですか?
このファイルにアクセスするにはどうすればよいですか?
Web アプリにメール送信機能を追加しています。SMTP サーバーの設定はjava.util.Properties
ファイルから読み込まれます。このファイルへのパスをハードコーディングしたくありません。
このファイルはどこに保管すればよいですか?
このファイルにアクセスするにはどうすればよいですか?
WEB-INF/classes/
従うべき良いパターンは、ディレクトリの下に静的リソース (プロパティ ファイルなど) を保持することです。
classpath
そうすれば、ブラウザからアクセスせずにから読み取ることができます。
たとえば、設定ファイルを の下に置きWEB-INF/classes/mail-settings.properties
、次を使用して読み取ります。
InputStream is = MyClass.class.getResourceAsStream("mail-settings.properties");
Properties p = new Properties();
p.load(is);
is.close();
ここに解決策があります:
EmailSettings.properties
ファイルをに配置しましWebContent\WEB-INF\classes
た。このコードは動作するようになりました:
InputStream inputFile = this.getClass().getClassLoader().getResourceAsStream("EmailSettings.properties");
Properties emailConfig = new Properties();
emailConfig.load( inputFile );
.
.
.
コードと一緒に保持したい場合は、Properties インスタンスをプログラムで作成することもできます。
Properties mailProperties = new Properties();
mailProperties.setProperty("mail.transport.protocol", "smtp");
mailProperties.setProperty("mail.smtp.host", "localhost");
mailProperties.setProperty("mail.smtp.port", "587");
mailProperties.setProperty("mail.smtp.auth", "false");
javax.mail.Session.getInstance(mailProperties);
とにかくプロパティファイルに入れたい場合は、クラスパスリソースとしてロードできます。java.lang.Class の getResourceAsStream を見てください。更新: これを行う方法については、エポックの回答を参照してください!
設定がステージに依存する場合は、vm 環境変数を介してファイルへのパスを設定できます。
-DmyPropertyFilePath=....
また、 Java Worldにはプロパティ ファイルのロードに関する優れた記事があります (少し古いですが)。