@EnableAsync
运用在springboot启动器上,表示开启多线程
@Async
放在需要异步的方法上,使方法进入线程池工作
@EnableFeignClients
添加在启动类上表明,当前服务有些地方需要调用其他服务的@FeignClient的接口,如果其他服务可以启动并注入服务中心。直接在启动类上添加这个注解就行了。要是不能启动,以jar包形式引入当前服务中,就要加上basePackages,去指定在其他服务的@FeignClient的接口。
@EnableTransactionManagement(proxyTargetClass = true)
springboot事务的总开关,在访问数据库的Service方法上添加注解 @Transactional 便可
@Documented 的含义
@Document 是 java 在生成文档,是否显示注解的开关。
@Inherited
被 @Inherited 注解修饰的注解,如果作用于某个类上,其子类是可以继承的该注解的。反之,如果一个注解没有被 @Inherited注解所修饰,那么他的作用范围只能是当前类,其子类是不能被继承的。
@Retention()
注解按生命周期来划分可分为3类:
1、RetentionPolicy.SOURCE:注解只保留在源文件,当Java文件编译成class文件的时候,注解被遗弃;
2、RetentionPolicy.CLASS:注解被保留到class文件,但jvm加载class文件时候被遗弃,这是默认的生命周期;
3、RetentionPolicy.RUNTIME:注解不仅被保存到class文件中,jvm加载class文件之后,仍然存在;
@Target({ElementType.})
@Target 说明了Annotation所修饰的对象范围:Annotation可被用于 packages、types(类、接口、枚举、Annotation类型)、类型成员(方法、构造方法、成员变量、枚举值)、方法参数和本地变量(如循环变量、catch参数)。在Annotation类型的声明中使用了target可更加明晰其修饰的目标。
作用:用于描述注解的使用范围(即:被描述的注解可以用在什么地方)
取值(ElementType)有:
1.CONSTRUCTOR:用于描述构造器
2.FIELD:用于描述域
3.LOCAL_VARIABLE:用于描述局部变量
4.METHOD:用于描述方法
5.PACKAGE:用于描述包
6.PARAMETER:用于描述参数
7.TYPE:用于描述类、接口(包括注解类型) 或enum声明
@FeignClient()注解的使用
由于SpringCloud采用分布式微服务架构,难免在各个子模块下存在模块方法互相调用的情况。比如A服务要调用B服务的方法
@FeignClient()注解就是为了解决这个问题的
@FeignClient()注解的源码要求它必须在Interface接口上使用( FeignClient注解被@Target(ElementType.TYPE)修饰,表示FeignClient注解的作用目标在接口上)
@FeignClient标签的常用属性
value:服务名(接口提供方的服务名)
name:指定FeignClient的名称,如果项目使用了Ribbon,name属性会作为微服务的名称,用于服务发现
url:url一般用于调试,可以手动指定@FeignClient调用的地址
decode404:当发生http 404错误时,如果该字段位true,会调用decoder进行解码,否则抛出FeignException
configuration:Feign配置类,可以自定义Feign的Encoder、Decoder、LogLevel、Contract
fallback:定义容错的处理类,当调用远程接口失败或超时时,会调用对应接口的容错逻辑,fallback指定的类必须实现@FeignClient标记的接口
fallbackFactory:工厂类,用于生成fallback类示例,通过这个属性我们可以实现每个接口通用的容错逻辑,减少重复的代码
path:定义当前FeignClient的统一前缀
此外还要求服务的启动类要有@EnableFeignClients 注解才能使Fegin生效
@EnableMongoAuditing
此注解的作用是启用MonoDB自动检测,可以使@CreatedDate(创建数据时自动填入创建时间)、@LastModifiedDate(创建或更新数据时自动填入修改时间)等注解生效
@EnableMongoRepositories
@EnableMongoRepositories注解就相当于mybatis的接口扫描,扫描Repository接口
@Mapper(componentModel = "spring")
componentModel属性用于指定自动生成的接口实现类的组件类型。这个属性支持四个值:
default: 这是默认的情况,mapstruct不使用任何组件类型, 可以通过Mappers.getMapper(Class)方式获取自动生成的实例对象。
cdi: 生成的映射器是应用程序范围的CDI bean,可以通过 @Inject
spring: 生成的实现类上面会自动添加一个@Component注解,可以通过Spring的 @Autowired方式进行注入
jsr330: 生成的实现类上会添加@javax.inject.Named 和@Singleton注解,可以通过 @Inject注解获取。
@Generated
标记已生成的源代码,也区分单个文件中用户编写的代码和生成的代码
使用时,必须有代码生成器的名称(完整名)
生成日期必须遵循 ISO 8601标准。例如:2001-07-04T12:08:56.235-0700
ApplicationRunner
1. 类型:接口
2. 方法:只定义了一个run方法
3. 使用场景:
springBoot项目启动时,若想在启动之后直接执行某一段代码,就可以用 ApplicationRunner这个接口,并实现接口里面的run(ApplicationArguments args)方法,方法中写上自己的想要的代码逻辑。
文章详细介绍了SpringBoot中的一些关键注解,如@Async用于开启多线程,@EnableFeignClients配合@FeignClient实现服务间调用,@EnableTransactionManagement管理事务,@EnableMongoAuditing和@EnableMongoRepositories与MongoDB集成,以及@Mapper和@ComponentModel在数据层的使用。此外,还提到了ApplicationRunner接口在SpringBoot启动时执行特定逻辑的应用。

3371





