Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/359.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java spring事务内的线程-并发异常_Java_Spring_Multithreading_Transactions_Spring Transactions - Fatal编程技术网

Java spring事务内的线程-并发异常

Java spring事务内的线程-并发异常,java,spring,multithreading,transactions,spring-transactions,Java,Spring,Multithreading,Transactions,Spring Transactions,我可以在Spring@Transactional中使用多个线程吗 这样吗 @Async @Transactional(readOnly = false, propagation = Propagation.REQUIRED) public Future<Result> chrgAndSaveLsk(RequestConfig reqConfig, Integer lsk) throws ErrorWhileChrg { ChrgServ chrgServ = ctx.getB

我可以在Spring@Transactional中使用多个线程吗 这样吗

@Async
@Transactional(readOnly = false, propagation = Propagation.REQUIRED)
public Future<Result> chrgAndSaveLsk(RequestConfig reqConfig, Integer lsk) throws ErrorWhileChrg {
    ChrgServ chrgServ = ctx.getBean(ChrgServ.class);
    //Test threads
    Result res = chrgServ.chrgLsk(calc); <--here working threads!

...
现在我只得到下一个例外:

15:49:16.143 [SimpleAsyncTaskExecutor-2] INFO  com.ric.bill.ChrgServ - ChangeID=1121
java.util.concurrent.ExecutionException: java.lang.NullPointerException
    at java.util.concurrent.FutureTask.report(FutureTask.java:122)
    at java.util.concurrent.FutureTask.get(FutureTask.java:192)
    at com.ric.bill.ChrgServ.chrgLsk(ChrgServ.java:235)
    at com.ric.bill.ChrgServThr.chrgAndSaveLsk(ChrgServThr.java:89)
    at com.ric.bill.ChrgServThr$$FastClassBySpringCGLIB$$8f447d36.invoke(<generated>)
    at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204)
15:49:16.143[SimpleAsyncTaskExecutor-2]INFO com.ric.bill.ChrgServ-ChangeID=1121
java.util.concurrent.ExecutionException:java.lang.NullPointerException
位于java.util.concurrent.FutureTask.report(FutureTask.java:122)
位于java.util.concurrent.FutureTask.get(FutureTask.java:192)
在com.ric.bill.ChrgServ.chrgLsk(ChrgServ.java:235)
位于com.ric.bill.ChrgServThr.chrgAndSaveLsk(ChrgServThr.java:89)
在com.ric.bill.ChrgServThr$$FastClassBySpringCGLIB$$8f447d36.invoke()上
位于org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204)
但是,当我删除线程(重写非线程代码)或在线程处理后将@Transactional移动到该位置时,我的应用程序运行良好

为什么会这样?对于事务内部的线程,我应该使用什么方法

15:49:16.143 [SimpleAsyncTaskExecutor-2] INFO  com.ric.bill.ChrgServ - ChangeID=1121
java.util.concurrent.ExecutionException: java.lang.NullPointerException
    at java.util.concurrent.FutureTask.report(FutureTask.java:122)
    at java.util.concurrent.FutureTask.get(FutureTask.java:192)
    at com.ric.bill.ChrgServ.chrgLsk(ChrgServ.java:235)
    at com.ric.bill.ChrgServThr.chrgAndSaveLsk(ChrgServThr.java:89)
    at com.ric.bill.ChrgServThr$$FastClassBySpringCGLIB$$8f447d36.invoke(<generated>)
    at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204)