公司使用Spring Gateway作为业务网关,一直存在一个堆外内存泄露的疑难杂症。从同事手上接手过来后最终解决了这个问题。
大约 3 分钟
公司使用Spring Gateway作为业务网关,一直存在一个堆外内存泄露的疑难杂症。从同事手上接手过来后最终解决了这个问题。
scheduleAtFixedRate
如果上一个任务的执行时间大于等待时间,任务结束后,下一个任务马上执行
scheduleWithFixedDealy
如果上个任务的执行时间大于等待时间,任务结束后也会等待相应的时间才执行下一个任务
也就是说,不管是scheduleAtFixedRate还是scheduleWithFixedDealy都会等待上一个任务运行结束再进行下一个任务。如果需要并行执行,可以考虑任务中使用异步处理,比如Spring Boot中的@Async
Spring Boot源码编译
我fork一个Spring boot到自己的github上,主要是为了把阅读源码时添加的一些注释push上去,所以这一步是可选的。
1、把Spring boot源码克隆下来
git clone https://github.com/DHBin/spring-boot.git
获取客户端的IP地址的方法是:request.getRemoteAddr(),这种方法在大部分情况下都是有效的。
但是在通过了Apache,Squid等反向代理软件就不能获取到客户端的真实IP地址了,如果通过了多级反向代理的话,X-Forwarded-For的值并不止一个,而是一串IP值, 究竟哪个才是真正的用户端的真实IP呢?
答案是取X-Forwarded-For中第一个非unknown的有效IP字符串。 例如:X-Forwarded-For:192.168.1.110, 192.168.1.120, 192.168.1.130, 192.168.1.100 用户真实IP为: 192.168.1.110
@Autowired
JavaMailSender mailSender;
public void sendSimpleMail() {
SimpleMailMessage message = new SimpleMailMessage();
message.setFrom("xx158@qq.com"); // 发件人
message.setTo("1020641638@qq.com"); // 收件人
message.setSubject("标题");
message.setText("内容");
mailSender.send(message);
}