阿里云rds数据库迁移实战
|
由于某几个业务表数据量太大,数据由业务写,数据部门读。 写压力不大,读却很容易导致长时间等待问题(读由单独系统进行读),导致连接被占用,从而容易并发稍稍增长导致全库卡死! 于是,就拆库呗。 业务系统拆分就不要做了(微服务化),没那工夫。 直接原系统拆两个数据源出来,对某几个高压力表的写就单独用这个数据源,从而减轻压力。 所以,分库工作就变为了两个步骤:再由于方便性,数据库也是使用阿里的rds数据库,一个变为两个! 代码上做两个数据源很简单,尤其是在原有代码就写得比较清晰的情况下; 如下是使用springboot和mybatis做的多数据源配置:= MainDataSourceConfig.SCAN_BASE_PACKAGE,sqlSessionFactoryRef = "sqlSessionFactory"</span><span style="color: #0000ff">public</span> <span style="color: #0000ff">static</span> <span style="color: #0000ff">final</span> String SCAN_BASE_PACKAGE = "com.xxx.dao.mapper.main"<span style="color: #000000">;
</span><span style="color: #008000">/**</span><span style="color: #008000">
* xml 配置文件扫描路径
</span><span style="color: #008000">*/</span>
<span style="color: #0000ff">public</span> <span style="color: #0000ff">static</span> <span style="color: #0000ff">final</span> String SCAN_XML_MAPPER_LOCATION = "classpath:mybatis/mappers/mysql/main/**/*Mapper.xml"<span style="color: #000000">;
</span><span style="color: #008000">//</span><span style="color: #008000">jdbcConfig</span>
@Value("${jdbc.main.url}"<span style="color: #000000">)
</span><span style="color: #0000ff">private</span><span style="color: #000000"> String jdbcUrl;
@Value(</span>"${jdbc.main.driver}"<span style="color: #000000">)
</span><span style="color: #0000ff">private</span><span style="color: #000000"> String driverName;
@Value(</span>"${pool.main.maxPoolSize}"<span style="color: #000000">)
</span><span style="color: #0000ff">private</span> <span style="color: #0000ff">int</span><span style="color: #000000"> maxPoolSize;
@Value(</span>"${jdbc.main.username}"<span style="color: #000000">)
</span><span style="color: #0000ff">private</span><span style="color: #000000"> String jdbcUserName;
@Value(</span>"${jdbc.main.password}"<span style="color: #000000">)
</span><span style="color: #0000ff">private</span><span style="color: #000000"> String jdbcPwd;
@Value(</span>"${pool.main.maxWait}"<span style="color: #000000">)
</span><span style="color: #0000ff">private</span> <span style="color: #0000ff">int</span><span style="color: #000000"> jdbcMaxWait;
@Value(</span>"${pool.main.validationQuery}"<span style="color: #000000">)
</span><span style="color: #0000ff">private</span><span style="color: #000000"> String validationQuery;
@Bean(name </span>= "druidDataSource"<span style="color: #000000">)
@Primary
</span><span style="color: #0000ff">public</span><span style="color: #000000"> DruidDataSource druidDataSource(){
DruidDataSource ds </span>= <span style="color: #0000ff">new</span><span style="color: #000000"> DruidDataSource();
ds.setUrl(jdbcUrl);
ds.setDriverClassName(driverName);
ds.setMaxActive(maxPoolSize);
ds.setUsername(jdbcUserName);
ds.setPassword(jdbcPwd);
ds.setRemoveAbandoned(</span><span style="color: #0000ff">true</span><span style="color: #000000">);
ds.setMaxWait(jdbcMaxWait);
ds.setValidationQuery(validationQuery);
</span><span style="color: #0000ff">return</span><span style="color: #000000"> ds;
}
@Bean(name </span>= "dataSourceTransactionManager"<span style="color: #000000">)
@Primary
</span><span style="color: #0000ff">public</span><span style="color: #000000"> DataSourceTransactionManager dataSourceTransactionManager(){
DataSourceTransactionManager dm </span>= <span style="color: #0000ff">new</span><span style="color: #000000"> DataSourceTransactionManager();
dm.setDataSource(druidDataSource());
</span><span style="color: #0000ff">return</span><span style="color: #000000"> dm;
}
@Bean(name</span>="sqlSessionFactory"<span style="color: #000000">)
@Primary
</span><span style="color: #0000ff">public</span> SqlSessionFactory sqlSessionFactory() <span style="color: #0000ff">throws</span><span style="color: #000000"> Exception {
SqlSessionFactoryBean sqlSessionFactory </span>= <span style="color: #0000ff">new</span><span style="color: #000000"> SqlSessionFactoryBean();
ResourcePatternResolver resolver </span>= <span style="color: #0000ff">new</span><span style="color: #000000"> PathMatchingResourcePatternResolver();
Resource[] mapperXmlResource </span>=<span style="color: #000000"> resolver.getResources(SCAN_XML_MAPPER_LOCATION);
sqlSessionFactory.setDataSource(druidDataSource());
sqlSessionFactory.setMapperLocations(mapperXmlResource);
</span><span style="color: #0000ff">return</span><span style="color: #000000"> sqlSessionFactory.getObject();
}
} <span style="color: #008000">//<span style="color: #008000"> 新数据源配置,仅仅改了下配置名,但是还不得不另一个配置类
} 然后,将需要分离的表操作转移到相应的包路径下,即可实现多数据源操作了! (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
