bind header to controller

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31

import javax.servlet.http.HttpServletRequest;

import org.springframework.core.MethodParameter;
import org.springframework.web.bind.support.WebDataBinderFactory;
import org.springframework.web.context.request.NativeWebRequest;
import org.springframework.web.method.support.HandlerMethodArgumentResolver;
import org.springframework.web.method.support.ModelAndViewContainer;

import lombok.extern.slf4j.Slf4j;
import summer.webserver.util.SummerUtils;

@Slf4j
public class SummerArgumentResolver implements HandlerMethodArgumentResolver {

public SummerArgumentResolver() {
super();
}

@Override
public boolean supportsParameter(MethodParameter parameter) {
return SummerHeader.class.isAssignableFrom(parameter.getParameterType());
}

@Override
public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer,
NativeWebRequest webRequest, WebDataBinderFactory binderFactory) {
return SummerUtils.getSummerHeader(webRequest.getNativeRequest(HttpServletRequest.class));
}
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

@Slf4j
public class SummerUtils {
public static SummerHeader getSummerHeader(HttpServletRequest request) {
User user = (User)request.getAttribute("user");
String userName = Objects.isNull(user) ? request.getHeader(USER_NAME) : user.getUserName();
String userId = Objects.isNull(user) ? request.getHeader(USER_ID) : user.getUserId();
SummerHeader summerHeader = SummerHeader.builder()
.userName(userName)
.userId(userId)
.build();

if (log.isDebugEnabled()) {
log.debug(summerHeader.toString());
}
request.setAttribute("summerHeader", summerHeader);
return summerHeader;
}
}

usage

1
2
3
4
5
6
7
8
9
10
11
12
13
14

@Api(tags = "User")
@RestController()
@RequestMapping(ROOT_DOMAIN + "/users")
@Slf4j
public class UserController {
@ApiOperation(value = "delete user")
@DeleteMapping("/{user-id}")
@ResponseStatus(HttpStatus.OK)
public void deleteUser(SummerHeader summerHeader,
@ApiParam(required = true) @Length(max = 10) @PathVariable(value = "user-id") String userId) {
userMapper.deleteById(userId);
}
}

install flink & IDEA Hello world

** 下载和解压 **

从下载页下载一个二进制的包,你可以选择任何你喜欢的Hadoop/Scala组合包。如果你计划使用文件系统,那么可以使用任何Hadoop版本。
进入下载目录
解压下载的压缩包

1
2
3
$ cd ~/Downloads        # Go to download directory
$ tar xzf flink-*.tgz # Unpack the downloaded archive
$ cd flink-1.2.0
1
$ ./bin/start-local.sh  # Start Flink
阅读更多

opencv 练习

OpenCV中的绘图功能

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
import cv2 as cv
import numpy as np

# 创建黑色的图像
img = np.zeros((512, 512, 3), np.uint8)
# 绘制一条厚度为5的蓝色对角线
cv.line(img, (0, 0), (511, 511), (255, 0, 0), 5)

cv.rectangle(img, (384, 0), (510, 128), (0, 255, 0), 3)

cv.circle(img, (447, 63), 63, (0, 0, 255), -1)

cv.ellipse(img, (256, 256), (100, 50), 0, 0, 180, 255, -1)

pts = np.array([[10, 5], [20, 30], [70, 20], [50, 10]], np.int32)
pts = pts.reshape((-1, 1, 2))
cv.polylines(img, [pts], True, (0, 255, 255))

font = cv.FONT_HERSHEY_SIMPLEX
cv.putText(img, 'OpenCV', (10, 500), font, 4, (255, 255, 255), 2, cv.LINE_AA)

cv.imshow('image', img)
cv.waitKey(0)
cv.destroyAllWindows()

阅读更多

python-opencv 安装

install opencv-python

1
2
3
4
5
6
7
8
9
# prepare 
pip3 install scikit-build
pip3 install cmake
ln -s /usr/bin/ninja /usr/bin/ninja-build

# install opencv
pip3 install opencv-python
pip3 install opencv-contrib-python

打开 Python IDLE(或 IPython)并在 Python 终端中键入以下命令。

1
2
import cv2 as cv
print(cv.__version__)
阅读更多

spring 事务

spring 事务传播属性

常量 解释
PROPAGATION_REQUIRED 支持当前事务,如果当前没有事务,就新建一个事务。默认的传播属性。
PROPAGATION_REQUIRES_NEW 新建事务,如果当前存在事务,把当前事务挂起。
PROPAGATION_SUPPORTS 支持当前事务,如果当前没有事务,就以非事务方式执行。
PROPAGATION_MANDATORY 支持当前事务,如果当前没有事务,就抛出异常。
PROPAGATION_NOT_SUPPORTED 以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。
PROPAGATION_NEVER 以非事务方式执行,如果当前存在事务,则抛出异常。
PROPAGATION_NESTED 如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则进行与PROPAGATION_REQUIRED类似的操作。
阅读更多

mysql 数据库事务

事务四大属性

原子性(Atomicity)

事务包含的所有操作要么全部成功,要么全部失败回滚

一致性(Consistency)

一致性是指事务必须使数据库从一个一致性状态变换到另一个一致性状态,也就是说一个事务执行之前和执行之后都必须处于一致性状态。举例来说,假设用户A和用户B两者的钱加起来一共是1000,那么不管A和B之间如何转账、转几次账,事务结束后两个用户的钱相加起来应该还得是1000,这就是事务的一致性。

隔离性(Isolation)

隔离性是当多个用户并发访问数据库时,比如同时操作同一张表时,数据库为每一个用户开启的事务,不能被其他事务的操作所干扰,多个并发事务之间要相互隔离。

持久性(Durability)

持久性是指一个事务一旦被提交了,那么对数据库中的数据的改变就是永久性的,即便是在数据库系统遇到故障的情况下也不会丢失提交事务的操作。例如我们在使用JDBC操作数据库时,在提交事务方法后,提示用户事务操作完成,当我们程序执行完成直到看到提示后,就可以认定事务已经正确提交,即使这时候数据库出现了问题,也必须要将我们的事务完全执行完成。否则的话就会造成我们虽然看到提示事务处理完毕,但是数据库因为故障而没有执行事务的重大错误。这是不允许的。

阅读更多