2016-08-27 6 views
1

私はIntellijIdeaとgradleを使用します。 Gradleのコンフィグは:サードパーティの@ConfigurationProperties @Beanではどのように動作しますか?

... 
apply plugin: 'propdeps' 
apply plugin: 'propdeps-idea' 
apply plugin: 'propdeps-maven' 
buildscript { 
    repositories { 
     maven { url 'http://repo.spring.io/plugins-release' } 
    } 
    dependencies { 
     classpath 'org.springframework.build.gradle:propdeps-plugin:0.0.7' 
    } 
} 

compileJava.dependsOn(processResources) 
dependencies { 
    ... 
    optional group: 'org.springframework.boot', name: 'spring-boot-configuration-processor', version: '1.4.0.RELEASE' 
} 

は[OK]を、私自身のプロパティを作成するために私が必要:

@Component 
@ConfigurationProperties("own.prefix") 
@Data 
public class TestProps { 
    public String field; 
} 

@Configuration 
@EnableConfigurationProperties(TestProps.class) 
public class AppConf {} 

と私はプロジェクトスプリング・ブート・コンフィギュレーション・プロセッサを再構築META-INFO新しいgenereate、application.propertiesでそうした後、私はown.prefix.field =を使うことができ、Springはそれを見ます。

しかし、私はサードパーティの設定クラスでどうすればよいですか? ドキュメントhttp://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.htmlは言う:

と同様にクラスに注釈を付けるために@ConfigurationPropertiesを使用して、あなた も@Bean方法でそれを使用することができます。 コントロールの外部にあるサードパーティのコンポーネントにプロパティをバインドする場合は、これは特に便利です( )。

@ConfigurationProperties(prefix = "foo") 
@Bean 
public FooComponent fooComponent() { 
    ... 
} 

FOOプレフィックスで定義されたプロパティがて、ConnectionPropertiesと同様にその FooComponent豆にマッピングされます、環境特性からBeanを構成するその豆登録に @ConfigurationPropertiesを追加する

上記の例の 。

やってみよう。

@Configuration 
@EnableOAuth2Sso 
public class SocialConfig { 

    @Bean 
    @ConfigurationProperties("facebook.client") 
    OAuth2ProtectedResourceDetails facebook() { 
     return new AuthorizationCodeResourceDetails(); 
    } 

    @Bean 
    @ConfigurationProperties("facebook.resource") 
    ResourceServerProperties facebookResource() { 
     return new ResourceServerProperties(); 
    } 
} 

しかし、プロジェクトのプロパティfacebook.clientとfacebook.resourceを再構築した後、私のapplication.propertiesには存在しません:たとえば、私は( https://spring.io/guides/tutorials/spring-boot-oauth2/)ジッドのようにBeanを宣言します。

はまた、私は後に、それはまだ動作していない再構築

@Configuration 
@EnableConfigurationProperties(SocialConfig.class) 
public class AppConf {} 

にSocialConfig.classを追加してみました。 このように:

@Configuration 
@EnableConfigurationProperties 
public class AppConf {} 

まだ同じです。

私は間違っていますか? また、私の英語には申し訳ありません:)

+0

「私のapplication.propertiesには存在しません」とはどういう意味ですか?オートコンプリートの値として持っていないと言っていますか?オートコンプリートの値は、これらのプロパティをコンフィグレーションに追加することもできないこともありません。オートコンプリートは、各プロパティの命名について開発者のメモリを削減するために最善の努力をしています。 オートコンプリート機能は唯一の懸案事項ですか、解決しようとしている別の問題がありますか? –

+0

はい、.propertiesで自動補完が問題の主なアイデアです。 なぜ最初はそれが火格子で動作しますが、別のビルドでは黄色のバナナのように見えます。 私は通知を隠すことができますが、私は最初のケースのようにオートコンプリートを実装したいと思います。 これはやり方ですか? – DamienMiheev

答えて

2

あなたが間違っていることは、@Configurationクラスのメソッドが公開されていないことです。ちょうどpublicfacebookfacebookResourceに追加すれば問題ありません。私はちょうどその文書をc4cb8317で磨きました。私はsubmitted a PR to fix the tutorialをベースに使っていました。

また、ネストされたオブジェクトに@NestedConfigurationPropertyというフラグが立てられていないため、生成されたメタデータはほとんど空でした。私はそれを修正するためにanother pull requestを提出しました。

+0

Hm、私はBeanがプライベートであってはならないことを知っているので、publicはサービスインターフェイスのように冗長です。私は正しい、私はない? – DamienMiheev

+0

公開されている冗長性はありません。 –

+0

私はあなたがこのガイドの寄稿者であることを知っています。 だからこのケースに目を通してください: 私は公共OAuth2ProtectedResourceDetails Facebookの()を使用すると、コンフィギュレーション・プロセッサが生成する唯一のプロパティ:facebook.client.scope []。 理由はわかりませんが、私がOAuth2ProtectedResourceDetailsを変更した場合 - > AuthorizationCodeResourceDetails application.propertiesのすべてのプロパティが表示されます。 – DamienMiheev

関連する問題