https://github.com/xkcoding/magic-starter-id-demo
magic-starter-id 分布式主键生成模块集成 demo
https://github.com/xkcoding/magic-starter-id-demo
demo id magic-starter spring-boot-2 spring-boot-starter xkcoding
Last synced: 11 months ago
JSON representation
magic-starter-id 分布式主键生成模块集成 demo
- Host: GitHub
- URL: https://github.com/xkcoding/magic-starter-id-demo
- Owner: xkcoding
- Created: 2019-10-31T09:29:15.000Z (over 6 years ago)
- Default Branch: master
- Last Pushed: 2020-01-08T02:45:25.000Z (about 6 years ago)
- Last Synced: 2025-02-03T15:55:39.848Z (about 1 year ago)
- Topics: demo, id, magic-starter, spring-boot-2, spring-boot-starter, xkcoding
- Language: Java
- Homepage:
- Size: 8.79 KB
- Stars: 1
- Watchers: 3
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# magic-starter-id-demo
> 演示分布式主键生成模块的使用
## 配置
### 雪花算法
引入依赖之后,在配置文件配置 `worker-id` 和 `data-center-id`
```yaml
magic:
id:
snowflake:
worker-id: 1
data-center-id: 1
```
在代码中,直接注入即可
```java
@Autowired
private Id snowflakeId;
```
当然,也可以通过自定义 Bean 的形式配置
```java
@Bean
public Id snowflakeId() {
return SnowflakeIdFactory.create().dataCenterId(1L).workerId(1L).prefix(new DefaultPrefix("2019-")).getInstance();
}
```
### 数据库步长
在配置文件配置`表信息`、`步长`、`重试次数`、以及`起始 ID`
```yaml
magic:
id:
database:
step: 1
retry-times: 3
table-name: id_test
```
在配置类中配置
```java
@Bean
public Id databaseId2(DataSource dataSource, IdDatabaseProperties databaseProperties) {
return DatabaseIdFactory
.create()
.businessName(() -> String.format("test_db_%s", DateUtil.today()))
.prefix(() -> "2019-")
.dataSource(dataSource)
.step(databaseProperties.getStep())
.stepStart(databaseProperties.getStepStart())
.retryTimes(databaseProperties.getRetryTimes())
.tableName(databaseProperties.getTableName())
.getInstance();
}
```
### Redis 步长
在配置文件配置 `步长`、`起始 ID`
```yaml
magic:
id:
redis:
step: 1
step-start: 0
```
在配置类中配置
```java
@Bean
public Id redisId(IdRedisProperties redisProperties) {
return RedisIdFactory
.create()
.businessName(() -> String.format("test_redis_%s", DateUtil.today()))
.prefix(() -> "2019-")
.ip("localhost")
.port(6379)
.step(redisProperties.getStep())
.stepStart(redisProperties.getStepStart())
.getInstance();
}
```
## 使用
```java
@Slf4j
@RunWith(SpringRunner.class)
@SpringBootTest
public class IdTests {
@Autowired
private Id snowflakeId;
@Autowired
private Id databaseId1;
@Autowired
private Id databaseId2;
@Autowired
private Id redisId;
@Test
public void testSnowflake() {
log.info("【snowflakeId】= {}", snowflakeId.nextId());
log.info("【snowflakeId】= {}", snowflakeId.nextIdStr());
log.info("【snowflakeId】= {}", snowflakeId.nextId(new DateBusinessName()));
log.info("【snowflakeId】= {}", snowflakeId.nextIdStr(new DateBusinessName(), () -> "自定义"));
}
@Test
public void testDatabase() {
log.info("【databaseId1】= {}", databaseId1.nextId());
log.info("【databaseId1】= {}", databaseId1.nextIdStr());
log.info("【databaseId1】= {}", databaseId1.nextId(() -> "自定义模块-1"));
log.info("【databaseId1】= {}", databaseId1.nextIdStr(() -> "自定义模块-1", () -> "自定义前缀-1-"));
log.info("【databaseId2】= {}", databaseId2.nextId());
log.info("【databaseId2】= {}", databaseId2.nextIdStr());
}
@Test
public void testRedis() {
log.info("【redisId】= {}", redisId.nextId());
log.info("【redisId】= {}", redisId.nextIdStr());
log.info("【redisId】= {}", redisId.nextId(() -> "自定义模块"));
log.info("【redisId】= {}", redisId.nextIdStr(() -> "自定义模块", () -> "自定义前缀-"));
}
}
```