java 异步调用新增报错,如何解决?

java 异步调用新增报错 = =

直接调用就没问题

img

img

 Exception in threadThread-33"C                                  org.mybatis.Spring.MyBatisSystemException: nested exception is org.apache.ibatis.exceptions.PersistenceException
 ###Error updating database.Cause:java.lang. Nul1PointerException
 ###The error may exist in com/hemu/iot/core/mapper/deviceMapper/EquipAlarmRecordMapper.java(best guess)
 ###Theerror               may involve com.hemu.iot.core.mapper.deviceMapper.EquipAlarmRecordMapper.insert
 ### The error occurred while executing an update
 ### Cause:java.lang.Nul1PointerException
     at org. mybatis.spring. MyBatisExceptionTranslator.translateExceptionIfPossible MyBatisExceptionTranslatorjaya:92)
     at org. mybatis.spring. SqlSessionTemplatesSqlSessionInterceptor.invoke (SalSessionTemplate_iava:440)<1 internal cal1)
     at org.mybatis.spring. SqlSessionTemplate.insert (SqlSessionTemplatejava:271)
     at com.baomidou. mybatisplus.core.override. MybatisMapperMethod.execute (MybatisMapperMethod. java:60
     at com. baomidou. mybatisplus.core. override. MybatisMapperProxysPlainMethodInvoker. invoke (MybatisMapperProxy.java:148
     at com.baomidou. mybatisplus.core.override. MybatisMapperProxy.invoke(MybatisMapperProxy.java:89)  十                                                                                                         )<1internalca11
     at com. hemu. web. controller:infoAccept. InfoAcceptController.sets (InfoAcceptController iava:65)
     at com. hemu, web. controller. inf oAccept. InfoAcceptControl ler, lambda sAcceptCompanyProtocol Infosso (InfoAccentController.iava:72
     atjava.lang.Thread.run(Thread_iava:748
 Caused by:org.apache,ibatis.exceptions. PersistenceException
 #Error updatingdatabase                                Cause:java.lang.NullPointerExcept1on
 牛##The error may exist in com/hemu/iot/core/mapper/devicelapper/EquipAlarmRecordMapper.java(best guess)
 #料件The error may involve com.hemu.iot.core.mapper.deviceMapper.EquipAlarmRecordMapper.insert
 ##件 The error occurred while executing an update
 ###Cause:java.lang.Nul1PointerException
     at org.apache.ibatis.exceptions.ExceptionFactory.wrapException(ExceptionFactory.java:30
     at org.apache.ibatis.session.defaults.DefaultSqlSession.update(DefaultSqlSessionjava:199
 十      at org.apache.ibatis.session.defaults.DefaultSqlSession.insert(DefaultSalSession.iava:184)<4internal calis
     at org. mybatis. spring. SqlSessionTemplatesSqlSessi onInterceptor. invoke (SalSessionTemplate.java:4269more
 Caused by:java.lang.NulIPointerException
     at com. hemu. framework.security.handle.MyMetaObjectHandler.getTokenCompanyName (MyMetaObiectHandler.java:42
     atcom.hemu.framework.security.handle.MyMetaObjectHandler.insertFi11(MyMetaObjectHandler.java:32
     atcom.baomidou.mybatisplus.core.MybatisParameterHandler.lambda$insertFi11$O(MybatisParameterHandler.java:146
      atjava.util.Optional.ifPresent(Optional.java:159

这里是不是从请求域拿了属性,开启线程后请求上下文里面的属性会置空,导致NPE

img

这么试试


Thread thread = new Thread() {
        public void run() {
            sets();
        }
    };
    thread.start();

仅供参考:
根据您提供的信息,我猜测问题可能是由于在多线程环境下访问数据库引起的。
在第一种写法中,sets()方法直接被调用,是在主线程中执行的,因此没有出现问题。
而在第二种写法中,sets()方法被放在了一个新的线程中运行,可能会导致并发访问数据库,引发异常。

通常情况下,不建议在多线程环境下直接访问数据库。如果需要在多线程环境下访问数据库,可以考虑使用数据库连接池等技术来管理数据库连接,以避免并发访问数据库的问题。

您可以尝试将sets()方法的访问数据库的操作放在同步代码块中,或者使用线程安全的数据库连接池等方式来解决这个问题。另外,如果您需要在多线程环境下访问数据库,也可以考虑使用Spring提供的事务管理机制来确保数据的一致性。

希望这些提示能够帮助您解决问题。