ShardingSphere Raw JDBC 主从示例
ShardingSphere Raw JDBC 主从示例
总览
这个示例不结合ORM之类的,直接执行SQL语句。通过写两个简单的文件就可以了,大致的步骤如下:
- 1.配置Maven依赖
- 2.配置文件写入相关配置
- 3.获取DataSource类编写
- 4.测试
配置Maven依赖
其主要依赖如下,还有一些spring、mysql的依赖,总的Maven文件链接在这:pom.xml,自定查找添加吧
<dependency><groupId>org.apache.shardingsphere</groupId><artifactId>shardingsphere-jdbc-core</artifactId><version>5.0.0-alpha</version>
</dependency>
application.properties文件写入
写入主从库的相关配置
# 读写分离 - 数据库框架版本 2.0 ShardingSphere-jdbc 5.0.0-alpha
sharding.jdbc.datasource.names=master,slave0,slave1sharding.jdbc.datasource.ds-master.driver-class-name=com.mysql.jdbc.Driver
sharding.jdbc.datasource.ds-master.url=jdbc:mysql://localhost:3306/test?serverTimezone=UTC&useUnicode=true\&characterEncoding=utf-8\&useSSL=false&allowPublicKeyRetrieval=true
sharding.jdbc.datasource.ds-master.username=root
sharding.jdbc.datasource.ds-master.password=rootsharding.jdbc.datasource.ds-slave0.driver-class-name=com.mysql.jdbc.Driver
sharding.jdbc.datasource.ds-slave0.url=jdbc:mysql://localhost:3309/test?serverTimezone=UTC&useUnicode=true\&characterEncoding=utf-8\&useSSL=false&allowPublicKeyRetrieval=true
sharding.jdbc.datasource.ds-slave0.username=root
sharding.jdbc.datasource.ds-slave0.password=rootsharding.jdbc.datasource.ds-slave1.driver-class-name=com.mysql.jdbc.Driver
sharding.jdbc.datasource.ds-slave1.url=jdbc:mysql://localhost:3310/test?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8\&useSSL=false&allowPublicKeyRetrieval=true
sharding.jdbc.datasource.ds-slave1.username=root
sharding.jdbc.datasource.ds-slave1.password=root
ShardingMasterSlaveDataSource编写
这里默认使用HikariDataSource,思路主要是生成各个主从库的链接,放到Sharding中,代码中也有说明,总体比较简单:
package com.example.demo.shardingsphere.raw.jdbc;import com.zaxxer.hikari.HikariDataSource;
import io.shardingsphere.api.config.MasterSlaveRuleConfiguration;
import io.shardingsphere.shardingjdbc.api.MasterSlaveDataSourceFactory;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.env.Environment;
import org.springframework.stereotype.Component;import javax.sql.DataSource;
import java.sql.SQLException;
import java.util.*;/*** @author lw*/
@Slf4j
@Component
public class ShardingMasterSlaveDataSource {private final String DRIVER = ".driver-class-name";private final String URL = ".url";private final String USERNAME = ".username";private final String PASSWORD = ".password";private final String DBS = "sharding.jdbc.datasource.names";@Autowiredprivate Environment environment;DataSource createDataSource() throws SQLException {// 获取数据库列表String[] dbs = Objects.requireNonNull(environment.getProperty(DBS)).split(",");log.info("DBS::" + Arrays.toString(dbs));// 设置主从,约定第一个为主,其他为从MasterSlaveRuleConfiguration configuration = new MasterSlaveRuleConfiguration(dbs[0], dbs[0],Arrays.asList(Arrays.copyOfRange(dbs, 1, dbs.length)));log.info("ShardingMasterSlaveDataSource master :: " + configuration.getMasterDataSourceName());log.info("ShardingMasterSlaveDataSource slave :: " + configuration.getSlaveDataSourceNames());// 设置打印SQL语句,查看主从配置和切换是否成功Properties properties = new Properties();properties.setProperty("sql.show", "true");return MasterSlaveDataSourceFactory.createDataSource(createDataSourceMap(dbs), configuration, new HashMap<>(0),properties);}/*** 返回DataSource列表*/private Map<String, DataSource> createDataSourceMap(String[] dbs) {Map<String, DataSource> result = new HashMap<>(dbs.length);for (String db: dbs) {log.info("Create data source ::" + db);result.put(db, createDataSource("sharding.jdbc.datasource.ds-" + db));}return result;}private DataSource createDataSource(String prefix) {log.info(DRIVER + "::" + environment.getProperty(prefix + DRIVER));log.info(URL + "::" + environment.getProperty(prefix + URL));log.info(USERNAME + "::" + environment.getProperty(prefix + USERNAME));log.info(PASSWORD + "::" + environment.getProperty(prefix + PASSWORD));HikariDataSource dataSource = new HikariDataSource();dataSource.setDriverClassName(environment.getProperty(prefix + DRIVER));dataSource.setJdbcUrl(environment.getProperty(prefix + URL));dataSource.setUsername(environment.getProperty(prefix + USERNAME));dataSource.setPassword(environment.getProperty(prefix + PASSWORD));return dataSource;}
}
测试
直接生写SQL了,就不结合ORM之类的了,这里是通过日志看出是否生效的,日志大致如下
Sharding-Sphere-SQL : Rule Type: master-slave
Sharding-Sphere-SQL : SQL: select * from stores limit 5 ::: DataSources: slave0
Sharding-Sphere-SQL : Rule Type: master-slave
Sharding-Sphere-SQL : SQL: select * from stores limit 5 ::: DataSources: slave1
Sharding-Sphere-SQL : Rule Type: master-slave
Sharding-Sphere-SQL : SQL: insert into stores (name, description) VALUES ("name103", "description103"); ::: DataSources: master
Sharding-Sphere-SQL : Rule Type: master-slave
Sharding-Sphere-SQL : SQL: select * from stores limit 5 ::: DataSources: master
代码如下:
package com.example.demo.shardingsphere.raw.jdbc;import lombok.extern.slf4j.Slf4j;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit.jupiter.SpringExtension;
import org.springframework.transaction.annotation.Transactional;import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Statement;@Slf4j
@SpringBootTest
@ExtendWith(SpringExtension.class)
public class ShardingMasterSlaveDataSourceTest {@AutowiredShardingMasterSlaveDataSource shardingMasterSlaveDataSource;/*** 运行后从日志可以看出主从之间的切换和从库负载均衡*/@Test @Transactionalpublic void test() throws SQLException {DataSource dataSource = shardingMasterSlaveDataSource.createDataSource();log.info("ShardingMasterSlaveDataSource info::" + dataSource.getConnection().getMetaData().getURL());Connection conn = dataSource.getConnection();Statement statement = conn.createStatement();String sql = "select * from stores limit 5";statement.execute(sql);statement.execute(sql);sql = "insert into stores (name, description) VALUES (\"name103\", \"description103\");";statement.execute(sql);sql = "select * from stores limit 5";statement.execute(sql);}
}
ShardingSphere Raw JDBC 主从示例相关推荐
- ShardingSphere RAW JDBC 分布式事务 Narayana XA 代码示例
ShardingSphere RAW JDBC 分布式事务 Narayana XA 代码示例 项目工程在:transaction-2pc-narayana-xa-raw-jdbc-example 代码 ...
- ShardingSphere RAW JDBC 分布式事务XA 代码示例
ShardingSphere RAW JDBC 分布式事务XA 代码示例 项目工程在:transaction-2pc-xa-raw-jdbc-example 代码简介 基于ShardingSp ...
- jdbc 数据源_Java数据源,JDBC数据源示例
jdbc 数据源 Java DataSource and JDBC DataSource programming is the way to work with database in our jav ...
- rowmapper_Spring Integration Jdbc RowMapper示例
rowmapper JDBC入站通道适配器的基本功能是执行SQL查询,提取数据并将以Message形式封装的结果集传递到本地通道. 您可以在JDBC入站通道适配器的示例中阅读有关此内容的更多信息. 有 ...
- java jdbc gbase_Gbase JDBC 应用示例
1. 使用 JDBC 创建连接 本示例实现了通过 JDBC 建立数据库链接的功能. package com.gbase.jdbc.simple; import java.sql.Connection; ...
- sping jdbc 链接mysql_Spring Boot JDBC 连接数据库示例
文本将对在spring Boot构建的Web应用中,基于MySQL数据库的几种数据库连接方式进行介绍. 包括JDBC.JPA.MyBatis.多数据源和事务. JDBC 连接数据库 1.属性配置文件( ...
- java原始套接字,raw socket介绍(示例代码)
原文: http://bbs.chinaunix.net/forum.php?mod=viewthread&tid=876233 test 1.原始套接字(raw socket) 1.1 原始 ...
- JDBC连接MySQL数据库及示例
JDBC是Sun公司制定的一个可以用Java语言连接数据库的技术. 一.JDBC基础知识 JDBC(Java Data Base Connectivity,java数据库连接)是一种用 ...
- Spring JDBC和JdbcTemplate CRUD与DataSource示例
Spring JDBC示例和JdbcTemplate CRUD与DataSource示例 Spring JDBC是本教程的主题.数据库是大多数企业应用程序不可或缺的一部分.因此,当谈到Java EE框 ...
最新文章
- jquery.validate不用submit而用js提交的例子
- React ES6组件里绑定this的三种方式
- 机器学习(二)Logistic回归(Logistic regression)算法
- python适合开发游戏吗_用python能制作游戏吗
- java封装概念_Java面向对象----封装概念
- Python的pip下载特定版本TensorFlow方法
- 老司机 iOS 周报 #67 | 2019-05-13
- mybatis plus 使用函数_mybatis-plus的使用 ------ 入门
- Manage,管道的简单应用,进程池,队列的简单应用
- 【EMV L2】终端风险管理(Terminal Risk Management)
- 鸿蒙手机开发者活动,华为 12 月16 日举行鸿蒙 2.0 手机开发者 Beta 活动
- 微型计算机及接口技术笔记,2010年自考微型计算机及其接口技术笔记串讲
- android电视播放器字幕,android播放视频显示字幕
- html640设计稿,为什么写移动端的ui给的640设计稿的宽度,在写html的时候要除以2才正好。...
- 同济大学Python程序设计基础 实验七:文件
- ol+天地图+geoserver_教程:使用GeoServer发布离线地图服务(WMS)
- css中clip:rect用法
- 图片损坏打不开如何修复?
- AD更改原理图纸大小
- 【自学笔记】尚硅谷数据结构与算法Chapter 1 数据结构与算法概述
热门文章
- ASP.NET MVC RedirectToRoute类[转]
- luasql在Fedora20下的安装与使用示例
- Altium Designer中PCB关于Import Changes报错最终解决方案
- eclipse打开后显示 Failed to create the part‘s controls 解决方法
- [Asp.net MVC]HandleErrorAttribute异常过滤器
- 【报告分享】2021年BrandGrow中国新锐品牌增长潜力报告.pdf(附下载链接)
- 5-1 File Transfer
- TensorFlow图像数据预处理
- oracle导出自增设置,oracle008:oracle自增,自适应,数据闪回,导入导出
- PHP心脏装置,“人工心脏”不再科幻 “钢铁侠”已成现实