文件下载与预览
通常的文件下载方法@RequestMapping("/downLoadFile")public void downLoadLineStruImportTemplateFile(HttpServletResponse response) { // 创建缓冲区 byte buffer[] = new byte[1024];// 缓冲区大小1k int len = 0; // 重点就是获取输入流和输出流,还有设置请求头 try (InputStream in = this.getClass().getClassLoader().getResourceAsStream("template/lineStruImportTemplate.xlsx"); OutputStream out = response.getOutputStream()) { // 设置头部信息 // 文件类型application/octet-stream response.s ...
获取resouces下的文件的输入流InputStream
String filePath = "/excel/1_20210709杭州地铁6号线平稳性_2021_08_28_005001_5S.xlsx";// 这里io流会自动关闭,无需加finally// try (InputStream is = new FileInputStream(filePath)) {// 读取绝对路径文件ClassPathResource classPathResource = new ClassPathResource(filePath);try (InputStream is = classPathResource.getInputStream()) {// 读取resources下文件方式1(适用于静态)// try (InputStream is = this.getClass().getResourceAsStream(filePath)) {// 读取相resources下文件方式2(不适用于静态) // ....流对象各种处理代码}
使用注解和拦截器实现登录验证
1、@LoginRequired 注解/** * 在需要登录验证的Controller的方法上使用此注解 */@Target({ElementType.METHOD})@Retention(RetentionPolicy.RUNTIME)public @interface LoginRequired {}
2、MyControllerAdvice@ControllerAdvicepublic class MyControllerAdvice { @ResponseBody @ExceptionHandler(TokenValidationException.class) public JsonResponse tokenValidationExceptionHandler() { return JsonResponse.loginInvalid(); } @ResponseBody @ExceptionHandler(ServiceException.class) ...
部署java项目
将运行的 jar 错误日志信息输出到 log.file 文件中,然后(>&1)就是继续输出到标准输出(前面加的&,是为了让系统识别是标准输出),最后一个&,表示在后台运行。
nohup java -jar 包名.jar > log.file 2>&1 &[1] 669 #669表示运行的pid
linux修改jar包文件
使用 jar tvf jar 名称 | grep 目标文件名 查询出目标文件在 war 包中的目录
使用 jar xvf jar 名称 目标文件名(copy 上面查出的全路径) 将目标文件及所在 war 包中的目录解压到当前路径
修改目标文件的内容,或者将要新的目标文件替换掉提取出来的目标文件
使用 jar uvf jar 名称 目标文件名(和步骤(2)中的目标文件名相同) 将新目标文件替换到 jar 包中
1、具体这里以 blog.jar 为例进行操作
1、首先,查找你需要修改的文件
jar tvf blog-0.0.1-SNAPSHOT.jar | grep _fragments.html
2、解压文件到当前目录(会是个文件夹,但是不用管文件夹的其他文件,只找我们要改的文件)
jar -xvf blog-0.0.1-SNAPSHOT.jar BOOT-INF/classes/templates/_fragments.html
3、如果你有替换的文件就直接替换,没有则修改你需要修改的部分
vim _fragments.htmlcp 文件 目标文件
4、将修改的新文件替换到 ja ...
开启gzip配置
配置示例
server{ listen 9005; ## nginx监听端口号 #开启gzip gzip on; #vary header支持,该选项可以让前端的缓存服务器缓存经过gzip压缩的页面 gzip_vary on; #设置允许压缩的页面最小字节数,页面字节数从header头的Content-Length中获取,默认值是0,不管页面是多大都进行压缩,建议设置成大于1K,如果小于1K可能会越压越大 gzip_min_length 612k; #压缩缓冲区大小,表示申请4个单位为16K的内存作为压缩结果的流缓存,默认值是申请与原始数据大小相同的内存空间来存储gzip压缩结果 gzip_buffers 128 128k; #压缩比率,用来指定gzip压缩比, 1:压缩比最小,速度最快;9:压缩比最大,传输速度最快,但处理也最慢,也比较的消耗CPU资源 gzip_comp_level 9; #用来指定压缩的 ...
收藏
Nginx 一网打尽:动静分离、压缩、缓存、黑白名单、跨域、高可用、性能优化…https://mp.weixin.qq.com/s/YhFaKTg5ZbzM8mkhclUnvQ
反向代理后端项目并配置跨域
后台服务占用端口为 9003,用本地的 9004 代理 9003 并且配置跨域
server{ listen 9004; ## nginx监听端口号 location / { proxy_pass http://127.0.0.1:9003; # 允许 所有头部 所有域 所有方法 add_header 'Access-Control-Allow-Origin' '*'; add_header 'Access-Control-Allow-Headers' '*'; add_header 'Access-Control-Allow-Methods' '*'; # OPTIONS 直接返回204 if ($request_method = 'OPTIONS') { ...
解决单页面应用,刷新后出现404或者404的错误
在 location 里加上 try_files $uri $uri/ /index.html;
具体配置如下:
server { listen 81; server_name project_mall; #charset koi8-r; #access_log logs/host.access.log main; location / { root study/project_mall; index index.html index.htm; # 解决单页面应用刷新出现403或者404错误 try_files $uri $uri/ /index.html; }}
部署前端项目
前端项目存储位置/usr/local/webserver/nginx/project/crtoms
配置 0(推荐)
server{ listen 9005; ## nginx监听端口号 location / { root project/crtoms; # project在ngxin目录下,和html同级 try_files $uri $uri/ /index.html; } # 前端代理 location /api/ { #api是同一请求后缀 proxy_pass http://192.168.10.235:8888/; #后台内网地址 }}
假设服务器 ip 为 192.168.10.234那么此时访问方式就是 http:192.168.10.234:9095/
配置 1
server{ listen 9005; ## nginx ...
配置视频播放
前提:nginx 需要安装 mp4 模块假设服务器 ip 为 192.168.10.234
播放 mp4 视频server { listen 80; location /securityMp4 { alias /home/DevelopKit/FILE/securityFile/; mp4; mp4_buffer_size 1m; mp4_max_buffer_size 2000m; # mp4_limit_rate on; # mp4_limit_rate_after 30s; limit_rate 260k; limit_rate_after 3m; }}
假设存在文件/home/DevelopKit/FILE/securityFile/a.mp4那么访问 192.168.10.234:80/securit ...
Gitlab在服务器上的安装
阅前注意本文档对于 gitlab 仓库管理只适用于 http 协议。如需 ssh 协议。请自行百度生成和配置公钥和私钥
本文档适用于 linux 的发行版为 centos7。其他的发行版 ubuntu、debian 等请自行百度
整理 by:张雨晗 2020.7.20
参考博客 1
参考博客 2
参考博客 3
目录:[TOC]
1.安装过程1.下载 rpm 文件gitlab 的 rpm 包下载地址
ctrl+鼠标左键点击打开链接,下载最新的 rpm 包
2.上传 rpm 文件。注意:linux 的运营规范里明确规定了第三方软件包放在/opt/文件夹下可以使用第三方工具。注意:xftp 禁用
也可以使用 win 下的 cmd 命令
示例
scp -P 221 D:\download\gitlab-ce-14.0.4-ce.0.el7.x86_64.rpm root@123.123.122.138:/opt/
之后再输入访问的密码即可。
3.安装1.安装所需要的环境yum -y install policycoreutils-python
yum -y install openssh ...
在.gitignore中添加新的规则对已经被git管理了的文件不生效的解决办法
解决办法:清理下 git 缓存即可执行以下命令
#删除git缓存git rm -r --cached .git add .git commit -m 'update .gitignore'
配置文件下载,开启文件浏览列表
文件存储配置文件
server { listen 80; location /app { alias /usr/local/webserver/nginx/app/; autoindex on; #下面这个配置开不开启效果是一样的 #我还没发现有什么用 #建议先不加。 #猜测的应用场景:在网页上文件浏览时点击图片要求下载而不是预览就要打开下面的配置 #default_type application/octet-stream; } }
alias 指定虚拟目录autoindex on;打开目录浏览功能
假设服务器 ip 为 192.168.10.234那么访问 192.168.10.234:80/app/cgjc.apk 就能直接下载文件那么访问 192.168.10.234:80/app/cgjc-test.apk 就能直接下载文件
访问 192.16 ...
github高级搜索
github 搜索自己想要的项目,并添加更加详细的描述github 上搜索的例子
in:name springboot forks:>4000 language:java stars:>4000 pushed:>2020-01-01
in:readme springboot mybatis forks:>4000 language:java stars:>4000 pushed:>2020-10-01
关键词
in:name xxx
in:description xxx
in:readme xxx
starts:>2000
fork:>3000
size:>=5000 注意:单位是k
pushed:>2020-01-01
language:xxx
user:xxx
搜索的方式可以组合,叠加,用空格分开条件
更多高级搜索
存储zset的写法
ZSetOperations zSetOperations = redisTemplate.opsForZSet();Set<ZSetOperations.TypedTuple<Map<String, Double>>> tuples = new HashSet<>();int cycleNum = dataShowMapper.getTrackDynamicGeometryDataNum(csrwId, xb) / 10000 + 1;// 循环次数CountDownLatch countDownLanch = new CountDownLatch(cycleNum);ExecutorService executor = Executors.newFixedThreadPool(cycleNum > 4 ? 4 : cycleNum);for (int i = 0; i < cycleNum; i++) { int start = i * 10000; int num = 10000; executor.ex ...
常用api总结
XXXTemplate 是 Spring 的一大设计特色,其中,RedisTemplate 功能是提供对 Redis 的支持。
RedisTemplate 是 Spring Boot 访问 Redis 的核心组件,是 SpringBoot 集成 Redis 的客户端方式。它的底层通过 RedisConnectionFactory 对多种 Redis 驱动进行集成,上层通过 XXXOperations 提供丰富的 API,并结合 Spring 基于泛型的 bean 注入,未开发提供了极大的便利。
一、Redis 常用的数据类型String:字符串类型,可以存储多种类型,如:字符串,JSON 串,二进制,序列化对象等;Hash:key-value 结构,就像 Java 里的 Map,特别适合存储对象;List:双端链表的结构,即可以作为栈,又可以作为队列,可以进行集合的头部或者尾部添加删除元素;Set:Set 集合是 String 类型的无序集合,通过 hashtable 实现,可以对集合取交集,并集,差集;Sorted set:是 String 类型的有序集合,并且,每个元素都会关联一个 ...
批量删除特定前缀key
redis-cli --scan --pattern "ops-coffee-*" | xargs -L 2000 redis-cli del
其中 xargs -L 指令表示 xargs 一次读取的行数,也就是每次删除的 key 数量,一次读取太多 xargs 会报错
Kafka生产者、消费者的消息可靠性方案实现
以下代码基于 SpringKafka 2.3.13.RELEASE + Boot 2.2.9.RELEASE 实现
Producer 消息的可靠性实现方案:ack 模式调整 + 重试机制 + 规避重试机制下带来的问题
spring.kafka: producer: #这个参数可以是任意字符串,它是broker用来识别消息是来自哪个客户端的。在broker进行打印日志、衡量指标或者配额限制时会用到。 clientId: ${spring.application.name} #方便kafkaserver打印日志定位请求来源 bootstrap-servers: 127.0.0.1:8080 #kafka服务器地址,多个以逗号隔开 #acks=0:生产者把消息发送到broker即认为成功,不等待broker的处理结果。这种方式的吞吐最高,但也是最容易丢失消息的。 #acks=1:生产者会在该分区的leader写入消息并返回成功后,认为消息发送成功。如果群首写入消息失败,生产者会收到错误响应并进行重试。这种方式能够一定程度避 ...
SpringBoot中使用Quartz执行任务对象(job)中无法注入bean的问题
一、问题描述SpringBoot 整合 Quartz 进行定时任务开发时,job 中注入业务 Service,使用 @Autowired 注解获取对象为 null ,执行时报空指针异常
二、分析Spring 容器可以管理 Bean,但是 Quartz 的 job 是自己管理的,job 无法被容器识别,即使在自定义的 job 上面加上@Component 注解,依然无效,原因是 job 对象在 spring 容器加载的时候,能够注入 bean,但是在调度时,job 对象会重新创建,此时就导致了已经注入的对象丢失,因此报空指针异常。
三、解决办法
3.1 采用自定义静态工具类的方式,创建 AppContextUtil 类,实现 ApplicationContextAware 接口,此工具类会在 spring 容器启动后,自动加载,使用其提供的 Bean 方法获取想要的 bean 即可,代码如下:
import lombok.extern.slf4j.Slf4j;import org.springframework.beans.BeansException;import org.spr ...