RabbitMQ 小项目之扫盲班

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录


前言

学习rabbitmq时发现很多注解看不懂,需要特地去查,于是在这里总结相关注解和其他应该会的。

做项目还没有做完,也写一些不懂的。


一、注解类

@FeignClient(value = "business")

springcloudAlibaba的openfeign接口,value填在springcloud中注册的服务,下面的接口方法则是需要调用的接口方法。

@Configuration

配置类需要的注解,像RedisTemplate、RabbitmqTemplate都需要这个注解

@Bean

将配置类的方法的返回值创建为spring容器中的bean,一般与@Configuration配合使用。

注: @Autowired是申请已存在的对象;@Component是加在类上,声明不属于@Service, @Repository, @Controller的组件

@Slf4j

可以调用log.info及其他日志方法,加在类上

@Autowired

将spring容器中的bean注入

@RestController、@Controller + @ResponseBody

目前我发现区别在于返回值是字符串时,两者都可以正常显示;但是如果单独的@Controller没有编写前端页面,返回字符串就会显示空页。

java 复制代码
 @GetMapping("/po")
    public String po(){
        long start = System.currentTimeMillis();
        //1、调用库存服务扣除商品库存
        itemStockClient.decr();
        //2、调用订单服务,创建订单
        orderManageClient.create();
        System.out.println(end - start);
        return "place order is ok!";
    }

@GetMapping("/po")

接受对应的请求

@Mapper与@MapperScan(basePackages = "")

mapper接口上应该有@Mapper注解,或者在启动类上表明注解@MapperScan(basePackages = ""),写明mapper包所在位置

@SpringBootApplication

springboot的启动类

@EnableDiscoveryClient

nacos服务的注册,也在启动类上

@EnableFeignClients

openfeign中要调用其他服务的启动类上声明,被调用的不用声明

@RabbitListener(queues = )

标记一个方法作为消息监听器,当有消息到达指定队列时自动调用该方法

@Select、@Insert、@Update

mapper.xml的简略模式,直接把sql语句写在mapper接口中

@Transactional

spring中保证数据操作的ACID,全成功或者全部失败

@Resource

按名称或类型注入,比@Autowired更丰富一些,默认按名称注入。

@JsonFormat(pattern = "")

限制日期的格式,序列化与反序列化

@NotNull

字段不能为空

@DateTimeFormat(pattern = "")

前端传表单,用这个规定时间格式

@PathVariable(value="")

方法要从浏览器获得的请求参数

@Value

将配置的值注入管理的bean中

@RefreshScope

动态刷新配置,无需重启

@RequestMapping

Controller中类路径的地址

@Getter

Lombok中的方法,自动生产getter方法

@Data

自动生成所有字段的getter、setter、toString、equals、hashCode方法

@NotBlank(message ="")

验证字符串不能为null、不能为空字符串、不能只包含空白字符

@Range(min = , max = ,message = "")

限制数值的范围

@NoArgsConstructor、@AllArgsConstructor

无参构造和全参构造

@RequestBody

把请求体中的JSON/XML数据转换为Java对象

@RequestParam

是一个可选的参数,得到URL?后的参数并赋值给方法处理

二、独特写法

采用策略模式和责任链相结合:

写一个filter接口用作父接口,并定义一个方法:

java 复制代码
public interface CheckFliter {
    void check(StandardSubmit submit);
}

spring中 private Map<String, CheckFliter> checkFliterMap会自动得到接口的所有实现类。@Value会得到配置中filters的值,通过for循环自动执行每个filter中存在实现类的.check()方法,实现责任链,策略模式通过配置中注值来实现

java 复制代码
@Component
@RefreshScope
public class CheckFilterContext {
    @Autowired
    private Map<String, CheckFliter> checkFliterMap;//自动得到所有实现类

    @Value("${filters:apikey,ip,sign,template,mobile,fee}")
    private String filters;

    public void check(StandardSubmit submit) {
        String[] filterArray = filters.split(",");
        for (String filter : filterArray) {
            CheckFliter checkFliter = checkFliterMap.get(filter);
            checkFliter.check(submit);
        }
    }
}

每个具体的实现类,都有独特的实现方法

java 复制代码
@Service(value = "apikey")
@Slf4j
public class ApiKeyCheckFilter implements CheckFliter {

    @Autowired
    private BeaconCacheClient beaconCacheClient;

    @Override
    public void check(StandardSubmit submit) {
        log.info("接口模块-校验apikey");
        Map clientBusiness=beaconCacheClient.hGetAll(CacheConstant.CLIENT_BUSINESS+submit.getApikey());

        if (clientBusiness == null || clientBusiness.size() == 0){
            log.info("【接口模块-校验apikey】 非法的apikey="+submit.getApikey());
            throw new ApiException(ExceptionEnums.ERROR_APIKEY);
        }

        submit.setClientId(Long.parseLong(clientBusiness.get("id")+""));
        log.info("【接口模块-校验apikey】 查询到用户信息 clientBusiness={}",clientBusiness);
    }
}

2.java8的某个语法糖

java 复制代码
void sadd(@PathVariable(value = "key")String key, @RequestBody Map<String,Object>... maps);

可以接收0个或多个Map,放在一个List[]数组中


总结

写了一部分,项目写完了再来补充

相关推荐
程序员小赵同学3 小时前
Spring AI Alibaba文生图实战:从零开始编写AI图片生成Demo
阿里云·ai·springboot·springai
serendipity_hky5 小时前
【微服务 - easy视频 | day04】Seata解决分布式事务
java·spring boot·分布式·spring cloud·微服务·架构
hour_go6 小时前
DeepHunt微服务故障定位系统核心技术解析1
微服务·云原生·架构
roman_日积跬步-终至千里14 小时前
【Docker多节点部署】基于“配置即身份“理念的 Docker 多节点 StarRocks 高可用集群自动化部署方案
java·docker·微服务
合作小小程序员小小店18 小时前
web网页开发,在线考勤管理系统,基于Idea,html,css,vue,java,springboot,mysql
java·前端·vue.js·后端·intellij-idea·springboot
serendipity_hky19 小时前
【微服务 - easy视频 | day03】服务与服务之间的调用
spring boot·spring cloud·微服务·架构
三口吃掉你20 小时前
微服务之Nacos(注册中心、配置中心)
微服务·nacos·架构
陈果然DeepVersion1 天前
Java大厂面试真题:从Spring Boot到AI微服务的三轮技术拷问(一)
java·spring boot·redis·微服务·kafka·面试题·oauth2
zhangkaixuan4561 天前
Flink 写入 Paimon 流程:Checkpoint 与 Commit 深度剖析
java·开发语言·微服务·flink·paimon