软件老王
软件老王和他的IT朋友们,分享他们的技术见解和生活故事,喜欢的可以主页扫描「软件老王」二维码,关注不迷路,公号内回复关键字获取对应干货!
展开
-
java中csv导出-追加-列转行
java中csv导出-追加-列转行原创 2022-11-29 11:46:03 · 1645 阅读 · 2 评论 -
docker部署redis
docker部署redis原创 2022-11-13 20:57:05 · 381 阅读 · 1 评论 -
docker安装mysql8
docker安装mysql8原创 2022-11-11 14:43:03 · 734 阅读 · 0 评论 -
docker常用命令
docker常用命令原创 2022-11-04 16:07:28 · 284 阅读 · 0 评论 -
jenkins执行shell命令权限不够
jenkins执行shell命令权限不够原创 2022-09-07 11:42:56 · 5417 阅读 · 1 评论 -
idea中jar包关联源码
idea中jar包关联源码原创 2022-08-16 17:03:07 · 3810 阅读 · 0 评论 -
javacofig几个常用注解
javacofig使用注解来描述Bean配置的组件,记录几个常用的注解,以便后续回顾。原创 2022-07-22 19:26:35 · 680 阅读 · 0 评论 -
idea两个好用的插件-Code Reading Note与RestfulTool
idea两个好用的插件-Code Reading Note与RestfulTool原创 2022-05-31 14:56:48 · 2687 阅读 · 3 评论 -
升级最新IDEA版本(2022.1.1)
升级最新IDEA版本(2022.1.1)原创 2022-05-30 19:15:02 · 33491 阅读 · 0 评论 -
springboot常用标签介绍
springboot下,基本全标签化了,spring标签很多,有时候会混淆,简单记录下,以免有时候会迷糊。原创 2022-05-23 11:04:08 · 2483 阅读 · 1 评论 -
spring-mybatis两个标签与两个配置
关于spring-mybatis,有两个标签:@MapperScan 、@Mapper和两个配置:mybatis.type-aliases-package与mybatis.mapper-locations,经常在各个配置文件中看到,用于spring结合mybatis使用,有时候可能会有点弄混了,什么情况下必须使用?简单介绍下。原创 2022-05-19 11:23:03 · 1487 阅读 · 0 评论 -
Invalid bound statement (not found)
Invalid bound statement (not found)原创 2022-05-15 21:11:51 · 641 阅读 · 1 评论 -
java启动命令日志输出重定向
1、问题描述java启动项目命令:nohup java -jar -server -Dserver.port=10001 -Xms1024M -Xmx1024M -Dspring.profiles.active=dev /usr/local/application/laowang/laowang.jar >/dev/null 2>&1 &执行起来是没问题,关于日志输出重定向,开始有点搞混了,记录下。2、解决方案1、首先要明确的是,nohup这些是在linux下执行的原创 2022-03-27 21:19:44 · 3422 阅读 · 0 评论 -
Mybatis Generator使用小技巧
1、问题描述mybatis generator 简单说就是生成一些mybatis的公共方法,用了好多年了,一直也没记录过,最近使用稍微有了点变话,简单记录下,方便下次使用,也希望可以帮到其他人。2、解决方案最近使用主要有两点变化:(1)以前使用,指定了本地数据库驱动jar包,本次直接用maven,dependency指定下就好了,配置文件配置好后,团队人员都可以执行;(2)发现朋友使用的方式挺好的,就是初期开发过程中,不可避免的会增加或修改一些字段,xml中新加或者重新生成方法,都有点麻烦,通过新原创 2021-12-21 16:16:27 · 848 阅读 · 1 评论 -
一次打包,多个环境运行(开发、测试、生产等)
1、问题描述以前常用的,使用maven插件根据不同环境(开发、测试、线上)打不同的包,方便吧? 也还可以,但是打各个环境的包配置文件不一样(maven打包是指定了编译配置文件,未指定不会打包进来),有时候包会出现混淆,影响使用;最近使用了jar启动命令指定profiles文件,个人感觉更加合理一些,不使用maven插件打包,就打一个包,在不同的环境下,配置不同的启动参数就可以了,启动命令只需配置一次,一个包,就能用到不同的环境,开发、测试、线上环境都可以用,简单介绍下。2、解决方案简单来说就是使用ja原创 2021-12-14 11:28:21 · 1440 阅读 · 0 评论 -
自定义注解+AOP记录访问日志
1、问题描述AOP拦截请求,记录请求参数、返回参数及响应时间,以前已经介绍过了,但是发现有个小问题,就是有些心跳或者仅仅是查询字典下拉框的请求,本身不用记录,排除的话,需要一个一个排除,有点麻烦,就用自定义注解对aop记录请求与返回做了个下改进,简单记录下。2、解决方案简单说就是新建个自定义注解标签,然后对需要记录日志的的方法加上标签就可以了。2.1 自定义标签import java.lang.annotation.*;@Documented@Retention(RetentionPolic原创 2021-12-02 22:08:16 · 726 阅读 · 0 评论 -
java项目,记录页面修改值,内部打“官司”用
1、问题描述业务需求:项目中的配置信息,关系到程序跑出来数据准确性,需要记录下什么人、什么时间、修改了什么字段,原来值、最新值,以便回溯,防止扯皮,内部打“官司”用。2、解决方案通过java反射,后台程序比对前端传入值与数据库中值,并记录下来;2.1 测试实体类import lombok.Getter;import lombok.Setter;@Setter@Getterpublic class User { private String name; private S原创 2021-11-25 18:11:06 · 1338 阅读 · 1 评论 -
再议java日志管理logback
1、问题描述关于java中的日志管理logback,去年写过关于logback介绍的文章,这次项目中又优化了下,记录下,希望能帮到需要的朋友。2、解决方案这次其实是碰到了一个问题,一般的情况是,会单独在linux上创建个用户,线上和开发环境一样,这样脚本中假如有相对目录的话,也能保持一致,但是这次因为线上环境创建其他用户有问题,只能用root用户操作,导致logback定义的目录,开发和线上不一致,线上是root/***,开发环境没有权限访问该目录(开发环境使用的普通用户),所以logback的目录,原创 2021-08-25 11:04:12 · 684 阅读 · 5 评论 -
SpringBoot-AOP环绕通知记录日志/鉴权
1、问题描述微信公号h5开发,前后端分离,因为是在微信公号里面操作页面,还有涉及到不同手机操作也不一样,导致联调比较麻烦,定位问题也麻烦,以前写过通过aop记录所有前端http请求,就又拿出来梳理了下,记录日志,记录下,希望可以帮到有需要的朋友。2、解决方案项目是springboot项目,通过springboot-aop,配置环绕通知,记录调用地址、入参、返回参数、ip,同时记录执行时间等,以便定位问题。具体的入库就是弄个表,保存下获取到的值,这里就不多做介绍了。2.1 AOP简要说明(1)什么是原创 2021-08-13 14:52:52 · 2671 阅读 · 3 评论 -
Http调用-静态封装类(RestTemplate)
1、问题描述项目中封装了个restTemplate的静态调用类,分享下,希望能帮到需要的朋友。2、解决方案2.1 简要说明:以前用httpclient用的比较多,后来开始用restTemplate,查了两者的区别,大部分无非就是:(1)restTemplate是包含在spring包中的,使用起来更加方便一些,调用也简洁一些;(2)restTemplate的低层支持多种调用,比如:httpclient、HttpURLConnection等吧; 个人认为两者都是为了发送http请求,本质上原创 2021-08-10 14:44:24 · 1340 阅读 · 4 评论 -
一个神奇的标签-@PostConstruct
1、问题描述项目中封装了个restTemplate的静态调用类,统一调用外围接口,但是发现外围系统有些接口反应时间不稳定,还存在失败的情况,为了便于追踪问题,将对外围系统的入参和出参以及响应时间写入到数据库中,但是项目中都是通过静态类调用的,写入数据的方法是动态方法,无法使用,记录下解决方案,希望能帮助需要的朋友。2、解决方案2.1 简单介绍简单说就是用使用jdk提供的@PostConstruct这个标签来实现,先介绍下@PostConstruct这个神奇的标签。Java中该注解的说明:@Post原创 2021-08-08 21:45:57 · 626 阅读 · 1 评论 -
沙雕Java端口进程
1、问题描述idea非正常关闭了,重启idea后,启动项目,发现一直报端口被占用,一般情况下通过在资源管理中,杀掉java.exe,重启idea就好了,但是也有例外,关闭idea,杀掉所有java.exe还是不行,只好通过netstat进行处理了。2、解决方案软件老王项目启动的端口为:10010(1)查询端口对应的进程 netstat -ano | findstr 10010(2)根据(1)查询到的pid,cmd中最后面哪一个,执行: taskkill -pid 42872 -f 如下图原创 2021-08-06 15:56:31 · 367 阅读 · 1 评论 -
Mybatis Log不打印日志
1、问题描述mybasits log plugin是调试sql非常好的工具,可以将mybits赋值后,运行的sql打印到控制台,对于开发过程具有很好的帮助效果,以前介绍过,就不再累赘了,但是默认情况下是没有日志打印的,需要配置下。2、解决方案配置下日志输出:(mybatis-plus版本/mybatis版本)就可以了,在配置文件*.yml中配置下。mybatis-plus: configuration: log-impl: org.apache.ibatis.logging.stdou原创 2021-08-06 15:43:49 · 11508 阅读 · 1 评论 -
再议分页插件PageHelper
1、问题描述java分页以前介绍过pagehelper,最近项目中又用到分页,看了下,发现使用springboot下使用起来更加方便了,又系统看了看,分享下,希望能帮到有需要的朋友。2、解决方案2.1 官方文档还是那句话,官方文档才是yyds,地址:https://github.com/pagehelper第一个mybatis-pagehelper是源码实现,第二个springboot的是对第一个做了封装。目前springboot下最新的pagehelper版本是:1.3.12.2 具体配原创 2021-08-04 16:41:07 · 834 阅读 · 3 评论 -
微信分享(JS-SDK权限签名算法)-Java实现
1、问题描述公众号中的H5有个业务场景,要分享页面给好友,但是因为是在微信中分享,分享的链接微信是不认的,需要首先使用签名认证,认证后才能分享,按照微信官网api,首先需要获取token,然后再根据token获取jsapiticket,然后再将随机数、时间戳、url等按照keyvalue排序加密去认证,java后端实现了下,分享下代码,给需要的朋友。2、解决方案2.1 官方文档官方文档才是yyds,首先查看微信开发者文档(https://developers.weixin.qq.com/doc/of原创 2021-08-03 12:19:34 · 2296 阅读 · 3 评论 -
java反射-变量键值对排序
1、问题描述因为要做API接口安全设计方案(已实现)(https://ruanjianlaowang.blog.youkuaiyun.com/article/details/118806853 ),牵扯到前后端加密签名,从前端获取json数据后,首先需要对json数据按照首字母进行排序,再按照key1value1key2value2进行加密(json数据从前端到后端,顺序会乱),结合网上的方案,使用java的反射机制,对键值对按照首字母排序加密。2、解决方案2.1 方案(1)使用@RequestBody将jso原创 2021-07-26 11:23:22 · 409 阅读 · 6 评论 -
API接口安全设计方案(已实现)
1、背景网络安全方案,主要从数据加密与api接口安全两个方面考虑,数据加密https已经加密了,就不再次加密了;主要从api安全方面考虑。2、接口安全设计在代码层面,对接口进行安全设计一、使用token进行用户身份认证二、使用sign防止传入参数被篡改三、用时间戳防止暴力请求一、使用token进行用户身份认证用户身份认证的流程图如下:具体说明如下:1、 用户登录时,客户端请求接口,传入用户名和密文的密码2、 后台服务对用户身份进行验证。若验证失败,则返回错误结果;若验证通过,则生成一原创 2021-07-16 16:37:35 · 11111 阅读 · 11 评论 -
java枚举转json
1、背景java后端的枚举类型,要展示到前端,提供给用户进行下拉选择,java后端需要封装enum为json字符串提供给前端,需要首先将枚举类型转为list,然后再转为json字符串。2、方案方案也很简单,使用EnumSet.allOf(TestEnum.class),将数据获取到再塞到list中就可以了。代码如下:import com.alibaba.fastjson.JSONObject;import java.util.ArrayList;import java.util.EnumSet原创 2021-07-12 14:18:00 · 3550 阅读 · 2 评论 -
springboot项目事务标签验证
1、问题描述springboot项目中配置事务,以前通过标签用过,上个内部项目,因为是在别人代码中使用了,发现好像没起作用(然后因为有框架保证,就没计较了),新启动项目又用到,验证了下,springboot项目下配置两个标签就可以了。2、解决方案2.1 说明(1)其实就两个标签,一个用到启动类中(@EnableTransactionManagement),另一个就是那里需要就配置到哪里(@Transactional);(2)方案,就随便找了个以前的测试项目,一个方法中包含:保存一条数据到数据库中和原创 2021-07-11 22:54:15 · 414 阅读 · 9 评论 -
RequestParam与RequestBody
一、问题描述由于项目是前后端分离,因此后台使用的是spring boot,做成微服务,只暴露接口。接口设计风格为restful的风格,在get请求下,后台接收参数的注解为RequestBody时会报错;在post请求下,后台接收参数的注解为RequestParam时也会报错。二、问题原因由于spring的RequestParam注解接收的参数是来自于requestHeader中,即请求头,也就是在url中,格式为xxx?username=123&password=456,而RequestBod转载 2021-07-11 19:25:30 · 1538 阅读 · 0 评论 -
java获取微信用户信息(含源码,直接改下appid就可以使用了)
1、问题描述要在微信公号中新建自定义菜单,然后导航到公司H5中,需要首先获取用户微信信息,然后再进行手机号绑定,以前微信公号开发做的不多,记录下,希望能帮到需要的朋友!2、解决方案2.1 官方文档,宝典(1)首先最权威的还是微信的官方文档,这个才是宝典https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/Wechat_webpage_authorization.html#1(2)我们用的自定义菜单是属于微信网页开发(3)微信原创 2021-06-30 16:27:15 · 2945 阅读 · 8 评论 -
基于springboot整合spring-retry
1、背景本系统调用外围系统接口(http+json),但是发现有时外围系统服务不太稳定,有时候会出现返回一串xml或者gateway bad的信息,导致调用失败,基于这一原因,采用基于springboot,整合spring-retry的重试机制到系统工程中,demo已经放到github上。2、解决方案简要说明:demo工程基于springboot,为了方便验证,采用swagger进行测试验证。2.1 pom文件<?xml version="1.0" encoding="UTF-8"?>原创 2021-06-09 18:04:05 · 746 阅读 · 5 评论 -
前后端联调之nginx部署
1、问题说明java前后端分离开发,因为后端请求牵扯要使用动态生成的token,使用swagger调用接口有点麻烦,就让前端给了下打包后的文件,本地(windows)启动nginx,然后进行后端接口自测。2、解决方案2.1 前端部署前端使用vue进行开发,为了节省时间,没有直接使用前端源码自行打包,编译太慢,采用前端人员打包后的dist直接进行部署。2.2 nginx部署(1)nginx下载地址:http://nginx.org/en/download.html软件老王下载的是1.16原创 2021-04-13 00:15:30 · 955 阅读 · 5 评论 -
基于mysql的shiro项目转oracle数据库
1、问题说明改造以前的一个shiro项目,以前数据库用的mysql,要更改成oracle,记录下,希望能帮到有需要的朋友。2、解决方案因为数据库中表结构,也就6个张表(5个权限表+一个日志表),原方案是想根据数据库字段,转到pownerdesigner中,然后再转出来,后来发现太麻烦放弃了。2.1 使用navicat premium(1)通过navicat premimum 连接oracle数据库。(2) 选中数据库,右键选中转储SQL文件,然后选择仅结构,就能导出oracle建表sql了。原创 2021-04-11 21:19:24 · 284 阅读 · 0 评论 -
mybatis项目采用mybatis-plus开发,报:Invalid bound statement (not found) 异常,详细解决方案
1、问题说明原有项目用shiro控制权限,要合并到新项目中,新项目中用到mybatis-plus (官网地址:https://mp.baomidou.com/),合并后项目启动不起来。报:org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)。官网常见问题中有描述问题解决方案:描述的比较抽象,弄了半天才解决,记录下,希望对朋友有帮助。2、解决方案2.1 包的问题如下pom文件配置,删除m原创 2021-03-23 13:29:28 · 2398 阅读 · 0 评论 -
ArrayList与linkedList区别及扩容方式
1. ArrayArray(数组)是基于索引(index)的数据结构,它使用索引在数组中搜索和读取数据是很快的。Array获取数据的时间复杂度是O(1),但是要删除数据却是开销很大,因为这需要重排数组中的所有数据, (因为删除数据以后, 需要把后面所有的数据前移)缺点: 数组初始化必须指定初始化的长度, 否则报错例如:int[] a = new int[4];//推介使用int[] 这种方式初始化int c[] = {23,43,56,78};//长度:4,索引范围:[0,3]2. List转载 2021-03-02 22:45:26 · 1076 阅读 · 0 评论 -
单点登录原理与实现
一、单系统登录机制1、http无状态协议web应用采用browser/server架构,http作为通信协议。http是无状态协议,浏览器的每一次请求,服务器会独立处理,不与之前或之后的请求产生关联,这个过程用下图说明,三次请求/响应对之间没有任何联系但这也同时意味着,任何用户都能通过浏览器访问服务器资源,如果想保护服务器的某些资源,必须限制浏览器请求;要限制浏览器请求,必须鉴别浏览器请求,响应合法请求,忽略非法请求;要鉴别浏览器请求,必须清楚浏览器请求状态。既然http协议无状态,那就让服务器和浏转载 2021-01-16 13:52:36 · 456 阅读 · 0 评论 -
分享一款非常棒的数据库文档生成工具,可导出md、excel等格式
1、背景因为要给朋友项目补数据库文档,文档中需要填写数据库表结构等信息。找了一个开源的、非常棒的数据库文档生成工具,可以导出word、excel(可编辑)、md等格式。。亲测,很棒,分享给大家。。2、内容2.1 简介2.2 登录数据库免安装,直接打开exe文件,类似navicat,直接登录数据库。2.3 软件界面导出格式很多,有chm、word、pdf、excel、md等等。2.4 导出dm格式示例2.5 导出excel格式导出excel格式,三个sheet页面,最后一个是明细原创 2020-12-15 12:23:55 · 1892 阅读 · 0 评论 -
甲方提供核心jar包,添加到本地maven仓库
1、背景甲方提供了几个内部包,需要用到新项目中,直接复制到maven仓库是无法识别的,编译不通过,不能使用。2、解决方案使用mvn命令安装就可以了,客户提供的jar包就不展示了,刚好oracle的ojdbc7包maven仓库中也没有,需要安装下。2.1 jar包在maven中的配置 <dependency> <groupId>com.oracle</groupId> <artifactId>ojdbc7</artifactId&g原创 2020-12-12 12:15:10 · 288 阅读 · 0 评论 -
SpringMVC如何工作的?
SpringMVC的工作原理图:SpringMVC流程1、 用户发送请求至前端控制器DispatcherServlet。2、 DispatcherServlet收到请求调用HandlerMapping处理器映射器。3、 处理器映射器找到具体的处理器(可以根据xml配置、注解进行查找),生成处理器对象及处理器拦截器(如果有则生成)一并返回给DispatcherServlet。4、 DispatcherServlet调用HandlerAdapter处理器适配器。5、 HandlerAdapter经转载 2020-12-05 23:59:30 · 302 阅读 · 0 评论