スプリング ブート自動アセンブリの注入に失敗しました。スプリング ブート カスタム スターターが初期化されていません。スプリング ブート自動アセンブリは無効であり、実行されません。

1. 問題の説明

たくさんのスターターをカスタマイズし、それらを jar にパッケージ化し、メイン プログラムにインポートしました。開始時にエラーを報告しました。カスタム スターターに Bean をインポートしている限り、Bean をインポートできないと報告しました。見つかった、つまり spirng によってスキャンされていない場合は、次のキーワードを検索します。

スプリング ブート自動アセンブリの注入に失敗しました。スプリング ブート カスタム スターターが初期化されていません。スプリング ブート自動アセンブリは無効であり、実行されません。

2、解決策

インターネットで調べてみましたがダメでした 基本的にはスタートアップクラスが配置されているパッケージが原因だと言われています @SpringBootApplication アノテーションにパッケージ名を指定する scanBasePackages を追加します。

@SpringBootApplication(scanBasePackages = "com.aaa.bbb")	

私のスタートアップクラス自体は aaa パッケージの下に置かれており、そのような問題はまったくありません。インターネットで調べましたが、有益な回答は見つかりませんでした。現時点で確認されているのは、この問題の原因は次のとおりです。自動アセンブリであり、初期化はありません。その後、自動アセンブリの原理を再度検索して調べ、デバッグを通じて問題を見つけ、org.springframework.boot.autoconfigure.AutoConfigurationImportSelector#getCandidateConfigurations で答えを見つけました。アサーションでプロンプトが表示されます
ここに画像の説明を挿入

No auto configuration classes found in META-INF/spring.factories. If you

そこでふと、これは Spring Boot プログラムであることを思い出し、タイプアウトされた jar パッケージが通常の jar パッケージとは異なるため、以下の依存関係を追加します。

<plugin>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-maven-plugin</artifactId>
	<configuration>
		<fork>true</fork>
		<mainClass>com.xxxx.xxxx</mainClass>
	</configuration>
	<executions>
		<execution>
			<goals>
				<goal>repackage</goal>
			</goals>
		</execution>
	</executions>
</plugin>				
				

以下を再コンパイルすると機能します。

それが自動アセンブリの理由であるかどうかわからない場合は、スタートアップ クラスの @Import を介してスターターによって登録された構成をメイン プログラムにインポートし、インジェクションが失敗したことを示すプロンプトが依然として表示されるかどうかを確認できます。

@Import({
    
    xAutoConfiguration.class, xxxxAutoConfiguration.class})

実際には、Spring のログレベルを直接設定してデバッグし、ログを追跡して問題を確認すれば問題ありませんが、ログが大量にあるため、少し面倒です。


2021 年 1 月 15 日更新:

今日の午後、また自動アセンブリが失敗しました。ソース コードを追跡して調整するのに長い時間がかかりましたが、自動アセンブリが読み込まれませんでした。タイプアウトされた jar パッケージの lib ディレクトリに、jar がありました。 org の .springframework.boot.autoconfigure.AutoConfigurationImportSelector#getCandidateConfigurations メソッドの構成変数には、jar 内に自動アセンブリ クラスが常に含まれておらず、他のもの、つまり、そうでない実行可能 jar が存在します
ここに画像の説明を挿入
。 jar で型指定しても問題なく、コマンドで実行できるのですが、IDEA では動作せず、jar 内の Bean がインジェクトされていない旨のメッセージが表示されます。
ここに画像の説明を挿入
ない、追加する、持っている、除外する、そして最終的に idea のログの最初の行で問題が見つかりました。IDEA が起動すると、IDEA 自体がクラスパスを指定します。

ここに画像の説明を挿入
プロジェクトのすべての依存関係をこれに追加します
ここに画像の説明を挿入

見つからなかった jar がたまたまここになかったため、動作せず、ロードできませんでした。IDEA のキャッシュをクリアして再起動しましたが、それでも動作しないことがわかり、最終的には問題ないことがわかりました再構築すること。酔った酔った

ここに画像の説明を挿入

おすすめ

転載: blog.csdn.net/mashangzhifu/article/details/122462361