首页
归档
友链
关于
Search
1
网易云音乐黑胶会员月月免费赠送
3,343 阅读
2
十年之约RSS聚合订阅服务上线
2,758 阅读
3
工资发放日的区别
2,471 阅读
4
rsyslogd内存占用过高解决方案
2,323 阅读
5
Nginx反代MinIO后,上传文件签名异常
2,171 阅读
零碎
标本
码海
工具
其他
登录
Search
标签搜索
北京
摄影
生活
Java
旅行
学习笔记
教程
Linux
服务器
软件
SpringBoot
日记
Windows
服务
数据库
福利
Spring
系统
SQL
docker
萧瑟
累计撰写
195
篇文章
累计收到
1,355
条评论
首页
栏目
零碎
标本
码海
工具
其他
页面
归档
友链
关于
搜索到
195
篇与
萧瑟
的结果
2022-01-08
Java根据URL下载图片至客户端、服务器示例整合上传又拍云对象存储
Java根据URL下载图片至客户端、服务器示例整合又拍云上传
2022年01月08日
629 阅读
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日
366 阅读
0 评论
2022-01-05
SQLServer for Linux安装
前段时候,自己搭建了一个内网虚拟机,准备部署一下之前的项目,发现还缺少数据库,后来整理了一下,发现没必要使用Windows Server来部署,完全可以使用Liunx,包括IIS也是有软件可以替换。本文整理了一下SQL Server for Linux安装教程
2022年01月05日
321 阅读
0 评论
2022-01-04
2022年中国移动A股成功上市,感恩有礼
今天公司大群内领导分享了一个活动福利,是关于2022年中国移动A股成功上市,感谢有礼,送福利,我顺便也分享给大伙。
2022年01月04日
1,267 阅读
7 评论
2022-01-03
2022.01.03碎碎念
日常碎碎念,简单记录点滴生活,算是写的一些流水账吧。
2022年01月03日
512 阅读
10 评论
2022-01-02
2022年元旦再临八达岭长城
2022年元旦,再次登顶八达岭长城,新年第一天就要做个好汉。
2022年01月02日
536 阅读
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日
871 阅读
1 评论
2021-11-15
工资发放日的区别
打工狗最关心的莫过于咱们啥时候发狗粮了,最近很多企业也纷纷打着疫情的幌子拖延给兄弟们发工资的时间,甚至还有一些物流企业出现扣押、递延部分工资(不是奖金哦,是工资)防止快递小哥哥们在忙季辞职的情况。作为被高成本挤压到消费降级的大城市小白领们,也是非常关注发工资的时间点,这关系到我们这个月能不能按时交租、按时还信用卡。今天知乎人称“干一行扒一行”的索小姐就来给大家扒一扒企业发工资时间点的门道儿~工资那点事儿看看大类型,你家公司属于哪类我们把企业发薪时点分几类:当月发薪、次月1-9号发薪、次月10-15号发薪、20号后发薪。劳动法规定薪酬递延发放不得超过一个月,所以正常企业都会在次月30号前完成发薪。影响发薪日期的因素主要有考勤统计时间、是否当月发绩效奖金、留人递延等。下面我们按类型分析:咋还会有提前发工资的??当月发薪事业单位和一些老国企偏多,这类企业通常对考勤出勤考核不严格,薪酬激励波动较小或年终一笔发放激励奖金。通常来说,企业的月基本工资计算公式为 基本工资/22*出勤天数,22是工作日天数,所以工资的计算是根据出勤天数来的,能够当月发放说明企业对考勤管理不是特别严格,默认员工出勤。且绩效工资不会在当月发放。因为每月统计员工绩效完成情况是要时间的。凡事都有特例,有一家国有券商就是当月发薪,次月根据考勤情况扣回缺勤多发,但这类比较少。这种良心单位呢,既然敢提前发,就说明他们不太在意你实际出勤率怎么样,就算你没有全勤,第二个月不会真的扣回来,因为人力算这个小账真的太费事了~~~我有个朋友入职一家国企7月14号入职的,他们公司的发薪日期是每个月15号发当月的,所以他一入职还没干活,就拿了全月的工资,次月没有根据缺勤扣回。次月1-7号发薪这类企业在大型国企、外企中占比很高,且通常为市场化程度较高的企业。递延到次月,是因为需要一定时间统计考勤情况。有人说,为什么不能用办公系统根据打卡情况直接算出出勤时间发工资呢?不能直接统计考勤的原因有这么几个:1)在10000人以上大型企业中,多数企业有区域分公司和事业部,管理权限和人事权限会下放到区域公司和事业部,所以无法通过OA直接统计全公司的考勤统计,需要事业部和分公司上报人员入离职、奖金和补贴增减等异动情况。我前家公司就是这类情况,总部人力在每个月2-4号开始向事业部收集人事异动,5号统计好,跑完薪酬报表,请人力资源部总经理和公司总裁签字审批后,6号交给代发银行,7号前发薪。2)员工不是每天都会准时打卡的,特别是销售类部门外勤较多,员工的外出申请提交不及时或者忘记打卡,多数企业不至于为这些事情扣减员工工资。所以他们会规定次月3号前,公司把考勤统计出来,员工根据统计表把漏签的提交申请补签上去,算全勤。这也会耽误统计时间。次月10-15号发薪也有许多港企、外企、大型国有银行、销售导向的企业采用这个时间段发薪,薪酬激励较为市场化,有些大型银行采用每月发部分绩效奖金的形式,所以对上月的业绩进行归集统计,算薪时间较长,10-15日有充足的时间。遇到节假日,一般会在15节假日前的工作日发薪。也有些企业采用两笔支付的,10号前发基本工资,30号前发本月绩效奖金的形式。20号以后发薪如果是经营状况良好的、股东不太差钱的企业,一般不会干这事。这类企业,有无利息侵占员工现金时间价值的嫌疑。主要动机是采用递延工资的形式增加员工的离职成本,降低人员流动性。这种发薪时段对信用卡、贷款的还款带来的现金流压力较大。在你拿offer的时候可以问一下工资时间,如果遇到这种,要警惕。努力做好每一次面求职准备,就是对自己最大的“不辜负”。素材来源于:“BOSS直聘”
2021年11月15日
2,471 阅读
15 评论
2021-11-14
利用GitHub520提供hosts文件定时更新本地hosts文件
之前自己利用 Gitea 搭建了一个Git私服,镜像 GitHub 项目的时候经常无法访问,导致镜像失败。后来发现了一个不错的项目 GitHub520 ,只要去修改本地 hosts 文件就可以访问GitHub了。但是每次去修改服务器的 hosts 文件,就有些繁琐了。后来写一个脚本,并配合 Linux 的 Crontab 定时更新,完美解决问题。脚本内容#!/bin/bash # 定时更新GitHub Host内容 # 利用项目GitHub520提供Host文件定时更新本地Host # # # Author: xiaose # Email: qingshanking@vip.qq.com # Github: https://github.com/qingshanking # Date: 2021/08/23 sed -i '3,$d' /etc/hosts # 上述作用是从第三行开始 进行修改,保留系统自带的hosts内容 curl https://raw.hellogithub.com/hosts >> /etc/hosts # 拉取hosts文件 写入本地hosts项目详情Crontab定时任务[root@localhost ~]# crontab -e ## -e: 编辑crontab定时任务 ## -l: 查询crontab任务 ## -r: 删除当前用户所有的crontab任务12345 ## 每30分钟执行一次ModifyHost 修改hosts文件 */30 * * * * /root/ModifyHost.sh更多用法,可参考Linux Crontab 定时任务
2021年11月14日
1,146 阅读
1 评论
2021-11-13
苹果M1安装JDK环境
自从前段时间给小可爱买了苹果 MacBookPro 后,我一直都没怎么体验过,刚好最近她暂时不用,我最近也挺闲,就用了几天,感觉“解放生产力的第一步就是生产工具”。正所谓“工欲善其事必先利其器”,所以总结一下使用过程和一些常用的工具使用。JDK安装由于Oracle公司没有适配苹果M1芯片的JDK,在网上找了一个zulu家的JDK,适合ARM架构的,也支持苹果M1芯片。拖动安装然后出现安装流程,下一步就可以安装完成。环境校验下载地址{cloud title="官网下载" type="default" url="https://www.azul.com/downloads/?version=java-8-lts&os=macos&architecture=arm-64-bit&package=jdk" password=""/}{cloud title="本站下载" type="default" url="https://pan.bcrjl.com/dev/jdk" password=""/}
2021年11月13日
778 阅读
0 评论
1
...
10
11
12
...
20