首页天道酬勤java查询mysql数据库,java读取多行数据

java查询mysql数据库,java读取多行数据

张世龙 05-05 20:13 74次浏览

代码建议在服务层进行主从分离。 不建议在同一服务方法内部进行主从分离。 这里是事务片。 我们知道,同一事务使用同一链接进行处理。 业务片方法的内部逻辑不建议主从分离,从而避免数据不一致。

以下方案通过继承AbstractRoutingDataSource类的注释aop ThreadLocal,提供注释方法数据源的动态切换

1、阅读数据库并切换注释类,在服务注释中展示打开库的操作,自动方法完成后自动清空数据源中的数据

@ retention (retention policy.runtime ) )。

@target(elementtype.method,ElementType.TYPE} ) )。

@Inherited

公共@ interfaceslavedatasource {

}

2、spring aop切面类

@Aspect

公共类数据源攻击{

privatestaticfinalloggerlogger=logger factory.getlogger (数据源aspect.class;

//*

*与写库对应的数据源key默认情况下使用此库

*/

publicstaticfinalstringmaster=' master ';

//*

*库对应的数据源key

*/

publicstaticfinalstringslave=' slave ';

//*

*在服务层方法检索datasource对象之前,为片指定当前线程数据源slave

*/

@before(value='execution(** ) ) annotation (slave data source ) ) )

公共语音基础(连接点点) {

String clazz=point.getTarget ().getClass ) ).getName );

String name=point.getSignature ().getName );

logger.debug (clazz '.' name '---data source---- : ' slave );

atasourceholder.put数据源(slave;

}

@after(value='execution(** ) annotation (slave data source ) ) )

公共卷轴(连接点连接点) {

data source holder.cleardatasourcetype (;

}

请注意,必须打开springAop布局并反向注入对象

3、动态数据源类继承org.spring framework.JDBC.data source.lookup.abstractroutingdatasource;

publicclassdynamicdatasourceextendsabstractroutingdatasource {

//*

*获取数据源相关密钥

*此密钥是在MapresolvedDataSources中绑定到数据源的密钥值

用于从determineTargetDataSource检索目标数据源

*/

@Override

protectedobjectdeterminecurrentlookupkey {

returndatasourceholder.get data source (;

}

}

4、数据源处理系统

公共类数据源保持器{

publicstaticfinalthreadlocalholder=new thread local (;

//*

*绑定当前线程数据源

*/

publicstaticvoidputdatasource (字符串数据源)。

holder.set (数据源;

}

//*

*获取当前线程的数据源

*

* @return

*/

publicstaticstringgetdatasource (

return HOLDER.get (;

}

//*

*删除数据源

*/

publicstaticvoidcleardatasourcetype {

HOLDER.remove (;

}

}

配置springMybatis.xml,注意:使用蚂蚁druid数据库连接池。 使用dbcp时,请自己切换

用法:向service方法添加注释以切换数据源。 默认值为主库

@Service

publicclasspingserviceimplimplementspingservice {

私有基础配置数据库配置数据库;

@Autowired

publicpingserviceimpl (基本配置数据库配置) {

this.basicconfigdao=basicconfigdao;

}

@Override

公共语音坪主程序

basicConfigDao.ping (;

}

@ Slave数据源

@Override

公共语音坪安全

basicConfigDao.ping (;

}

}

数据库读写分离,什么是mysql数据库