springboot使用lock4j实现并发控制
一般情况下,我们使用乐观锁来处理并发超发的情况,但是,乐观锁在某些情况下,并不能彻底解决超发情况,于是只能上悲观锁(synchroized, 独占线程),特别是在分布式的情况下分布试锁就更为常见了。 下以使用一种基于redis的分布试锁来实现并发控制。 pom.xml增加: <!--若使用redisson作为分布式锁底层,则需要引入--> <dependency> <groupId>com.baomidou</groupId> <artifactId>lock4j-redisson-spring-boot-starter</artifactId> <version>2.2.2</version...
springboot全局增加sentinel
pom.xml增加: <!--sentinel--> <dependency> <groupId>com.alibaba.csp</groupId> <artifactId>sentinel-core</artifactId> <version>1.8.6</version> </dependency> <dependency> <groupId>com.alibaba.csp</groupId> <artifactId>sentinel-annotation-aspectj</artifactId> <version>1.8.6</version> </dependency> <dependency> <groupId>com.alibaba.csp</groupId> ...
Springboot整合Swagger常用注解
swagger注解主要是用来给swagger生成的接口文档说明用的 1、@Api 使用范围:用在 类上 注解,控制整个类生成接口信息的内容,表示对类的说明,也代表了这个类是swagger2的资源 参数: tags:说明该类的作用,参数是个数组,可以填多个,在UI视图中就显示几个控制器访问菜单 value:该参数没什么意义,在UI界面上不显示,所以不用配置 description :用户基本信息操作,已过时,不建议使用 2、@ApiModel 使用范围:用于响应实体类上,用于说明实体作用 参数: value:自定义实体 description:详细描述实体...
swagger隐藏authentication参数
@Bean public Docket oauthApi() { return new Docket(DocumentationType.SWAGGER_2) .groupName("oauth") .apiInfo(metaData()) .ignoredParameterTypes(Authentication.class) .select() .apis(RequestHandlerSelectors.any()) .paths(PathSelectors.ant("/oauth/**")) .build() .securitySchemes(Collections.singletonList(securitySchema())) .securityContexts(Collections.singletonList(securityContext())); }
Spring Security 中的自定义PreAuthorize 注解
controller: @NeedAdmin @GetMapping(path ="user", produces ="application/json") publicResponseEntity<User> getUser(@RequestParamString login){ ... } 自定义注解anno: @PreAuthorize("hasAuthority('Admin')") @Target({ElementType.METHOD, ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) public @interface NeedAdmin { }
JACKSON和FASTJSON处理返回JSON数据中为NULL字段不显示
JACKSON 1.实体上 将此注解放在属性上,如果该属性为null则不参与序列化(为null的字段不显示) 如果放在类上边,那对这个类的全部属性起作用,展示所有字段。 @JsonInclude(JsonInclude.Include.ALWAYS) //放在类上,展示所有字段 Include.Include.ALWAYS 默认展示所有字段 Include.NON_DEFAULT 属性为默认值不序列化 Include.NON_EMPTY 属性为 空("") 或者为 NULL 都不序列化 Include.NON_NULL 属性为NULL 不序列化 FASTJSON package com.aiqin.bms.slcs.api.config; import com.ali...
将数据从mysql迁移到clickhouse
1、关于clickhouse的介绍 https://zhuanlan.zhihu.com/p/370201180 2、京东使用clickhouse存储秒级100G日志数据: https://new.qq.com/omn/20220408/20220408A03TA600.html 3、将MySQL数据迁徙到clickhouse内操作步骤: #clickhouse-client 🙂 create database newDB; 🙂 use newDB; –导入数据: CREATE TABLE Orders ENGINE = MergeTree ORDER BY OrderID AS SELECT * FROM mysql(‘10.42.134.136:3307’, ‘DBNAME’, ‘Orders’, ‘root’, ‘PASSWORD’); Ok. 0 rows in set. Elapsed: 1832.114 sec....
springboot登录失败3次后需要验证码的设计及实现
前言: 不用验证码是方便登陆,用验证码是为了防止暴力破解。为了即能满足方便,同时防止暴力破解,需要使用用户登陆失败3次后出现验证码。 1. 登陆失败次数记录, 在login 中查询并记录用户登陆失败次数 WARNING: 无论验证成功还是失败,前端都刷新验证码。后端验证码用一次就失效 @RequestMapping("/login") public Result login(@RequestBody LoginBody loginBody){ int errorTimes = redis.get(loginBody.getUsername()+"-loginError"); bool needKaptcha = false; if(errorTimes>2...
Mybatis —— 解决单引号带来的sql注入问题
问题 当使用${}写sql时,如果输入的字段中含有单引号,就会发生sql注入,改变原有的sql逻辑,应该如何处理呢? 解决 将单引号,替换为两个单引号即可。 String regexp = "\'"; str.replaceAll(regexp, "\'\'");
Springboot整合Nacos(动态改变数据库连接参数)
这个是整合nacos的教程,我在网上找相关文档,都不满意,就自己试了一下,然后分享出来。 1 安装Nacos。 安装很简单,这里就不说啦。直接说整合 2 Springboot中引入Nacos <span class="token comment"><!--nacos--></span> <span class="token tag"><span class="token punctuation"><</span>dependency<span class="token punctuation">></span></span> <spa...