IDEA用gradle构建java项目, Field XXX in required a bean of type 'XXX' that could not be found. 项目启动报错

springboot多模块项目启动报错, saller项目需用到api项目的接口, 而找不到下面是报错信息代码一和图一

显示原因是在saller中无法找到api系统中 ProductRpc, 但是, 我的saller的build.gradle中已经引入了api, 后来, 我在saller的启动类上加了 @ComponentScan(basePackages = "com.imooc.api") 这个注解, 就可以扫描到api了, 不会再报这个错误, 但不幸的是 

ProductRpcService类的 @PostConstruct注解不起作用了, 也就是我项目启动的时候, 此注解下的代码不会执行

     而我 saller相当于客户端---->调用api服务--->api中的接口已被manager(管理端)实现 代码五, 并调用manager自己的service层完成数据的获取, 为了 把 rpc 地址交给 Spring来管理, 又创建了一个配置类 代码六 .

  首先, 启动manager项目, 然后再启动saller项目, 但是, 就是不会执行 @PostConstruct, 所以, 我也无法证明能不能连通rpc,   目前找不到原因, 也不报错, 只能等后天上班求助于公司架构师了.

   未完待续....2018-10-6

  

================================

  saller系统启动类代码二

 saller系统的gradle配置文件 代码四

  api系统代码三

  代码一

2018-10-06 17:15:56.600  INFO 11628 --- [           main] o.apache.catalina.core.StandardService   : Stopping service [Tomcat]
2018-10-06 17:15:56.636  INFO 11628 --- [           main] ConditionEvaluationReportLoggingListener : 

Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.
2018-10-06 17:15:56.881 ERROR 11628 --- [           main] o.s.b.d.LoggingFailureAnalysisReporter   : 

***************************
APPLICATION FAILED TO START
***************************

Description:

Field productRpc in com.imooc.saller.service.ProductRpcService required a bean of type 'com.imooc.api.ProductRpc' that could not be found.


Action:

Consider defining a bean of type 'com.imooc.api.ProductRpc' in your configuration.

Disconnected from the target VM, address: '127.0.0.1:55880', transport: 'socket'

Process finished with exit code 1

代码二

@SpringBootApplication
@ComponentScan(basePackages = "com.imooc.api")
public class SallerApp {
    public static void main(String[] args){
        SpringApplication.run(SallerApp.class);
    }
}

代码三

@JsonRpcService("rpc/products")
@Component
public interface ProductRpc {

    /**
     * 查询多个产品
     * @param request
     * @return
     */
    Page<Product> query(ProductRpcRequest request);

    /**
     * 查询单个产品详情
     * @param id
     * @return
     */
    Product findOne(String id);
}

代码四

dependencies{
    compile project(":api")
    compile project(":util")
    compile project(":entity")
}

代码五

@Service
public class ProductRpcService {

    private static Logger logger = LoggerFactory.getLogger(ProductRpcService.class);

    @Autowired
    private ProductRpc productRpc;


    /**
     * 查询所有商品  ---目前先不实现分页, 先只用list来接收查询到的信息
     * @return
     */
    public List<Product> findAll(){
        //构建查询条件
        ProductRpcRequest rpcRequest = new ProductRpcRequest();
        rpcRequest.setStatusList(Arrays.asList(ProductStatus.IS_SELL.getDesc()));
        Pageable pageable = new PageRequest(0,1000, Sort.Direction.DESC,"rewardRate");
        rpcRequest.setPageable(pageable);
        logger.info("RPC查询所有商品, 条件 : {}", rpcRequest);
        Page<Product> result = this.productRpc.query(rpcRequest);
        logger.info("RPC查询所有商品, 结果 : {}", result);
        return result.getContent();
    }

    /**
     * 被@PostConstruct修饰的方法会在服务器加载Servlet的时候运行,并且只会被服务器执行一次。PostConstruct在构造函数之后执行,init()方法之前执行。
     * PreDestroy()方法在destroy()方法知性之后执行
     */
    @PostConstruct
    public void testFindAll(){
        this.findAll();
    }

代码六

@Configuration
public class RpcConfiguration {


    private static Logger logger = LoggerFactory.getLogger(RpcConfiguration.class);

    /**
     * 导出一个jsonrpc client的一个代理
     */
    /** 告诉spring, 创建一个jsonrpc的一个代理--  */
    public AutoJsonRpcClientProxyCreator rpcClientProxyCreator(@Value("${rpc.manager.url}")String url){
        AutoJsonRpcClientProxyCreator creator = new AutoJsonRpcClientProxyCreator();
        try {
            creator.setBaseUrl(new URL(url));
        } catch (MalformedURLException e) {
            logger.error("创建rpc服务地址错误 error = {}",e);
        }
        /** 增加包扫描路径 */
        creator.setScanPackage(ProductRpc.class.getPackage().getName());
        return creator;
    }

}

图一

猜你喜欢

转载自blog.csdn.net/geming2017/article/details/82952440