# sequence
**Repository Path**: j0urn3y/sequence
## Basic Information
- **Project Name**: sequence
- **Description**: 通用sequence生成器
- **Primary Language**: Java
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2021-02-08
- **Last Updated**: 2021-02-08
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# 通用sequence生成器
## 样例
PAY-ORDER-20191101-00000001
PAY-ORDER-20191101-00000002
PAY-ORDER-20191101-00000003
PAY-ORDER-20191101-00000004
PAY-ORDER-20191101-00000005
PAY-ORDER-20191101-00000006
PAY-ORDER-20191101-00000007
PAY-ORDER-20191101-00000008
PAY-ORDER-20191101-00000009
PAY-ORDER-20191101-00000010
## 用户手册
| 配置项目 |
语法 |
说明 |
| 表达式 |
s:字符串 nf:数字格式,参见数字格式定义###00000 df:日期,参见日期格式定义 |
sequence表达式 |
| 生成器数据源 |
LONG:虚拟机生成器 REDIS:REDIS DB:数据库生成器 自定义:自定义生成器,参见customSource
|
|
| 重置模式 |
DAY:按日重置 WEEK:按周重置 MONTH:...... YEAR:...... RING:环形重置,参见MAX NONE:不重置 |
|
| STEP |
数字:默认1 |
|
| 最小值 |
数字:默认0 |
|
| 最大值 |
数字:默认Long.MAX |
|
| customSource |
自定义生成器 |
|
## 例子
//配置sequence规则,这是一个最大10的环形重置sequencce
SequenceRule ring1 = new SequenceRule(sequencesService,"ring");
ring1.s("PAY-ORDER-").df("yyyyMMdd-").nf("00000000",
Source.Config.builder().cycle(Source.Cycle.RING).max(10L).build()
);
sequencesService.register(ring1);
//生成sequence
for (int i = 0; i < 12; i++) {
System.out.println(sequencesService.nextVal("ring"));
}
PAY-ORDER-20191101-00000001
PAY-ORDER-20191101-00000002
PAY-ORDER-20191101-00000003
PAY-ORDER-20191101-00000004
PAY-ORDER-20191101-00000005
PAY-ORDER-20191101-00000006
PAY-ORDER-20191101-00000007
PAY-ORDER-20191101-00000008
PAY-ORDER-20191101-00000009
PAY-ORDER-20191101-00000010
PAY-ORDER-20191101-00000001
PAY-ORDER-20191101-00000002
// 按日重置的
SequenceRule day = new SequenceRule(sequencesService,"day");
day.s("DAY-").df("yyyyMMdd-").nf("######",
Source.Config.builder().cycle(Source.Cycle.DAY).build()
);
sequencesService.register(day);
DAY-20191101-1
DAY-20191101-2
DAY-20191101-3
DAY-20191101-4
DAY-20191101-5
DAY-20191101-6
DAY-20191101-7
DAY-20191101-8
DAY-20191101-9
DAY-20191101-10
DAY-20191101-11
DAY-20191101-12
DAY-20191101-13
DAY-20191101-14
DAY-20191101-15
DAY-20191101-16
DAY-20191101-17
DAY-20191101-18
DAY-20191101-19
DAY-20191101-20
DAY-20191101-21
DAY-20191101-22
DAY-20191101-23
DAY-20191101-24
DAY-20191101-25
DAY-20191101-26
DAY-20191101-27
DAY-20191101-28
DAY-20191101-29
DAY-20191101-30
DAY-20191101-31
DAY-20191101-32
DAY-20191101-33
DAY-20191101-34
DAY-20191101-35
DAY-20191101-36
DAY-20191101-37
DAY-20191101-38
DAY-20191101-39
DAY-20191101-40
DAY-20191101-41
DAY-20191101-42
DAY-20191101-43
DAY-20191101-44
DAY-20191101-45
DAY-20191101-46
DAY-20191101-47
DAY-20191101-48
DAY-20191101-49
DAY-20191101-50
DAY-20191101-51
DAY-20191101-52
DAY-20191101-53
DAY-20191101-54
DAY-20191101-55
DAY-20191101-56
DAY-20191101-57
DAY-20191101-58
DAY-20191101-59
DAY-20191101-60
DAY-20191101-61
DAY-20191101-62
DAY-20191101-63
DAY-20191101-64
DAY-20191101-65
DAY-20191101-66
DAY-20191101-67
DAY-20191101-68
DAY-20191101-69
DAY-20191101-70
DAY-20191101-71
DAY-20191101-72
DAY-20191101-73
DAY-20191101-74
DAY-20191101-75
DAY-20191101-76
DAY-20191101-77
DAY-20191101-78
DAY-20191101-79.。。。。。。
## 扩展
#### sequence 源扩展
- 继承Source接口
- 在spring中定义bean
- 使用
```java
@Service("drdsSequenceSource")
public class DrdsSequenceSource implements Source {
JdbcTemplate jdbcTemplate;
public DrdsSequenceSource(JdbcTemplate jdbcTemplate) {
this.jdbcTemplate = jdbcTemplate;
}
@Override
public Long increBy(Config sc) {
String sql = "SELECT " + sc.sequenceName + ".nextval FROM dual WHERE count = ? ";
return Long.parseLong(Collections.max(jdbcTemplate.queryForList(sql, new Object[] { sc.step }, String.class)));
}
@Override
public void reset(Config sc) {
}
@Override
public Type type() {
return Type.DRDS;
}
public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
this.jdbcTemplate = jdbcTemplate;
}
}
```
使用
```java
// 00000000-00000004 循环
SequenceRule ring1 = new SequenceRule(sequencesService,"ring");
ring1.s("PAY-ORDER-").df("yyyyMMdd-").nf("00000000",
Source.Config.builder().customSource("drdsSequenceSource").max(10L).build()
);
sequencesService.register(ring1);
```