All Downloads are FREE. Search and download functionalities are using the official Maven repository.

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