我有一个与另一个外部JAR一起使用的SpringBoot应用程序。当我尝试从JAR使用@Autowired类时,SpringApp无法加载。我收到了“ org.springframework.beans.factory.NoSuchBeanDefinitionException”。我知道这与SpringBoot不搜索项目类在哪里有关,但是我无法弄清楚如何正确知道在哪里看。我添加了@ComponentScan,它可用于其他内部类,但不适用于此外部JAR。
这是我使用JAR方法的类:
package ar.com.tr.latam.care.ws.service.impl;
@Configuration
@ComponentScan({
"ar.com.tr.arz.expurgo", "ar.com.tr.arz.expurgo.logger", "ar.com.tr.arz.expurgo.logger.dao", "ar.com.tr.arz.expurgo.logger.impl","ar.com.tr.arz.expurgo.logger.model"})
@Import({ AppConfig.class, AplicacionCriteriosExpurgoServiceImpl.class, ClasificacionServiceImpl.class, ExcelReaderServiceImpl.class, ConversionServiceImpl.class})
@Service
public class ArzServiceImpl implements ArzService {
@Autowired
private ExcelReaderService excelReaderService;
@Autowired
private ConversionService conversionService;
@Autowired
private AppConfig appConfig;
...
}
还有我的Init.java类:
package ar.com.tr.latam.care;
@Configuration
@ComponentScan({ "ar.com.tr.latam.care.controller",
"ar.com.tr.latam.care.filtro", "ar.com.tr.latam.care",
"ar.com.tr.latam.care.model.log", "ar.com.tr.latam.care.logger.impl", })
@EnableJpaRepositories
@SpringBootApplication
public class Init extends SpringBootServletInitializer {
@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);
}
}
JAR结构以“ ar.com.tr.arz.expurgo”开头,但是我找不到如何正确地告诉Springboot在那里检查那些文件的方法。
错误为“无法自动装配字段:私人ar.com.tr.arz.expurgo.services.ClasificacionService”
我也尝试过在@ComponentScan Init类中添加外部JAR类,但是它也没有用。
有什么建议么?
最佳答案
我能够解决。
首先,我从@Service中删除@ComponentScan,并仅在Init.java类(应用程序的启动)中对其进行了调用
然后,我更改了自己的Init包,使其位于jar类的上层:
我的Init.java在ar.com.tr.latam.care软件包下,外部JAR软件包类在ar.com.tr.expurgo软件包下。因此,我将Init.java更改为位于ar.com.tr包中,并且一切正常!