1、适用场景

一个service,操作两个dao,要求两个dao为同一个事务,要么全成功,要么全失败。

aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAysAAAFECAIAAACoCDatAAAgAElEQVR4nO3d/XeU1YHA8f2vOse6UgTO2l3qBijSgoalLj2JG2swwukqxWxo1FLeSrt0N2nTnrQhwcqCNi3Y9hQYTQVNql2q8lJBYklV6gqoVe9b9ocJyWRenmee5M69d26+nzM/lDCZuc8lHb95njt3/m4SAAAAbv2d7wEAAAAsOBQYAACAaxQYAACAaxQYAACAaxQYAACAaxQYAACAaxQYAACAaxQYAACAaxQYAACAaxQYAACAaxQYAACAaxQYAACAaxQYAACAaxQYAACAaxQYAACAaxQYAACAaxQYAABRy3fKXLO+7HsYmI0CAwAganYK7LJuzql+Os4aCgwAgKhZKbB8p8xRYDZRYAAARG2eBXa5X+VyMpejwOyiwCyQN380rd98HxkAoDHlO2f/B6VQYHk164uduug7TH/z9F9VKq28osCsosAsqFMqUWAAgLkoXDHMF/9xqsB0fuZeunMmwkx/88x5ssv9lWKLArOMArOAAgMABOOybs7JzqLUqnYVsqjMSurK9DeXnCGjwKyjwCygwAAAoSicwSoKsJICK77aOPX1tG8pfIkCs4sCs4ACAwCEIimnCuvAbqbV9NfLe6v8QSgw2ygwCygwAEAoEgqspLSm/8g5MB8oMAsoMABAMMpSKbXAWAfmAwVmAQUGAAhH8ZscZ115nPUmx1lXJHkvpHsUmAUUGAAgKLqzaNOv4lNfM/uENev+qiv0Z5VW0Y6s7MtqEQVmAQUGAAAyocAsoMAAAEAmFJgFFBgAAMiEArOAAgMAAJlQYBZQYAAAIBMKzAIKDAAAZEKBWUCBAQCATCgwCygwAACQCQVmAQUGAAAyocAsoMAAAEAmFJgFFBgAAMiEArOAAgMANCJ99aq5dMm8/rp++WX9wgv6+HF99Kg+fFgdOKD6+lRfnzpwQB8+rI8e1ceP6xde0K+8Yl5/3Vy6pN97z/fYGx4FZgEFBgAImf74Y3Ppkh4ZUU8+qfbulZs3i7Vrxec+J/7lX8Tq1eKee+TGjfL+++XmzXLbNtndrXbvVvv3q/371e7dsrtbbtsmN2+W998vN24U99wjVq+W69eLxYvFunVy82a1d6968kk9MmIuXdIff+z7WBsGBWYBBQYACI15/33929+q3btFc7PYuFGsXi3b29WOHWpgQB8/bs6fNx9+OK/H//BDc+6cPn5cDQyoHTtke7tYvVp89aty/Xq1Z48+ftxcu2brWKJEgVlAgQEAQqDfflsfPaoef1ysWSOWLZNbtqgDB/Rrrzkdw6uvqoEBuXmzWLZMrFmjnnhCHzum337b5RgaAgVmAQUGAPBL/+IX8t/+TXR0yG98Qx06ZC5e9D2iycnJSfPGG+qpp+TWrbKjQ7a16V/+0veIAkKBWUCBAQC80KOjsqtLfOYz8tFH9enTvoeTRJ8+LbdtE7mc7OrSY2O+h+MfBWYBBQYAcEz+9Kfizjtla6v++c+N1r6HUyujlH7mGdnSIv75n+XAgO/h+ESBWUCBuSRzuehvvufYM+/zH/7N9z8RPFMDA+KWW+TQkJmY8D2WuTMTE3JoSNx6qxoc9D0WPygwC+r0gsjrbEXRT0v0B5iKGUjG/CxkenhY3HGH2rPHSOl7LHaYTz5Ru3aJf/xH/Ytf+B6LaxYKzPuvg95/QaTAXIp+WqI/wFTMQDLmZ2HSp06JNWvkf/yH+etffY/FPvPuu/LRR8WXvhT4Uja77BTY/B/EIgosbtFPS/QHmIoZSMb8LECqv18+8UQgb2+sH/OnP8nHHlMLZnEYBRbuM4Y2sYGIflqiP8BUzEAy5mehkY8+qvbt8z0Kd9SePbKry/coXKDAwn3G0CY2ENFPS/QHmIoZSMb8LChi3boFuEBK//znornZ9yjqjgIL9xlDm9hARD8t0R9gKmYgGfOzQBghxMaN5tw53wPxQ7/2mmhpieYNBxVRYOE+Y2gTG4jopyX6A0zFDCRjfhYIef/9amTE9yh8UidPyvZ236OoIwos3GcMbWIDEf20RH+AqZiBZMzPQqAPH5bd3b5H4Z/s6tLPPON7FPVCgYX7jKFNbCCin5boDzAVM5CM+YmeuX5dLFniexShEJ/7nPnwQ9+jqAsKLNxnDG1iAxH9tER/gKmYgWTMT/TkE0/oU6d8jyIU+vnn5be/7XsUdbGwCkzmcqKpSba2ytZW2dWlentVb68eHtZjY3pszFy/bv0Z5yO0iQ1E9NMS/QGmYgaSMT/RE8uXm3fe8T2KUJiJCXHnnb5HURcLq8AmJyfNuXN6dFQPD6ueHrVrl2xpkS0tJVvqi7vvLlSa2r17qtJOnEioNArMpeinJfoDTMUMJGN+4mauXhWf/7zvUYRF3HGHee8936Owb8EVWAIzMaFHR/Xx46qnR/X0FOJMNDVV/uyjwom01lbV2ytzOdXbW0g0PTbm/UDiFv20RH+AqZiBZMxP3HQ+Lx980PcowiI3bdLPPed7FPZRYDUx16/r0VE9OjoVZ5s3y5YWsW5dyidUFlWa6u1VQ0NTJ9Jq298ltIkNRPTTEv0BpmIGkjE/cZODg/LAAd+jCIs8cEAODvoehX0UmJ1n1KOjanAw4cpmxZtYunSq0rZsKa20iYnQJjYQ0U9L9AeYihlIxvzEjXNg5TgHVlVoLwdBvRdy1rKz6SubS5bU0mdTlZbw1oGJCZeHGYjQft6si/4AUzEDyVLnJ+F8fNXb9C+B1W/TrzwJt4X5ojRn5uxZ2dpaMmmsAyvHOrCqQnu5DKrAEkwtOyu5sllt2VltlVbjWwcaWmg/b9ZFf4CpmIFktc9P4RVm5nZzkevMbfqc/c1b+uKKed+m3+qUcEvNweKlt1VzMPjP81F7905NS1dX8Ws174Usxnshk4T2ctkoBZagsOxM5nKFK5uyq2v+r4wV3uBp+60DboT282Zd9AeYihlI5nh+pn9XnLndPKk/fSu8Rs0quSxn+j3eZi4yJNxuXn9IysGbv/Qm3MrnVqxYMTOSpUtVb2+hw9SOHfqFF1z+K4eM/cCShPZyGUGBJT9sLRtqzPFW9gtoPSpNtrbO5wFD+3mzLvoDTMUMJGvQ+Zl64Sq6Ta2dLS652Rln7ZWtcW6iqUkPD5sPPhCLF/v+FwuFuO0287e/+R5FXVBg4T7jHB4224Yac3h1SHjrQM0n/Kdrb24dFtrPm3XRH2AqZiDZAp+fMC+tWu6w5ma5b5/cvt33ZPsnOzv18LDvUdQLBRbuM9p92DluqDGfSqvy1oFZ98/eYaH9vFkX/QGmYgaSMT/zF/ql1dZWPTYmH3hA5fO+p8on9dvfxv22UAos3Gd0eSCzLgrYvbJZ88tNjUMN7efNuvgPMO2fO/oZmCfmJxz2L60W/b/DSClaWvRrr/k9Rl/0mTPivvuMUr4HUkcUWLjPGMjEzn9DDbsdFsi01M9COMDkf+7oZ2CemJ9o1PICKJqb9TPPuB+bX/rIEblhg+9R1B0FFu4zhjax5SxuqCFzOdnVRYFNLowDTP6vTvQzME/MTzRq/OVTdnWpPXucjco7tXOn7O72PQoXKLBwnzG0ic1kZtlZ2oYaYskS2dVV+0aODT0ttaj9AM3166lvgC+/1bLTUslNbtmS/o792bdsIT77v0DR/xPPE/MTjdoXYKiBAfnYY+bChXoPyS9z7pz85jfVwYO+B+IIBRbuM4Y2sVaYs2eL22t6/5vaRTktxcoP0P4F3zBvN/9rFP0/8TzNbX7E3XdH/J6yhUC/+KJYu1Zu2xblZq3mL3+RW7eKdev06KjvsbhDgYX7jKFNrBWFPaALe97M7RGinJZiyQdYvvJ3ZglwyXvyq7+lK9BtMymw2sxtfvTYmOzqEkuXqt27+eygxqWPHhXLl6udO83HH/seix3mo4/Ujh3iC1/Qx475HotrFFi4zxjaxFoht2/Xx4/P6xFinJZiIRzg9EXkCreyN+0nveerxt2YuAqZxXzmx0xMqN5esWSJ3LJFnzhhcVRwSR08KP7+7+WBA+att3yPZe7M+Lj86U/FokXqySd9j8UPCizcZwxtYgMR/bQshAOs1l7Td/AysEYx//kx16/r4WHR1CSamtTQUHyfHrtAyAMHxIoVcuNGfeSIEcL3cGplPv1UHz4sN24UK1fKwUHfw/GJAgv3GUOb2EBEPy0L4QCrtdf0HRwPqbFYnB89NiZbW2UuJ7u6wv8ca1SkX35ZdneLW26RW7fq3/3O93CS6JER+cgj4rOfld3d+pVXfA/HPzsFFtpt/geVdQYa6GEbXfTTEv8BsiPr/FifHzMxIbu6xJIlrNZvaPrYMfm1r4lNm+TDD6snnwzkjZPm/Hl18KD893+X7e3ygQf0s8/6HlFALBQYKDCXop+W6A8wFTOQrE7zY65fV729oqmJ1foNTb/7rv71r9WOHWLtWnH77bKjQ/3kJ/rMGadj+N//Vf398sEHxeLFYu1a9e1v61//Wl+96nIMDYECs4ACcyn6aYn+AFMxA8nqPT96eHjq0iSr9RucuXFD5/PqO9+RGzaIe+8VK1fKtjb1+OOqv1//5jfm9dfnuQTQXLumX3tN/+Y3qr9fPf64bGsTK1eKjRvlV76i9u3T+bz54ANbxxIlCswCCsyl6Kcl+gNMxQwkczM/hd0rZC4nmprmsG8fQmO0NuPj+tQpdeiQ+u535de/LpqbxZIlcv16sXKlWLtW3nuvbGuTDz0kt26V3d1q1y61f7/av1/t2iW7u+XWrbKjQ7a1yXvvFWvXipUrxd13i6VLRXOz/PrX1Xe/qw4d0qdOmfFxo7XvY20YFJgFFJhL0U9L9AeYihlI5nJ+ZnavyNX6uWFoLPraNTM+bs6f13/4gz59Wp84oY8d00eOqMFB1den+vrU4KA+ckQfO6ZPntSnT+s//MGcP2/Gx/W1a77H3vAoMAsoMJein5boDzAVM5DMy/wUdq+QuVxhtT6nxID5o8AsoMBcin5aoj/AVMxAMo/zo8fG5ObNMpdjtT4wfxSYBRSYS9FPS/QHmIoZSOZ9fqZ3r5ja143V+sCcUGAWUGAuRT8t0R9gKmYgWSDzY65fV4ODU5cmWa0PZFfHAlO9vfV78KBQYC5FPy3RH2AqZiBZaPMzs3sFq/WBLOpVYKq3V7a01OnBQ0OBuRT9tER/gKmYgWRhzo85d66wewWr9YEa1bHAVE9PnR48NBSYS9FPS/QHmIoZSBby/BTvXsFqfSBZQAWmx8ZUb2/5rU4jtIgCcyn6aYn+AFMxA8kaYn6md69gtT5QTRAFpsfGZGurbGlRPT3ltzqN0CIKzKXopyX6A0zFDCRroPmZ3r2C1fpAOW8FNn2Kq9BeenS0TiNxgAJzKfppif4AUzEDyRpufmbtXsFqfeAmPwUmcznV0xNBexVQYC5FPy3RH2AqZiBZg85P8e4VrNYHJr0U2PRfRbNanwJzKfppif4AUzEDyRp9fop3r2C1PhYyn+vAKDAvD9voop+W6A8wFTOQLI75Kd69Ymq1/vCw70EBTlFgFlBgLkU/LdEfYCpmIFlM81O8e8XMan1OiWFhoMAsoMBcin5aoj/AVMxAsijnRw8Pi3XrZk6JsVofCwAFZgEF5tLMa3S8N99z7BkzkCzi+SnevaJwSozV+ogYBWYBBQZYxE9+sujnx0xMqF27Zi5NLl0qu7q4NIn4UGAWUGCARfzkJ1sg81OyewWr9REfCswCCgywyPtV4PBvvv+JnNLHj0/vXiFZrY+IUGAWUGAAUFelu1fkWK2PhkeBWUCBAYAD5vr14t0rWK2PhkaBWUCBAYBLJbtXsFofjSi4Apv+xG7V21unsVlHgQGAeyW7V7BaH43Fc4HJ1tbi5Cp8Vrfq6Snc6jQ26ygwAPClZPcKVuujUdSrwCZrCAiZyxX3VmNVVzEKDAD8qrB7Bav1K8p3ylyzvux7GKhrgSWfBlO9vYX8qt8AnKHAACAQJbtXsFq/1PwKTHfO2hhF5a2ObYHxVmC13KFRUGAAEJTy3SumVuufO+d7aL7Nq8Au6+ZOffMPpr+ZCJsPCswCCgwAAlS+ewWr9a1ehcyrXE52kmBzRIFZQIHFLq9yOdXPugmgUZXsXlE4JbaAVuvnO2d/rEKhwPJq1hdnTm5N3jy/NXWpseqr32XdnJPN/cbBIcSIArOAAotdLQVGpQGh02NjpRvr53Jyy5bIV+vnO2ddK5w5B5bXRWevdOdMhJn+5pnzZJf7q764Xe7nHNh8UGAWUGCxo8CAeJTvXjG1gcXQUIyr9S/r5tmRVO0qZFGZlbyamf7mkjNkBYVV+awDm7M6FlgqCszLwyI7CgyIjbl+XQ8Pl+xeEeFq/cIZrOJIml1gxVcbp76e9i1FX+QE2LxQYBZQYAEpXu5QtDqh6FVm+je5qWa6+VfNqmxBg+4sfKXib4TFj5a0nAJAyMp3r4hqtX5SThVeuG6m1fTXy3ur/EEK1x9ZATY/FJgFFFgoZr9M6M4KaxpuRtXkdDbNpFXp6850eM0qsIRH4xwY0KDMxET5ErEYVusnFFjJK970H9PPgRVePPlVc74oMAsosFBUXt8wu41mXlzKm2n2V/Kdxae4bn699kcD0GCmdq8o2Vi/sVfrl700pRZYyjqwPGe/bPFcYCWfC9mIH8s9SYGFo+KJ8dLf5/IJzVR0TmtSd04vcSi6Z5ZHA9CgynevaNzV+sVvcpx15XHWmxxnXZGs/l5I8ssmnwU2OTlZ8qGQDfoBkRRYOGatKi30U+lGONNXHis1U8lvgVOlVXTPTI8GoJFV3L2iEVfrF32UUKcuPvU184LWrPurrtAvOetf4TWQ5fhz4rnA4kCBheeybq7+vp4pFZvp5hdnLkFOJp4DS340AA2v4u4VUa3WhycUmAUUWIjSV2hV/rrpb5bN/bqz+K+qrwNLezQAcai4e0Ukq/XhCQVmAQUWCNPfPH12qnjp6Kw1DZOTpr+z4mrTKVOn2Su+KTLh0WatIQMQq8q7VzT2an34QYFZQIGFYtYahVlvipy1Pixl/4jyTzpL2A+s+J7Tu4LxJm0gchV3r2jc1frwggKzgAIDYpTnM++QrOruFblcw63Wh3sUmAUUGBAjCgy1qrh7hczlxN13s1of1VBgFlBgAICKu1dMrdbfvZvV+ihBgVlAgQGeuf480JlzY5WeAguamZhQvb0Vdq8orNY/caL0/mfPhnaeTP/5z+bCBX3mjH7xRZ3P62ef1UeOqMFB1den+vrU4KA+ckQ/+6zO5/WLL+ozZ8yFC/rPf/Y96sZDgVlAgQE+Of880MnJvGruN1WfAqi6e0X5an21d6/M5XxFmBkf1yMj6uBBtXOnbG8Xq1bJXE5u3iy+/GW5YYO87z7Z0SEfeUR2d6tdu9T+/Wr/frVrl+zulo88Ijs65H33yQ0bxJe/LDdvFp/5jFi1Sra3q5071cGDemTEjI97OahGQYFZQIEBPrn/PNCUpwBm6LGxyrtX3FytL1asKFypdLZyX7/yivrBD2Rrq2xpmWmmoSE9MmIuz31TQ6O1uXxZP/+8GhpSO3fKBx4Qq1bJ1lbZ2qp++EP9yisWDyEOFJgFFBjgk4fPA01+CqBUYfeKypcmi5aL1S/C9B//qPr75QMPiM9+Vm7cqP7rv/ToaJ2eq/SpX3pJff/78l//Vdx6q2xvVz/5iX71VTdPHTgKzAIKDPDLzeeBltZV1acAKkvavaIQYc3NdvcSMx9+qAYGxOrV8qGH1L59emTEfPqpxcfPNphPPtEjI+o73xEPPSTWrFEDA+ajj3wNJgQUmAUUGBAGt58HymVHzJUeHq52adJWhOmXXpKPPCIWL1Z795pLl+b/gHaZixfVnj1i0SL5jW84OxsXGgrMAgoMCIXTzwPlw0Axd+bs2apXJLdvn88jq0OHxMqVsrVVP/usrdHWjz56VLa2ilWr1P/8j++xuEaBWUCBAR75+DzQCu+FLHoKIF3hLZB2I0zn86KpSf7oRw33JkRz+bLq6xMrVujnn/c9FncoMAsoMMAnL58HWmE/MHajQAZixQrR1CRbWmRLi9q1S/X0qJ4ePTqqR0fnsB7fXLwo29pkR4e5cqUeo3XDvPWWbG+XX/uaefNN32NxgQKzgAJDZlJOSjkpxKQQvocCoLGp3bvFXXfpU6d8D8QO/bvfiS9+Ue7Z43sgdUeBWUCBIZURwty4Yd5/3/zf/5XcfA8NQAMTa9aow4d9j8I+deiQWLvW9yjqiwKzgAJDLcynn5bnFwUGYG7MtWti0SLzxhu+B1Iv5sIFcfvt5sYN3wOpFwrMAgoMAOCSeeMNsWxZ9PtpmRs3xO23z2en/pBRYBZQYAAAZ8w778h77/U9CnfEV75i3n3X9yjso8AsoMAAAM6Iz3/eXL3qexTumLffFsuX+x6FfRSYBRQYAMAN9b3vqR//2PcoXFM//KH6/vd9j8IyCswCCgwA4IC5dEmsXu17FH6IlSsbbqfZZBSYBRQYAMABuX27fvll36PwQ4+Oysce8z0KmygwCygwAIADYtkyc+2a71H4Yd57T/zDP/gehU0UmAUUGACg3szEhLjzTt+j8EksX27eftv3KKyhwCygwAAA9aZPnJAPPeR7FD7Jjg598qTvUVhDgVlAgQEA6k0ODsoDB3yPwqfIZoACs4ACAwDUmz55UnZ0+B6FT7KjQ+fzvkdhDQVmAQUGAKg385e/iC98wfcofBLLl5t33vE9CmsoMAsoMACAA2LZMvP++75H4Yd57z1xxx2+R2ETBWYBBQYAcEB+85v697/3PQo/9Esvye5u36OwiQKzgAIDADhgxsfFqlW+R+GHaGoyV674HoVNFJgFFBgAwA21f7/q6/M9CtdUb6/67//2PQrLKDALKDAAgDPin/4ppgXpqWLdipYCs4ACAwA4Y65eFRs2+B6FO3LDBvPXv/oehX0UmAUUGADAJfPmm2LxYnPjhu+B1Jd5/32xaJF56y3fA6kLCswCCgwA4Jj54ANx++3m/HnfA6kX8/rrYtky89FHvgdSLxSYBRQYAMALsXat+tnPfI/CPvWzn4l77vE9ivqiwCygwAAAvsi9e8WqVXpkxPdA7NDPPSdWrFD79vkeSN1RYBZQYAAAj8z4uGxvl+3tZnzc91jmzrz5prz/frlpU6wLv0pQYBZQYAAA7/TIiFi1Sv3gB+bSJd9jycZcvCh7esQXv6hfeMH3WNyhwCygwAAAgVCHD4vVq+VXv6p/+UvfY0mnh4flxo1izRr19NO+x+IaBWYBBQYACIr+/e/ltm3ittvUzp3mT3/yPZxS5sIFtXOnuPVW2dmpX37Z93D8oMAsoMAAAAEyH3+shobEl74k2tvVnj06nzd/+5u3wXz0kc7n1e7d8sEHxdq16uBB88knvgYTAgrMAgoMABAyffasGhiQDz4obrtNbtig/vM/9enTRuu6P6+U+tQp9b3vyQ0bxKJFsqNDHTigz56t9/M2BArMAgoMANAo9Jkz6kc/km1torVVNDXJtjb1rW+pgQGdz5uLF42Uc3tYI4S5eFGfPKkGBtS3viXb2kRTk2htlW1t6sc/1n/8o92jiAAFZgEFBgBoRObKFX3qlHrqKbV3r+zoEGvWiFtukR0d4q675Pr1sqVFbtokH35Ybt+udu5U+/er/fvVzp1y+3b58MNy0ybZ0iLXrxd33SU7OsQtt4g1a2RHh9q7Vz31lD592ly54vv4gkaBWUCBAQCioa9cMRcv6ldf1WNj+rnn9K9+pZ9+Wg0Nqb4+1denhob000/rX/1KP/ecHhvTr75qLl7UExO+R914KDALKDAAAJAJBWYBBQYAADKhwCygwAAAQCYUmAUUGAAAyIQCs4ACAwAAmVBgFlBgAAAgEwrMAgoMAABkQoFZQIEBAIBMKDALKDAAAJAJBWYBBQYAADKhwCygwAAAQCYUmAUUGAAAyIQCs4ACAwAAmVBgFlBgAAAgEwrMAgoMAABkQoFZQIEBAIBMKDALKDAAAJAJBWYBBQYAADKhwCygwAAAQCYUmAUUGAAAyIQCs4ACAwAAmVBgFlBgAAAgEwrMAgoMAABkQoFZQIEBAIBMKDALKDAAAJAJBWYBBQYAADKhwCygwAAAQCYUmAUUGAAAyIQCs4ACAwAAmVBgFlBgAAAgEwrMAgoMAABkQoFZQIEBAIBMKDALKDAAAJAJBWYBBQYAADKhwCygwAAAQCYUmAUUGAAAyIQCs4ACAwAAmVBgFlBgAAAgEwrMAgoMAABkQoFZQIEBAIBMKDALKDAAAJAJBWYBBQYAADKhwCygwAAAQCYUmAUUGAAAyIQCs4ACAwAAmVBgFlBgAAAgEwrMAgoMAABkQoFZQIEBAIBMKDALKDAAAJAJBWYBBQYAADKhwCygwAAAQCYUmAUUGAAAyIQCs4ACAwAAmVBgFlBgAAAgEwrMAgoMAABkQoFZQIEBAIBMKDALKDAAAJAJBWYBBQYAADKhwCygwAAAQCYUmAUUGAAAyIQCs6BRCmyeD1j7t9evHVMfueIdPI7HwRgAAI2IArMgpgJLuE/tcSNzueJb6l8l3D/rIZQ8VOH+Fb9Y47fPczxzuCcAYCGgwCxoiAKbfyvU/vUaM664wGocZ41/m/osk9Vbrdp3VYyzarfygWVtOwBA3CgwC8IssDkXQ7XzRlbuX78Cqzaq1G9PHtL8z4FVa7LUbwQARIwCsyDMArP+UMk1k1BRJX9VXmbJeZfpbFPymFPvU0tuZj37Vf4/yC8AAAVmQcMV2NweOflETsWOqf0xq9259uybrCGPEs7hVRtP1gFUPs6i4SXcAQCwcFBgFgReYDVeAqt4aqr2x6nlsmPy2FIvEWb9Yy1PWm0MCZMwh3Ny5Sf8ahknACBiFJgFIRdY8qWx1OetpaVk2Yqrak0zh3NUtSdX6hNV/JaSO9QeVclzUvIU1Z46+XsBABGjwCwItsCK26j20zbzL7CSp6tleMn3qfGPWb84h/tnasfU0dYSeV3/z6UAAAMgSURBVACAKFFgFoRZYNWuo6U+cnJp1fgsqU9R4wmhuRVYplNZWYvN1ngILwBYyCgwC8IssITHsVJgCVf3Eh4nObYSzhLVHjFZ5628BSs+RepIUtMqU6QCAOJGgVkQfYElXC6sWGDF9y8pmFpGW/5QNf6x+BHmHEYJX0y9W6YzbRQYACxkFJgF0RdYwreUFFjFVks4yZTwxdrHlnWo5V8vf97UO2e9sEiBAQCKUWAWxFRgCae7arl/LQVW/r8TTnrVPvLU+5SPKuuJMbt3o8AAYCGjwCwIv8BqPHOTcLKq2pme5AIrDzI3BVbjCapqTVbLma3aU7Vij5JfALDAUWAWhF9gVh4n9fErBlz5nUO7Cjlncx4M+QUAoMAsCLzAAABAaCgwCygwAACQCQVmAQUGAAAyocAsoMAAAEAmFJgFFBgAAMiEArOAAgMAAJlQYBZQYAAAIBMKzAIKDAAAZEKBWUCBAQCATCgwCygwAACQCQVmAQUGAAAyocAsoMAAAEAmFJgFFBgAAMiEArOAAgMAAJlQYBZQYAAAIBMKzAIKDAAAZEKBWUCBAQCATCgwCygwAACQCQVmgczl6nTzfWQAAKAuKDAAAADXKDAAAADXKDAAAADXKDAAAADXKDAAAADXKDAAAADXKDAAAADXKDAAAADXKDAAAADXKDAAAADXKDAAAADXKDAAAADXKDAAAADXKDAAAADXKDAAAADXKDAAAADXKDAAAADXKDAAAADXKDAAAADXKDAAAADXKDAAAADXKDAAAADXKDAAAADXKDAAAADXKDAAAADXKDAAAADXKDAAAADXKDAAAADXKDAAAADXKDAAAADXKDAAAADXKDAAAADXKDAAAADXKDAAAADXKDAAAADXKDAAAADXKDAAAADXKDAAAADXKDAAAADXKDAAAADXKDAAAADXKDAAAADXKDAAAADXKDAAAADXKDAAAADXKDAAAADXKDAAAADXKDAAAADXKDAAAADXKDAAAADXKDAAAADXKDAAAADXKDAAAADXKDAAAADXKDAAAADXKDAAAADXKDAAAADXKDAAAADX/h9cu2SNOwB0eQAAAABJRU5ErkJggg==" alt="" />

DBUtils,使用ThreadLocal

 public class DbUtils {
//线程局部数据容器
private static ThreadLocal<Connection> tl = new ThreadLocal<Connection>();
private static DataSource ds;
private static Connection conn;
static{
ds=new ComboPooledDataSource();
} public static DataSource getdDataSource()
{
return ds;
}
public static Connection getcConnection()
{ try {
conn=tl.get();//是否已经有值
if(conn==null)//没有值就添加
{
conn=ds.getConnection();
tl.set(conn);
} } catch (SQLException e) {
e.printStackTrace();
}
return conn;
} public static void remove()
{
tl.remove();//实现一个删除thredlocal中与线程相关的对象
}
}

过滤器中管理事务

 public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
Connection conn = null;
try {
conn = DbUtils.getcConnection();
conn.setAutoCommit(false);
chain.doFilter(request, response);//放行
conn.commit();//如果没有出错,提交事务,所以需要在dao中抛出异常,不能try-catch,否则无法捕捉到错误
System.err.println("成功.......................");
} catch (Exception e) {
System.err.println("出错了......................");
try {
//判断是否是数据库错误,如果不是还是提交
if (e instanceof SQLException) {
conn.rollback();
} else {
conn.commit();
}
} catch (SQLException e1) {
e1.printStackTrace();
}
} finally {
try {
conn.close();//关闭连接
DbUtils.remove();//实现一个删除thredlocal中与线程相关的对象
} catch (SQLException e) {
e.printStackTrace();
}
}
}

注意:必须在dao中抛出异常,否则无法捕捉到,永远是提交事务。

dao层:

try {
DataSource ds=DbUtils.getdDataSource();
Connection conn=ds.getConnection();
QueryRunner run =new QueryRunner(ds);
String sql="INSERT INTO users VALUES (?,?,? ";
run.update(conn, sql,"U005","Tom","456");
} catch (SQLException e) {
throw new RuntimeException(e);
}

如果需要进行事务的管理,添加到过滤器url中即可

用ThreadLocal管理事务的更多相关文章

  1. 利用ThreadLocal管理事务

    package com.itheima.util; import java.sql.Connection; import java.sql.SQLException; //封装了所有与事务有关的方法 ...

  2. 基于JDK动态代理和CGLIB动态代理的实现Spring注解管理事务(@Trasactional)到底有什么区别。

    基于JDK动态代理和CGLIB动态代理的实现Spring注解管理事务(@Trasactional)到底有什么区别. 我还是喜欢基于Schema风格的Spring事务管理,但也有很多人在用基于@Tras ...

  3. Spring中的事物管理,用 @Transactional 注解声明式地管理事务

    事物: 事务管理是企业级应用程序开发中必不可少的技术,  用来确保数据的 完整性和 一致性. 事务就是一系列的动作, 它们被当做一个单独的工作单元. 这些动作要么全部完成, 要么全部不起作用 事务的四 ...

  4. java笔记--用ThreadLocal管理线程,Callable<V>接口实现有返回值的线程

    用ThreadLocal管理线程,Callable<V>接口实现有返回值的线程 ThreadLocal在我的笔记"关于线程同步"的第5种方式里面有介绍,这里就不多说了. ...

  5. 通过案例掌握Spring 管理事务的步骤及配置

    案例描述  通过完成生成订单业务,掌握事务处理.  需要d_order表和d_item表  订单生成时的业务逻辑:向d_order插入1条数据的同时,向t_item中插入若干条数据  这就是一个独立的 ...

  6. spring是如何管理 事务的

    Spring提供的事务管理可以分为两类:编程式的和声明式的.编程式的,比较灵活,但是代码量大,存在重复的代码比较多:声明式的比编程式的更灵活方便.  1.传统使用JDBC的事务管理  以往使用JDBC ...

  7. Spring -- <tx:annotation-driven>注解基于JDK动态代理和CGLIB动态代理的实现Spring注解管理事务(@Trasactional)的区别。

    借鉴:http://jinnianshilongnian.iteye.com/blog/1508018 基于JDK动态代理和CGLIB动态代理的实现Spring注解管理事务(@Trasactional ...

  8. ThreadLocal管理Connection

    ThreadLocal管理Connection 每一个用户都对应有一个单独线程,每一个线程都有一个数据库连接对象Connection对象接待它. 一个用户对应一个线程,这个线程中的Connection ...

  9. 对Spring 容器管理事务支持的总结

    1.问题 Connection conn = DataSourceUtils.getConnection(); //开启事务 conn.setAutoCommit(false); try { Obje ...

随机推荐

  1. 【课上OJ】判断密码强度

    一个判断密码强度问题: 假设允许采用以下四类字符作为密码: (1)大写英文字母,(2)小写英文字母,(3)数字0-9,(4)特殊符号 @ - _ # ~ 对密码强度做以下规定: Best: 长度> ...

  2. 搭建splinter+python环境时遇到的错误

    因为不想用urllib2了,没有用过splinter,今天就想试试,毕竟后者支持的功能更人性化/自动化. 1,安装splinter 安装过程很简单,安装了pip的话,执行: $ [sudo] pip ...

  3. 有了screen,妈妈再也不用担心我的学习啦

    创建一个srceen screen -S test1 从screen离开 crtl+a d (左手按住crtl和a 然后右手按d) 查看当前有多少screen screen -ls 回到screen ...

  4. D3js初探及数据可视化案例设计实战

    摘要:本文以本人目前所做项目为基础,从设计的角度探讨数据可视化的设计的方法.过程和结果,起抛砖引玉之效.在技术方案上,我们采用通用web架构和d3js作为主要技术手段:考虑到项目需求,这里所做的可视化 ...

  5. android EditText内嵌图片

    如下所示: 主要用到的属性:android:drawableLeft <EditText android:layout_width="match_parent" androi ...

  6. Entity Framework with MySQL 学习笔记一(拦截)

    参考 : http://msdn.microsoft.com/en-us/data/dn469464.aspx EF 允许我们在发送SQL请求和返回数据时做一些拦截的动作 比如可以自定义写 log , ...

  7. RAILS ON

    我是按照下面这个URL来轻快安装的. http://lxiaodao.iteye.com/blog/1579992 (1)RVM官方网站应该是改版过一次, 使用 curl -L https://get ...

  8. TCP 协议

    == 已经了解了以太网和IP了,下面我们进入传输层,开始讲解TCP协议. == 仍然先把TCP报文段的格式放在这里,然后我们看图说话: TCP报文段也分为首部和数据两部分,首部默认情况下一般是20字节 ...

  9. css属性之box-shadow

    box-shadow 属性向框添加一个或多个阴影. <!DOCTYPE html> <html> <head> <style> div { width: ...

  10. BZOJ2038: [2009国家集训队]小Z的袜子(hose) -- 莫队算法 ,,分块

    2038: [2009国家集训队]小Z的袜子(hose) Time Limit: 20 Sec  Memory Limit: 259 MBSubmit: 3577  Solved: 1652[Subm ...