
com.taotao.boot.idgenerator.jdbc.MySQLMaxValueIncrementerConfiguration Maven / Gradle / Ivy
package com.taotao.boot.idgenerator.jdbc;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.jdbc.support.incrementer.MySQLMaxValueIncrementer;
import javax.sql.DataSource;
/**
* DataFieldMaxValueIncrementer 是 spring-jdbc 项目中的一个接口。用于在应用中生成连续、自增的序列。可用于 「主键ID」、「订单号」、「流水号」 等等
*基于数据库实现
*
* AbstractSequenceMaxValueIncrementer:用于支持序列(SEQUENCE)的数据库(如 Oracle),使用标准的数据库序列。
* AbstractColumnMaxValueIncrementer:用于不支持序列的数据库(如,MYSQL),使用一张表来模拟。
*
* nextIntValue:以 int 类型返回下一个序列。
* nextLongValue:以 long 类型返回下一个序列。
* nextStringValue:以 String 类型返回下一个序列。
*/
@Configuration
public class MySQLMaxValueIncrementerConfiguration {
/**
* CREATE TABLE `t_sequence` (
* `val` bigint unsigned NOT NULL,
* PRIMARY KEY (`val`)
* ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
*
* INSERT INTO `t_sequence`
* (val)
* VALUES(0);
*
* @param dataSource
* @return
*/
@Bean
public MySQLMaxValueIncrementer mySQLMaxValueIncrementer(DataSource dataSource) {
MySQLMaxValueIncrementer mySQLMaxValueIncrementer = new MySQLMaxValueIncrementer();
/**
* 数据源
*/
mySQLMaxValueIncrementer.setDataSource(dataSource);
/**
* 维护序列的表名
*/
mySQLMaxValueIncrementer.setIncrementerName("T_SEQUENCE");
/**
* 序列表中的列名称
*/
mySQLMaxValueIncrementer.setColumnName("val");
/**
* 字符串结果的填充长度,不足长度会在前面填充0,默认为 0
*/
mySQLMaxValueIncrementer.setPaddingLength(10);
/**
* 是否每次获取序列都是使用新的数据库连接,默认为true
*/
mySQLMaxValueIncrementer.setUseNewConnection(false);
/**
* 设置缓存序列的个数,当内存中的序列用完后,会将一次性生成 cacheSize 个序列缓存到内存。
*/
mySQLMaxValueIncrementer.setCacheSize(1);
return mySQLMaxValueIncrementer;
}
// // 注入 DataFieldMaxValueIncrementer
// @Autowired
// DataFieldMaxValueIncrementer dataFieldMaxValueIncrementer;
//
// @Test
// public void test() throws Exception {
//
// int intVal = this.dataFieldMaxValueIncrementer.nextIntValue();
// long longVal = this.dataFieldMaxValueIncrementer.nextLongValue();
// String stringVal = this.dataFieldMaxValueIncrementer.nextStringValue();
//
// log.info("next = {}", intVal);
// log.info("next = {}", longVal);
// log.info("next = {}", stringVal);
// }
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy