2015-10-20 18 views
5

私はスプリングブートアプリケーションを持っており、いくつかのコントローラを定義するスプリングブートで書かれた依存関係をインポートしたいと思います。インポートされたモジュールのスプリングブートとコントローラ

おそらく簡単ですが、メインアプリケーションでインポートされたモジュールのこれらのコントローラをすべて初期化できるようにするにはどうすればよいですか?これらのコントローラのパスにアクセスしようとすると、指定されたパスのハンドラメソッドが見つからないというエラーが発生します。次のように私が試した:

@SpringBootApplication 
@ComponentScan(basePackages = {"com.main.project", "com.imported.dependency"}) 
public class MyApplication 
    implements CommandLineRunner { 

    public static void main(final String... args) { 
     SpringApplication app = new SpringApplication(MyApplication.class); 
     app.setWebEnvironment(true); 
     app.run(args); 

    } 
} 

つまり私は@ComponentScanと試みたが、何も起こりません。

私はまた、コントローラがロードされているかどうかを確認してみました:

ApplicationContext ctx = SpringApplication.run(FrontendApplication.class, args); 

System.out.println("Let's inspect the beans provided by Spring Boot:"); 

String[] beanNames = ctx.getBeanDefinitionNames(); 
Arrays.sort(beanNames); 
for (String beanName : beanNames) { 
    System.out.println(beanName); 
} 

彼らはそうではありません。 @SpringBootApplicationを削除して@EnableAutoConfiguration@ComponentScanを使用しようとしましたが、これは機能しません。

提案?

@SpringBootApplicationと@ComponentScan:

+0

ComponentScanの "依存関係"のスペルが間違っています。 –

+0

これは私の例のタイプミスです。実際のパッケージ名ではありません。私が使用しているものはうまく動作します –

+0

SpringApplicationコンストラクタにリストしてみましたか?例えばSpringApplication app =新しいSpringApplication(MyApplication.class、MyAnnotatedBean.class); –

答えて

1

メインスレッドのディスカッションの後、あなたのような小さなプロジェクトをセットアップしようとしましたが、私はそれをgithubに入れました。何の問題も見られません。 22:02.900 INFO 31901 --- [メイン] swsmmaRequestMappingHandlerMapping:マッピングされた "{[/ **]}"

する。これは、ログ 2015年10月24日17からのものであることをhttps://github.com/e-ivaldi/mat_boy_test

の外観を与えます上にpublic java.lang.String com.somethingelse.controllers.SimpleController.xxx()

0

たぶん、あなたは間の競合を持っています。我々は@SpringBootApplication注釈がデフォルトで@Configuration、@EnableAutoConfigurationと@ComponentScanを使用するのと同じです

を読むことができる春ブーツドキュメントで

のリンクを属性:@SpringBootApplication documentation

@SpringBootApplicationを削除し、@Configurationと@EnableAutoConfigurationで置き換えることはできますか?

0

@Configurationアノテーションと@EnableAutoConfigurationアノテーションを使用します。

+0

クロロッと同じ答えですが、3時間後に与えられます! –

0

@SpringBootApplicationは、クラスパス内のすべてのjarからサブパッケージ名前空間を持つすべてのクラスを自動的にスキャンします。あなたのプロジェクトがSpringの推奨ディレクトリ構造に従えば、そのアノテーションは必要なものだけです。参照:Spring Boot's Documentation on Structuring your code

は、以下のことを試してみてください。

  1. のコード行を削除します。

    @ComponentScan(basePackages = {"com.main.project", "com.imported.dependency"}) 
    
  2. 移動MyApplicationをそれはあなたのルートディレクトリに配置されるように。ルートディレクトリは、この命名規則​​に従う必要があります。したがって、とprojectをあなたの会社のホスト名とプロジェクト名に置き換えて、スプリングブートアプリケーションのメインクラスの完全修飾パスはcom.example.project.MyApplicationとなります。

  3. コントローラーをそのサブパッケージに入れます(別のjarファイルにパッケージされている場合でも)。したがって、名前空間は次のようになります。com.example.project.controllers.

  4. また、コントローラクラスに@Controllerまたは@RestControllerアノテーションを追加することを忘れないでください。

希望します。

関連する問題