slf4j

java利用Freemarker模板生成docx格式的word文档(全过程)

笑着哭i 提交于 2020-08-05 15:39:50
参考: https://my.oschina.net/u/3737136/blog/2958421?tdsourcetag=s_pcqq_aiomsg 具体思路 1.创建一个docx文档模板,其中的英文是根据自己需要填充的内容。 2.把docx文档修改为ZIP格式(修改.docx后缀名为.zip),然后把zip解压到当前目录 3.修改word目录下document.xml文档,把如下原来是time改为${time},改好后放入项目中,用于后边内容填充。【有时候一个单词可能会被拆分,自己要做相应的调整】 <#list minuteList as minute></#list> 可用于循环填充,相当于 for (Minute minte:minuteList),示列如下: < #list minuteList as minute > < w:p w14:paraId ="3BB7AF6B" w14:textId ="2AD2E958" w:rsidR ="00D80192" w:rsidRDefault ="00C4552D" w:rsidP ="00E47882" > < w:pPr > < w:pStyle w:val ="a6" /> < w:numPr > < w:ilvl w:val ="0" /> < w:numId w:val ="2" /> </ w:numPr > <

Java分布式架构下如何实现分布式锁

怎甘沉沦 提交于 2020-08-05 12:38:26
  01分布式锁运用场景   互联网秒杀,抢优惠卷,接口幂等性校验。咱们以互联网秒杀为例。   @RestController   @Slf4j   publicclassIndexController{   @Autowired   privateRedissonredission;   @Autowired   privateStringRedisTemplatestringRedisTemplate;   @RequestMapping("/deduct_stock")   publicStringdeductStock()throwsInterruptedException{   intstock=Integer.parseInt   (stringRedisTemplate.opsForValue().get("stock"));   if(stock>0){   intrealStock=stock-1;   stringRedisTemplate.opsForValue().set("stock",realStock+"");   log.info("扣减成功,剩下库存+"+realStock);   }else{   return"库存不足";   }   return"end";   }   }   上面代码假定多个线程一起进来,读到胡成果相同,写入的成果也相同

解决 Cause: java.sql.SQLException: sql injection violation, delete not allow :

梦想的初衷 提交于 2020-08-05 08:39:00
开发中执行 sql 遇到异常如下 Error updating database. Cause: java.sql.SQLException: sql injection violation, delete not allow : delete from xxx where id = ? 解决方式: 数据库配置文件加入即可解决 spring.datasource.druid.filter.wall.enabled= false spring.datasource.druid.filters=stat,slf4j 来源: oschina 链接: https://my.oschina.net/hp2017/blog/4299888

TCP通信实现对接硬件发送与接收十六进制数据 & int与byte的转换原理 & java中正负数的表示

时光怂恿深爱的人放手 提交于 2020-08-05 08:26:34
   今天收到的一份需求任务是对接硬件,TCP通信,并给出通信端口与数据包格式,如下: 1.首先编写了一个简单的十六进制转byte[]数组与byte[]转换16进制字符串的两个方法,如下: /** * 将十六进制的字符串转换成字节数组 * * @param hexString * @return */ public static byte [] hexStrToByteArrs(String hexString) { if (StringUtils.isEmpty(hexString)) { return null ; } hexString = hexString.replaceAll(" ", "" ); int len = hexString.length(); int index = 0 ; byte [] bytes = new byte [len / 2 ]; while (index < len) { String sub = hexString.substring(index, index + 2 ); bytes[index / 2] = ( byte ) Integer.parseInt(sub, 16 ); index += 2 ; } return bytes; } /** * 数组转换成十六进制字符串 * * @param byte[] * @return

Spring Bean各阶段生命周期的介绍

三世轮回 提交于 2020-08-05 06:07:07
一. xml方式配置bean 二. Aware接口   2.1 BeanNameAware   2.2 BeanFactoryAware   2.3 ApplicationContextAware   2.4 Aware各接口的执行顺序   2.4 Aware接口总结 三. BeanPostProcessor接口 四. InitializingBean接口 五. init-method方法 六. DestructionAwareBeanPostProcessor接口 七. DisposableBean接口 八. destory-method方法 九. 生命周期大杂烩   9.1 实现多接口的Student类   9.2 BeanPostProcessor前后置处理   9.3 DestructionAwareBeanPostPrecessor接口   9.4 配置xml文件   9.5 测试代码   9.6 输出结果 十. 总结   Spring Bean的生命周期是一个老生常谈的问题了,网上一搜一大把,无非就是画一幅流程图(比如下面这幅图),然后用语言介绍创建bean后执行各Aware接口,然后BeanPostProcessor.....最终Bean创建成功了,就可以使用这个Bean了,然后在容器销毁的时候,又会执行一些操作。   其实对于上面的提到的流程图

THREADPOOLTASKEXECUTOR多线程使用,及线程池配置

廉价感情. 提交于 2020-08-05 04:24:41
1.配置 ThreadPoolTaskExecutor bean <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <!-- 扫描注解 --> <context:component-scan base-package="com.qi.quartz"> <context:exclude-filter type="annotation"

【Servlet】AsyncContext 实现长轮询场景-配置动态更新

烂漫一生 提交于 2020-08-05 01:19:36
场景:实现类似Nacos配置实时更新 1. 需求 配置中心数据未变更: 正常心跳检测 配置中心数据变更: 实时同步本地 2. 实现 2.1 基础类 ConfigData: 配置抽象 /** * function: 配置数据 * author: zhiwei_yang * time: 2020/7/18-18:02 */ @Data public class ConfigData { /** 配置名 **/ private String name; /** 配置数据 **/ private String data; /** 配置签名,保证唯一 **/ private String signature; /** * 监听服务器IP */ private transient Set<String> listenHosts = new CopyOnWriteArraySet<>(); /** * 获取配置签名 * @return */ public String getSignature() { return signature == null ? DigestUtils.md5Hex(name+"#"+data): signature; } } ConfigStore: 模拟配置存储 ** * function: 配置数据存储,模拟配置中心 * author: zhiwei_yang *

java 自定义注解

邮差的信 提交于 2020-08-05 01:14:34
一、注解(Annotation)的简介: 注解是一种能被添加到java源代码中的元数据,方法、类、参数和包都可以用注解来修饰。注解可以看作是一种特殊的标记,可以用在方法、类、参数和包上,程序在编译或者运行时可以检测到这些标记而进行一些特殊的处理。 二、注解的分类: 1、一般常用的注解可以分为三类: 一类是Java自带的标准注解,包括@Override(标明重写某个方法)、@Deprecated(标明某个类或方法过时)和@SuppressWarnings(标明要忽略的警告),使用这些注解后编译器就会进行检查。 一类为元注解,元注解是用于定义注解的注解,包括@Retention(标明注解被保留的阶段)、@Target(标明注解使用的范围)、@Inherited(标明注解可继承)、@Documented(标明是否生成javadoc文档) 一类为自定义注解,可以根据自己的需求定义注解    2、注解基本元素解析(@RequiresPermissions 注解为例)   声明一个注解要用到的: ● 修饰符 访问修饰符必须为public,不写默认为pubic; ● 关键字 关键字为@interface; ● 注解名称 注解名称为自定义注解的名称,使用时还会用到; ● 注解类型元素 注解类型元素是注解中内容,可以理解成自定义接口的实现部分; import java.lang.annotation

Logback 配置文件这么写,TPS 提高 10 倍!

我的未来我决定 提交于 2020-08-04 22:06:18
云栖号资讯:【 点击查看更多行业资讯 】 在这里您可以找到不同行业的第一手的上云资讯,还在等什么,快来! 通过阅读本篇文章将了解到: 1.日志输出到文件并根据LEVEL级别将日志分类保存到不同文件 2.通过异步输出日志减少磁盘IO提高性能 3.异步输出日志的原理 1、配置文件logback-spring.xml Spring Boot工程自带logback和slf4j的依赖,所以重点放在编写配置文件上,需要引入什么依赖,日志依赖冲突统统都不需要我们管了。 logback框架会默认加载classpath下命名为logback-spring或logback的配置文件。 将所有日志都存储在一个文件中文件大小也随着应用的运行越来越大并且不好排查问题,正确的做法应该是将error日志和其他日志分开,并且不同级别的日志根据时间段进行记录存储。 <?xml version="1.0" encoding="utf-8"?> <configuration> <property resource="logback.properties"/> <appender name="CONSOLE-LOG" class="ch.qos.logback.core.ConsoleAppender"> <layout class="ch.qos.logback.classic.PatternLayout">

shiro的认证、授权、会话、加密

北战南征 提交于 2020-08-04 17:50:05
shiro shiro是一个基于java的开源的安全管理框架,可以完成认证,授权,会话管理,加密,缓存功能。 为什么学习shiro 在java的世界中,安全管理框架有spring security和shiro。spring security主要依赖于spring,并且比较复杂,学习曲线较高。shiro比较简单,而且其比较独立,既可以javaSE中使用,也可以在javaEE中使用,并且在分布式集群的环境下也可以使用。 shiro的结构体系 Authentication认证:验证用户是否合法。==>就是验证登录; Authorization授权:授予谁具有访问某些资源的权限; SessionManagement:会话管理,用户登录后的用户信息通过SessionManagent进行管理,不管是在什么应用中 Cryphography:提供了一些常见的加密算法,使得在应用中可以很方便的实现数据安全。 WebSupport:提供web应用程序支持 Caching缓存:提供了对缓存的支持,支持多种缓存架构:如ehcache,还支持缓存数据库-redis Concurrency:支持多线程并发访问 Testing:测试 Run As:支持一个用户在允许的前提下使用另一个身份进行登录; RememberMe:记住我 Subject=身份+凭证====>用户名和密码【用户获取主体的信息