2017-10-13 12 views
0

SpringブートとMavenを使用してプロジェクトを別々の独立したMavenプロジェクトにモジュール化している間に、マルチモジュールMavenプロジェクトでBeanの自動配線が機能しないという問題が発生しました。以下SpringブートMavenマルチモジュールプロジェクトでBeanのオートワイヤリングが動作しない

ただ、あなたの問題の概要を提供するためには、これまで

  1. CoreServicesにを開発し、独立したMavenプロジェクトです - アプリケーション全体の春ブーツ・ドメイン・オブジェクトが含まれています:出力JAR
  2. は春ブーツをDBservices1が含まれていデータベースにアクセスするためのリポジトリおよびサービス(データベースサービス):出力JAR
  3. 報酬 - 報酬モジュール関連ファイル(コントローラ、サービス(ビジネスロジックサービス)、ビュー)を含む:出力JAR
  4. RewardsApp-独立デプールoyable Mavenプロジェクト:出力WAR以下

は RewardsApp->報酬依存構造である - > DBservices1 - > CoreServicesに

問題がマッピングされたサービスを取得するために報酬とDBservices1で使用 @Autowired注釈は @Serviceでアノテートされ

/@RepositoryRewardsAppプロジェクトにありません。

RewardsAppの豆を@Bean注釈で設定した場合の回避策として、サーバーが正常に起動するようにサービスを利用できます。 このアプローチでは、従属プロジェクトで使用されるRewardsAppのすべてのBeanを手動で設定する必要があります。 アプリケーションには多くのサービスとリポジトリがあります。このようなBeanの作成は、多くのBeanを作成する必要があるため、適切な方法ではないと思います。

我々は パッケージ以下com.company.application

の下ですべてのプロジェクト全体のすべての春のブートコントローラ、サービス、repositorysを作成していることに注意してくださいは、メインクラスの抜粋です:

@SpringBootApplication 
@ComponentScan(basePackages = {"com.company.application"}) 
public class RewardsApp extends SpringBootServletInitializer { 

    public static void main(String[] args) { 
     SpringApplication.run(RewardsApp.class, args); 
    } 

    @Override 
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { 
     return application.sources(RewardsApp.class); 
    } 
} 

/** 
*Manual beans in RewardsApp 
**/ 
@Bean 
public SomeService someService() 
{ 
    return new SomeService(); 
} 
+0

あなたの 'RewardsApp'は' com.company.application'パッケージにもありますか?それを 'com.company'パッケージに入れておかないと' @ ComponentScan'(これは既に '@ ComponentScan'によって暗示されています)を削除します。 –

答えて

0

は今、オートワイヤリングが瓶

@ComponentScan(basePackages = {"com.company"}) 
@EntityScan(basePackages = {"com.company"}) 
@EnableJpaRepositories(basePackages = {"com.company"}) 

内部クラスのために働いていた、私のためのトリックをした私は、サービスのためのものである上記の推測、エンティティ(ドメイン)、リポジトリ

2

どのような構成を有するについて各モジュールのクラス(関連するコンプスキャンを含む)を取得し、これらのコンフィグをアプリケーションクラスにインポートしますか? RewardsApp.javaでの注釈の下に追加することにより

@SpringBootApplication 
@ComponentScan(...) 
@Import({RewardsContext.class, DBservicesContext.class}) 
... 

Import docs here

関連する問題