• java中生成流水号的一个例子(使用BerkeleyDB)


    package com.jiaoyiping.berkeleydb;
    
    import com.sleepycat.je.*;
    import com.sleepycat.utilint.StringUtils;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    
    import java.io.UnsupportedEncodingException;
    
    /**
     * Created with IntelliJ IDEA.
     * User: 焦一平
     * Date: 14-7-9
     * Time: 下午1:27
     * To change this template use File | Settings | File Templates.
     * 1.直接存key和value
     * 2.存储key和value组合成的对象(未使用)
     */
    public class SerialNumberGenerator {
        Logger logger = LoggerFactory.getLogger(SerialNumberGenerator.class);
        private static int MAX_VALUE = 9999;
        private static int MIN_VALUE = 1;
    
        /**
         * 对于任何的请求,总是先取出当前的值返回,然后再将数据库里的值加一
         * @param key 业务主键
         * @return 当前值
         */
        public String getNextValue(String key){
            String currentValue = this.readCurrentValueFromDatabase(key);
            String result;
            if (currentValue == null || "".equals(currentValue)){
                result = this.formatString(MIN_VALUE);
                this.instrtIntoDataBase(key,(MIN_VALUE+1)+"");
                BerkeleyDBUtil.getDatabase().getEnvironment().sync();
    
            }
            else{
                int intCurrentValue = Integer.parseInt(currentValue);
                result = this.formatString(intCurrentValue);
    
                //存储下一个值
                String nextValue = "";
                if (intCurrentValue == MAX_VALUE){
                    nextValue = MIN_VALUE+"";
                }else {
                    nextValue = (intCurrentValue+1) +"";
                }
                this.instrtIntoDataBase(key,nextValue);
                BerkeleyDBUtil.getDatabase().getEnvironment().sync();
    
            }
    
            return result;
        }
        public String readCurrentValueFromDatabase(String key){
            DatabaseEntry theKey = new DatabaseEntry(StringUtils.toUTF8(key));
            DatabaseEntry theValue = new DatabaseEntry();
            TransactionConfig txnConfig = new TransactionConfig();
            txnConfig.setSerializableIsolationVoid(true);
            Database database = BerkeleyDBUtil.getDatabase();
            //Transaction txn = database.getEnvironment().beginTransaction(null,txnConfig);
            OperationStatus status = database.get(null,theKey,theValue,LockMode.DEFAULT);
            //对应的键不存在
            if (status == OperationStatus.KEYEMPTY){
                return null;
            }
            else if (status == OperationStatus.SUCCESS){
                byte[] data = theValue.getData();
                String result;
                try {
                    result = new String(data,"UTF-8");
                } catch (UnsupportedEncodingException e) {
                    e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.
                    result = "";
                }
                return result;
            }
    
    
            return null;
        }
    
        public void instrtIntoDataBase(String key,String value){
            DatabaseEntry theKey = new DatabaseEntry(StringUtils.toUTF8(key));
            DatabaseEntry theValue = new DatabaseEntry(StringUtils.toUTF8(value));
            TransactionConfig txnConfig = new TransactionConfig();
            txnConfig.setSerializableIsolationVoid(true);
            Database database = BerkeleyDBUtil.getDatabase();
            //Transaction txn = database.getEnvironment().beginTransaction(null,txnConfig);
            OperationStatus status = database.put(null,theKey,theValue);
            if (status == OperationStatus.SUCCESS){
                logger.info("保存成功");
            }
    //        else if (status == OperationStatus.KEYEXIST){
    //            logger.info("");
    //        }
    
    
        }
    
        public String formatString(int input){
            String result = "";
            if(input > 1000){
              result = input +"";
            }else{
                int length = (input+"").length();
                if (length == 1){
                    result = "000"+input;
                }
                else if (length == 2){
                    result = "00"+input;
                }else {
                    result = "0"+input;
                }
            }
            return result;
        }
    
        public static void main(String[] args) {
            SerialNumberGenerator generator = new SerialNumberGenerator();
            String result = generator.getNextValue("jiao");
            System.out.println("======"+result+"======");
        }
    }
  • 相关阅读:
    论文翻译:2020_DARCN_A Recursive Network with Dynamic Attention for Monaural Speech Enhancement
    论文翻译:2020_demucs_Real Time Speech Enhancement in the Waveform Domain
    论文翻译:2021_A Perceptually Motivated Approach for Lowcomplexity, Realtime Enhancement of Fullband Speech
    tomcat架构分析及配置详解
    深入了解SpringMVC源码解析
    Spring MVC高级应用
    Nginx应用场景配置
    SpringSecurity基础场景应用大全
    SpringBoot基础应用
    Spring MVC应用
  • 原文地址:https://www.cnblogs.com/jiaoyiping/p/3833551.html
Copyright © 2020-2023  润新知