問題タブ [spring-boot-configuration]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
804 参照

spring-boot - SpringBoot excludeFilter が複数の構成クラスで機能しない

別の springboot アプリケーションに依存する springboot アプリを開発しています。ほとんどの Bean を親の springboot アプリに含めたいのですが、1 つだけです。

ParentApplication クラスに触れずに、親パッケージがスキャンした 1 つの springboot Bean を除外するにはどうすればよいですか?

私が試したがうまくいかない方法:

1: アプリケーション クラスで除外フィルタリングを使用して、特定の Bean クラスを除外します。

2: Bean クラスと親構成クラスの両方を除外しようとしました。

3: 除外したい bean クラスに DisposableBean インターフェイスを追加し、実行時に破棄します。

以下は、私のアプリケーションスターター構成クラスと親のものです。

私の MyApplication.class: パッケージ com.myapp;

}

私のParentApplication.class

コンソールに「構成クラスが作成されました」と出力されるため、何らかの理由で ParentApplication が springboot によって開始され、除外したいクラスも開始されます。

0 投票する
2 に答える
62718 参照

spring-boot - Spring ブート 2.1.0 スターター構成で spring.main.allow-bean-definition-overriding を true に設定する方法

たとえば、未知のエンドポイントが呼び出されたときに返されるエラー属性をカスタマイズする spring-boot-starter を維持しています。これは、org.springframework.boot.web.servlet.error.ErrorAttributes Bean をオーバーライドすることによって行われます。

2.0.6 ではすべてが正常に機能しましたが、2.1.0 ではデフォルトで Bean のオーバーライドが無効になり、スターターが次のメッセージで失敗するようになりました。

クラスパス リソース [com/mycompany/springboot/starter/config/ErrorsConfig.class] で定義された名前 'errorAttributes' の無効な Bean 定義: Bean 定義を登録できません [ルート Bean: クラス [null]; スコープ=; 抽象=偽; lazyInit=false; autowireMode=3; 依存関係チェック = 0; autowireCandidate = true; プライマリ = false; factoryBeanName=com.mycompany.springboot.starter.config.ErrorsConfig; factoryMethodName=errorAttributes; initMethodName=null; destroyMethodName=(推測); Bean 'errorAttributes' のクラスパス リソース [com/mycompany/springboot/starter/config/ErrorsConfig.class]] で定義: [ルート Bean: クラス [null]; は既にあります。スコープ=; 抽象=偽; lazyInit=false; autowireMode=3; 依存関係チェック = 0; autowireCandidate = true; プライマリ = false; factoryBeanName=org.springframework.boot.autoconfigure.web.servlet. error.ErrorMvcAutoConfiguration; factoryMethodName=errorAttributes; initMethodName=null; destroyMethodName=(推測); クラスパスリソースで定義 [org/springframework/boot/autoconfigure/web/servlet/error/ErrorMvcAutoConfiguration.class] バインド

ドキュメントで説明されているように、spring.main.allow-bean-definition-overriding プロパティを true に設定すると問題が解決します。私の質問は、スターターでそれを行う方法です(私のスターターに固有のもののために、スターターのユーザーが application.properties ファイルを変更する必要はありません)?

そのファイルで定義されたプロパティを使用して @Configuration に @PropertySource("classpath:/com/mycompany/starter/application.properties") アノテーションを付けようとしましたが、機能しません。

私は何が欠けていますか?その Bean をオーバーライドする構成を許可する方法はありますか?

設定の(簡略化された)ソースコードは次のとおりです。

私のリソースファイル com/mycompany/starter/application.properties には

spring.main.allow-bean-definition-overriding=true