在tomcat的conf/web.xml中有两个默认的Servlet,DefaultServlet和JspServlet
子线程获取Request
子线程获取Request
有时候在进行业务处理时一些对于业务不那么重要且对于返回结果无关的情况会开启一个新的线程进行处理,但是在开启新线程进行处理时发现无法从RequestContextHolder中获取到当前的请求,取出来是null
这是因为RequestContextHolder中的信息都是存储在ThreadLocal中的,而ThreadLocal中的数据是使用当前线程进行查找的,不是该线程存储的,是无法查找到的
1 | private static final ThreadLocal<RequestAttributes> requestAttributesHolder = |
但是有时候子线程就是需要获取到当前请求怎么办呢?
kafka之延迟操作组件
kafka之协调器
协调器
kafka有消费者协调器、组协调器和任务管理协调器
消费者协调器ConsumerCoordinator
每个KafkaConsumer实例化时都会实例化一个ConsumerCoordinator对象,负责同一个消费组下各消费者与服务端组协调器之间的通信,向组协调器提交加入消费组、离开消费组以及提交消费偏移量等请求
组协调器GroupCoordinator
每个KafkaServer启动时都会创建一个GroupCoordinator实例,用于管理消费组和该消费组下各消费者的消费偏移量以及消费者再平衡,负责对组内消费者提交的相关请求进行处理,同时管理与之连接的消费偏移量的提交,将每个消费者偏移量保存在kafka的内部主题当中
mybatis之KeyGenerator生成主键
讲mybatis主键生成之前,先说一下原生的主键回填吧。
原生写法
原生的需要在创建PreparedStatement时指定主键回填,Statement.RETURN_GENERATED_KEYS
1 | PreparedStatement statement = connection.prepareStatement("insert into adx_material (adx_template_id,type) values (?,?)", |
这样在返回的结果集中就会将主键返回
1 | ResultSet rs = statement.getGeneratedKeys(); |
mybatis主键回填
默认情况下,mybatis的insert语句不会返回自动生成的主键,而是返回插入的条数,如果需要获取到产生的自增主键,可以使用KeyGenerator接口