0%

在tomcat的conf/web.xml中有两个默认的Servlet,DefaultServlet和JspServlet

阅读全文 »

子线程获取Request

有时候在进行业务处理时一些对于业务不那么重要且对于返回结果无关的情况会开启一个新的线程进行处理,但是在开启新线程进行处理时发现无法从RequestContextHolder中获取到当前的请求,取出来是null

这是因为RequestContextHolder中的信息都是存储在ThreadLocal中的,而ThreadLocal中的数据是使用当前线程进行查找的,不是该线程存储的,是无法查找到的

1
2
3
4
5
private static final ThreadLocal<RequestAttributes> requestAttributesHolder =
new NamedThreadLocal<RequestAttributes>("Request attributes");

private static final ThreadLocal<RequestAttributes> inheritableRequestAttributesHolder =
new NamedInheritableThreadLocal<RequestAttributes>("Request context");

但是有时候子线程就是需要获取到当前请求怎么办呢?

阅读全文 »

延迟操作组件

该组件可以辅助kafka其他组件完成相应的功能

阅读全文 »

协调器

kafka有消费者协调器、组协调器和任务管理协调器

消费者协调器ConsumerCoordinator

每个KafkaConsumer实例化时都会实例化一个ConsumerCoordinator对象,负责同一个消费组下各消费者与服务端组协调器之间的通信,向组协调器提交加入消费组、离开消费组以及提交消费偏移量等请求

组协调器GroupCoordinator

每个KafkaServer启动时都会创建一个GroupCoordinator实例,用于管理消费组和该消费组下各消费者的消费偏移量以及消费者再平衡,负责对组内消费者提交的相关请求进行处理,同时管理与之连接的消费偏移量的提交,将每个消费者偏移量保存在kafka的内部主题当中

阅读全文 »

讲mybatis主键生成之前,先说一下原生的主键回填吧。

原生写法

原生的需要在创建PreparedStatement时指定主键回填,Statement.RETURN_GENERATED_KEYS

1
2
PreparedStatement statement = connection.prepareStatement("insert into adx_material (adx_template_id,type) values (?,?)",
Statement.RETURN_GENERATED_KEYS)

这样在返回的结果集中就会将主键返回

1
2
ResultSet rs = statement.getGeneratedKeys();
long id = rs.getLong(1);

mybatis主键回填

默认情况下,mybatis的insert语句不会返回自动生成的主键,而是返回插入的条数,如果需要获取到产生的自增主键,可以使用KeyGenerator接口

阅读全文 »