2016-11-03 5 views
-1

私は現在、SpringブートでCommandLineRunnerを作成しています。私のクラスを@Autowiredしようとするまではうまくいっていました:常にnullで、Springから同じエラーが出ました: "名前 'initBatch'でBeanを作成中にエラーが発生しました:autowired依存関係の注入が失敗しました: [Utils]依存関係のために:この依存関係のためのautowire候補としての資格を少なくとも1つの豆を期待このエラーはなぜ起こるか依存関係の注釈が、私はまだ把握することはできません これは私のコードです:。。。春のブートサービスがnullです

@SpringBootApplication 
public class InitBatch implements CommandLineRunner { 

@Autowired 
private Utils Utils; 

@Override 
public void run(String... args) throws Exception { 
    System.out.println("Hello World");   
} 

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


@Bean 
public ReloadableResourceBundleMessageSource messageSource() { 
    ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource(); 

     messageSource.setBasename("instances"); 
    return messageSource; 
} 

これはUtilsのクラスです問題を引き起こしている:

@Configurable 
@Service 
public class Utils { 

private static final Logger LOG = LoggerFactory.getLogger(Utils.class); 

    //NUMEROUS METHODS... 
} 

また、彼女のInitはWSとしてアプリケーションをロードします。すべてを1人で走らせると、同じクラスがうまくいく。すべて同じ、同じ構成で、同じファイルを使用して、なぜ

@Configuration 
@ComponentScan({ "ws.controller","ws.service", 
"ws.dao", "ws.util", "ws.filtro", 
"ws.repository", "ws.model.log", "ws.logger.impl"}) 
@EnableAutoConfiguration 
public class Init extends SpringBootServletInitializer { 

private static final int SECS = 10; 

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

/** 
* Main method. 
* 
* @param args String[]. 
* @throws Exception Exception. 
*/ 
public static void main(String[] args) throws Exception { 
    SpringApplication.run(Init.class, args); 
} 


@Bean 
public ReloadableResourceBundleMessageSource messageSource() { 
    ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource(); 

    messageSource.setBasename("instances"); 
    messageSource.setCacheSeconds(SECS); 
    return messageSource; 
} 
} 

は、私はちょうど理解していない(Tomcatのウェブアプリとして)Init.javaで動作しますが、これは働いている他の初期化ですファイルはCommandLineRunnerでヌルです。

提案がありますか?

ありがとうございます!

答えて

1

ComponentScan注釈は、実行時にBeanをスキャンするためのInitBatch(別パッケージのUtilsクラス)のパッケージで指定する必要があります。

@Configuration 
@ComponentScan("ws.util") 
@EnableAutoConfiguration 
public class InitBatch implements CommandLineRunner { 
... 
} 

@SpringBootApplicationドキュメント -

多くの春ブーツ開発者は常に彼らのメインクラスは@Configuration、@EnableAutoConfigurationと@ComponentScanで に注釈を付けています。 これらの注釈はあまりに頻繁に使用されるので(特に上記のベストプラクティスに従っている場合は特に )、Springブートは 便利な@SpringBootApplicationの代替手段を提供します。

+0

あなたが正しいです、私はこの構成で私の前のテストを台無しにしました。私が@ComponentScanを魅力のように動作させるとします。ありがとう! –

+0

乾杯..... @NicolasGallegos –

関連する問題