不应用Spring
引入Maven依赖
<dependency> <groupId>org.apache.shardingsphere</groupId> <artifactId>sharding-jdbc-core</artifactId> <version>${sharding-sphere.version}</version></dependency>
基于Java编码的规定配置
// 配置实在数据源 Map<String, DataSource> dataSourceMap = new HashMap<>(); // 配置主库 BasicDataSource masterDataSource = new BasicDataSource(); masterDataSource.setDriverClassName("com.mysql.jdbc.Driver"); masterDataSource.setUrl("jdbc:mysql://localhost:3306/ds_master"); masterDataSource.setUsername("root"); masterDataSource.setPassword(""); dataSourceMap.put("ds_master", masterDataSource); // 配置第一个从库 BasicDataSource slaveDataSource1 = new BasicDataSource(); slaveDataSource1.setDriverClassName("com.mysql.jdbc.Driver"); slaveDataSource1.setUrl("jdbc:mysql://localhost:3306/ds_slave0"); slaveDataSource1.setUsername("root"); slaveDataSource1.setPassword(""); dataSourceMap.put("ds_slave0", slaveDataSource1); // 配置第二个从库 BasicDataSource slaveDataSource2 = new BasicDataSource(); slaveDataSource2.setDriverClassName("com.mysql.jdbc.Driver"); slaveDataSource2.setUrl("jdbc:mysql://localhost:3306/ds_slave1"); slaveDataSource2.setUsername("root"); slaveDataSource2.setPassword(""); dataSourceMap.put("ds_slave1", slaveDataSource2); // 配置读写拆散规定 MasterSlaveRuleConfiguration masterSlaveRuleConfig = new MasterSlaveRuleConfiguration("ds_master_slave", "ds_master", Arrays.asList("ds_slave0", "ds_slave1")); // 获取数据源对象 DataSource dataSource = MasterSlaveDataSourceFactory.createDataSource(dataSourceMap, masterSlaveRuleConfig, new Properties());
基于Yaml的规定配置
或通过Yaml形式配置,与以上配置等价:
dataSources: ds_master: !!org.apache.commons.dbcp.BasicDataSource driverClassName: com.mysql.jdbc.Driver url: jdbc:mysql://localhost:3306/ds_master username: root password: ds_slave0: !!org.apache.commons.dbcp.BasicDataSource driverClassName: com.mysql.jdbc.Driver url: jdbc:mysql://localhost:3306/ds_slave0 username: root password: ds_slave1: !!org.apache.commons.dbcp.BasicDataSource driverClassName: com.mysql.jdbc.Driver url: jdbc:mysql://localhost:3306/ds_slave1 username: root password: masterSlaveRule: name: ds_ms masterDataSourceName: ds_master slaveDataSourceNames: [ds_slave0, ds_slave1] props: sql.show: true
DataSource dataSource = YamlMasterSlaveDataSourceFactory.createDataSource(yamlFile);
应用原生JDBC
通过YamlMasterSlaveDataSourceFactory工厂和规定配置对象获取MasterSlaveDataSource,MasterSlaveDataSource实现自JDBC的标准接口DataSource。而后可通过DataSource抉择应用原生JDBC开发,或者应用JPA, MyBatis等ORM工具。
以JDBC原生实现为例:
DataSource dataSource = YamlMasterSlaveDataSourceFactory.createDataSource(yamlFile);String sql = "SELECT i.* FROM t_order o JOIN t_order_item i ON o.order_id=i.order_id WHERE o.user_id=? AND o.order_id=?";try ( Connection conn = dataSource.getConnection(); PreparedStatement preparedStatement = conn.prepareStatement(sql)) { preparedStatement.setInt(1, 10); preparedStatement.setInt(2, 1001); try (ResultSet rs = preparedStatement.executeQuery()) { while(rs.next()) { System.out.println(rs.getInt(1)); System.out.println(rs.getInt(2)); } }}
应用Spring
引入Maven依赖
<!-- for spring boot --><dependency> <groupId>org.apache.shardingsphere</groupId> <artifactId>sharding-jdbc-spring-boot-starter</artifactId> <version>${sharding-sphere.version}</version></dependency><!-- for spring namespace --><dependency> <groupId>org.apache.shardingsphere</groupId> <artifactId>sharding-jdbc-spring-namespace</artifactId> <version>${sharding-sphere.version}</version></dependency>
基于Spring boot的规定配置
spring.shardingsphere.datasource.names=master,slave0,slave1spring.shardingsphere.datasource.master.type=org.apache.commons.dbcp.BasicDataSourcespring.shardingsphere.datasource.master.driver-class-name=com.mysql.jdbc.Driverspring.shardingsphere.datasource.master.url=jdbc:mysql://localhost:3306/masterspring.shardingsphere.datasource.master.username=rootspring.shardingsphere.datasource.master.password=spring.shardingsphere.datasource.slave0.type=org.apache.commons.dbcp.BasicDataSourcespring.shardingsphere.datasource.slave0.driver-class-name=com.mysql.jdbc.Driverspring.shardingsphere.datasource.slave0.url=jdbc:mysql://localhost:3306/slave0spring.shardingsphere.datasource.slave0.username=rootspring.shardingsphere.datasource.slave0.password=spring.shardingsphere.datasource.slave1.type=org.apache.commons.dbcp.BasicDataSourcespring.shardingsphere.datasource.slave1.driver-class-name=com.mysql.jdbc.Driverspring.shardingsphere.datasource.slave1.url=jdbc:mysql://localhost:3306/slave1spring.shardingsphere.datasource.slave1.username=rootspring.shardingsphere.datasource.slave1.password=spring.shardingsphere.masterslave.name=msspring.shardingsphere.masterslave.master-data-source-name=masterspring.shardingsphere.masterslave.slave-data-source-names=slave0,slave1spring.shardingsphere.props.sql.show=true
基于Spring boot + JNDI的规定配置
如果您打算应用Spring boot + JNDI
的形式,在利用容器(如Tomcat)中应用Sharding-JDBC时,可应用spring.shardingsphere.datasource.${datasourceName}.jndiName
来代替数据源的一系列配置。
如:
spring.shardingsphere.datasource.names=master,slave0,slave1spring.shardingsphere.datasource.master.jndi-name=java:comp/env/jdbc/masterspring.shardingsphere.datasource.slave0.jndi-name=jdbc/slave0spring.shardingsphere.datasource.slave1.jndi-name=jdbc/slave1spring.shardingsphere.masterslave.name=msspring.shardingsphere.masterslave.master-data-source-name=masterspring.shardingsphere.masterslave.slave-data-source-names=slave0,slave1spring.shardingsphere.props.sql.show=true
基于Spring命名空间的规定配置
<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:master-slave="http://shardingsphere.apache.org/schema/shardingsphere/masterslave" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://shardingsphere.apache.org/schema/shardingsphere/masterslave http://shardingsphere.apache.org/schema/shardingsphere/masterslave/master-slave.xsd "> <bean id="ds_master" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> <property name="driverClassName" value="com.mysql.jdbc.Driver" /> <property name="url" value="jdbc:mysql://localhost:3306/ds_master" /> <property name="username" value="root" /> <property name="password" value="" /> </bean> <bean id="ds_slave0" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> <property name="driverClassName" value="com.mysql.jdbc.Driver" /> <property name="url" value="jdbc:mysql://localhost:3306/ds_slave0" /> <property name="username" value="root" /> <property name="password" value="" /> </bean> <bean id="ds_slave1" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> <property name="driverClassName" value="com.mysql.jdbc.Driver" /> <property name="url" value="jdbc:mysql://localhost:3306/ds_slave1" /> <property name="username" value="root" /> <property name="password" value="" /> </bean> <master-slave:data-source id="masterSlaveDataSource" master-data-source-name="ds_master" slave-data-source-names="ds_slave0, ds_slave1" > <master-slave:props> <prop key="sql.show">true</prop> <prop key="executor.size">10</prop> <prop key="foo">bar</prop> </master-slave:props> </master-slave:data-source></beans>
在Spring中应用DataSource
间接通过注入的形式即可应用DataSource,或者将DataSource配置在JPA、Hibernate或MyBatis中应用。
@Resourceprivate DataSource dataSource;
更多的具体配置请参考配置手册。