2016-11-03 71 views
-1

我目前正在使用Spring Boot,創建​​一個CommandLineRunner。一切工作正常,直到我試圖@Autowired我的類:他們總是空,並從Spring獲得相同的錯誤:「錯誤創建名爲'initBatch'的bean:注入自動裝載依賴項失敗: 找不到類型[Utils]的合格bean對於依賴:預計將有至少1個Bean上有資格作爲自動裝配候選人,這種依賴性相關注釋我仍然想不通爲什麼這個錯誤發生 這是我的代碼:。Spring Boot服務爲空

@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將de應用加載爲WS。在一臺服務器上運行所有的東西,相同的類很好。這是工作的其他初始化:

@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; 
} 
} 

我只是不爲什麼使用相同的文件,具有相同配置的理解,與Init.java工作(作爲一個Tomcat Web應用程序),但都是一樣的CommandLineRunner的文件爲空。

有什麼建議嗎?

謝謝!

回答

1

需要指定ComponentScan包含註解的註解InitBatch(因爲Utils類在不同的包中)用於在運行時掃描bean。

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

@SpringBootApplication文檔 -

許多春季引導開發者總是有其主類註釋 與@Configuration,@EnableAutoConfiguration和@ComponentScan。 由於這些註釋經常一起使用(特別是如果您遵循上述最佳實踐,請參閱 ),Spring Boot提供了一個方便的@SpringBootApplication替代方案 。

+0

你是對的,我搞砸了我以前的測試與這種配置。如果我把@ComponentScan像魅力一樣工作。謝謝! –

+0

乾杯..... @NicolasGallegos –

相關問題