
Java开发进阶
文章平均质量分 53
code_xuan
这个作者很懒,什么都没留下…
展开
-
Springboot部署脚本启动
【代码】Springboot部署脚本启动。原创 2023-01-13 21:49:47 · 1054 阅读 · 0 评论 -
nginx配置
目的:访问9098到绑定的文件夹内,访问页面后,页面中的请求会携带.env.production 中的 VUE_APP_BASE_API ,页面内部有转发,将9098变为接口的端口地址。拦截三个前缀url进行转发,转发路径自带前缀url。宝塔中进行域名解析后。...原创 2022-08-03 18:28:07 · 788 阅读 · 0 评论 -
获取视频封面
OSS或JAVACV获取视频封面原创 2022-06-27 16:33:43 · 1419 阅读 · 0 评论 -
springboot将返回的null转化为对应的默认值且与fastJson配置不冲突
消息转换原创 2022-06-23 16:18:28 · 1032 阅读 · 0 评论 -
websocket实现直播间实时在线人数-组播消息
springboot引入websocket@Configurationpublic class WebSocketConfig { //将服务加载到IOC容器中 @Bean public ServerEndpointExporter serverEndpointExporter(){ return new ServerEndpointExporter(); }}import cn.hutool.core.bean.BeanUtil;import cn.原创 2022-05-25 18:16:30 · 1088 阅读 · 0 评论 -
git:本地仓库有文件,远程仓库也有文件
问题:1、本地初始化了git仓库,放了一些文件进去并进行了add操作和commit提交操作;2、github创建了git仓库并建立了README,.gitignore等文件;3、本地仓库添加了github上的git仓库作为远程仓库,起名origin; git remote add origin 远程仓库地址4,本地仓库也远程仓库关联git branch --set-upstream-to=origin/master master出现问题:解决问题:如果直接pull,会出现refu原创 2021-12-03 10:25:30 · 437 阅读 · 0 评论 -
springboot实现读取excel插入数据库
html:<input type="file" name="fileName1" id="fileName1"/><input type="button" id="sendToUser" value="提交" />JS$('#sendToUser').click(function () { var $file1 = $("input[name='fileName1']").val();//用户文件内容(文件) // 判断文件是否为空原创 2021-11-19 15:47:48 · 1797 阅读 · 0 评论 -
Java程序中获取文件的方法:Class.getResource()与Class.getResourceAsStream()
有以下目录:获取程序中的文件要从编译后的target-classes 出发寻找路径问题:在Test类中应该如何分别获得file1.txt file2.txt file3.txt file4.txt这四个文件?Class.getResource():file3.txt:方法一:File file3 = new File(Test.class.getResource(“file3.txt”).getFile());方法二:File file3 = new File(Test.class.ge原创 2021-09-11 14:32:18 · 494 阅读 · 0 评论 -
Spring cloud gateway 代替Nginx实现端口转发并添加统一跨域+token认证
Nginx端口转发配置:server { listen 9988; server_name localhost; # location / { # # 静态资源服务 # root D:/nginx-1.21.1/static; # index index.html index.htm; # } # ~为正则匹配,路径中包含xxx就转原创 2021-08-31 15:20:49 · 1993 阅读 · 0 评论 -
element-ui实现tableTree:前后端
需实现的效果:前端代码:<template> <div class="app-container"> <el-table :data="tableData" :load="getChildrens" :tree-props="{children: 'children', hasChildren: 'hasChildren'}" style="width: 100%" row-key="id" border la原创 2021-08-24 15:34:07 · 526 阅读 · 0 评论 -
EasyExcel的读取写入操作,测试+项目使用
将测试数据写入Excel实体类:@Data@AllArgsConstructor@NoArgsConstructorpublic class UserData { @ExcelProperty(value = "用户编号",index = 0) private int uid; @ExcelProperty(value = "用户名",index = 1) private String userName;}写操作:public class TestWri原创 2021-08-20 16:56:55 · 641 阅读 · 0 评论 -
Java多线程读取文件
package com.qwx.test;import java.io.*;/** * @ClassName: ReadFile * @Description: java类作用描述 * @Author: qiaowenxuan * @CreateDate: 2021/8/16$ 18:36$ * @Version: 1.0 */public class ReadFile { public static void main(String[] args) { Fil原创 2021-08-16 18:49:34 · 2519 阅读 · 0 评论 -
s-h-i-r-o概念总结
Apache Shiro 是 Java 的一个安全(权限)框架功能Authentication:身份认证/登录,验证用户是不是拥有相应的身份;Authorization:授权,即权限验证,验证某个已认证的用户是否拥有某个权限;即判断用户是否能进行什么操作,如:验证某个用户是否拥有某个角色。或者细粒度的验证某个用户对某个资源是否具有某个权限;Session Manager:会话管理,即用户登录后就是一次会话,在没有退出之前,它的所有信息都在会话中;会话可以是普通 JavaSE 环境,也可以是 We原创 2021-05-12 21:48:40 · 229 阅读 · 0 评论 -
Java比较器
在Java中经常会涉及到对象数组的排序问题,那么就涉及到对象之间的比较问题。Java实现对象排序的方式有两种:自然排序:java.lang.Comparable定制排序:java.util.Comparator自然排序 Comparable使用:Comparable接口强行对实现它的每个类的对象进行整体排序。这种排序被称为类的自然排序。实现 Comparable 的类必须实现 compareTo(Object obj) 方法,两个对象即通过 compareTo(Object obj).原创 2021-04-27 15:59:17 · 125 阅读 · 0 评论 -
Java常用日期时间API
JDK8之前日期时间API:System中的currentTimeMillis //返回当前时间与1970年1月1日0时0分0秒之间以毫秒为单位的时间差 //常用于订单号的唯一性,如果颗粒度极小的话再加几位随机数以保证其唯一性。 long time = System.currentTimeMillis(); System.out.println(time);//1618910317178两个Date类:java.util.Date和java.sql.Date两个构造器的使用原创 2021-04-26 16:58:24 · 522 阅读 · 0 评论 -
java中字符串相关的类:String,StringBulider,StringBuffer
String的特性String类:代表字符串。Java 程序中的所有字符串字面值(如 “abc” )都作为此类的实例实现。String是一个final类,代表不可变的字符序列。字符串是常量,用双引号引起来表示。它们的值在创建之后不能更改。String对象的字符内容是存储在一个字符数组value[]中的。/** * String 字符串使用""来表示 * 1.String被声明为final,不能被继承。 * 2.String实现了serializable接口,原创 2021-04-20 16:59:27 · 166 阅读 · 0 评论 -
字符串操作
获取两个字符串中最大相同子串public class MaxSubString { public static List<String> getMaxSubString(String str, String target){ String maxStr = (str.length() > target.length()) ? str : target; String minStr = (str.length() < target.lengt原创 2021-04-19 18:20:47 · 148 阅读 · 0 评论 -
Java多线程
基本概念:程序、进程、线程程序(program)是为完成特定任务、用某种语言编写的一组指令的集合。即指一段静态的代码,静态对象。进程(process)是程序的一次执行过程,或是正在运行的一个程序。是一个动态想·的过程:有它自身的产生、存在和消亡的过程。——生命周期如:运行中的QQ,运行中的MP3播放器程序是静态的,进程是动态的进程作为资源分配的单位,系统在运行时会为每个进程分配不同的内存区域线程(thread),进程可进一步细化为线程,是一个程序内部的一条执行路径。若一个进程同一时间原创 2021-04-12 19:10:14 · 191 阅读 · 0 评论 -
配置注解进行参数校验(配合全局异常)
在编写业务代码时无可避免的进行参数校验,如 if (null != xxx) { … }这样判断非空代码无可避免地不太优雅此时如果可以在字段上添加注解即可进行非空校验的报错,代码就显得很简单,优雅。使用springboot的validation组件即可实现。首先在pom.xml中声明validation组件:<!-- md5 --> <dependency> <groupId>commons-codec</gro.原创 2021-03-20 22:01:28 · 363 阅读 · 0 评论 -
springboot自定义用户参数(拦截controller的参数进行操作)
在业务逻辑中,会有这样的场景:将用户信息存到session中,将用户信息存储在session中,为保证用户信息安全,将cookie的值设置为uuid,将存储用户信息的session的key设置为cookie的uuid。@Override public RespBean doLogin(LoginVo loginVo, HttpServletRequest request, HttpServletResponse response) { String mobile = logi.原创 2021-03-18 21:20:04 · 2883 阅读 · 0 评论 -
登录信息(session)存储方式总结
前端存储cookie用户登录时判断完用户名密码等,将登录对象加密返回到前端,前端用ajax将登录对象存入cookie,此后鉴权等操作都利用cookie解密登录对象进行用户验证。封装一个cookieUtil从request对象中获取cookie信息进行解密使用。参考项目:antifatigueManufacturing后端存储session User user = userMapper.selectById(mobile); if (null == user) { ..原创 2021-03-12 15:40:15 · 2160 阅读 · 0 评论 -
分布式session各种解决方案
分布式Session问题之前的代码在我们之后一台应用系统,所有操作都在一台Tomcat上,没有什么问题。当我们部署多台系统,配合Nginx的时候会出现用户登录的问题。原因由于 Nginx 使用默认负载均衡策略(轮询),请求将会按照时间顺序逐一分发到后端应用上。也就是说刚开始我们在 Tomcat1 登录之后,用户信息放在 Tomcat1 的 Session 里。过了一会,请求又被 Nginx 分发到了 Tomcat2 上,这时 Tomcat2 上 Session 里还没有用户信息,于是又要登录。原创 2021-03-05 16:08:10 · 143 阅读 · 0 评论 -
springboot集成freemarker打包问题
用打包前后端分离的后端代码的方式打包单体项目会出现无法访问视图的问题先看代码结构:视图.ftl和静态资源都在resources中。mapper.xml在java项目文件夹中。目的:让静态资源和视图都出现在打包后的classes文件夹中。在pom文件中:让打包工具扫描到除.java文件之外的重要文件,打包进classes文件夹中。...原创 2021-02-19 15:38:10 · 632 阅读 · 0 评论 -
springboot单/多文件上传和文件下载
单文件html<!DOCTYPE html><html xmlns="http://www.w3.org/1999/xhtml" xmlns:th="http://www.thymeleaf.org" xmlns:sec="http://www.thymeleaf.org/thymeleaf-extras-springsecurity3"><head><meta charset="UTF-8" /><title>Insert title原创 2021-02-19 10:48:18 · 214 阅读 · 0 评论 -
Java格式化输出
import java.util.Date; /** * 使用printf输出 *//**关键技术点 * 使用java.io.PrintStream的printf方法实现C风格的输出 * printf 方法的第一个参数为输出的格式,第二个参数是可变长的,表示待输出的数据对象 */public class Printf { public static void main(String[] args) { /*** 输出字符串 ***/原创 2020-09-02 10:44:33 · 240 阅读 · 0 评论 -
linux shell每天凌晨2:10备份数据库;在备份的同时,备份后的文件要求以备份时间为文件名,并打包成 .tar.gz 的形式,检查是否有10天前备份的数据库文件,如果有就将其删除.
需求分析每天凌晨 2:10 备份 数据库 cloud 到 /data/backup/db备份开始和备份结束能够给出相应的提示信息备份后的文件要求以备份时间为文件名,并打包成 .tar.gz 的形式,比如:2018-03-12_230201.tar.gz在备份的同时,检查是否有10天前备份的数据库文件,如果有就将其删除。#!/bin/bashBACKUP=/data/backup/dbDATETIME=$(date +%Y_%m_%d_%H%M%S)#echo $DATETIMEe原创 2020-08-31 21:12:39 · 824 阅读 · 0 评论 -
微服务项目(maven父子级项目)怎么打包
项目层级结构:common中的是没有main方法的工具类,service中的是有main方法的业务代码。打包须知这种微服务项目或者说是maven父子级项目打包要解决的问题就是具体业务代码依赖工具类代码,利用idea的maven插件可以很方便做到。在cloud_parent,common,service这些上层文件夹管理模块中,添加<packaging>pom</packaging>在没有main方法的工具模块中只添加<packaging>jar</pa原创 2020-08-15 10:30:14 · 14668 阅读 · 1 评论 -
centos中查询端口占用情况及java -jar后台运行Java代码的方法
第一种:我们知道端口号用下面这种方法(最常用)根据端口查看这个进程的pidnetstat -lnp|grep 8111 #8080请换为你需要查的端口查看进程的详细信息ps 31505 #31505就是上一步得到的pid杀掉进程kill -9 [PID] 第二种:我们知道服务名称ps -ef|grep redisroot 7474 1 0 14:58 ? 00:00:01 /usr/local/redis/redis-4.0.11/src/redis-se原创 2020-08-14 17:11:26 · 1690 阅读 · 0 评论 -
windows中怎么查看端口占用情况并杀进程
win+r进入系统终端,键入命令:netstat -an 显示出电脑中所有被打开的端口列表(除了装X没啥用)netstat -ano 显示出所有占用端口的列表netstat -ano | findstr “8111” 显示出80端口占用的详细情况最后一串数字是进程idtasklist | findstr “13588” 根据进程id查询端口具体哪个应用占用taskkill /f /t /im “进程id或者进程名称”...原创 2020-08-14 16:35:42 · 261 阅读 · 0 评论 -
nacos-注册中心(Eureka)
相对于 Spring Cloud Eureka 来说,Nacos 更强大。Nacos = Spring Cloud Eureka +Spring Cloud ConfigNacos 可以与 Spring, Spring Boot, Spring Cloud 集成,并能代替 Spring CloudEureka, Spring Cloud Config通过 Nacos Server 和 spring-cloud-starter-alibaba-nacos-discovery 实现服务的注册与发现.原创 2020-08-13 10:10:41 · 299 阅读 · 0 评论 -
nacos-配置中心(springCloudConfig)
Nacos 是阿里巴巴推出来的一个新开源项目,是一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。 Nacos 是构建以“服务”为中心的现代应用架构 (例如微服务范式、云原生范式) 的服务基础设施。nacos可以代替Spring CLoud组件中的:服务发现——Netflix E.原创 2020-08-13 09:45:33 · 2590 阅读 · 0 评论 -
springSecurity授权过程及代码执行过程
springSecurity授权过程用户使用账号密码登录,获取用户信息。查询登录用户对应的权限列表到redis,key:登录成功用户名,value:用户权限列表。将用户信息封装成token,返回给前端。将token放到cookie;并在前端写拦截器,将token放到header中。springSecurity本身就是个过滤器,带有token的请求头被过滤在springSecurity,此时,从header获取token,从token获取用户信息,拿着用户信息去redis中获取权限列表。由spr原创 2020-08-12 09:09:24 · 338 阅读 · 0 评论 -
递归删除子菜单-mybatisPlus
父级菜单的id是子级的pid。现在可以从前端获得id为11的数据,但要将11的子级菜单全部删除。这种业务要快速想到用递归方式实现。首先要找到递归的入口 ----------- 顶级菜单的id为11制定好查询子菜单id的方法就可以进行递归代码实现public void removeChildByIdCloud(String id) { //1 创建list集合,用于封装所有删除菜单id值 List<String> idList = new Arra..原创 2020-08-12 08:26:14 · 1965 阅读 · 0 评论 -
递归实现无极菜单构建树形结构
实现效果:确定菜单的层次数量的情况下,可以在实体类中做数据结构。现在不确定菜单的层级数量,使用递归能很好的解决。数据库:实体对象public class Permission implements Serializable { private static final long serialVersionUID = 1L; @ApiModelProperty(value = "编号") @TableId(value = "id", type = IdTy原创 2020-08-11 15:44:26 · 415 阅读 · 0 评论 -
网关
1、API网关介绍API 网关出现的原因是微服务架构的出现,不同的微服务一般会有不同的网络地址,而外部客户端可能需要调用多个服务的接口才能完成一个业务需求,如果让客户端直接与各个微服务通信,会有以下的问题:(1)客户端会多次请求不同的微服务,增加了客户端的复杂性。(2)存在跨域请求,在一定场景下处理相对复杂。(3)认证复杂,每个服务都需要独立认证。(4)难以重构,随着项目的迭代,可能需要重新划分微服务。例如,可能将多个服务合并成一个或者将一个服务拆分成多个。如果客户端直接与微服务通信,那么重构将会原创 2020-08-10 10:25:44 · 166 阅读 · 0 评论 -
canal数据同步工具(MySQL)
使用场景两个模块,sta自己开发,ucenter第三方开发,两个服务分别对应自己的数据库,此时只能通过服务之间的rpc进行数据传递,这种思想没问题,但耦合度太高,稳定性也不高。此时可以使用数据同步工具将自己项目需要的第三方开发的数据库的数据进行同步,这样就可以调本地库,进行解耦。使用添加用户的目的是可以让添加的用户可以被外部用户访问到;下载安装canal服务下载地址:https://github.com/alibaba/canal/releases最后进入bin目录启动cana原创 2020-08-09 15:29:24 · 1800 阅读 · 1 评论 -
springBoot定时任务
在启动类添加注解:@EnableScheduling创建定时任务类,在类中使用cron表达式指定执行时间cron表达式可在网上搜索工具生成。springBoot中只能写六位,因为年默认是本年。@Componentpublic class ScheduledTask { @Autowired private StatisticsDailyService staService; //每天凌晨一点,将前一天的数据进行查询添加 @Scheduled(cron = ".原创 2020-08-06 19:15:41 · 122 阅读 · 0 评论 -
实体属性从vo转移到po还在一个一个从vo get()再一个一个set()进po? org.springframework.beans.BeanUtils帮你一行代码解决
vo和po实体内需要复制的属性名要一致eg: ChapterVo chapterPo = new ChapterPo(); BeanUtils.copyProperties(eduChapterVo,chapterPo);从vo到po的属性赋值原创 2020-08-01 21:15:23 · 265 阅读 · 0 评论 -
java字符串中拼接参数;两种方法
一般写法:固定地址,后面拼接参数String url = "https://open.weixin.qq.com/" +"connect/qrconnect?appid="+ ConstantWxUtils.WX_OPEN_APP_ID+"&response_type=code";用String format方法+占位符 //%s相当于?代表占位符 String baseUrl = "https://open.weixin.qq.com/connect/qrc.原创 2020-08-01 18:37:21 · 5255 阅读 · 0 评论 -
oAuth2是什么
oAuth2是针对特定问题的一种解决方案oAuth2主要解决两类问题开放系统间授权分布式访问问题开放系统间授权:Lucy喜欢把照片存在百度云盘,但他想用网络上的照片打印服务,此时照片打印服务不能直接对百度云盘进行操作,需要Lucy的授权才能操作;类似于我们打开一个微信小程序要访问我们在微信上的个人信息,需要调用微信的授权。怎么授权,就是oAuth2做的事情。授权方式1.用户名密码复制:就是将Lucy的百度网盘账号密码给照片打印服务。 最不安全。2. 通用开发者key:用于合作商或.原创 2020-07-31 16:22:17 · 274 阅读 · 0 评论