首页 > 编程知识 正文

手动创建oracle实例的步骤,mysql读写分离的好处

时间:2023-05-05 14:38:40 阅读:144250 作者:1354

需求场景

为了防止代码中对SQL的缓慢查询,会影响在线主数据库的性能。 必须切换到从库中执行sql查询操作。 为了便于使用,以自定义注释的形式使用。

mysql导入依赖关系

mysql

mysql-connector-java

8.0.16

代码实现

配置文件

application.yml

spring:

datasource:

大师3:

username :根

password: 123456

JDBC-URL : JDBC : MySQL ://localhost :3306/master? useUnicode=true遵循的小蘑菇=utf-8serverTimezone=GMT 8

driver-class-name : com.MySQL.CJ.JDBC.driver

slave:

username :根

password: 123456

JDBC-URL : JDBC : MySQL ://localhost :3306/slave? useUnicode=true遵循的小蘑菇=utf-8serverTimezone=GMT 8

driver-class-name : com.MySQL.CJ.JDBC.driver

数据源类型

//*

*数据源类型枚举

* @author暴坊01

* @create 2020/11/02

*/

公共枚举数据源类型{

//*

*主库,主要是写入

*/

大师、

//*

从库中进行读取操作

*/

从属端

}

动态数据源

//*

*动态数据源

* @author暴坊01

* @create 2020/11/02

*/

publicclassdynamicdatasourceextendsabstractroutingdatasource {

publicdynamicdatasource (datasourcedefaulttargetdatasource,

映射目标数据源) {

super.setdefaulttargetdatasource (defaulttargetdatasource;

super.settargetdatasources;

super.afterPropertiesSet (;

}

@Override

protectedobjectdeterminecurrentlookupkey {

returndynamicdatasourcecontextholder.getdate source type (;

}

}

DynamicDataSourceContextHolder

publicclassdynamicdatasourcecontextholder {

//*

*使用threadlocal维护变量,threadlocal为使用该变量的每个线程提供独立变量的副本。

*因此,每个线程都可以修改自己的副本,而不影响其他线程的副本。

*/

privatestaticfinalthreadlocalcontext _ holder=

新thread local (;

//*

设置数据源的变量

*/

publicstaticvoidsetdatesourcetype {

context_holder.set(dstype;

}

//*

获取数据源的变量

*/

publicstaticstringgetdatesourcetype {

return CONTEXT_HOLDER.get (;

}

//*

清空数据源变量

*/

publicstaticvoidcleardatesourcetype {

CONTEXT_HOLDER.remove (;

}

}

数据源注释

//*

* @author暴坊01

* @create 2020/11/01

*/

@target(elementtype.method )。

@ retention (retention policy.runtime ) )。

公共@接口数据源{

//*

切换数据源

*/

数据source type value () default DataSourceType.MASTER;

}

数据源aspect切面

@Aspect

@order(1) )。

@Component

公共类数据源攻击{

@ pointcut (' @ annotation (com.jgame.mis.annotation.data source ) ) )

公共语音ds pointcut

}

@around(dspointcut ) ) )

publicobjectaround (处理联合点) throws Throwable {

methodsignaturesignature=(methodsignature ) point.getSignature );

方法方法=signature.get method (;

atasourcedatasource=method.get annotation (data source.class );

if (空!=数据源

DynamicDataSourceContextHolder。

设置日期源类型(data source.value ().name );

}

try {

return point.proceed (;

} finally {

//销毁数据源是在执行方法后

dynamicdatasourcecontextholder.cleardatesourcetype (;

}

}

}

数据源配置

@Configuration

公共类数据源配置{

@Bean

@ configuration properties (spring.data source.master )。

publicdatasourcemasterdatasource (

返回数据源builder.create ().build );

}

@Bean

@ configuration properties (spring.data source.slave )。

publicdatasourceslavedatasource (

返回数据源builder.create ().build );

}

@ bean (name='动态数据源' )。

@Primary

publicdynamicdatasourcedatasource (

{

maptargetdatasources=new hashmap (;

target data sources.put (data source type.master.name (,masterDataSource ) );

target data sources.put (data source type.slave.name (,slaveDataSource ) );

returnnewdynamicdatasource (主数据源)、target数据源);

}

}

向启动类添加注释

@ import (数据源配置. class ) )

@ springbootapplication (exclude={ datasourceautoconfiguration.class }

在使用的方法中

@ data source (值=data source type.slave ) )。

德谟

@select(select*fromuser ) )

@ data source (值=data source type.slave ) )。

列表选择用户列表(;

总结

到目前为止,我们介绍了使用SpringBoot自定义注释读写分离Mysql数据库的文章。 要使用更多相关的SpringBoot自定义注释读写隔离Mysql内容,请搜索云海天教程中的以前文章,或继续查看以下相关文章: 今后,云海天教程就拜托你了。

原文链接: https://blog.csdn.net/QQ _ 45186545/article/details/109445520

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。