こんばんは!Spring Boot を使用してマイクロサービス アーキテクチャを実装する方法を学習しようとしていますが、プロジェクトでハードコードされたパスに問題があります。
私のコードには、これらのパスを手動で配置する必要がある 2 つの特定のクラスがあります。
DiscoverClientConfiguration.java : このクラスは、https 経由でディスカバリー サーバーに接続して実装するために作成されています。
System.setProperty("javax.net.ssl.keyStore", "C:\\ ..my file system path.. \\THIS PROJECT FOLDER\\src\\main\\resources\\keystore\\gateway.jks"); System.setProperty("javax.net.ssl.keyStorePassword", "**"); System.setProperty("javax.net.ssl.trustStore", "C:\\ ..my file system path.. \\THIS PROJECT FOLDER\\src\\main\\resources\\keystore\\gateway.jks"); System.setProperty("javax.net.ssl.trustStorePassword", "**");
RestTemplateConfiguration.java : このクラスは、https を使用して外部 REST サービスを呼び出すために作成されます。実装するために、このチュートリアルに従いました。ここでは、.jks ファイルへのパスを別のプロジェクトに配置する必要があるため、状況はさらに悪化します。コードは次のとおりです。
private HttpComponentsClientHttpRequestFactory validateSSL(){ String location = "C:\\ ..my file system path.. \\ANOTHER PROJECT FOLDER\\src\\main\\resources\\keystore\\be_device.jks"; String pass = "++"; ... some more code ... }
ご想像のとおり、誰かがコードをプルするたびに、理想的ではないパスを変更する必要があります。
.properties
最初のケースでは、表記法を使用するファイルを作成しようとしましたclasspath:
が、機能せず、実行時にいくつかの例外が発生します。
2番目のケースでは、この種の表記法を使用しようとしました
..\\..\\Centro\\Centro-Device\\src\\main\\resources\\keystore\\be_device.jks
私のファイルシステムパスを明示的に書かないようにするために、私のPC(Windows 10プロフェッショナル)では実行時に動作しません。一方、Linux Mint を使用している別の同僚のマシンでは、この表記法../../Centro/Centro-Device/src/main/resources/keystore/be_device.jks
は正しく機能すると彼は言いました (これは私の環境でテストしましたが、実行時には機能しません)。
Spring Cloud を使用して構成サーバーを作成することは、この問題の価値ある解決策になると思いますか? すべてのファイル システム パスを構成サーバーに配置し、使用中のマシンに基づいて取得することを考えていました。このアイデアについてどう思いますか?
編集
自分のことをうまく説明できていなかったらすみません。私の問題は、いくつかの .properties のパスを移動するという事実に基づいていません。@Value のような注釈を使用してソリューションを既に試しているため、複数のパス オプションから自動的に選択できる環境が必要です。ほとんど DiscoveryServer に似ていますが、ファイル パス用です。問題は、この特定のケースでは、指定されたファイルへのファイル システム パス全体が必要になるため、ソフトウェアが正しく実行されないことです。