java查询mysql数据库,java读取多行数据
代码建议在服务层进行主从分离。 不建议在同一服务方法内部进行主从分离。 这里是事务片。 我们知道,同一事务使用同一链接进行处理。 业务片方法的内部逻辑不建议主从分离,从而避免数据不一致。
以下方案通过继承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 (;
}
}