/*
* Copyright (c) Huawei Technologies Co., Ltd. 2025-2025. All rights reserved.
*/
package xsequence4cj
/**
* 基于DB取步长,序列号生成器构建者
*/
public class DbSeqBuilder <: SeqBuilder {
/**
* 数据库数据源[必选]
*/
private var datasource: ?Datasource = Option<Datasource>.None
/**
* 业务名称[必选]
*/
private var bizname: String = ""
/**
* 存放序列号步长的表[可选:默认:sequence]
*/
private var tablename: String = "sequence"
/**
* 并发时数据使用了乐观策略,这个是失败重试的次数[可选:默认:100]
*/
private var retrytimes: Int32 = 100
/**
* 获取range步长[可选:默认:1000]
*/
private var steps: Int32 = 1000
/**
* 序列号分配起始值[可选:默认:0]
*/
private var stepstart: Int64 = 0
public init(){}
public func dataSource(dataSource: Datasource): DbSeqBuilder {
this.datasource = dataSource
return this
}
public func tableName(tableName: String): DbSeqBuilder {
this.tablename = tableName
return this
}
public func retryTimes(retryTimes: Int32): DbSeqBuilder {
this.retrytimes = retryTimes
return this
}
public func step(step: Int32): DbSeqBuilder {
this.steps = step
return this
}
public func bizName(bizName: String): DbSeqBuilder {
this.bizname = bizName
return this
}
public func stepStart(stepStart: Int64): DbSeqBuilder {
this.stepstart = stepStart
return this
}
public override func build(): Sequence {
//利用DB获取区间管理器
let dbSeqRangeMgr = DbSeqRangeMgr()
if(let Some(datasource) <- this.datasource) {
dbSeqRangeMgr.setDataSource(datasource)
}
dbSeqRangeMgr.setTableName(this.tablename)
dbSeqRangeMgr.setRetryTimes(this.retrytimes)
dbSeqRangeMgr.setStep(this.steps)
dbSeqRangeMgr.setStepStart(stepstart)
dbSeqRangeMgr.create()
//构建序列号生成器
let sequence = DefaultRangeSequence()
sequence.setName(this.bizname)
sequence.setSeqRangeMgr(dbSeqRangeMgr)
return sequence
}
}