Springboot
Springboot常用注解
1、主配置类常用注解
(1)@SpringBootApplication
Spring boot的主配置类,Spring boot的启动类
@SpringBootApplication是一个复合注解,包含了@SpringBootConfiguration,@EnableAutoConfiguration,@ComponentScan这三个注解,大多数情况下,这3个注解会被同时使用,基于最佳实践,这三个注解就被做了包装@SpringBootApplication注解。
@SpringBootConfiguration
标注当前类是配置类
会将当前类内声明的一个或多个以@Bean注解标记的方法的实例纳入到srping容器中,并且实例名就是方法名 继承自@Configuration。
@EnableAutoConfiguration
自动配置的注解
自动配置的注解,根据我们添加的组件jar来完成一些默认配置 我们做微服时会添加spring-boot-starter-web这个组件jar的pom依赖,这样配置会默认配置springmvc 和tomcat
@ComponentScan
扫描当前包及其子包下被@Component,@Controller,@Service,@Repository
扫描当前包及其子包下被@Component,@Controller,@Service,@Repository注解标记的类并纳入到spring容器中进行管理。 等价于context:component-scan的xml配置文件中的配置项
(2) @ServletComponentScan
filter的实现,用在Spring boot的启动类
Servlet、Filter、Listener 可以直接通过 @WebServlet、@WebFilter、@WebListener 注解自动注册,这样通过注解servlet ,拦截器,监听器的功能而无需其他配置,所以项目中使用到了filter的实现,用到了这个注解。
(3) @MapperScan(“dao路径”)
整合Mybatis,用在Spring boot的启动类 @mapper
(4) @EnableScheduling
允许schedul定时任务
(5) @EnableCaching
使用缓存
(6) @EnableTransactionManagement
//开启事务注解支持
2、单元测试常用注解
@RunWith(SpringJUnit4ClassRunner.class)、(SpringRunner.class)
测试类,让测试运行于Spring测试环境。
SpringRunner 继承了SpringJUnit4ClassRunner,没有扩展任何功能;使用SpringRunner,名字简短而已
@SpringBootTest
Springboot环境下测试
@Test
junit单元测试,单元测试方法上
@Before
预加载,测试方法前
@WebAppConfiguration
web应用测试
3、Controller常用注解
@RestController
用于Controller标识,@Controller 和@ResponseBody的结合
@Controller 表明这个类是一个控制器类,和 @RequestMapping 来配合使用拦截请求,如果不在method中注明请求的方式,默认是拦截get和post请求。这样请求会完成后转向一个视图解析器。但是在大多微服务搭建的时候,前后端会做分离。所以请求后端只关注数据处理,后端返回json数据的话,需要配合 @ResponseBody 注解来完成。
@GetMapping、PostMapping、PutMapping、DeleteMapping
rest风格
普通风格 | Rest风格 |
---|---|
@RequestMapping(value=“”,method = RequestMethod.GET) | @GetMapping(value =“”) |
@GetMapping | Get请求 |
---|---|
@PostMapping | Post请求 |
@PutMapping | 订单确认 |
@DeleteMapping | 取消订单 |
@Autowired
按类型自动注入
4、Restful之swagger
<!-- swagger是当前最好用的Restful -->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>${swagger2.version}</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>${swagger2.version}</version>
</dependency>
@Api(value = “订单Controller”, tags = {“订单Controller”})
value - 字段说明,description - 注释说明这个类
@ApiOperation(value = “订单确认接口”)
在restful风格方法上配合使用
@ApiOperation(value = "订单取消接口")
@DeleteMapping(value = "/order/{orderId}")
作用范围 | API | 使用位置 |
---|---|---|
对象属性 | @ApiModelProperty | 用在参数对象的字段上 |
协议集描述 | @Api | 用在Conntroller类上 |
协议描述 | @ApiOperation | 用在controller方法上 |
Response集 | @ApiResponses | 用在controller方法上 |
Response | @ApiResponse | 用在@ApiResponses里面 |
非对象参数集 | @ApilmplicitParams | 用在controller方法上 |
非对象参数描述 | @ApiImplicitParam | 用在@ApiImplicitParams的方法里边 |
描述返回对象的意义 | @ApiModel | 用在返回对象类上 |
4、配置文件相关
@Value("${spring.datasource.druid.url}")
注入配置文件中的值
@ImportResource @Import @PropertySource
用来导入自定义的一些配置文件
@ImportResource(locations={}) 导入其他xml配置文件,需要标准在主配置类上。
导入property的配置文件 @PropertySource指定文件路径,这个相当于使用spring的标签来完成配置项的引入。
@import注解是一个可以将普通类导入到spring容器中做管理
@EnableAsync(proxyTargetClass = true)
异步代理,构建异步线程池
@Configuration
配置类
@Bean(“analysisExecutor”)
相当于<bean></bean>,标注在方法上,方法返回值就是bean类型,bean的id默认为方法名,可以通过给@bean注解加value属性值改变id。
@Aspect
切面,事务
@Scope(“prototype”)
bean的作用范围,多例,httpclientConfig
@EnableRedisHttpSession(maxInactiveIntervalInSeconds = 1800,redisFlushMode = RedisFlushMode.ON_SAVE, redisNamespace = “dscSession”)
redissession 默认30分钟失效
@EnableWebMvc
用于spring mvc 配置类,启用springmvc
@EnableSwagger2
restful风格,使用Swagger2
5、dao
@Param(“ids”) Integer[] ids, @Param(“userId”
mapper接口中有多个参数
6、异常处理
@ControllerAdvice
全局异常处理
全局数据绑定
全局数据预处理
@ExceptionHandler(BindException.class)
1、@ExceptionHandler不需要写在目标方法上,而是写在通知处理方法上
2、@ExceptionHandler自动拦截所设置的异常 作用范围这个controller,
---这种情况一般定义个父类,然后每个controller继承即可
7、lombok插件使用
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
@Data
首先在idea中安装lombok插件
@Data : 注解在类上,
就不用再去手写Getter,Setter,equals,canEqual,hasCode,toString等方法了,
注解后在编译时会自动加进去
@NoArgsConstructor、 @Getter、 @Setter
使用后创建一个无参构造函数、getter、setter
@AllArgsConstructor
使用后添加一个构造函数,该构造函数含有所有已声明字段属性参数
@Builder
关于Builder较为复杂一些,Builder的作用之一是为了解决
在某个类有很多构造函数的情况,也省去写很多构造函数的麻烦,
在设计模式中的思想是:用一个内部类去实例化一个对象,避免一个类出现过多构造函数,
8、监控
@Component
@ConditionalOnProperty(prefix = “dsc”, name=“ticketWatcherMaster”, havingValue = “true”)
监控转换队列是否有超时ticket,如果超时自动补偿ticket
@Scheduled(cron = “0 0/2 * * * ?”)
定期监控,补偿超时的ticket,2分钟执行一次,延迟60秒启动
/*"0 0 12 * * ?" 每天中午十二点触发 "0 15 10 ? * *" 每天早上10:15触发 "0 15 10 * * ?"
每天早上10:15触发 "0 15 10 * * ? *" 每天早上10:15触发 "0 15 10 * * ? 2005" 2005年的每天早上10:15触发
"0 * 14 * * ?" 每天从下午2点开始到2点59分每分钟一次触发 "0 0/5 14 * * ?" 每天从下午2点开始到2:55分结束每5分钟一次触发
"0 0/5 14,18 * * ?" 每天的下午2点至2:55和6点至6点55分两个时间段内每5分钟一次触发 "0 0-5 14 * * ?"
每天14:00至14:05每分钟一次触发 "0 10,44 14 ? 3 WED" 三月的每周三的14:10和14:44触发 "0 15 10 ?
* MON-FRI" 每个周一、周二、周三、周四、周五的10:15触发 "0 15 10 15 * ?" 每月15号的10:15触发 "0 15
10 L * ?" 每月的最后一天的10:15触发 "0 15 10 ? * 6L" 每月最后一个周五的10:15触发 "0 15 10 ? *
6L" 每月最后一个周五的10:15触发 "0 15 10 ? * 6L 2002-2005" 2002年至2005年的每月最后一个周五的10:15触发
"0 15 10 ? * 6#3" 每月的第三个周五的10:15触发*/
@WebListener
启动监听器 web监听
事务通知
@Pointcut(value = “execution(* com.yozo.dsc.web….(…))”)
切点
@AfterReturning(value = “webRequest()”)、
后置通知
@Around(value = “getFileHeaderBOByHead()”)
环绕通知
@Before(value = “onlineConvert() && args(domainBo,dscOnlineParamBo)”)
前置通知
线程池
@PostConstruct
初始化邮箱线程池
MQ
@RocketMQMessageListener(topic = MQConstant.ConvertFinishMqTopic, consumerGroup = “${rocketmq.consumer.group}”, consumeMode = ConsumeMode.CONCURRENTLY, messageModel = MessageModel.CLUSTERING)
RocketMQ监听