
java技术
文章平均质量分 51
愿你活成你喜欢的模样
你可以成为任何一个你想成为的人
展开
-
BUG库,列举我从今天开发遇到的BUG
列举我开发遇到的BUG原创 2023-02-20 07:49:21 · 682 阅读 · 0 评论 -
java使用libreOffice预览word,ppt,txt等文档
java使用libreOffice预览word,ppt原创 2022-09-09 10:47:06 · 5988 阅读 · 3 评论 -
记录一次jar文件在windows系统下开机自启
自启有很多中方式,其中最好维护的一种方式是把启动命令注册成服务首先去 https://github.com/kohsuke/winsw/releases 下载WinSW软件我这里找的2.x的版本,3.x的版本是压缩包,下载这个exe和xml文件3. 下载下来以后把文件放到jar包同目录下,并改为同名,像这样(这里的日志文件是我服务启动之后自动生成的)4. 下面我们修改一下xml文件的配置<service> <!-- ID of the service. It should原创 2022-03-09 15:55:08 · 785 阅读 · 0 评论 -
记录一次java生成条形码并调用打印机打印
生成条形码需要ja坐标: <!--生成条形码--> <dependency> <groupId>net.sf.barcode4j</groupId> <artifactId>barcode4j-light</artifactId> <version>2.0</version> </depe原创 2021-08-12 09:57:48 · 2272 阅读 · 0 评论 -
java使用压缩流把文件打成压缩包下载
需求:前台传过来一个url数组,其中是每个文件的路径,后台需要获取到每个文件然后将其打成压缩包返回流给前台下载核心是:ZipOutputStream,废话不多说,上代码savePath 是我在yml配置文件里配置好的文件存储路径在使用谷歌(火狐可以)下载过程中遇到问题:文件名中含有半角符号无法下载,因为文件名是前台命名的,所以这个我就随便命名个1.zip解决一下文件名有中文要用iso_8859_1转义一下,不然会乱码(使用swagger测试时一直都是乱码,是swagger的问题,使用浏览器直接下原创 2021-06-17 08:17:41 · 1972 阅读 · 0 评论 -
java除法防止精度缺失
保证a,b是double或者float类型 // 小数精确两位 DecimalFormat df = new DecimalFormat("#0.00"); String format = df.format( a / b);原创 2021-05-26 15:06:24 · 549 阅读 · 0 评论 -
读java编程思想看到一个遍历移除集合中元素的骚操作
原集合重新赋值到另一个集合中,一个集合遍历,一个集合移除,再也不用使用iterator List<Integer> integers = new ArrayList<>(); integers.add(1); integers.add(2); integers.add(3); integers.add(4); for (Integer integer : new ArrayList<>原创 2021-05-19 06:35:51 · 189 阅读 · 0 评论 -
发现一款java鉴权认证框架sa-token(目前好像坑还很多)
我们先看一下官网介绍,sa-token有什么功能链接: 官网地址主要是Shiro、Security配置繁琐,这个简单易上手这是他的大致功能点,今天我们搞点基础的springBoot 集成sa-token 并实现登录的验证和权限的鉴定首先导入maven坐标导入redis主要是sa-token使用内存来存取token的,使用redis第三方来做到重启项目token不丢,只需导入sa-token-redis的maven即可,不需要手动get,set(方便!) <!-- Sa-Token 权原创 2021-05-12 07:53:45 · 13625 阅读 · 17 评论 -
JDK8日记格式化API小记
ZonedDateTime zonedDateTime = ZonedDateTime.now(); LocalDateTime now = LocalDateTime.now(); String strTime = DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss").format(zonedDateTime); String strTime = DateTimeFormatter.ofPattern("yyyy/MM/dd HH:m...原创 2021-05-10 07:37:22 · 105 阅读 · 0 评论 -
一个list集合分页的工具类
package utils;import com.github.pagehelper.PageInfo;import java.util.List;/**@program: examination@description:@author: fbl@create: 2021-03-17 10:27**/public class ListPageUtil {public static PageInfo getPage(Integer page, Integer limit,原创 2021-05-09 06:22:45 · 187 阅读 · 0 评论 -
springBoot 在过滤器中如何捕获抛出的异常并自定义返回信息
一般springBoot自带的全局异常捕获机制都是在业务层发生的异常来进行捕获的,因为过滤器的执行顺序是在全局异常机制启动之前执行的,所以一旦过滤器中发生异常,全局异常捕获机制无法使用现在有一个围魏救赵的思路在过滤器中try-catch掉需要捕获的异常,然后转发到controller在重新抛出,这样全局异常机制可以起作用,返回自定义信息举个例子:SpringSecurity使用过滤器链来实现用户校验,一旦签名出错,过滤器链中抛出响应的异常,我们不想抛出异常,而是返回相关错误信息。此时使用上述思路很容原创 2021-01-20 09:15:05 · 8350 阅读 · 7 评论 -
JWT的token过期自动续期(无redis)
思路:由于jwt中的token过期时间是打包在token中的,用户登录以后发送给客户端以后token不能变化,那么要在用户无感知的情况下刷新token,就要在符合过期条件的情况下,在缓存一个新的token,作为续命token,再次解析不要解析客户端发送的token,要解析自己缓存的续命token主要逻辑:如果当前token没有超过过期时间的两倍,续期,超过了重新登录主要代码如下:package com.hongseng.app.config.jwtfilter;import enums.Tok原创 2021-01-19 16:17:44 · 8808 阅读 · 1 评论 -
三个线程依次输出ABC ReentrantLock的Condition用法
import java.util.concurrent.locks.Condition;import java.util.concurrent.locks.ReentrantLock;/** * @program: emergency * @description: 三个线程依次输出ABC ReentrantLock的Condition用法 * @author: fbl * @create: 2021-01-13 07:36 **/public class ThreadTest {原创 2021-01-14 16:05:36 · 393 阅读 · 0 评论 -
数据量大时使用多线程查询mysql数据和单线程对比
jdk8有一个异步类CompletableFuture可以使用线程池帮助我们实现多线程查询@PostConstruct private void multithreadingGetData() { // 数据总量 int count = 312; // 计算机可用cpu 设置线程池个数最好与之匹配 int availableProcessors = Runtime.getRuntime().availableProcessors();原创 2020-12-17 11:23:16 · 1166 阅读 · 2 评论 -
SpringBoot和SpringSecurity整合一下JWT
上一篇写了SpringBoot整合SpringSecurity实现了登录认证和授权,但是SpringSecurity是把用户信息存储在session中的。对服务器有一定的压力,所以目前JWT这种服务无状态的校验方式比较流行我接着上篇的代码改进,将JWT融合进去首先导入JWT的maven坐标,我使用的是jjwt <properties> <java.version>1.8</java.version> <jjwt.versio原创 2020-12-03 08:33:31 · 904 阅读 · 2 评论 -
springBoot整合springSecurity基于RBAC权限验证
学学springSecurity的认证授权框架,后续整合一下JWT先说一下基于RBAC权限管理的思路在数据库中配置用户权限在每个接口上使用注解的形式说明接口需要用户拥有那个权限才能访问SpringSecurity使用拦截请求的方式对当前用户拥有的权限和接口需要的权限进行比对,包含则放行,不包含则拦截导入SpringSecurity的maven坐标 <dependency> <groupId>org.springframework.boot原创 2020-12-02 10:51:42 · 2732 阅读 · 4 评论 -
CompletableFuture异步请求远程资源
package java8.completableFuture;import java.util.concurrent.CompletableFuture;import java.util.concurrent.ExecutionException;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;/** * @program: javaCodeThink * @descrip原创 2020-11-10 10:40:07 · 350 阅读 · 0 评论 -
日期不要再用Date了,使用LocalDateTime和Instant!
看了java8实战一书,觉得表示时间以前用Date的字段属性应该可以用LocalDateTime来代替所以在项目中实验了一下:更换过后,启动果然报错:java.sql.SQLFeatureNotSupportedException; null; nested exception is java.sql.SQLFeatureNotSupportedException] with root cause使用百度大法之后,调高连接池版本得到解决原来是1.1.10以后实体类字段属性就可以使用Local原创 2020-11-06 14:40:56 · 1562 阅读 · 1 评论 -
java下载url路径包含中文需要转义
大家看这个url:http://127.0.0.1:9997/file/江苏省地震应急预案(二级).docx应为url路径中有中文没有转义,输入流报错The valid characters are defined in RFC 7230 and RFC 398下面我们对中文路径进行截取转义 int lastIndexOf = downloadUrl.lastIndexOf('/'); String fileName = downloadUrl.substring(last原创 2020-11-03 16:43:43 · 1652 阅读 · 0 评论 -
windows下java -jar 后台运行以及杀死后台进程
在你的jar文件当前目录中建立一个bat文件:内容是:注意文件名要对应@echo off START "commandServer" javaw -jar command-0.0.1-SNAPSHOT.jar之后双击bat文件就能后台启动jar包啦杀死后台进程首先执行命令 (你要知道你运行的jar文件的端口号)netstat -aon | findstr "9998"可以看到PID为6452 然后在执行:tasklist|findstr "6452"最后我们就要杀死这个进程啦原创 2020-10-30 08:08:26 · 5337 阅读 · 2 评论 -
java8实战关于Stream的一篇测试题
package java8.流.筛序苹果;import java.util.*;import java.util.function.Predicate;import java.util.stream.Collectors;/** * @program: javaCodeThink * @description: * @author: fbl * @create: 2020-10-29 08:37 **/public class FlatMap { public static原创 2020-10-29 14:49:34 · 381 阅读 · 0 评论 -
AES加密 Illegal key size or default parameters
在使用AES加密的时候出现了密钥过长而报错了问题了解了一下AES加密密钥默认长度为16位如果过长就要替换jdk和jre里security下的两个jar文件这两个文件可以在oracle官网下载jdk8版本替换文件地址:http://www.oracle.com/technetwork/java/javase/downloads/jce8-download-2133166.html其中有一个问题需注意:C:\Program Files\Java\jdk1.8.0_131\jre\lib\securi原创 2020-10-23 14:43:54 · 492 阅读 · 0 评论 -
java8中使用流区分质数与非质数
java8中使用流区分质数与非质数public class PrimeTest { public static void main(String[] args) { Map<Boolean, List<Integer>> collect = IntStream.rangeClosed(2, 100).boxed().collect(partitioningBy(PrimeTest::isPrime)); System.out.printl原创 2020-08-19 09:51:35 · 291 阅读 · 0 评论 -
一条语句去除list中元素,不在使用iterator
发现jdk1.8之后有一个语法list.removeIf()使用例子: // 移除不是二级和总预案的预案 emergencyPlanEntities.removeIf(item -> !(item.getPlanGrade() == 2 || item.getPlanGrade() == 0));原创 2020-07-15 14:35:32 · 178 阅读 · 0 评论 -
dependencyManagement的用法
在maven标签中有一个标签是dependencyManagement,他表示对依赖的管理,而不注入依赖。下面我们定义了依赖的版本 <dependencyManagement> <dependencies> <dependency> <groupId>org.elasticsearch.client</groupId> <a原创 2020-06-24 09:01:31 · 3519 阅读 · 0 评论 -
springBoot+定时任务+webSocket实现每三秒推送一次消息(不同页面推送不同消息)
1 springBoot中已经集成webSocket的依赖maven坐标 <!--webSocket使用--> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-websocket</artifactId> &...原创 2019-12-13 08:28:38 · 5348 阅读 · 6 评论 -
springBoot整合shiro前后端分离模式
在springBoot框架下我们使用shiro做权限登录验证,首先要建好五张表:1:user表CREATE TABLE `user` ( `id` int(16) NOT NULL AUTO_INCREMENT COMMENT '用户ID', `basic_info_id` int(11) NOT NULL COMMENT '企业外键', `user_account` varcha...原创 2019-11-26 15:12:44 · 920 阅读 · 0 评论 -
springBoot+Mybatis多数据源配置
maonidou(苞米豆)团队针对springboot使用多数据源提供了一个启动器:dynamic-datasource-spring-boot-starter我们在pom文件中添加依赖<dependency> <groupId>com.baomidou</groupId> <artifactId>dynamic-datasource-spr...原创 2019-10-14 09:49:44 · 353 阅读 · 0 评论 -
java8 新特性 stream学习
什么是stream?元素是特定类型的对象,形成一个队列。 Java中的Stream并不会存储元素,而是按需计算。数据源 流的来源。 可以是集合,数组,I/O channel, 产生器generator 等。聚合操作 类似SQL语句一样的操作, 比如filter, map, reduce, find, match, sorted等。和以前的Collection操作不同, St...原创 2019-01-11 14:44:45 · 176 阅读 · 0 评论 -
java8 新特性,学习lambda
以下是lambda表达式的重要特征:可选类型声明:不需要声明参数类型,编译器可以统一识别参数值。可选的参数圆括号:一个参数无需定义圆括号,但多个参数需要定义圆括号。可选的大括号:如果主体包含了一个语句,就不需要使用大括号。可选的返回关键字:如果主体只有一个表达式返回值则编译器会自动返回值,大括号需要指 定明表达式返回了一个数值。Lambda 表达式的简单例子:// 1. 不需要...原创 2019-01-11 10:56:11 · 151 阅读 · 0 评论 -
使用poi手动拼接Excle复杂格式导出
先贴一下Excel的格式如图,有各种合并单元格,边框有无,甚至有一个单元格中字体不同的问题。其中序号,验收项,评分,执行时间,执行人下的这些列要跟据获取到的list长度动态生成。在拼接的过程中中还遇到了合并单元格边框显示不全的问题,以下是使用poi完成此Excel的代码package cn.bluethink.eguan.okrtask.excelutil;import java.io...原创 2018-12-26 14:28:44 · 1092 阅读 · 0 评论 -
springBoot 如何将properties文件属性配置到class中
springBoot 如何将properties文件属性配置到class中1.这里创建一个test.properties 文件 有以下属性com.md.name="\u54DF\u897F" com.md.want="\u6211\u662F\u8303\u4FDD\u6797"2.创建一个propertiesTest.class 文件package com.example.dem...原创 2018-11-21 08:47:23 · 1487 阅读 · 0 评论 -
java 使用poi动态导出
创建一个excel导出工具类package com.zy.util;import java.io.OutputStream;import java.lang.reflect.Method;import java.util.Collection;import java.util.Iterator;import javax.servlet.http.HttpServletRespons...原创 2018-11-16 10:47:56 · 563 阅读 · 0 评论 -
mybatis一对多两种mapper写法
mybatis一对多两种mapper写法第一种<resultMap type="com.example.demo.model.TuserModel" id="extendMapper"> <id column="id" property="id" /> <result column="user_name" property=&q原创 2018-11-12 15:05:37 · 2599 阅读 · 0 评论 -
mybatis一对多关联查询多条数据只显示一条的问题
一对多,如果多个表字段名相同,要记住使用别名,否则多条数据只显示一条<resultMap type="com.example.demo.model.TuserModel" id="extendMapper"> <id column="id" property="id" /> <result column="user_name" p原创 2018-11-12 14:04:48 · 5690 阅读 · 0 评论 -
springBoot 使用swagger2接口测试
springBoot 使用swagger2接口测试springBoot 使用swagger2接口测试pom.xml 文件中添加依赖<!-- swagger依赖 --> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-sw...原创 2018-11-12 12:12:10 · 1970 阅读 · 0 评论 -
mybatis之通用mapper的使用(springBoot 整合)
什么是通用mapper通用mapper 可以极大的方便开发人员进行ORM,提供极其方便的单表增删改查。什么是通用mapper,一句话简单说,它就是个辅助mybatis极简单表开发的组件。它不是为了替代mybatis,而是让mybatis的开发更方便。可以按照自己的需要选择通用方法,还能很方便的开发自己的通用方法。怎么用通用mapper首先导入通用mapper的依赖<!...原创 2019-01-17 10:55:59 · 631 阅读 · 0 评论 -
关于阿里为什么boolean类型变量命名为什么禁用is开头名
首先介绍一下javaBean关于getter和setter方法命名的规范,可能大家就能猜到为什么public <PropertyType> get<PropertyName>();public void set<PropertyName>(<PropertyType> a);关于boolean类型又有专门的一套命名规则public bool...原创 2019-01-21 09:22:50 · 6768 阅读 · 1 评论 -
读懂了这个程序的初始化顺序,什么继承、组合不在话下
package extendAndGroup;class Characteristic { private String s; Characteristic(String s) { this.s = s; System.out.println("Creating Characteristic " + s); } protected void dispose() { Sy...原创 2019-01-23 16:22:32 · 164 阅读 · 0 评论 -
记录一次发布springBoot(多模块)服务
1 将springBoot打成jar包springBoot使用maven聚合工程,有多个模块,打成jar包会稍微麻烦一点首先在父类的pom.xml文件中,替换原来的Build<!--build内容也需要做替换,因为默认的spring-boot-maven-plugin这种方式,等到后期打包的时候他会一直提示你,你引入的依赖不存在!--> <build> ...原创 2019-09-06 17:12:02 · 346 阅读 · 0 评论