1

こんばんは!Spring Boot を使用してマイクロサービス アーキテクチャを実装する方法を学習しようとしていますが、プロジェクトでハードコードされたパスに問題があります。

私のコードには、これらのパスを手動で配置する必要がある 2 つの特定のクラスがあります。

  1. 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", "**");
    
  2. 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 に似ていますが、ファイル パス用です。問題は、この特定のケースでは、指定されたファイルへのファイル システム パス全体が必要になるため、ソフトウェアが正しく実行されないことです。

4

1 に答える 1

0

オプション番号 1: これらのプロパティをapplication.propertiesファイルに配置すると、Spring Boot フレームワークが起動時に環境を更新します。@Value注釈を使用して、Spring コンポーネント クラスのフィールドを初期化できます。

このようなもの:

@Component
public class YourClass {

@Value("${your.property.key})"
private String path;

}

オプション番号 2:config.propertiesプロジェクトに追加の\external ファイルを作成し、それらのプロパティを内部に配置します。プロパティ コンシューマ クラスに@PropertySource注釈を付け、config.properties ファイルへのパスを指定します。

上記のように Value アノテーションを使用するか、システムからそれらのプロパティを取得します。

于 2020-11-09T20:40:46.537 に答える