G1日志
Young Collection日志
1 | 2016-09-29T16:58:43.298+0800: 84662.983: [GC pause (G1 Evacuation Pause) (young) |
GC pause (G1 Evacuation Pause) (young) - 表示此时GC暂停是YGC。
1 | 2016-09-29T16:58:43.298+0800: 84662.983: [GC pause (G1 Evacuation Pause) (young) |
GC pause (G1 Evacuation Pause) (young) - 表示此时GC暂停是YGC。
有时候,我们需要用拦截器对Request或者Response流里面的数据进行拦截,读取里面的一些信息,也许是作为日志检索,也许是做一些校验,但是当我们读取里请求或者回调的流数据后,会发现这些流数据在下游就无法再次被消费了,这里面是其实存在着两个潜在的坑。
SpringMVC的核心就是DispatcherServlet,DispatcherServlet实质也是一个HttpServlet。DispatcherSevlet负责将请求分发,所有的请求都有经过它来统一分发。
大致看下SpringMVC请求处理的流程:
用户向服务器发送请求,请求会到DispatcherServlet,DispatcherServlet 对请求URL进行解析,得到请求资源标识符(URI),然后根据该URI,调用HandlerMapping获得该Handler配置的所有相关的对象(包括一个Handler处理器对象、多个HandlerInterceptor拦截器对象),最后以HandlerExecutionChain对象的形式返回。
DispatcherServlet 根据获得的Handler,选择一个合适的HandlerAdapter。提取Request中的模型数据,填充Handler入参,开始执行Handler(Controller)。 在填充Handler的入参过程中,根据你的配置,Spring将帮你做一些额外的工作:
- HttpMessageConveter: 将请求消息(如Json、xml等数据)转换成一个对象,将对象转换为指定的响应信息
- 数据转换:对请求消息进行数据转换。如String转换成Integer、Double等
- 数据格式化:对请求消息进行数据格式化。 如将字符串转换成格式化数字或格式化日期等
- 数据验证: 验证数据的有效性(长度、格式等),验证结果存储到BindingResult或Error中
Handler执行完成后,向DispatcherServlet 返回一个ModelAndView对象;根据返回的ModelAndView,选择一个适合的ViewResolver返回给DispatcherServlet;ViewResolver 结合Model和View,来渲染视图,最后将渲染结果返回给客户端。
Spring Bean的加载依赖于BeanFactory,但实际使用时不会直接使用BeanFactory,而是采用ApplicationContext这个在BeanFactory基础上提供了扩展的接口:
1 | public interface ApplicationContext extends EnvironmentCapable, ListableBeanFactory, |
ApplicationContext接口具体的实现类常用的有:FileSystemXmlApplicationContet (从文件系统中读入Bean定义资源文件)、ClassPathXmlApplicationContext(从Classpath类路径中读入Bean定义资源文件)和XmlWebApplicationContext(从Web容器如Tomcat等中读入Bean定义资源文件)等。
使用 Spring Boot 工程时默认 web 容器是 Tomcat,但是可以根据需要进行修改,例如使用 Jetty 或者 Undertow。只需要排除spring-boot-starter-web包中的spring-boot-starter-tomcat,然后添加其它的容器即可,例如spring-boot-starter-jetty。
PROPAGATION_REQUIRES_NEW:原有事务A新起事务B,事务B中的commit和rollback不会影响外部事务A的commit和rollback,相互独立,如果事务B抛出异常,肯定会影响外事务A的。
PROPAGATION_NESTED:表示嵌套事务,看如下示例:
1 | ServiceA { |
在上面的1,将开起新事务A,2的时候会插入数据,此时事务A挂起,没有commit,3的时候,使用PROPAGATION_NESTED传播,将在3点的时候新建一个savepoint保存2插入的数据,不提交。
如果methodB出现异常,将回滚4的操作,不影响2的操作,同时可以处理后面的5,6逻辑,最后一起commit: 2,5,6;
如果methodB没有出现异常,那么将一起commit: 2,4,6。
转载自:https://blog.csdn.net/AlbertFly/article/details/149974109
当使用 kill -9(SIGKILL)终止 Java 进程时,SpringApplicationShutdownHook 和其他所有 Shutdown Hook 都不会执行。
以下是详细分析:
信号类型:-9 发送的是 SIGKILL 信号
操作系统行为: