吃一堑长一智的开发经验

    技术2022-07-14  72

    序号问题原因解决方案1同Service内部调用this.xxx()会使AOP失效AOP是基于代理的,调用this.xxx()不会经过代理创建的类使用applicationContext.getBean(XXX.class)获取自身的代理类再调用即可2直接从数据库中取1亿数据进行消费,内存太大使用阻塞队列分批次取数据,如:A线程每次从数据库取1000条数据插入阻塞队列,插入阻塞后等待。B线程从阻塞队列里进行消费这样内存中每次只会有1000条数据3背景是一个位置只能有一个停车点新增操作加了锁,但还是产出了重叠的停车点数据库的事务是读提交的1.第一个线程在A点产出停车点,查找重叠停车点,发现没重叠则新增该点位,但后续还有代码需要继续执行,此时事务未提交。2.第二个线程也在A点产出停车点,查找重叠停车点,因为第一个事务还没提交,没发现重叠停车点,新增停车点成功。3.第一个线程事务提交4.第二个线程事务提交此时的结果就是A点位置产出了两个停车点使用required_new传播机制,新增停车点独立出一个事务,新增则直接提交4线程池+ThreadLocal下,ThreadLocal的数据会保留前一次的操作结果线程池的线程是复用的,所以和ThreadLocal搭配使用的情况下要格外注意ThreadLocal的数据再每次使用完后,必须要用remove()方法销毁5线程池+ThreadLocal下,子线程不会继承主线程中的ThreadLocal值使用InheritableThreadLocal,在主线程中新建的线程会继承主线程ThreadLocal中的值
    Processed: 0.009, SQL: 9