Spring boot項目集成Sharding Jdbc
環境
jdk:1.8
framework: spring boot, sharding jdbc
database: MySQL
搭建步驟
在pom 中加入sharding 依賴
<dependency>
<groupId>io.shardingjdbc</groupId>
<artifactId>sharding-jdbc-core-spring-boot-starter</artifactId>
<version>2.0.3</version>
</dependency>
將原來的 spring DataSource 註釋掉,加入 sharding 的配置
sharding:
jdbc:
datasource:
names: ds_0,ds_1
ds_0:
type: com.zaxxer.hikari.HikariDataSource
driver-class-name: com.mysql.jdbc.Driver
jdbc-url: jdbc:mysql://sharding0
username: mams_test
password: mams_test
ds_1:
type: com.zaxxer.hikari.HikariDataSource
driver-class-name: com.mysql.jdbc.Driver
jdbc-url: jdbc:mysql://sharding1
username: mams_test
password: mams_test
config:
sharding:
default-data-source-name: ds_0
tables:
task:
actual-data-nodes: ds_${0..1}.task
database-strategy:
inline:
sharding-column: id
algorithm-expression: ds_${id % 2}
key-generator-column-name: id
reverse_display:
actual-data-nodes: ds_${0..1}.reverse_display
database-strategy:
inline:
sharding-column: task_id
algorithm-expression: ds_${task_id % 2}
key-generator-column-name: id
props:
sql.show: true
註:
這個配置只是針對分庫,sharding jdbc 還支持讀寫分離,主從等模式,具體可以看文檔sharding jdbc configuration
faq
只有網友的分享例子,沒有文檔
sharding jdbc 的鏈接 shardingjdbc.io 訪問是不可用的,在碼雲上找到了一份文檔,地址是sharding-jdbc-doc
spring boot的 health check 顯示為down
看了一下 DataSourceHealthIndicator 類的實現,要求 select 1 返回的大小為 1才認為數據庫是健康的,但是經過分庫之後,這個list size 應該了是數據庫的數量,所以顯示數據庫為down。
可以將db 個health check關掉,配置management.health.db.enabled=false 即可。
不過這種情況下數據庫如果掛掉的話註冊中心是不知道的,需要定制一個自己的數據庫檢查類
@Component
public class CustomDataSourceHealthCheck extends AbstractHealthIndicator {
private JdbcTemplate jdbcTemplate;
private String databases;
private int databaseCount;
private String query www.tiaotiaoylzc.com= "SELECT 1 ";
@PostConstruct
public void init() {
databaseCount = databases.split(",").length;
}
@Override
protected void doHealthCheck(Health.Builder builder) throws Exception {
try {
List<Map<String, Object>> result = jdbcTemplate.queryForList(query);
if (result.size(www.mytxyl1.com) == databaseCount) {
builder.up();
} else {
builder.down();
}
} catch (Exception e) {
builder.down(e);
}
}
public JdbcTemplate getJdbcTemplate() {
return jdbcTemplate;
}
@Autowired
public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
this.jdbcTemplate = jdbcTemplate;
}
public String getDatabases() {
return databases;
}
@Value("${sharding.www.yongshi123.cn jdbc.datasource.names}")
public void setDatabases(String databases) {
this.databases = databases;
}
public int getDatabaseCount() {
return databaseCount;
}
public void setDatabaseCount(int databaseCount) {
this.databaseCount = www.zhenghongyule.com/ databaseCount;
}
public String getQuery(www.xtd912.com) {
return query;
}
public void setQuery(String query) {
this.query = query;
}
}
Spring boot項目集成Sharding Jdbc