ruoyi框架使用sharding jdbc按照月份自动添加分表
要在Ruoyi框架中使用Sharding JDBC按照月份自动添加分表,可以按照以下步骤操作:
- 在pom.xml文件中添加Sharding JDBC的依赖:
<dependency>
<groupId>io.shardingsphere</groupId>
<artifactId>sharding-jdbc-core</artifactId>
<version>${sharding-jdbc.version}</version>
</dependency>
- 在application.yml文件中配置Sharding JDBC的数据源和分片规则:
spring:
shardingsphere:
datasource:
names: ds0
ds0:
type: com.zaxxer.hikari.HikariDataSource
driver-class-name: com.mysql.jdbc.Driver
jdbcUrl: jdbc:mysql://localhost:3306/mydb?useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8
username: root
password: root
sharding:
tables:
user:
actual-data-nodes: ds0.user_${2019..2020..1}
table-strategy:
inline:
sharding-column: create_time
algorithm-expression: user_${new java.text.SimpleDateFormat("yyyy_MM").format(new java.util.Date(Long.parseLong(String.valueOf(create_time))))}
key-generator:
type: SNOWFLAKE
column: user_id
default-database-strategy:
inline:
sharding-column: create_time
algorithm-expression: ds0.user_${new java.text.SimpleDateFormat("yyyy_MM").format(new java.util.Date(Long.parseLong(String.valueOf(create_time))))}
props:
sql.show: true
其中,actual-data-nodes表示实际的数据节点,table-strategy表示分表策略,key-generator表示主键生成策略,default-database-strategy表示默认数据库策略,props中的sql.show表示是否显示SQL语句。
- 在代码中使用Sharding JDBC查询数据:
@Autowired
private DataSource dataSource;
@Test
public void testSelect() throws SQLException {
String sql = "SELECT * FROM user WHERE create_time BETWEEN ? AND ?";
try (Connection conn = dataSource.getConnection();
PreparedStatement preparedStatement = conn.prepareStatement(sql)) {
preparedStatement.setTimestamp(1, Timestamp.valueOf("2019-01-01 00:00:00"));
preparedStatement.setTimestamp(2, Timestamp.valueOf("2019-12-31 23:59:59"));
try (ResultSet rs = preparedStatement.executeQuery()) {
while (rs.next()) {
System.out.println(rs.getLong("user_id") + "-" + rs.getString("username") + "-" + rs.getTimestamp("create_time"));
}
}
}
}
在这个例子中,我们查询2019年的用户数据,Sharding JDBC会自动路由到user_2019_xx表中查询数据。
注意,这里的create_time字段必须是时间类型,且在查询时必须使用Timestamp类型。如果要查询跨多个月份的数据,可以使用UNION ALL操作将多个查询结果合并
原文地址: https://www.cveoy.top/t/topic/dxD6 著作权归作者所有。请勿转载和采集!