前言
古语有云:
道为术之灵,术为道之体;以道统术,以术得道。
其中:“道”指“规律、道理、理论”,“术”指“方法、技巧、技术”。意思是:“道”是“术”的灵魂,“术”是“道”的肉体;可以用“道”来统管“术”,也可以从“术”中获得“道”。
有一个需求需要将前端传过来的10张照片,然后后端进行处理以后压缩成一个压缩包通过网络流传输出去。之前没有接触过用Java压缩文件的,所以就直接上网找了一个例子改了一下用了,
改完以后也能使用,但是随着前端所传图片的大小越来越大的时候,耗费的时间也在急剧增加,最后测了一下压缩20M的文件竟然需要30秒的时间。压缩文件的代码如下。
1 | public static void zipFileNoBuffer() { |
这里找了一张2M大小的图片,并且循环十次进行测试。打印的结果如下,时间大概是30秒。
1 | fileSize:20M |
普通的bean的初始化是在容器启动初始化阶段执行的,而被lazy-init修饰的bean 则是在从容器里第一次进行context.getBean(“”)时进行触发。Spring 启动的时候会把所有bean信息(包括XML和注解)解析转化成Spring能够识别的BeanDefinition并存到Hashmap里供下面的初始化时用。接下来对每个BeanDefinition进行处理,如果是懒加载的则在容器初始化阶段不处理,其他的则在容器初始化阶段进行初始化并依赖注入。
本文我说了很多次 Spring 容器初始化和bean初始化,容器的初始化有可能包括bean的初始化主要取决于该bean是否是懒加载的,特此说明怕误会 。
话不多说先写个例子看下这属性到底有什么作用,我们定义了一个叫做coffee的普通bean,代码如下:
1 | package com.test.spring; |
答案: controller默认是单例的,不要使用非静态的成员变量,否则会发生数据逻辑混乱,正因为单例所以不是线程安全的。
我们下面来简单的验证下:
1 | package com.riemann.springbootdemo.controller; |
我们首先访问 http://localhost:8080/testScope, 得到的答案是1;
然后我们再访问 http://localhost:8080/testScope2, 得到的答案是2。
得到的不同的值,这是线程不安全的。
接下来我们再来给controller增加作用多例 @Scope(“prototype”)
在用docker方式部署spring boot应用的时候发现程序时间不对,这是和时区有关
我们修改Dockerfile文件内容设置一下时区
1 | FROM openjdk:8-jdk-alpine |
再次启动发现时间正常了
Prometheus是一个开源监控系统,它前身是SoundCloud的警告工具包。从2012年开始,许多公司和组织开始使用Prometheus。该项目的开发人员和用户社区非常活跃,越来越多的开发人员和用户参与到该项目中。目前它是一个独立的开源项目,且不依赖与任何公司。为了强调这点和明确该项目治理结构,Prometheus在2016年继Kurberntes之后,加入了Cloud Native Computing Foundation。
开源地址:https://github.com/prometheus