序文
この記事では、Springでの@PropertySourceアノテーションの使用と、PropertySourceアノテーションを介して指定された構成ファイルをロードする方法の説明に焦点を当てます。また、PropertySource Annotationと@ConfigurationProperties Annotationsを使用します。以下ではあまり言いません。編集者と学び、勉強しましょう。
1.1。 PropertySource Annotation指定されたプロパティファイルをロードします
Springフレームワークは、指定されたプロパティファイルをロードする目的で、PropertySourceアノテーションを提供します。次に、この注釈の使用方法を見てみましょう。最初に、構成クラスを定義し、次のようにクラスにPropertySourceアノテーションを追加します。
@component@propertySource(value = {"classpath:config/jdbc-bainuo-dev.properties"}、ingoreresourcenotfound = false、encoding = "utf-8"、name = "jdbc-bainuo-dev.properties"、)public class customerdatasourconfig1 {private string url; public string geturl(){return url; } public void seturl(string url){this.url = url; } @Override public String toString(){return "customerDataSourceconfig {" + "url = '" + url +'/'' + '}'; }}上記のコードの目的は、classpathパスの構成ファイルにjdbc-bainuo-dev.propertiesをロードすることです。エンコードがプロパティファイルの読み取りに使用されるエンコードを指定するために使用される場合、通常、UTF-8を使用します。 IngorerEresourcenotFoundは、指定された構成ファイルが存在しない場合にエラーが報告されているかどうかを意味し、デフォルトはfalseです。たとえば、上記で指定されたロードプロパティファイルは、 jdbc-bainuo-dev.propertiesです。ファイルが存在しない場合、IgnoreresourcenotFoundが真である場合、プログラムはエラーを報告しません。 Ignoreresourcenotfoundがfalseの場合、プログラムはエラーを直接報告します。実際のプロジェクトの開発では、falseにfaldingを設定することをお勧めします。このパラメーターのデフォルト値はfalseです。
値の値は、属性ファイルをロードする属性ファイルを設定することであり、複数のプロパティを一度にロードできます。設定された名前の値は、 jdbc-bainuo-dev.propertiesです。この値は、スプリングブート環境で一意でなければなりません。設定されていない場合、値は「 class path resource [config/jdbc-bainuo-dev.properties] 」です。
なぜそれが「 class path resource [config/jdbc-bainuo-dev.properties]であるのか疑問に思うかもしれません。これには、リソースファイルの春のカプセル化クラスリソースが含まれます。上記で構成した値は「 classpath:config/jdbc-bainuo-dev.properties 」です。そのため、SpringはClassPathで始まることがわかりました。ファイルから始まる場合、使用するクラスはFilesystemResourceです。
上記のリソースクラスを理解した後。名前の値が@propertySourceに設定されていない場合、名前の値の生成ルールは次のとおりです。値値に基づいて最終的なカプセル化されたリソースサブクラスを見つけ、特定のリソースサブクラスインスタンスオブジェクトのgetDescriptionメソッドを呼び出します。 getDescriptionメソッドの返品値は最終名です。
たとえば、ClassPathResourceクラスのGetDescriptionメソッドは次のように実装されています。
public String getDescription(){StringBuilder Builder = new StringBuilder( "クラスパスリソース["); string pathtouse = path; if(this.clazz!= null &&!pathtouse.startswith( "/")){builder.append(classutils.classpackageasurcepath(this.clazz)); Builder.Append( '/'); } if(pathtouse.startswith( "/")){pathtouse = pathtouse.substring(1); } builder.append(pathtouse); Builder.Append( ']'); return builder.toString();}上記の名前の処理ロジックは一時的に感銘を受けた可能性があり、ソースコードは将来の説明のために詳細に追跡されます。
1.2。 PropertySource Annotation指定されたプロパティファイルテストをロードします
上記では、 "classpath:config/jdbc-bainuo-dev.properties"ファイルをロードするために、propertySourceアノテーションを設定します。このファイルのディレクトリ構造を以下の図に示します。
JDBC-Bainuo-dev.propertiesファイルのコンテンツは次のとおりです。
spring.datasource.shareniu.url = shareniu
Application.Propertiesファイルの内容は次のとおりです。
spring.profiles.active = dev
上記の構成ファイルでは、 spring.profiles.activeプロパティは、使用されている現在の環境が開発されています。 spring.datasource.shareniu.urlは普通の財産であり、それ自体が特別な意味を持たない。
次のように、Springbootのスタートアップクラスの作成を始めましょう。
@springBootApplicationPublic class demoApplication {public static void main(string [] args){springApplication springApplication = new SpringApplication(demoApplication.class); configureableapplicationContext configureableapplicationContext = springApplication.run(args); customerDataSourceConfig1 CustomerDataSourceConfig = configureAbleapplicationContext .getBean(CustomerDataSourceConfig1.class); System.out.print(customerDataSourceConfig);}}上記のコードを実行すると、プログラムの出力は次のとおりです。
customerDataSourceConfig {url = 'null'}奇妙なことに、なぜURLが空いているのですか? PropertySourceアノテーションは、 jdbc-bainuo-dev.propertiesファイルを現在の環境にすでにロードしていませんか? spring.datasource.shareniu.urlプロパティをjdbc-bainuo-dev.propertiesのプロパティを取得できるかどうかを確認し、PropertySourceアノテーションがjdbc-bainuo-dev.propertiesが現在の環境にファイルをロードしたことを確認します。
上記のスタートアップクラスのコードを次のように変更します。
@springBootApplicationPublic class demoApplication {public static void main(string [] args){springApplication springApplication = new SpringApplication(demoApplication.class); configureableapplicationContext configureableapplicationContext = springApplication.run(args); customerDataSourceConfig1 customerDataSourceConfig = configureableapplicationContext.getBean(CustomerDataSourceConfig1.Class); string property = configureableapplicationContext.getEnvironment()。getProperty( "spring.datasource.shareniu.url"); System.out.println(Property); System.out.print(customerDataSourceConfig);}}上記のコードを実行すると、プログラムの出力は次のとおりです。
shareniu
上記のコードから、PropertySourceが実際に効果的であることがわかります。では、 spring.datasource.shareniu.urlプロパティ値をCustomerDataSourceConfig1クラスのURLプロパティに自動的に挿入するにはどうすればよいですか?
1.3。 PropertySource Annotation指定されたファイルを読み取り、構成クラスにプロパティを注入します
Springは@value Annotationを提供して、構成ファイルの属性値を読み取り、対応する属性に設定します。ここでは、@Value Annotationの使用方法を学びます。詳細な説明の例として、上記のテキストの2つのクラスにも同じことが言えます。まず、CustomerDataSourceConfig1クラスを変更する必要があります。変更部分は次のとおりです。
@component@propertySource(name = "jdbc-bainuo-dev.properties"、value = {"classpath:config/jdbc-bainuo-dev.properties"}、ingorereresourcenotfound = false、encoding = "utf-8")公共クラスの顧客Fig1 { @value( "$ {spring.datasource.shareniu.url}")private string url;}上記のクラスでは、@valueアノテーションがURLフィールドに追加され、スペル式は${spring.datasource.shareniu.url}として指定されます。スプリングブートブートクラスをもう一度実行すると、コンソールの出力はshareniuです。これは、属性値の注入が実際に@valueを介して行うことができることを示しています。ただし、@valueアノテーション方法を使用することの友好的ではない側面の1つは、プロジェクトに多数のプロパティが構成のためにある場合、@valueアノテーションをクラスフィールドに1つずつ追加する必要があることです。
1.4。 ConfigurationProperties注釈の使用
@ConfigurationPropertiesはクラスレベルの注釈であり、特定の使用法は次のとおりです。
@component @configurationProperties(prefix = "spring.datasource.shareniu")@propertysource(name = "jdbc-bainuo-dev.properties"、value = {"classpath:config/jdbc-bainuo-dev.properties"}、inagrereSoureSourcenotfound = inceNotfound = "filed、filed") customerDataSourceConfig1 {private string url; }上記のコードでは、ConfigurationPropertiesアノテーションがCustomerDataSourceConfig1クラスに追加され、プロパティの接頭辞はspring.datasource.shareniuです。このようにして、スプリングブートが処理されると、現在のクラスのすべてのフィールドをスキャンし、プロパティを検索および組み立てます。たとえば、 prefix = "spring.datasource.shareniu"を構成する場合、customerdatasourceconfig1クラスにURLフィールドがあり、URLフィールドが一致する必要がある属性はプレフィックス+フィールド= spring.datasource.shareniu.urlです。
それは質問だけではありませんか?指定されたフィールドに属性が見つからない場合はどうなりますか?これは、次のように構成できます。
@configurationProperties(prefix = "spring.datasource.shareniu"、Ingroreunknownfields = true、nagroreinvalidfields = true)
IngroreUnknownFields:不明なフィールドを無視します。
IngroreInvalidfields:検証に失敗したフィールドを無視するかどうか。これをどのように理解していますか?たとえば、構成ファイルに文字列タイプの変数を構成し、クラスのフィールドがintのタイプの場合、間違いなくエラーを報告します。これが発生した場合、プロパティ値をTRUEに設定する必要があることを許容できます。このパラメーター値はデフォルトでfalseです。
この記事については、ここで説明します。後続の記事では、@PropertySource Annotationがさまざまな環境で構成ファイルの読み取りをどのように実現できるかを説明します。さまざまな環境のファイルが動的に切り替えて読み取ります。 PropertySourceはデフォルトではサポートされていないため、この注釈に対応するソースコードを展開する必要があります。
要約します
上記は、この記事のコンテンツ全体です。この記事の内容には、すべての人の研究や仕事に特定の参照値があることを願っています。ご質問がある場合は、メッセージを残してコミュニケーションをとることができます。 wulin.comへのご支援ありがとうございます。