Skip to content

Commit

Permalink
perf($ShardingSphere): integrate with ShardingSphere
Browse files Browse the repository at this point in the history
BREAKING CHANGE: remove dependency `dynamic-datasource-spring-boot-starter`

[skip ci]
  • Loading branch information
johnnymillergh committed Apr 2, 2022
1 parent 31cd72e commit 5ba4a42
Show file tree
Hide file tree
Showing 6 changed files with 94 additions and 91 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,68 @@ spring:
# `file-size-threshold` specifies the size threshold after which files will be written to disk.
# The default is 0. We set it as 0 too.
file-size-threshold: 0
shardingsphere:
datasource:
master0:
name: master0
type: com.zaxxer.hikari.HikariDataSource
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/muscle_and_fitness_00?useSSL=true&useUnicode=true
username: maf_mysql_rw
password: maf@mysql
master1:
name: master1
type: com.zaxxer.hikari.HikariDataSource
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/muscle_and_fitness_01?useSSL=true&useUnicode=true
username: maf_mysql_rw
password: maf@mysql
slave0:
name: slave0
type: com.zaxxer.hikari.HikariDataSource
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3307/muscle_and_fitness_00?useSSL=true&useUnicode=true
username: maf_mysql_r
password: maf@mysql
slave1:
name: slave1
type: com.zaxxer.hikari.HikariDataSource
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3307/muscle_and_fitness_01?useSSL=true&useUnicode=true
username: maf_mysql_r
password: maf@mysql
quartz:
name: quartz
type: com.zaxxer.hikari.HikariDataSource
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/QUARTZ_DB?useSSL=true&useUnicode=true
username: maf_mysql_rw
password: maf@mysql
names: master0,slave0,master1,slave1,quartz
sharding:
master-slave-rules:
master0:
slave-data-source-names: slave0
master-data-source-name: master0
master1:
slave-data-source-names: slave1
master-data-source-name: master1
default-database-strategy:
inline:
algorithm-expression: master$->{id % 2}
sharding-column: id
tables:
user:
table-strategy:
inline:
sharding-column: id
algorithm-expression: "user_$->{String.format(\"%04d\", new BigDecimal(id).abs().divideAndRemainder(2)[1].longValue())}"
key-generator:
column: id
type: SNOWFLAKE
actual-data-nodes: "master$->{0..1}.user_$->{(0..1).collect{String.format(\"%04d\", it)}}"
props:
sql-show: true

logging:
config: classpath:logback-configuration/logback-${spring.profiles.active}.xml
Expand All @@ -61,7 +123,7 @@ maf:
context-path: ${server.servlet.context-path}
group-id: @project.groupId@
project-parent-artifact-id: @project.parent.artifactId@
project-artifact-id: @project.artifactId@
project-artifact-id: @project.parent.artifactId@
version: @project.version@
description: @project.description@
jdk-version: @java.version@
Expand Down
16 changes: 8 additions & 8 deletions auth-center/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -124,19 +124,19 @@

<!-- ORM Library -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>${mybatis-plus-boot-starter.version}</version>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>dynamic-datasource-spring-boot-starter</artifactId>
<version>${dynamic-datasource-spring-boot-starter.version}</version>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>${mybatis-plus-boot-starter.version}</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
<groupId>org.apache.shardingsphere</groupId>
<artifactId>shardingsphere-jdbc-core-spring-boot-starter</artifactId>
<version>${shardingsphere.version}</version>
</dependency>

<!-- https://github.com/jwtk/jjwt -->
Expand Down
3 changes: 2 additions & 1 deletion pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@
<spring-boot-admin-starter-client.version>2.6.2</spring-boot-admin-starter-client.version>
<mybatis-plus-boot-starter.version>3.5.1</mybatis-plus-boot-starter.version>
<dynamic-datasource-spring-boot-starter.version>3.5.1</dynamic-datasource-spring-boot-starter.version>
<sharding-sphere.version>4.1.1</sharding-sphere.version>
<shardingsphere.version>5.1.0</shardingsphere.version>
<hutool-all.version>5.7.21</hutool-all.version>
<guava.version>31.0.1-jre</guava.version>
<springdoc-openapi-ui.version>1.6.6</springdoc-openapi-ui.version>
Expand Down Expand Up @@ -181,6 +181,7 @@

<build>
<!-- set the name of .jar file -->
<!--suppress MavenModelInspection -->
<finalName>${project.artifactId}-${git.commit.id.abbrev}-${project.version}</finalName>
<resources>
<resource>
Expand Down
6 changes: 3 additions & 3 deletions spring-cloud-starter/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -163,9 +163,9 @@
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>dynamic-datasource-spring-boot-starter</artifactId>
<version>${dynamic-datasource-spring-boot-starter.version}</version>
<groupId>org.apache.shardingsphere</groupId>
<artifactId>shardingsphere-jdbc-core-spring-boot-starter</artifactId>
<version>${shardingsphere.version}</version>
<scope>provided</scope>
</dependency>

Expand Down
Original file line number Diff line number Diff line change
@@ -1,19 +1,18 @@
package com.jmsoftware.maf.springcloudstarter.database;

import com.baomidou.dynamic.datasource.DynamicRoutingDataSource;
import com.baomidou.dynamic.datasource.plugin.MasterSlaveAutoRoutingPlugin;
import com.baomidou.dynamic.datasource.spring.boot.autoconfigure.DynamicDataSourceCreatorAutoConfiguration;
import com.baomidou.mybatisplus.autoconfigure.MybatisPlusAutoConfiguration;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import lombok.val;
import org.quartz.core.QuartzScheduler;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.autoconfigure.jdbc.DataSourceProperties;
import org.springframework.boot.autoconfigure.quartz.QuartzDataSource;
import org.springframework.boot.autoconfigure.quartz.QuartzTransactionManager;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Primary;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.transaction.PlatformTransactionManager;

Expand All @@ -26,40 +25,24 @@
**/
@Slf4j
@RequiredArgsConstructor
@ConditionalOnClass({MybatisPlusAutoConfiguration.class, DynamicDataSourceCreatorAutoConfiguration.class})
@ConditionalOnClass({MybatisPlusAutoConfiguration.class, QuartzScheduler.class})
public class DataSourceConfiguration {
private final DynamicRoutingDataSource dynamicRoutingDataSource;

/**
* Primary data source. Had to configure DynamicRoutingDataSource as primary. Otherwise
* MasterSlaveAutoRoutingPlugin will not be able to be injected datasource correctly.
*
* @return the data source
* @see MasterSlaveAutoRoutingPlugin
*/
@Bean
@Primary
public DataSource primaryDataSource() {
log.info("Setting 'DynamicRoutingDataSource' as 'primaryDataSource', {}", dynamicRoutingDataSource);
return dynamicRoutingDataSource;
@ConfigurationProperties("spring.shardingsphere.datasource.quartz")
@ConditionalOnProperty(prefix = "spring.quartz", name = "job-store-type", havingValue = "jdbc")
public DataSourceProperties quartzDataSourceProperties() {
val quartzDataSourceProperties = new DataSourceProperties();
log.info("Setting up quartzDataSourceProperties: {}", quartzDataSourceProperties.getName());
return quartzDataSourceProperties;
}

@Bean
@QuartzDataSource
@ConditionalOnProperty(prefix = "spring.quartz", name = "job-store-type", havingValue = "jdbc")
public DataSource quartzDataSource() {
val quartzDataSource = dynamicRoutingDataSource.getDataSource(DataSourceEnum.QUARTZ.getDataSourceName());
log.info("Setting up quartzDataSource from 'DynamicRoutingDataSource', quartzDataSource: {}",
quartzDataSource.hashCode());
return quartzDataSource;
}

@Bean
@Primary
public PlatformTransactionManager primaryPlatformTransactionManager(@Qualifier("primaryDataSource") DataSource primaryDataSource) {
log.info("Setting up the central interface in Spring's imperative transaction infrastructure " +
"'PlatformTransactionManager'. primaryDataSource: {}", primaryDataSource);
return new DataSourceTransactionManager(primaryDataSource);
public DataSource quartzDataSource(DataSourceProperties quartzDataSourceProperties) {
val dataSource = quartzDataSourceProperties.initializeDataSourceBuilder().build();
log.info("Setting up quartzDataSource: {}", dataSource);
return dataSource;
}

@Bean
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,5 @@
package com.jmsoftware.maf.springcloudstarter.database;

import com.baomidou.dynamic.datasource.plugin.MasterSlaveAutoRoutingPlugin;
import com.baomidou.dynamic.datasource.spring.boot.autoconfigure.DynamicDataSourcePropertiesCustomizer;
import com.baomidou.dynamic.datasource.support.DdConstants;
import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.autoconfigure.MybatisPlusAutoConfiguration;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
Expand All @@ -16,7 +13,6 @@
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;
import org.springframework.core.annotation.Order;
import org.springframework.transaction.annotation.EnableTransactionManagement;

Expand All @@ -28,11 +24,11 @@
@Slf4j
@Configuration
@EnableTransactionManagement
@Import({
DataSourceConfiguration.class
})
//@Import({
// DataSourceConfiguration.class
//})
@ConditionalOnClass({MybatisPlusAutoConfiguration.class})
@MapperScan("com.jmsoftware.maf.springcloudstarter.*.repository")
@ConditionalOnClass({MybatisPlusAutoConfiguration.class, MasterSlaveAutoRoutingPlugin.class})
public class MyBatisPlusConfiguration {
private static final String MESSAGE_TEMPLATE = "Initial bean: '{}'";

Expand Down Expand Up @@ -80,48 +76,9 @@ public Interceptor mybatisPlusInterceptor(
return mybatisPlusInterceptor;
}

/**
* Register master-slave auto routing plugin interceptor. Mybatis-Plus doesn't support non-master-slave
* datasource yet.
*
* @return the interceptor
* @see DdConstants
*/
@Bean
@Order(2)
public Interceptor masterSlaveAutoRoutingPlugin() {
log.warn(MESSAGE_TEMPLATE, MasterSlaveAutoRoutingPlugin.class.getSimpleName());
return new MasterSlaveAutoRoutingPlugin();
}

@Bean
public CommonMetaObjectHandler commonMetaObjectHandler() {
log.warn(MESSAGE_TEMPLATE, CommonMetaObjectHandler.class.getSimpleName());
return new CommonMetaObjectHandler();
}

/**
* Dynamic data source properties customizer. Set global configuration for dynamic data source.
*
* @return the dynamic data source properties customizer
*/
@Bean
public DynamicDataSourcePropertiesCustomizer dynamicDataSourcePropertiesCustomizer() {
return properties -> {
val cpuCoreCount = Runtime.getRuntime().availableProcessors();
val minIdle = cpuCoreCount * 2 + 1;
val maxPoolSize = cpuCoreCount * 3;
val hikari = properties.getHikari();
hikari.setConnectionTestQuery("SELECT 1");
hikari.setIdleTimeout(30000L);
hikari.setMaxPoolSize(maxPoolSize);
hikari.setMinIdle(minIdle);
hikari.setIsAutoCommit(true);
hikari.setMaxLifetime(120000L);
hikari.setConnectionTimeout(30000L);
log.warn("Hikari connection pool enhanced by current cpuCoreCount: {}, initial size: {}, min idle: {}" +
", max active: {}",
cpuCoreCount, minIdle, minIdle, maxPoolSize);
};
}
}

0 comments on commit 5ba4a42

Please sign in to comment.