Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Modeler   Code  
»áÔ±   
 
   
 
 
     
   
 ¶©ÔÄ
  ¾èÖú
ÉîÈëÀí½â Spring ÊÂÎñÔ­Àí
 
×÷ÕߣºÎ⼫ÐÄ À´Ô´£ºÂëÅ©Íø ·¢²¼ÓÚ 2016-10-20
  2599  次浏览      27
 

Ò»¡¢ÊÂÎñµÄ»ù±¾Ô­Àí

SpringÊÂÎñµÄ±¾ÖÊÆäʵ¾ÍÊÇÊý¾Ý¿â¶ÔÊÂÎñµÄÖ§³Ö£¬Ã»ÓÐÊý¾Ý¿âµÄÊÂÎñÖ§³Ö£¬springÊÇÎÞ·¨ÌṩÊÂÎñ¹¦Äܵġ£¶ÔÓÚ´¿JDBC²Ù×÷Êý¾Ý¿â£¬ÏëÒªÓõ½ÊÂÎñ£¬¿ÉÒÔ°´ÕÕÒÔϲ½Öè½øÐУº

1.»ñÈ¡Á¬½Ó Connection con = DriverManager.getConnection()

2.¿ªÆôÊÂÎñcon.setAutoCommit(true/false);

3.Ö´ÐÐCRUD

4.Ìá½»ÊÂÎñ/»Ø¹öÊÂÎñ con.commit() / con.rollback();

5.¹Ø±ÕÁ¬½Ó conn.close();

ʹÓÃSpringµÄÊÂÎñ¹ÜÀí¹¦Äܺó£¬ÎÒÃÇ¿ÉÒÔ²»ÔÙд²½Öè 2 ºÍ 4 µÄ´úÂ룬¶øÊÇÓÉSpirng ×Ô¶¯Íê³É¡£ÄÇôSpringÊÇÈçºÎÔÚÎÒÃÇÊéдµÄ CRUD ֮ǰºÍÖ®ºó¿ªÆôÊÂÎñºÍ¹Ø±ÕÊÂÎñµÄÄØ£¿½â¾öÕâ¸öÎÊÌ⣬Ҳ¾Í¿ÉÒÔ´ÓÕûÌåÉÏÀí½âSpringµÄÊÂÎñ¹ÜÀíʵÏÖÔ­ÀíÁË¡£ÏÂÃæ¼òµ¥µØ½éÉÜÏ£¬×¢½â·½Ê½ÎªÀý×Ó

1.ÅäÖÃÎļþ¿ªÆô×¢½âÇý¶¯£¬ÔÚÏà¹ØµÄÀàºÍ·½·¨ÉÏͨ¹ý×¢½â@Transactional±êʶ¡£

2.spring ÔÚÆô¶¯µÄʱºò»áÈ¥½âÎöÉú³ÉÏà¹ØµÄbean£¬Õâʱºò»á²é¿´ÓµÓÐÏà¹Ø×¢½âµÄÀàºÍ·½·¨£¬²¢ÇÒΪÕâЩÀàºÍ·½·¨Éú³É´úÀí£¬²¢¸ù¾Ý@TransactionµÄÏà¹Ø²ÎÊý½øÐÐÏà¹ØÅäÖÃ×¢È룬ÕâÑù¾ÍÔÚ´úÀíÖÐΪÎÒÃǰÑÏà¹ØµÄÊÂÎñ´¦ÀíµôÁË£¨¿ªÆôÕý³£Ìá½»ÊÂÎñ£¬Òì³£»Ø¹öÊÂÎñ£©¡£

3.ÕæÕýµÄÊý¾Ý¿â²ãµÄÊÂÎñÌá½»ºÍ»Ø¹öÊÇͨ¹ýbinlog»òÕßredo logʵÏֵġ£

¶þ¡¢Spring ÊÂÎñµÄ´«²¥ÊôÐÔ

ËùνspringÊÂÎñµÄ´«²¥ÊôÐÔ£¬¾ÍÊǶ¨ÒåÔÚ´æÔÚ¶à¸öÊÂÎñͬʱ´æÔÚµÄʱºò£¬springÓ¦¸ÃÈçºÎ´¦ÀíÕâЩÊÂÎñµÄÐÐΪ¡£ÕâЩÊôÐÔÔÚTransactionDefinitionÖж¨Ò壬¾ßÌå³£Á¿µÄ½âÊͼûÏÂ±í£º

Èý¡¢Êý¾Ý¿â¸ôÀë¼¶±ð

Ôà¶Á£ºÒ»ÊÂÎñ¶ÔÊý¾Ý½øÐÐÁËÔöɾ¸Ä£¬µ«Î´Ìá½»£¬ÁíÒ»ÊÂÎñ¿ÉÒÔ¶ÁÈ¡µ½Î´Ìá½»µÄÊý¾Ý¡£Èç¹ûµÚÒ»¸öÊÂÎñÕâʱºò»Ø¹öÁË£¬ÄÇôµÚ¶þ¸öÊÂÎñ¾Í¶Áµ½ÁËÔàÊý¾Ý¡£

²»¿ÉÖØ¸´¶Á£ºÒ»¸öÊÂÎñÖз¢ÉúÁËÁ½´Î¶Á²Ù×÷£¬µÚÒ»´Î¶Á²Ù×÷ºÍµÚ¶þ´Î²Ù×÷Ö®¼ä£¬ÁíÍâÒ»¸öÊÂÎñ¶ÔÊý¾Ý½øÐÐÁËÐ޸ģ¬ÕâʱºòÁ½´Î¶ÁÈ¡µÄÊý¾ÝÊDz»Ò»Öµġ£

»Ã¶Á£ºµÚÒ»¸öÊÂÎñ¶ÔÒ»¶¨·¶Î§µÄÊý¾Ý½øÐÐÅúÁ¿Ð޸ģ¬µÚ¶þ¸öÊÂÎñÔÚÕâ¸ö·¶Î§Ôö¼ÓÒ»ÌõÊý¾Ý£¬ÕâʱºòµÚÒ»¸öÊÂÎñ¾Í»á¶ªÊ§¶ÔÐÂÔöÊý¾ÝµÄÐ޸ġ£

×ܽ᣺

¸ôÀë¼¶±ðÔ½¸ß£¬Ô½Äܱ£Ö¤Êý¾ÝµÄÍêÕûÐÔºÍÒ»ÖÂÐÔ£¬µ«ÊǶԲ¢·¢ÐÔÄܵÄÓ°ÏìÒ²Ô½´ó¡£

´ó¶àÊýµÄÊý¾Ý¿âĬÈϸôÀë¼¶±ðΪ Read Commited£¬±ÈÈç SqlServer¡¢Oracle

ÉÙÊýÊý¾Ý¿âĬÈϸôÀë¼¶±ðΪ£ºRepeatable Read ±ÈÈ磺 MySQL InnoDB

ËÄ¡¢SpringÖеĸôÀë¼¶±ð

Îå¡¢ÊÂÎñµÄǶÌ×

ͨ¹ýÉÏÃæµÄÀíÂÛ֪ʶµÄÆÌµæ£¬ÎÒÃÇ´óÖÂÖªµÀÁËÊý¾Ý¿âÊÂÎñºÍspringÊÂÎñµÄһЩÊôÐÔºÍÌØµã£¬½ÓÏÂÀ´ÎÒÃÇͨ¹ý·ÖÎöһЩǶÌ×ÊÂÎñµÄ³¡¾°£¬À´ÉîÈëÀí½âspringÊÂÎñ´«²¥µÄ»úÖÆ¡£

¼ÙÉèÍâ²ãÊÂÎñ Service A µÄ Method A() µ÷Óà ÄÚ²ãService B µÄ Method B()

PROPAGATION_REQUIRED(spring ĬÈÏ)

Èç¹ûServiceB.methodB() µÄÊÂÎñ¼¶±ð¶¨ÒåΪ PROPAGATION_REQUIRED£¬ÄÇôִÐÐ ServiceA.methodA() µÄʱºòspringÒѾ­ÆðÁËÊÂÎñ£¬Õâʱµ÷Óà ServiceB.methodB()£¬ServiceB.methodB() ¿´µ½×Ô¼ºÒѾ­ÔËÐÐÔÚ ServiceA.methodA() µÄÊÂÎñÄÚ²¿£¬¾Í²»ÔÙÆðеÄÊÂÎñ¡£

¼ÙÈç ServiceB.methodB() ÔËÐеÄʱºò·¢ÏÖ×Ô¼ºÃ»ÓÐÔÚÊÂÎñÖУ¬Ëû¾Í»áΪ×Ô¼º·ÖÅäÒ»¸öÊÂÎñ¡£

ÕâÑù£¬ÔÚ ServiceA.methodA() »òÕßÔÚ ServiceB.methodB() ÄÚµÄÈκεط½³öÏÖÒì³££¬ÊÂÎñ¶¼»á±»»Ø¹ö¡£

PROPAGATION_REQUIRES_NEW

±ÈÈçÎÒÃÇÉè¼Æ ServiceA.methodA() µÄÊÂÎñ¼¶±ðΪ PROPAGATION_REQUIRED£¬ServiceB.methodB() µÄÊÂÎñ¼¶±ðΪ PROPAGATION_REQUIRES_NEW¡£

ÄÇôµ±Ö´Ðе½ ServiceB.methodB() µÄʱºò£¬ServiceA.methodA() ËùÔÚµÄÊÂÎñ¾Í»á¹ÒÆð£¬ServiceB.methodB() »áÆðÒ»¸öеÄÊÂÎñ£¬µÈ´ý ServiceB.methodB() µÄÊÂÎñÍê³ÉÒÔºó£¬Ëü²Å¼ÌÐøÖ´ÐС£

ËûÓë PROPAGATION_REQUIRED µÄÊÂÎñÇø±ðÔÚÓÚÊÂÎñµÄ»Ø¹ö³Ì¶ÈÁË¡£ÒòΪ ServiceB.methodB() ÊÇÐÂÆðÒ»¸öÊÂÎñ£¬ÄÇô¾ÍÊÇ´æÔÚÁ½¸ö²»Í¬µÄÊÂÎñ¡£Èç¹û ServiceB.methodB() ÒѾ­Ìá½»£¬ÄÇô ServiceA.methodA() ʧ°Ü»Ø¹ö£¬ServiceB.methodB() ÊDz»»á»Ø¹öµÄ¡£Èç¹û ServiceB.methodB() ʧ°Ü»Ø¹ö£¬Èç¹ûËûÅ׳öµÄÒì³£±» ServiceA.methodA() ²¶»ñ£¬ServiceA.methodA() ÊÂÎñÈÔÈ»¿ÉÄÜÌá½»(Ö÷Òª¿´BÅ׳öµÄÒì³£ÊDz»ÊÇA»á»Ø¹öµÄÒì³£)¡£

PROPAGATION_SUPPORTS

¼ÙÉèServiceB.methodB() µÄÊÂÎñ¼¶±ðΪ PROPAGATION_SUPPORTS£¬ÄÇôµ±Ö´Ðе½ServiceB.methodB()ʱ£¬Èç¹û·¢ÏÖServiceA.methodA()ÒѾ­¿ªÆôÁËÒ»¸öÊÂÎñ£¬Ôò¼ÓÈ뵱ǰµÄÊÂÎñ£¬Èç¹û·¢ÏÖServiceA.methodA()ûÓпªÆôÊÂÎñ£¬Ôò×Ô¼ºÒ²²»¿ªÆôÊÂÎñ¡£ÕâÖÖʱºò£¬ÄÚ²¿·½·¨µÄÊÂÎñÐÔÍêÈ«ÒÀÀµÓÚ×îÍâ²ãµÄÊÂÎñ¡£

PROPAGATION_NESTED

ÏÖÔÚµÄÇé¿ö¾Í±äµÃ±È½Ï¸´ÔÓÁË, ServiceB.methodB() µÄÊÂÎñÊôÐÔ±»ÅäÖÃΪ PROPAGATION_NESTED, ´ËʱÁ½ÕßÖ®¼äÓÖ½«ÈçºÎЭ×÷ÄØ?

ServiceB#methodB Èç¹û rollback, ÄÇôÄÚ²¿ÊÂÎñ(¼´ ServiceB#methodB) ½«»Ø¹öµ½ËüÖ´ÐÐǰµÄ SavePoint ¶øÍⲿÊÂÎñ(¼´ ServiceA#methodA) ¿ÉÒÔÓÐÒÔÏÂÁ½ÖÖ´¦Àí·½Ê½:

a¡¢²¶»ñÒì³££¬Ö´ÐÐÒì³£·ÖÖ§Âß¼­

void methodA() {    
try {
ServiceB.methodB();
} catch (SomeException) {
// Ö´ÐÐÆäËûÒµÎñ, Èç ServiceC.methodC();
}
}

ÕâÖÖ·½Ê½Ò²ÊÇǶÌ×ÊÂÎñ×îÓмÛÖµµÄµØ·½, ËüÆðµ½ÁË·ÖÖ§Ö´ÐеÄЧ¹û, Èç¹û ServiceB.methodB ʧ°Ü, ÄÇôִÐÐ ServiceC.methodC(), ¶ø ServiceB.methodB ÒѾ­»Ø¹öµ½ËüÖ´ÐÐ֮ǰµÄ SavePoint, ËùÒÔ²»»á²úÉúÔàÊý¾Ý(Ï൱ÓÚ´Ë·½·¨´ÓδִÐйý), ÕâÖÖÌØÐÔ¿ÉÒÔÓÃÔÚÄ³Ð©ÌØÊâµÄÒµÎñÖÐ, ¶ø PROPAGATION_REQUIRED ºÍ PROPAGATION_REQUIRES_NEW ¶¼Ã»Óа취×öµ½ÕâÒ»µã¡£

b¡¢ ÍⲿÊÂÎñ»Ø¹ö/Ìá½» ´úÂë²»×öÈκÎÐÞ¸Ä, ÄÇôÈç¹ûÄÚ²¿ÊÂÎñ(ServiceB#methodB) rollback, ÄÇôÊ×ÏÈ ServiceB.methodB »Ø¹öµ½ËüÖ´ÐÐ֮ǰµÄ SavePoint(ÔÚÈκÎÇé¿ö϶¼»áÈç´Ë), ÍⲿÊÂÎñ(¼´ ServiceA#methodA) ½«¸ù¾Ý¾ßÌåµÄÅäÖþö¶¨×Ô¼ºÊÇ commit »¹ÊÇ rollback

ÁíÍâÈýÖÖÊÂÎñ´«²¥ÊôÐÔ»ù±¾Óò»µ½£¬Ôڴ˲»×ö·ÖÎö¡£

Áù¡¢×ܽá

¶ÔÓÚÏîÄ¿ÖÐÐèҪʹÓõ½ÊÂÎñµÄµØ·½£¬ÎÒ½¨Ò鿪·¢Õß»¹ÊÇʹÓÃspringµÄTransactionCallback½Ó¿ÚÀ´ÊµÏÖÊÂÎñ£¬²»ÒªÃ¤Ä¿Ê¹ÓÃspringÊÂÎñ×¢½â£¬Èç¹ûÒ»¶¨ÒªÊ¹ÓÃ×¢½â£¬ÄÇôһ¶¨Òª¶ÔspringÊÂÎñµÄ´«²¥»úÖÆºÍ¸ôÀë¼¶±ðÓиöÏêϸµÄÁ˽⣬·ñÔòºÜ¿ÉÄÜ·¢ÉúÒâÏë²»µ½µÄЧ¹û¡£

   
2599 ´Îä¯ÀÀ       27
Ïà¹ØÎÄÕÂ

Java΢·þÎñÐÂÉú´úÖ®Nacos
ÉîÈëÀí½âJavaÖеÄÈÝÆ÷
JavaÈÝÆ÷Ïê½â
Java´úÂëÖÊÁ¿¼ì²é¹¤¾ß¼°Ê¹Óð¸Àý
Ïà¹ØÎĵµ

JavaÐÔÄÜÓÅ»¯
Spring¿ò¼Ü
SSM¿ò¼Ü¼òµ¥¼òÉÜ
´ÓÁ㿪ʼѧjava±à³Ì¾­µä
Ïà¹Ø¿Î³Ì

¸ßÐÔÄÜJava±à³ÌÓëϵͳÐÔÄÜÓÅ»¯
JavaEE¼Ü¹¹¡¢ Éè¼ÆÄ£Ê½¼°ÐÔÄܵ÷ÓÅ
Java±à³Ì»ù´¡µ½Ó¦Óÿª·¢
JAVAÐéÄâ»úÔ­ÀíÆÊÎö
×îл¼Æ»®
DeepSeekÔÚÈí¼þ²âÊÔÓ¦ÓÃʵ¼ù 4-12[ÔÚÏß]
DeepSeek´óÄ£ÐÍÓ¦Óÿª·¢Êµ¼ù 4-19[ÔÚÏß]
UAF¼Ü¹¹ÌåϵÓëʵ¼ù 4-11[±±¾©]
AIÖÇÄÜ»¯Èí¼þ²âÊÔ·½·¨Óëʵ¼ù 5-23[ÉϺ£]
»ùÓÚ UML ºÍEA½øÐзÖÎöÉè¼Æ 4-26[±±¾©]
ÒµÎñ¼Ü¹¹Éè¼ÆÓ뽨ģ 4-18[±±¾©]

Java ÖеÄÖÐÎıàÂëÎÊÌâ
Java»ù´¡ÖªÊ¶µÄÈýÊ®¸ö¾­µäÎÊ´ð
Íæ×ª Java Web Ó¦Óÿª·¢
ʹÓÃSpring¸üºÃµØ´¦ÀíStruts
ÓÃEclipse¿ª·¢iPhone WebÓ¦ÓÃ
²å¼þϵͳ¿ò¼Ü·ÖÎö

Struts+Spring+Hibernate
»ùÓÚJ2EEµÄWeb 2.0Ó¦Óÿª·¢
J2EEÉè¼ÆÄ£Ê½ºÍÐÔÄܵ÷ÓÅ
Java EE 5ÆóÒµ¼¶¼Ü¹¹Éè¼Æ
Javaµ¥Ôª²âÊÔ·½·¨Óë¼¼Êõ
Java±à³Ì·½·¨Óë¼¼Êõ

Struts+Spring+Hibernate/EJB+ÐÔÄÜÓÅ»¯
»ªÏÄ»ù½ð ActiveMQ Ô­ÀíÓë¹ÜÀí
ijÃñº½¹«Ë¾ Java»ù´¡±à³Ìµ½Ó¦Óÿª·¢
ij·çµç¹«Ë¾ Java Ó¦Óÿª·¢Æ½Ì¨ÓëÇ¨ÒÆ
ÈÕÕÕ¸Û J2EEÓ¦Óÿª·¢¼¼Êõ¿ò¼ÜÓëʵ¼ù
ij¿ç¹ú¹«Ë¾ ¹¤×÷Á÷¹ÜÀíJBPM
¶«·½º½¿Õ¹«Ë¾ ¸ß¼¶J2EE¼°ÆäÇ°ÑØ¼¼Êõ