maven分布式项目中spring bean未加载问题

maven分布式项目中spring bean未加载问题

问题描述

项目中采用了maven 分布式的模块开发。其中baseFrame 模块依赖common模块。
项目结构
在common中配置了一些公共的基础类。如工具类,统一异常处理,AOP日志输出,filter等等。
然而在使用中,发现其中的一些辅助类并没有生效。

原因分析

spring 在初始化时,默认是扫描启动类所在目录,将所有带注解的java类进行统一管理。由于common模块并不在启动类的所在目录,所以其中的bean是没有被初始化的。这时候就需要我们制定需要扫描的目录,其只要实现依靠@ComponentScan注解。

解决方案

在启动类上通过@ComponentScan注解引入其他模块的目录。

@SpringBootApplication
@MapperScan("jaylen.stocks.dao")
@ComponentScan(basePackages={"cn.jaylen.common"})
public class BaseFrameApplication {
    public static void main(String[] args) {
        SpringApplication.run(BaseFrameApplication.class, args);
    }
}

引入过后,确实能加载到common下面的所有bean。
但是@ComponentScan()注解会覆盖spring默认的扫

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Cloud项目开发手册 1. 项目概述 Spring Cloud是一个基于Spring Boot的开发工具箱,它为开发人员提供了各种云原生应用开发的解决方案,包括配置管理、服务发现、负载均衡、流量控制、断路器、消息总线、分布式追踪、安全认证等等。 2. 开发环境搭建 2.1 环境要求 - JDK 1.8或以上版本 - Maven 3.0或以上版本 - IDE(Eclipse、Idea等) 2.2 创建Spring Boot项目 使用IDE创建一个Spring Boot项目,可以选择使用Spring Initializr或手动创建。 2.3 引入Spring Cloud依赖 在项目的pom.xml文件引入Spring Cloud的依赖: ``` <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>2020.0.3</version> <type>pom</type> <scope>import</scope> </dependency> ``` 2.4 配置文件 在项目的src/main/resources目录下创建application.yml文件,并添加必要的配置信息,例如: ``` server: port: 8080 spring: application: name: example-service eureka: client: serviceUrl: defaultZone: http://localhost:8761/eureka/ ``` 3. Spring Cloud组件使用 3.1 服务注册与发现 使用Spring Cloud的服务注册与发现组件Eureka,可以方便地实现服务的注册与发现。在上面的配置文件,我们配置了服务注册心的地址为http://localhost:8761/eureka/,表示将当前服务注册到该地址,并从该地址获取其他服务的信息。 在Spring Boot应用,我们可以使用@EnableEurekaClient注解开启Eureka客户端功能,代码示例: ``` @SpringBootApplication @EnableEurekaClient public class ExampleServiceApplication { public static void main(String[] args) { SpringApplication.run(ExampleServiceApplication.class, args); } } ``` 3.2 负载均衡 使用Spring Cloud的负载均衡组件Ribbon,可以方便地实现服务的负载均衡。在上面的配置文件,我们可以通过配置服务名称来实现负载均衡,例如: ``` example-service: ribbon: listOfServers: http://localhost:8081,http://localhost:8082 ``` 在Spring Boot应用,我们可以使用@LoadBalanced注解开启Ribbon负载均衡功能,代码示例: ``` @SpringBootApplication @EnableEurekaClient public class ExampleServiceApplication { @Bean @LoadBalanced public RestTemplate restTemplate() { return new RestTemplate(); } public static void main(String[] args) { SpringApplication.run(ExampleServiceApplication.class, args); } } ``` 3.3 断路器 使用Spring Cloud的断路器组件Hystrix,可以方便地实现服务的熔断和降级。在Spring Boot应用,我们可以使用@HystrixCommand注解来实现方法级别的熔断和降级,代码示例: ``` @RestController public class ExampleController { @Autowired private RestTemplate restTemplate; @GetMapping("/hello") @HystrixCommand(fallbackMethod = "helloFallback") public String hello() { return restTemplate.getForObject("http://example-service/hello", String.class); } public String helloFallback() { return "hello fallback"; } } ``` 3.4 配置心 使用Spring Cloud的配置心组件Config,可以方便地实现配置的集管理和动态刷新。在上面的配置文件,我们可以通过配置config server的地址和配置文件的名称来实现配置心的功能,例如: ``` spring: cloud: config: uri: http://localhost:8888 name: example-service profile: dev ``` 在Spring Boot应用,我们可以使用@RefreshScope注解实现配置的动态刷新,代码示例: ``` @RestController @RefreshScope public class ExampleController { @Value("${example.message}") private String message; @GetMapping("/message") public String getMessage() { return message; } } ``` 4. 总结 本文介绍了Spring Cloud项目的开发手册,包括环境搭建、组件使用和配置心等方面。通过使用Spring Cloud,我们可以方便地实现云原生应用开发的各种功能,为企业应用的开发和运维提供了很大的便利。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值