1

更新: Artem Bilan の回答は引き続き正しいとマークされますが、将来の読者のためにこれを指摘する必要があると感じました。@Valueアノテーションの「デフォルト値」の概念を誤解していたようです。私が使用して達成したいと思っていた機能

@Value("${someProp:defaultFilePath}")
private Resource resourcefilePath;

つまり、application.properties で定義されたファイル パス someProp が例外をスローする (つまり、ファイルが見つからない) 場合、defaultFilePath (つまり、上記のもの) を使用しようとします。デフォルト値の定義が実際に行うことは、プロパティ自体 (someProp) が application.properties ファイルに存在しない (定義されていないかコメントアウトされている) 場合、代わりにデフォルト値を使用しようとすることです。


SSH ファイル転送に Spring Integration Sftp を使用しています。Spring Boot を使用しているため、xml ファイルはありません。オブジェクトを構成する前DefaultSftpSessionFactoryに、sFtp 認証に必要な秘密鍵を含む .txt ファイルを含むリソースを定義します。

以前は、次FileSystemResourceのように使用していました。

Resource resource = new FileSystemResource("C:/absolute/path/to/my/private/key/privateKey.txt");

これはうまくいきました。ただし、このアプリケーションは最終的にクラウド環境に配置されるため、そのような絶対パスは機能しなくなります。代わりに ClassPathResource を使用しようとしていますが、何を試しても機能しません。これまでのところ、次のことを試しました。

Resource resource = new ClassPathResource("privateKey.txt");
Resource resource = new ClassPathResource("privateKey.txt", SomeClassInClassPath.class);
Resource resource = new ClassPathResource("com/my/package/name/privateKey.txt");

私のディレクトリ構造は次のようになります。

ProjectFolder -> src -> main -> java -> com -> my -> package -> name -> various java classes
                                                                        privateKey.txt
                             -> resources -> etc...

他にもありますが、これは簡易版です。.txtへのパスを認識させる方法を誰かが理解するのを手伝ってくれますか? 私はjava.io.FileNotFoundException: class path resource [resource] cannot be opened because it does not exist何をしようとしても得続けます。

編集: WAR構造:

ProjectFolder -> META-INF -> maven -> etc..
              -> org -> springframework -> boot -> etc..
              -> WEB-INF -> classes -> com
                                    -> public
                                    -> application.properties
                                    -> privateKey.txt
4

1 に答える 1