Spring+iBatis µÄ¶à¿âºáÏòÇзּòÒ×½â¾ö˼· ÏÂÔØ±¾ÎÄ

class=\

class=\

×¢Òâ, CobarSqlMapClientTemplateÒÀÈ»ÐèÒªÒ»¸öiBatisµÄSqlMapClientµÄÒýÓÃ, ÒòΪCobarSqlMapClientTemplateÒÀÈ»ÊÇÒ»¸öSqlMapClientTemplate(ËäÈ»ÌýÆðÀ´ÓÐЩ·Ï»°). ÒÔÉÏÅäÖÃÖÐÖØÍ·Ï·ÔÚÓÚ

com.alibaba.cobar.client.datasources.DefaultCobarDataSourceServiceµÄÅäÖÃ, ÎÒÃÇÐèҪͨ¹ý ¡°dataSourceDescriptors ¡± ÊôÐÔ, ΪÆä×¢ÈëÒ»×é

com.alibaba.cobar.client.datasources.CobarDataSourceDescriptor, CobarDataSourceDescriptorÖ÷Òª¸ºÔð¶ÔÏàÓ¦µÄÊý¾ÝÔ´½øÐÐÃèÊö, ÆäÖ÷ÒªÅäÖÃÐÅÏ¢°üÀ¨:

identity. Êý¾Ý·ÖÇøµÄΨһ±êÖ¾, ¸Ã±êÖ¾²»¿ÉÓëÆäËüÊý¾Ý·ÖÇøµÄ±êÖ¾³åÍ», ÔÚ¶¨Òå·ÓɹæÔòµÄʱºò, Êý¾Ý·ÖÇø±êÖ¾½«³ÉΪ·ÓɹæÔòµÄÒ»²¿·Ö.

targetDataSource. Ö÷ҪĿ±êÊý¾ÝÔ´µÄÒÀÀµÒýÓÃ, ͨ³£ÒâÒåÉÏ, Ó¦ÓÃÆô¶¯µÄʱºò¸ÃÊý¾ÝÔ´±ØÐëÊÇActiveµÄ.

targetDetectorDataSource. Ö÷ҪĿ±êÊý¾ÝÔ´°éËæµÄHA̽²âÓÃÊý¾ÝÔ´, Ö÷ÒªÓÃÓÚ¼ì²âÖ÷ҪĿ±êÊý¾ÝÔ´µÄ״̬, ͨ³£Ö¸ÏòÓëÖ÷ҪĿ±êÊý¾ÝÔ´ÏàͬµÄÄ¿±êÊý¾Ý¿â, µ«Êý¾Ý¿âÁ¬½Ó³ØÒªµ¥¶ÀÅäÖÃ, ÒÔ·ÀÖ¹Ï໥¸ÉÈÅ.(ÒÔÉÏÅäÖÃÖÐÒýÓÃÁËͬһ¸öÊý¾ÝÔ´ÒýÓÃ, Ö»ÊÇΪÁËÑÝʾµÄ·½±ã)

standbyDataSource. ÓëÖ÷ҪĿ±êÊý¾ÝÔ´²¢Áеı¸ÓÃÊý¾ÝÔ´, µ±Ö÷ҪĿ±êÊý¾ÝÔ´³öÏÖÎÊÌâÖ®ºó, Èç¹ûÆôÓÃÁËCobarClientµÄHA¹¦ÄÜÖ§³Ö, CobarClient½«×Ô¶¯½«Êý¾Ý·ÃÎÊÇл»µ½¸Ã±¸ÓÃÊý¾ÝÔ´ÉÏ.

standbyDetectorDataSource. ±¸ÓÃÊý¾ÝÔ´¶ÔÓ¦µÄHA̽²âÓÃÊý¾ÝÔ´, ´æÔÚµÄÄ¿µÄ²Î¼ûtargetDetectorDataSourceµÄ˵Ã÷.

poolSize. CobarSqlMapClientTemplateÐèÒª¸ù¾Ýÿ¸öÄ¿±êÊý¾ÝÔ´µÄÊý¾Ý¿âÁ¬½ÓµÄÊýÁ¿À´´´½¨ÏàÓ¦µÄÏ̳߳ØÒÔ±ãÌá¸ß²¢·¢´¦ÀíÐÔÄÜ, poolSize¿ÉÒÔ°ïÖúCobarSqlMapClientTemplate¾ö¶¨´´½¨µÄÏ̳߳صĴóС,Èç¹ûÅäÖõÄʱºò¸ÃÏî²»×öÅäÖõϰ, ĬÈÏÇé¿öϽ«ÒÔCPUÄں˵ÄÊýÁ¿³ËÒÔ5×÷ΪĬÈÏ´óС. Note

ÒòΪµ±Ç°ÍøÕ¾µÄÊý¾ÝÔ´ÅäÖö¼ÊÇͨ¹ýJNDI½øÐÐ, CobarClientÎÞ·¨Í³Ò»È¡µÃÊý¾Ý¿âÁ¬½ÓµÈÏà¹ØÐÅÏ¢, Ò²¾ÍÎÞ·¨¸ù¾Ýͬһ·ÝÅäÖÃÐÅÏ¢×ÔÐд´½¨ÏàÓ¦µÄÊý¾Ý¿âÁ¬½Ó³Ø, ËùÒÔ, Ö»ºÃÐèÒªÓ¦ÓóÌÐò·½Õë¶Ôÿһ¸öÄ¿±êÊý¾ÝÔ´ÔÙ¶àÅäÖÃÒ»¸öÓÃÓÚHA״̬̽²âÓõÄÊý¾ÝÔ´ÒýÓÃ.

ÅäÖÃʵÀýÖÐʹÓÃÁËC3P0×÷ΪÈÝÆ÷ÄÚµÄÊý¾ÝÔ´¶¨Òå, µ«CobarClientÖ»ÒÀÀµ±ê×¼µÄDataSource½Ó¿Ú, ËùÒÔ²¢²»Ö¹ÏÞÓÚC3P0Êý¾ÝÔ´ÀàÐÍ, JNDI²éÕÒµÄÊý¾ÝÔ´»òÕßDBCP, ÉõÖÁ×Ô¼ºÊµÏÖµÄDataSource¶¼ÊÇ¿ÉÒÔµÄ.

µ±Ç°CobarDataSourceDescriptorÖ®ËùÒÔÐèÒªÕâЩÐÅÏ¢ÊÇÒòΪÏÖÔÚÍøÕ¾×îÖ÷ÒªµÄÊý¾Ý¿â²¿Êð½á¹¹ÊÇHAË«»úÈȱ¸µÄˮƽÇзÖÊý¾Ý¿â¼¯Èº, µ«ºóÆÚÈç¹ûÓÐÆäËüµÄÊý¾Ý¿â²¿Êð½á¹¹, CobarDataSourceDescriptorÒ²¿ÉÄÜËæ×ÅÊý¾Ý¿â²¿Êð½á¹¹µÄµ÷Õû¶øµ÷Õû.

Tip

Èç¹û²»ÐèÒªHAË«»úÈȱ¸Ö§³Ö, ÄÇô¿ÉÒÔÈÃstandby(.*)DataSourceÖ¸Ïòtarget(.*)DataSourceÏàͬµÄÊý¾ÝÔ´Ó¦ÓÃ, »òÕßÈç¹ûDefaultCobarDataSourceServiceµÄhaDataSourceCreatorûÓÐÖ¸¶¨µÄ»°, standbyDataSource,standbyDetectorDataSourceºÍtargetDetectorDataSource¿ÉÒÔÍêÈ«²»ÅäÖÃ.

CobarDataSourceDescriptorÒýÓõÄÊý¾ÝÔ´¿ÉÒÔÀ´×ÔJNDI°ó¶¨µÄÊý¾ÝÔ´, Ò²¿ÉÒÔÀ´×ÔÈÝÆ÷ÄÚ¶¨ÒåµÄÊý¾ÝÔ´(ÈçÉÏÅäÖÃËùʾ, ΪÁ˲âÊÔ,ÎÒÃÇʹÓÃÁËSpringÈÝÆ÷ÄÚ¶¨ÒåµÄC3P0Êý¾ÝÔ´), ÉõÖÁÆäËüÐÎʽÌṩµÄÊý¾ÝÔ´, ֻҪΪÆäÌṩ±ê×¼µÄJDBC APIÖеÄDataSource½Ó¿ÚʵÏÖ¼´¿É.

DefaultCobarDataSourceService³ýÁËÒÀÀµÒ»×éCobarDataSourceDescriptor, Ëü»¹ÒÀÀµÓÚÏàÓ¦µÄIHADataSourceCreatorÀ´½øÐÐÊý¾Ý¿âµÄHAÖ§³Ö, Èç¹ûûÓÐÌṩÏàÓ¦µÄIHADataSourceCreatorʵÏÖÀà, DefaultCobarDataSourceServiceĬÈÏ»áʹÓÃ

NonHADataSourceCreator, ¼´²»´´½¨Ö§³ÖHAµÄÊý¾ÝÔ´. CobarClientĬÈÏÌṩÁËFailoverHotSwapDataSourceCreatorÒÔÖ§³ÖHA, Ó¦Ó÷½¿ÉÒÔ¸ù¾ÝÇé¿öÌṩ×Ô¼ºµÄIHADataSourceCreatorʵÏÖÀ´Âú×ãÌØ¶¨³¡¾°ÐèÒª.

5.2.1.1. Cobar ClientÖеÄHAÖ§³Ö(HA Support In Cobar Client)

CobarClientÖ§³Ö»ùÓÚË«»úÈȱ¸µÄFailover, ¸Ã¹¦ÄÜÖ§³Ö³éÏóΪIHADataSourceCreator¶¨Òå:

public interface IHADataSourceCreator { DataSource createHADataSource(CobarDataSourceDescriptor descriptor) throws Exception; } Ç°ÃæÎÒÃÇ˵¹ý, DefaultCobarDataSourceServiceÔÚ¹¹½¨×îÖÕʹÓõÄÊý¾ÝÔ´µÄʱºò, ͨ¹ýij¸öIHADataSourceCreatorÀ´¹¹½¨Ö§³ÖÈÈÇл»µÄÊý¾ÝԴʵÀý. ×î³£¼ûµÄIHADataSourceCreatorʵÏÖÀàÓÐ

com.alibaba.cobar.client.datasources.ha.NonHADataSourceCreatorºÍ

com.alibaba.cobar.client.datasources.ha.FailoverHotSwapDataSourceCreator, ÆäÖÐ,

NonHADataSourceCreator¸ü¶àÓÃÓÚ²âÊÔ»·¾³»òÕßHAÖ§³Ö²»ÐèÒªCobarClient¶ËÖ§³ÖµÄÇé¿ö(±ÈÈç,Êý¾Ý¿â²¿Êð²ãÃæÖ§³ÖHAÖ®ºó, CobarClient¶ËµÄHA¿ÉÒÔ²»ÐèÒª),ËùÒÔ, Èç¹ûʹÓÃCobarClientÌṩµÄHAÖ§³Ö, ¸ü¶àµÄÊÇÖ¸ÒÀÀµÒýÓÃFailoverHotSwapDataSourceCreator.

FailoverHotSwapDataSourceCreatorÖ§³Ö»ùÓÚÖ÷¶¯Ì½²âÐÎʽµÄHAÒÔ¼°»ùÓÚ±»¶¯¼ì²âÐÎʽµÄHA, ÕâÁ½ÖÖÐÐΪ¿ÉÒÔͨ¹ýÊôÐÔ ¡°passiveFailoverEnable ¡± ºÍ ¡°positiveFailoverEnable ¡± À´¹ÜÀíÆôÓûòÕß½ûÓÃ, ÆäÖÐ, »ùÓÚÖ÷¶¯Ì½²âÐÎʽµÄHAĬÈÏÇé¿öÏÂÊÇ¿ªÆôµÄ, ¶ø»ùÓÚ±»¶¯Ì½²âÐÎʽµÄHAÊǽûÓõÄ, ÒòΪ»ùÓÚÔ­À´µÄCobar(Server°æ)µÄÏÖÓо­Ñé, ÿ´ÎÈ¡µÃÊý¾Ý¿âÁ¬½ÓÖ®ºó¶¼½øÐÐ״̬¼ì²é»áËðºÄÐÔÄÜ.

ÒªÆôÓûùÓÚÖ÷¶¯Ì½²âÐÎʽµÄHAÖ§³Ö, Cobar Client½«Cobar(Server°æ)µÄHA·½Ê½ÊÊÅä½èÓùýÀ´, ÐèÒªÄãÔÚÊý¾Ý¿âÖÐÅäÖÃÏàÓ¦µÄ̽²â±í, ²¢ÅäÖÃÏàÓ¦µÄ̽²âÓÃSQL. ÀýÈç, ¼ÙÉèÊý¾Ý¿âÖн¨Á¢ÁËÃûΪcobarhaµÄ״̬̽²â±í, ÄÇÎÒÃÇ¿ÉÒÔÉèÖÃÈçϵÄ̽²âÓÃSQL:

class=\ FailoverHotSwapDataSourceCreator½«¶¨Ê±µÄ·¢Ë͸ÃSQLµ½Ä¿±êÊý¾Ý¿â, ¶ÔÄ¿±êÊý¾Ý¿âµÄ״̬½øÐÐ̽²â, Èç¹û³¬Ê±»òÕßÅ׳öÒì³£, ÄÇÃ´ÖØÊÔÖ¸¶¨´ÎÊýÖ®ºóÒÀÈ»Èç´ËµÄ»°, FailoverHotSwapDataSourceCreator»á½«Ä¿±êÊý¾Ý¿âÈÈÇл»µ½±¸ÓÃÄ¿±êÊý¾Ý¿âÉÏÈ¥. ̽²âµÄʱ¼ä¼ä¸ô, ̽²âµÄ³¬ÊÐʱ¼ä, ̽²âµÄÖØÊÔ´ÎÊýµÈ, ¶¼¿ÉÒÔͨ¹ýÏàÓ¦µÄÊôÐÔ½øÐÐÉèÖÃ, ¸ü¶àÕâ·½ÃæµÄÐÅÏ¢¿ÉÒԲο¼FailoverHotSwapDataSourceCreatorµÄjavadocÎĵµ.

5.2.2. Êý¾Ý·ÃÎÊÇëÇó·ÓÉ(Routing In CobarSqlMapClientTemplate)

³ýÁËÒÀÀµÄ³¸öICobarDataSourceService½øÐжàÊý¾ÝÔ´µÄ¹ÜÀí, CobarSqlMapClientTemplateµÄÁíÒ»¸öÖ÷ÒªÒÀÀµ¾ÍÊÇICobarRouter, ICobarRouter¸ºÔð½«ÏàÓ¦µÄÊý¾Ý·ÃÎÊÇëÇó·Óɵ½Ö¸¶¨µÄÊý¾ÝÔ´ÉÏÈ¥.

5.2.2.1. Router Design

ICobarRouter³éÏó½Ó¿Ú¶¨ÒåÈçÏÂ:

public interface ICobarRouter { RoutingResult doRoute(T routingFact) throws RoutingException; } ¸Ã½Ó¿Ú½«¸ù¾ÝÖ¸¶¨µÄ·ÓÉÉÏÏÂÎÄÐÅÏ¢(routingFact)·µ»Ø×îÖյķÓɽá¹û.

ÎÒÃÇ¿ÉÒÔ¸ù¾ÝÇé¿öÌṩ²»Í¬µÄICobarRouterʵÏÖÀà, ±ÈÈçCobar ClientĬÈÏÌṩµÄcom.alibaba.cobar.client.router.CobarClientInternalRouterºÍ

om.alibaba.cobar.client.router.DefaultCobarClientInternalRouter£¬ »òÕßÈç¹û·ÓɹæÔòÊýÁ¿ºÜ¶à, ΪÁ˱£Ö¤ÐÔÄÜ, Ò²¿ÉÒÔʵÏÖ»ùÓÚReteµÈËã·¨µÄʵÏÖÀàµÈ. ûÓÐÌØÊâÐèÇóµÄÇé¿öÏÂ,ÎÒÃÇĬÈϲÉÓÃCobarClientInternalRouter×÷ΪCobarSqlMapClientTemplateʹÓõÄĬÈÏRouterʵÏÖ. µ«Óû§Ò²¿ÉÒÔ¸ù¾ÝÇé¿öÑ¡ÓÃDefaultCobarClientInternalRouter£¬ ¶þÕßµÄʹÓÃÊÇÀàËÆµÄ¡£

DefaultCobarClientInternalRouterÔÚCobarClientInternalRouterµÄ»ù´¡ÉÏ£¬ ¶Ô·ÓɹæÔòµÄÆ¥Åä½øÐÐÁË·Ö×éÓÅ»¯£¬ ͨ¹ýÅäÖÃʱÆÚµÄ¸´ÔÓ¶È»»È¡ÔËÐÐʱÆÚµÄ¼òµ¥¸ßЧ¡£ Èç¹û¹æÔòºÜ¶àµÄ»°£¬¿ÉÒÔ¿¼ÂÇʹÓÃDefaultCobarClientInternalRouter¡£ Note

DefaultCobarClientInternalRouterµÄÅäÖÿÉÒÔͨ¹ýÁ½¸öרÃŵÄFactoryBean½øÐУ¬ ¼´ com.alibaba.cobar.client.router.config.DefaultCobarClientInternalRouterXmlFactoryBean ºÍ com.alibaba.cobar.client.router.config.StaticCobarClientInternalRouterFactoryBean£¬ ǰÕßÔÊÐíÓû§Í¨¹ýÍⲿXMLµÄÅäÖÃÎļþÐÎʽÀ´¶¨ÒåºÍ¼ÓÔØÂ·ÓɹæÔò£¬ ºóÕßÔËÐÐÓû§Ö±½ÓÔÚSpringµÄIoCÈÝÆ÷ÖÐÒÔbean¶¨ÒåµÄÐÎʽ¶¨Òå·ÓɹæÔò¡£ Ó¦Ó÷½¿ÉÒÔ¸ù¾ÝÇé¿öÑ¡Óá£ÏêϸʹÓÃÇé¿ö¿ÉÒԲο¼ÏàÓ¦ÀàµÄjavadocÒÔ¼°ÏÂÃæÓйØCobarClientInternalRouterµÄʹÓúÍÅäÖÃÐÅÏ¢¡£