为了降低用户得到反馈的时间,有些时候我们采用异步处理去获得消息,比较常见的是MQ,今天记录的是Springboot自带的@Async
注解
1 | // 开启异步 |
1 | // 使用方法 |
一片净土
为了降低用户得到反馈的时间,有些时候我们采用异步处理去获得消息,比较常见的是MQ,今天记录的是Springboot自带的@Async
注解
1 | // 开启异步 |
1 | // 使用方法 |
最近觉得自己没有什么技术的提升,感觉有些着急,公司任务也不忙,决定先拜读大佬的《大型网站技术架构》一书,从中学习到新的想法思维。不知道能不能坚持到全书看完
将不同的业务进行分割,部署到不同的服务器,如有必要的话进行细分,比如购物业务将其细分为机票酒店业务、小商品业务、信息家电业务等
将业务需求细分后,模块独立部署
每个独立的模块部署多台服务器达到一种集群的效果,提高并发性,提高可用性(当某一台服务器宕机时,不影响整体服务)
将一些热点内容,用户大流量访问的稳定内容放在缓存中,根据需求设置过期时间
分布式消息队列,模块之间异步通信,典型的是生产者消费者模式,提高系统可用性(消费者服务器发生故障,不影响生产者服务器),加快网站响应速度(异步的原因,不需等待消费服务器的反馈),消除并发访问高峰
自动化测试,自动化代码管理,自动化部署等等
有个多实例的需求,现在需要将这个bean注入,发现用@Autowired
注入并不能实现多实例(在bean上添加了@Scope("prototype")
的前提下)
1 | // 本想着在bean上添加@ Scope注解,然后用@ Autowired引入即可 |
注入BeanFactory对象,调用其getBean
方法即可
1 | @Autowired |
遇到一个问题,当使用form表单进行图片上传时,成功后页面会刷新,所以想到用ajax进行局部刷新
1 | <script type="text/javascript"> |
1 | <form role="form" class="form-horizontal" name="resForm" id="resForm"> |
例如商品页面等稳定资源,不经常会去修改它,但是用户经常会访问它,如果单纯的从数据库中提取数据,会并发量很低,除了缓存处理,现在提供一种新的思路是生成静态化的页面,使用的技术是Freemarker
1 | // 注意这边引入的是Freemarker的包 |
但是因为是静态页面,所以当商品详情修改后为了能够将静态页面也进行修改,所以需要跑一个定时任务,例如,每5分钟检查一下商品信息是否更改,将更改的商品重新生成静态页面
1 | select * from t_goods where last_update_time >=now()- interval 5 minute |