slf4j

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

青春壹個敷衍的年華 提交于 2020-08-11 10:59:53
参考: 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 > <

我的开发日记(三)

泄露秘密 提交于 2020-08-11 10:43:45
今天主要解决了一下测试账号登录状态的校验,我现在的方案是用户在写测试用例的时候使用特殊语法 uid=123 这样的形式,表示该用例字段应该去 uid 等于 123 的测试账号的登录凭证。难点在于登录凭证会过期,会被挤掉,如果维护所有测试用户的登录状态又很麻烦,对服务器性能也是一种浪费。 所以最终的方案如下: A、单独用例调试过程中使用中,预留一个凭证的有效期。有效期过了之后会继续校验凭证的有效性,如果成功,则重置有效期,如果失败则从登陆接口重新获取用户登录凭证并更新有效期 B、运行用例集(多个用例)时,采用多线程并发执行,为了保证每个测试用户的登录凭证有效性,每次只允许一个线程去执行A的逻辑。运行用例集过程中对用户凭证进行缓存,这样就不用从数据库中重复读取了。 在并行运行测试用例的时候,如果保证所以线程都能读到最新的用户凭证,且往缓存 map 中读取的数据正确性,想了一个方案就是在 JVM 里面对每一个用户进行加锁的操作,保证每一次只有一个线程去读写用户登录凭证。这样在单个用户运行的时候就可以登录一次,短时间内不用去登录即可持续进行用例的调试。在运行用例集的时候,每次运行创建一个临时的 map 存放本次用到的用户登录凭证,用例集内的测试用例执行完,该对象就释放,等着被 GC 回收。 用户对象锁存放类 这里用到之前一个知识点: Lambda表达式在线程安全Map中应用 。

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

可紊 提交于 2020-08-11 09:48:13
参考: 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 > <

SpringBoot内嵌Tomcat(9)- @WebServlet自定义Servlet加载

北城余情 提交于 2020-08-11 04:50:44
可以通过(都在javax.servlet.annotation包下) @WebServlet 、 @WebFilter 、 @WebListener 来配置相应的组件。 需要在启动SpringBootApplication类上增加注解: org.springframework.boot.web.servlet. ServletComponentScan 。 其引入的org.springframework.boot.web.servlet. ServletComponentScanRegistrar . addPostProcessor 方法中加载了org.springframework.boot.web.servlet. ServletComponentRegisteringPostProcessor 类 通过org.springframework.boot.web.servlet. ServletComponentHandler 的具体实现org.springframework.boot.web.servlet. WebServletHandler 来处理 通过上图可看到:使用了org.springframework.boot.web.servlet. ServletRegistrationBean 来包装 javax.servlet.annotation. WebServlet

Springboot集成flowable modeler 免登录,并且查询用户/用户组改为自己系统数据

时光总嘲笑我的痴心妄想 提交于 2020-08-10 19:55:55
之前画流程图都是用tomcat启动flowable modeler,但是这样启动就不能在分配任务用户/用户组的时候查询自己系统里的数据。所以现在需要把flowable modeler集成到项目里来。 之前自己也搜索了很多文章,都感觉不是很清晰,可能也是因为我刚接触不久。现在自己集成好了之后,记录一下自己学习的结果。 首先需要创建一个springboot应用,pom文件中引入相关jar包: <properties> <java.version>1.8</java.version> <flowable.version>6.4.1</flowable.version> <lombok.version>1.18.0</lombok.version> <fastjson.version>1.2.9</fastjson.version> </properties> < dependencyManagement > < dependencies > < dependency > < groupId > org.springframework.boot </ groupId > < artifactId > spring-boot-dependencies </ artifactId > < type > pom </ type > < scope > import </ scope > </

Springboot Websocket入门

时光怂恿深爱的人放手 提交于 2020-08-10 16:03:31
WebsocketConfig package com.suyu.websocket.config; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.web.socket.server.standard.ServerEndpointExporter; /** * 开启websocket的支持 */ @Configuration public class WebSocketConfig { @Bean public ServerEndpointExporter serverEndpointExporter(){ return new ServerEndpointExporter(); } } SocketServer package com.suyu.websocket.server; import com.suyu.websocket.entity.Client; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype

SpringBoot优雅的实现图片返回

帅比萌擦擦* 提交于 2020-08-10 09:02:11
废话少说,直接干货: 前提:添加图片转换器 @Configuration public class WebMvcConfig implements WebMvcConfigurer { /** * 增加图片转换器 * @param converters */ @Override public void extendMessageConverters(List<HttpMessageConverter<?>> converters) { converters.add( new BufferedImageHttpMessageConverter()); } } 然后就可以直接写业务代码了,网上有很多一行代码搞定的,,本人亲测确实有效,代码如下: @RestController @Slf4j @Api(tags = SwaggerConfig.TAG_IMAGE) @RequestMapping(SwaggerConfig.TAG_IMAGE) public class ImageController { // 通过produces 告知浏览器我要返回的媒体类型 @GetMapping(value = "/getImage2", produces = {MediaType.IMAGE_JPEG_VALUE, MediaType.IMAGE_GIF_VALUE, MediaType

Elasticsearch 的sql查询Java工具类

老子叫甜甜 提交于 2020-08-09 21:51:55
package org.vander.es.utils; import java.lang.reflect.Field; import java.util.ArrayList; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.StrUtil; import cn.hutool.http.HttpUtil; import cn.hutool.json.JSONObject; import cn.hutool.json.JSONUtil; import lombok.Data; public class EsQueryUtils { private static String esUrl = "http://127.0.0.1:9200/_sql?format=json"; /** logger */ private static final Logger log = LoggerFactory

rabbitmq生产者重发机制

微笑、不失礼 提交于 2020-08-09 16:35:23
欢迎访问我的个人博客 http://home.znfang.ml 说明 重发机制是在mq中很重要的一部分,消费者可以通过ack或者nack就可以很轻松实现消息重新入队列,然后进行重发,但是生产者也有可能在网络动荡的情况下,投递不成功,这个时候就需要消息重发。虽然rabbitmq提供了事务功能,但是如果开启事务,就太影响性能了。本文参考 littersmall的博文 ,利用spring-boot的定时功能,在本地缓存,从而实现对失败的消息进行重发。完整的项目代码请参考本人 spring-boot练习代码 实现过程 pom依赖 在pom文件中引入rabbitmq依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-amqp</artifactId> </dependency> yaml文件 在yaml文件中添加以下配置,一定要开启手动确认和手动返回 spring: rabbitmq: host: localhost port: 5672 username: guest password: guest publisher-confirms: true publisher-returns: true msgWithTime 为了进行消息重发,需要重新定义一个结构

不再使用lombok的@Slf4j

旧街凉风 提交于 2020-08-09 13:04:27
@Slf4j 真的是很方便的注解,我很是喜欢,只是Lombok毕竟有一定的侵入性,需要IDE进行支持,有时IDE和其插件还会因为升级问题而不匹配。只能忍痛不在工作场合中使用了。   没了这么好用的注解,我们怎么快速敲出这一行内容呢?其实不难,我们可以使用IDEA的 live template 。 1.首先,打开设置界面。   按下 Ctrl+Alt+S 唤醒界面,搜索 live templates ,相信有不少同志已经很熟悉这个界面了,如果没有Java分组,请先创建Java分组。 2.新建一个 live template   我们选择新建一个 live template ,缩略语输入 log ,当然您也可以输入其它,比如 slog ,这样可以减少冲突,下面的生成的代码为: private static final org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger($CurrentClass$.class);   其中, $CurrentClass$ 需要编辑设置一下: 后记   大道至简,有时候,代码少一些工巧,返璞归真,反而更好,共勉。 来源: oschina 链接: https://my.oschina.net/hengbao666/blog/4341862