从促销巴西榨季结尾需求重视糖厂终究收榨时刻以及是否存在甘蔗宿根可以留在地里续种的或许。
在获取到详细的库名后履行getRequiredSqlWithSpecificDBName办法来将其拼接到表名前,貂难魅在这里咱们运用到了JSqlParser的东西类,貂难魅解析出来一切的表名,履行字符串的替换,最终一步同样是运用反射操作将该参数值再写回去,这样便完成了指定库名的使命。接下来咱们需求看下笼统阻拦器中供阻拦器复用的办法,骨折如下:骨折publicabstractclassAbstractDBNameInterceptor{/***SqlSource字段称号*/privatestaticfinalStringSQL_SOURCE_FIELD_NAME=sqlSource;/***履行修正数据库名的逻辑*/protectedObjectupdateDBName(Invocationinvocation)throwsThrowable{//装修器装修SqlSourcedecorateSqlSource((MappedStatement)invocation.getArgs()[0]);returninvocation.proceed();}/***装修SqlSource*/privatevoiddecorateSqlSource(MappedStatementstatement)throwsNoSuchFieldException,IllegalAccessException{if(!(statement.getSqlSource()instanceofSqlSourceDecorator)){FieldsqlSource=statement.getClass().getDeclaredField(SQL_SOURCE_FIELD_NAME);sqlSource.setAccessible(true);sqlSource.set(statement,newSqlSourceDecorator(statement.getSqlSource()));}}}这个仍是比较简单的,仅仅凭借反射机制做了一层装修,查询阻拦器完成如下:@Intercepts({@Signature(type=Executor.class,method=query,args={MappedStatement.class,Object.class,RowBounds.class,ResultHandler.class}),@Signature(type=Executor.class,method=query,args={MappedStatement.class,Object.class,RowBounds.class,ResultHandler.class,CacheKey.class,BoundSql.class})})publicclassSelectDBNameInterceptorextendsAbstractDBNameInterceptorimplementsInterceptor{@OverridepublicObjectintercept(Invocationinvocation)throwsThrowable{returnupdateDBName(invocation);}}将其装备到Mybatis阻拦器中,便能完成数据库动态切换了。
结合注释咱们解释一下SqlSourceDecorator的逻辑,东对貂其间用到了Java反射相关的操作。完成逻辑SqlSource是读取XML中SQL内容并将其发送给数据库履行的目标,北人假如咱们在履行前能阻拦到该目标,并将其间的SQL替换掉便达成了咱们的意图。假如咱们能在SQL履行前将SQL中一切的表名前拼接上对应的库名的话,为啥那么就可以完成数据源的切换了,为啥下面咱们讲一下运用JSqlParser和Mybatis阻拦器完成该逻辑,凭借JSqlParser首要是为了解析SQL,找到其间一切的表名进行拼接,假如咱们有更好的完成办法,该组件并不是有必要的。
作者:皮祛京东稳妥王奕龙物流的分拣事务在某些分拣场所只要一个数据源,皮祛由于数据量比较大,将一切数据存在一张表内查询速度慢,也为了做不同设备数据的分库办理,便在这个数据源内创建了多个不同库名但表完全相同的数据库现在需求上线报表服务来查询一切数据库中的数据进行计算,那么现在的问题来了,该怎么满意在装备一个数据源的状况下来查询该数据源下不同数据库的数据呢,凭借搜索引擎查到的分库完成大多是凭借Sharding-JDBC结构,装备多个数据源依据分库算法完成数据源的切换,可是关于只要一个数据源的体系来说,我觉得引进结构再将单个数据源依据不同的库名装备成多个不同的数据源来完成分库查询的逻辑我觉得并不好。首要经过反射获取到SQL,从促销getSpecificDBName办法是需求自界说完成的,从促销其间parameterObject目标是传到DAO层履行查询时的参数,在咱们的事务中是可以依据其间的设备相关参数拿到对应的所在库名的,而设备和详细库名的映射联系需求提早初始化好。
其间包含着必要的履行逻辑,貂难魅咱们需求做的作业就是在这些逻辑履行完之后,貂难魅对SQL进行改造,所以这次完成咱们运用了装修器形式,在本来的SqlSource上套一层,履行完SqlSource自身的办法之后对其进行增强,代码如下:publicabstractclassAbstractDBNameInterceptor{/***SqlSource的装修器,作用是增强了getBoundSql办法,在基础上增加了动态分库的逻辑*/staticclassSqlSourceDecoratorimplementsSqlSource{/***SQL字段称号*/privatestaticfinalStringSQL_FIELD_NAME=sql;/***本来的sqlsource*/privatefinalSqlSourcesqlSource;/***装修器进行封装*/publicSqlSourceDecorator(SqlSourcesqlSource){this.sqlSource=sqlSource;}@OverridepublicBoundSqlgetBoundSql(ObjectparameterObject){try{//先生成出未修正前的SQLBoundSqlboundSql=sqlSource.getBoundSql(parameterObject);//获取数据库名StringdbName=getSpecificDBName(parameterObject);//有用才修正if(isValid(dbName)){//生成需求修正完库名的SQLStringtargetSQL=getRequiredSqlWithSpecificDBName(boundSql,dbName);//更新SQLupdateSql(boundSql,targetSQL);}returnboundSql;}catch(Exceptione){thrownewRuntimeException(e);}}/***校验是否为有用库名*/privatebooleanisValid(StringdbName){returnStringUtils.isNotEmpty(dbName)&&!null.equals(dbName);}/***获取到咱们想要的库名的SQL*/privateStringgetRequiredSqlWithSpecificDBName(BoundSqlboundSql,StringdbName)throwsJSQLParserException{StringoriginSql=boundSql.getSql();//获取一切的表名Settables=TablesNamesFinder.findTables(originSql);for(Stringtable:tables){originSql=originSql.replaceAll(table,dbName+.+table);}returnoriginSql;}/***修正SQL*/privatevoidupdateSql(BoundSqlboundSql,Stringsql)throwsNoSuchFieldException,IllegalAccessException{//经过反射修正sql句子Fieldfield=boundSql.getClass().getDeclaredField(SQL_FIELD_NAME);field.setAccessible(true);field.set(boundSql,sql);}}//...}界说了AbstractDBNameInterceptor笼统类是为了完成复用,并将SqlSourceDecorator装修器界说为静态内部类,这样的话,将一切逻辑都封装在笼统类内部,之后这部分完成好后研制直接完成笼统类的通用办法即可,不用重视它的内部完成
我国新闻网此前,骨折12月4日下午1时22分许,琼瑶在台湾新北市淡水区的家中轻生身亡,终年86岁。琼瑶本名陈喆,东对貂1938年出生于四川成都,本籍湖南衡阳,我国当代作家、编剧、影视制造人。
琼瑶秘书见状当即告诉救助人员,北人但救助人员抵达时,发现琼瑶已无呼吸心跳等生命体征,出现显着逝世状况,终究并未将她送医急救。归纳台媒TVBS、为啥中时新闻网报导,12月11日,台湾作家琼瑶的家族遵循其遗愿,对其后事简略处理,不举办公祭,在简略的家祭后随即火化。
12月11日,皮祛对琼瑶逝世的音讯,皮祛国务院台办发言人朱凤莲应询表明,琼瑶女士是一位具有重要影响力的台湾作家,对祖国大陆怀有深厚感情,为推进两岸文学沟通、影视协作发挥了积极作用。1971年和1975年,从促销由琼瑶小说著作改编的电影《院子深深》和《女朋友》,别离获得第9届、第12届台湾金马奖优等剧情片奖。
有话要说...