首页
归档
友链
关于
Search
1
网易云音乐黑胶会员月月免费赠送
3,632 阅读
2
十年之约RSS聚合订阅服务上线
3,085 阅读
3
工资发放日的区别
2,663 阅读
4
rsyslogd内存占用过高解决方案
2,436 阅读
5
Nginx反代MinIO后,上传文件签名异常
2,247 阅读
零碎
标本
码海
工具
其他
登录
Search
标签搜索
北京
摄影
生活
旅行
Java
学习笔记
教程
Linux
服务器
软件
日记
SpringBoot
Windows
服务
数据库
福利
Spring
系统
SQL
docker
萧瑟
累计撰写
198
篇文章
累计收到
1,410
条评论
首页
栏目
零碎
标本
码海
工具
其他
页面
归档
友链
关于
搜索到
198
篇与
萧瑟
的结果
2022-02-05
JAVA中处理空字符串ASCII 160 的char
最近项目上遇到一个去除空格的问题,使用用正则表达\s死活replace不掉,trim也没辙,空格那个char转成int一看,是160。查了一下相关资料,要用以下方法去除即可。String.replaceAll("\\u00A0","")顺便再记录一下去除非法字符的方法。String.replaceAll("[:\\\\/*\"?|<>']", "")
2022年02月05日
367 阅读
0 评论
2022-01-11
20220111碎碎念
2022年01月11日碎碎念,吐槽生活百态,品人间苦味。
2022年01月11日
739 阅读
8 评论
2022-01-09
Apple M1 使用nvm管理并安装Nodejs
本文使用 nvm 来管理和安装 node.js,研究和实验了半天,环境终于配置好了。安装nvm curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.6/install.sh | bash如果GitHub国内网络问题,可能需要配置一下本地host或者代理。## 方法一:修改host文件 sudo vim /etc/hosts ## 键盘输入 i 进入编辑 199.232.68.133 raw.githubusercontent.com ## 修改hosts文件后,按 esc 键退出,再按shift+:键,再输入w和q,保存退出 ## 方法二:终端内设置代理 ## 好处是简单直接,并且影响面很小(只对当前终端有效) export http_proxy=http://proxyAddress:port出现以下界面表示安装成功配置环境变量注:~/.bash_profile, ~/.zshrc, ~/.profile,~/.bashrc部分人没配置过环境变量可能这几个文件并不存在,建议提前新建一下。后期方便使用和配置其他环境变量。修改~/.bash_profile文件,最后添加上export NVM_DIR="$HOME/.nvm" [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"执行命令:source ~/.bash_profile source ~/.zshrc配置完成后,输入 nvm --version可以检测当前安装版本,我的是0.33.6.安装Node.js## 获取Node.js所以版本列表 nvm ls-remote ## 安装最新稳定版 node ## 这里最新稳定版是v17.3.0 ## 因为版本太高导致项目无法启动, ## 安装低版本v14.18.2和v14.15.0,会出现错误, ## clang: error: no such file or directory: 'CXX=c++' ## 查找半天原因也无法解决,后来一个版本的试,发现v16.13.1可以安装,且项目能正常允许 ## 估计是arm版本适配问题吧。 nvm install stable ## 安装指定版本node.js nvm install 版本号 ## 切换node版本 nvm use v16.13.1 ## 设置默认 nvm alias default v16.13.1注意事项也在上面执行脚本内说明了。参考网址Mac os 安装node.js及环境变量的配置过程(Lifeispink - 博客园)Mac安装多个版本node - 简书Mac 中安装 nvm: 切换Node 不同版本 - 广东靓仔-啊锋 - 博客园Mac环境(m1适配)下node安装与卸载方法 - 简书Macbook M1 安装node-CSDN博客MAC下终端走代理的几种方法_Make-CSDN博客
2022年01月09日
1,665 阅读
0 评论
2022-01-08
Java根据URL下载图片至客户端、服务器示例整合上传又拍云对象存储
Java根据URL下载图片至客户端、服务器示例整合又拍云上传
2022年01月08日
650 阅读
1 评论
2022-01-06
SpringBoot设置文件上传大小限制异常解决方案
SpringBoot默认上传文件大小超限,会报以下异常:org.apache.tomcat.util.http.fileupload.FileUploadBase$FileSizeLimitExceededException: The field file exceeds its maximum permitted size of 1048576 bytes.报错的原因是:springBoot项目自带的tomcat对上传的文件大小有默认的限制,SpringBoot官方文档中展示:每个文件的配置最大为1Mb,单次请求的文件的总数不能大于10Mb。解决方法:请在配置文件(application.properties/application.yml)中加入如下设置即可低版本: 1.Xspring.http.multipart.max-file-size=10MB spring.http.multipart.max-request-size=10MB高版本: 2.Xspring.servlet.multipart.max-file-size=30Mb spring.servlet.multipart.max-request-size=30Mb或者spring.servlet.multipart.maxFileSize=10MB spring.servlet.multipart.maxRequestSize=20MB
2022年01月06日
405 阅读
0 评论
2022-01-05
SQLServer for Linux安装
前段时候,自己搭建了一个内网虚拟机,准备部署一下之前的项目,发现还缺少数据库,后来整理了一下,发现没必要使用Windows Server来部署,完全可以使用Liunx,包括IIS也是有软件可以替换。本文整理了一下SQL Server for Linux安装教程
2022年01月05日
342 阅读
0 评论
2022-01-04
2022年中国移动A股成功上市,感恩有礼
今天公司大群内领导分享了一个活动福利,是关于2022年中国移动A股成功上市,感谢有礼,送福利,我顺便也分享给大伙。
2022年01月04日
1,341 阅读
7 评论
2022-01-03
2022.01.03碎碎念
日常碎碎念,简单记录点滴生活,算是写的一些流水账吧。
2022年01月03日
531 阅读
10 评论
2022-01-02
2022年元旦再临八达岭长城
2022年元旦,再次登顶八达岭长城,新年第一天就要做个好汉。
2022年01月02日
565 阅读
7 评论
2021-12-13
SpringBoot AOP日志切面
AOP切面AOP(Aspect-Oriented Programming,面向切面编程),它利用一种”横切”的技术,将那些多个类的共同行为封装到一个可重用的模块。便于减少系统的重复代码,降低模块之间的耦合度,并有利于未来的可操作性和可维护性。AOP相关概念Aspect(切面):声明类似于Java中的类声明,在Aspect中会包含一些Pointcut及相应的Advice。Joint point(连接点):表示在程序中明确定义的点。包括方法的调用、对类成员的访问等。Pointcut(切入点):表示一个组Joint point,如方法名、参数类型、返回类型等等。Advice(通知):Advice定义了在Pointcut里面定义的程序点具体要做的操作,它通过(before、around、after(return、throw)、finally来区别实在每个Joint point之前、之后还是执行 前后要调用的代码。Before:在执行方法前调用Advice,比如请求接口之前的登录验证。Around:在执行方法前后调用Advice,这是最常用的方法。After:在执行方法后调用Advice,after、return是方法正常返回后调用,after\throw是方法抛出异常后调用。Finally:方法调用后执行Advice,无论是否抛出异常还是正常返回。AOP proxy:AOP proxy也是Java对象,是由AOP框架创建,用来完成上述动作,AOP对象通常可以通过JDK dynamic proxy完成,或者使用CGLIb完成。Weaving:实现上述切面编程的代码织入,可以在编译时刻,也可以在运行时刻,Spring和其它大多数Java框架都是在运行时刻生成代理。代码示例POM引入<!-- SpringBoot Aop组件--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-aop</artifactId> </dependency> <!-- 分析客户端信息的工具类--> <dependency> <groupId>eu.bitwalker</groupId> <artifactId>UserAgentUtils</artifactId> <version>1.21</version> </dependency>切面:LogAspect代码/** * 添加aop日志打印 * * @author yanqs * @date 2020/1/13 14:42 */ @Aspect @Component @Slf4j public class LogAspect { /** * 进入方法时间戳 */ private Long startTime; /** * 方法结束时间戳(计时) */ private Long endTime; public LogAspect() { } /** * 定义请求日志切入点,其切入点表达式有多种匹配方式,这里是指定路径 */ @Pointcut("execution(public * com.springboot.logaop.controller.*.*(..))") public void logPointcut() { } /** * 前置通知: * 1. 在执行目标方法之前执行,比如请求接口之前的登录验证; * 2. 在前置通知中设置请求日志信息,如开始时间,请求参数,注解内容等 * * @param joinPoint * @throws Throwable */ @Before("logPointcut()") public void doBefore(JoinPoint joinPoint) { // 接收到请求,记录请求内容 ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes(); HttpServletRequest request = attributes.getRequest(); //获取请求头中的User-Agent UserAgent userAgent = UserAgent.parseUserAgentString(request.getHeader("User-Agent")); //打印请求的内容 startTime = System.currentTimeMillis(); log.info("请求开始时间:{}", LocalDateTime.now()); log.info("请求Url : {}", request.getRequestURL().toString()); log.info("请求方式 : {}", request.getMethod()); log.info("请求ip : {}", request.getRemoteAddr()); log.info("请求方法 : ", joinPoint.getSignature().getDeclaringTypeName() + "." + joinPoint.getSignature().getName()); log.info("请求参数 : {}", Arrays.toString(joinPoint.getArgs())); // 系统信息 log.info("浏览器:{}", userAgent.getBrowser().toString()); log.info("浏览器版本:{}", userAgent.getBrowserVersion()); log.info("操作系统: {}", userAgent.getOperatingSystem().toString()); } /** * 返回通知: * 1. 在目标方法正常结束之后执行 * 1. 在返回通知中补充请求日志信息,如返回时间,方法耗时,返回值,并且保存日志信息 * * @param ret * @throws Throwable */ @AfterReturning(returning = "ret", pointcut = "logPointcut()") public void doAfterReturning(Object ret) throws Throwable { endTime = System.currentTimeMillis(); log.info("请求结束时间:{}", LocalDateTime.now()); log.info("请求耗时:{}", (endTime - startTime)); // 处理完请求,返回内容 log.info("请求返回 : {}", ret); } /** * 异常通知: * 1. 在目标方法非正常结束,发生异常或者抛出异常时执行 * 1. 在异常通知中设置异常信息,并将其保存 * * @param throwable */ @AfterThrowing(value = "logPointcut()", throwing = "throwable") public void doAfterThrowing(Throwable throwable) { // 保存异常日志记录 log.error("发生异常时间:{}", LocalDateTime.now()); log.error("抛出异常:{}", throwable.getMessage()); } }@Before和@AfterReturning部分也可使用以下代码替代/** * 在执行方法前后调用Advice,这是最常用的方法,相当于@Before和@AfterReturning全部做的事儿 * * @param pjp * @return * @throws Throwable */ @Around("logPointcut()") public Object doAround(ProceedingJoinPoint pjp) throws Throwable { // 接收到请求,记录请求内容 ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes(); HttpServletRequest request = attributes.getRequest(); //获取请求头中的User-Agent UserAgent userAgent = UserAgent.parseUserAgentString(request.getHeader("User-Agent")); //打印请求的内容 startTime = System.currentTimeMillis(); log.info("请求Url : {}", request.getRequestURL().toString()); log.info("请求方式 : {}", request.getMethod()); log.info("请求ip : {}", request.getRemoteAddr()); log.info("请求方法 : ", pjp.getSignature().getDeclaringTypeName(), ".", pjp.getSignature().getName()); log.info("请求参数 : {}", Arrays.toString(pjp.getArgs())); // 系统信息 log.info("浏览器:{}", userAgent.getBrowser().toString()); log.info("浏览器版本:{}", userAgent.getBrowserVersion()); log.info("操作系统: {}", userAgent.getOperatingSystem().toString()); // pjp.proceed():当我们执行完切面代码之后,还有继续处理业务相关的代码。proceed()方法会继续执行业务代码,并且其返回值,就是业务处理完成之后的返回值。 Object ret = pjp.proceed(); log.info("请求结束时间:" + LocalDateTime.now()); log.info("请求耗时:{}", (System.currentTimeMillis() - startTime)); // 处理完请求,返回内容 log.info("请求返回 : ", ret); return ret; }测试结果2021-12-13 15:58:16.219 INFO 21528 --- [nio-8080-exec-1] c.s.logaop.config.aspect.LogAspect : 请求开始时间:2021-12-13T15:58:16.219 2021-12-13 15:58:16.220 INFO 21528 --- [nio-8080-exec-1] c.s.logaop.config.aspect.LogAspect : 请求Url : http://localhost:8080/test/getGetId 2021-12-13 15:58:16.220 INFO 21528 --- [nio-8080-exec-1] c.s.logaop.config.aspect.LogAspect : 请求方式 : GET 2021-12-13 15:58:16.220 INFO 21528 --- [nio-8080-exec-1] c.s.logaop.config.aspect.LogAspect : 请求ip : 0:0:0:0:0:0:0:1 2021-12-13 15:58:16.221 INFO 21528 --- [nio-8080-exec-1] c.s.logaop.config.aspect.LogAspect : 请求方法 : 2021-12-13 15:58:16.221 INFO 21528 --- [nio-8080-exec-1] c.s.logaop.config.aspect.LogAspect : 请求参数 : [zhangsan] 2021-12-13 15:58:16.221 INFO 21528 --- [nio-8080-exec-1] c.s.logaop.config.aspect.LogAspect : 浏览器:CHROME9 2021-12-13 15:58:16.221 INFO 21528 --- [nio-8080-exec-1] c.s.logaop.config.aspect.LogAspect : 浏览器版本:96.0.4664.55 2021-12-13 15:58:16.221 INFO 21528 --- [nio-8080-exec-1] c.s.logaop.config.aspect.LogAspect : 操作系统: WINDOWS_10 2021-12-13 15:58:16.229 INFO 21528 --- [nio-8080-exec-1] c.s.logaop.config.aspect.LogAspect : 请求结束时间:2021-12-13T15:58:16.229 2021-12-13 15:58:16.229 INFO 21528 --- [nio-8080-exec-1] c.s.logaop.config.aspect.LogAspect : 请求耗时:14 2021-12-13 15:58:16.229 INFO 21528 --- [nio-8080-exec-1] c.s.logaop.config.aspect.LogAspect : 请求返回 : zhangsanDemoSpringBoot-AOP参考:springboot配置aop切面日志打印 - 森林木马 - 博客园 springboot + AOP 日志_请叫我猿叔叔的博客-CSDN博客_aop日志
2021年12月13日
922 阅读
1 评论
1
...
10
11
12
...
20