問題タブ [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.
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 によって開始され、除外したいクラスも開始されます。
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