如何优雅的写随机数(java)-实战

Posted 栗子~~

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何优雅的写随机数(java)-实战相关的知识,希望对你有一定的参考价值。

前言

  如果您觉得有用的话,记得给博主点个赞,评论,收藏一键三连啊,写作不易啊^ _ ^。
  而且听说点赞的人每天的运气都不会太差,实在白嫖的话,那欢迎常来啊!!!


如何优雅的写随机数(java)-实战

废话不多说,让我们荡起来!!!

01 前戏

配置:

com:
  blog:
    value: ${random.value}  #随机字符串
    number: ${random.int}  # 随机int
    bignumber: ${random.long} #随机long
    number1: ${random.int(10)} # 10以内的随机数
    number2: ${random.int[10,20]} #10~20 的随机数

/**
 * 随机数
 * */
@Component
@ConfigurationProperties(prefix = "com.blog", ignoreUnknownFields = true)
public class RanDowUtil {
    //随机数
    @Value("1")
    private String value;
    //随机int
    @Value("0")
    private String number;

    //随机 long
    @Value("0")
    private  String bignumber;

    //10以内的随机数
    @Value("0")
    private String number1;

    // 10 ~ 20以内的随机数
    @Value("10")
    private String number2;


    //===========================================================================

    public String getValue() {
        return value;
    }

    public void setValue(String value) {
        this.value = value;
    }

    public String getNumber() {
        return number;
    }

    public void setNumber(String number) {
        this.number = number;
    }

    public String getBignumber() {
        return bignumber;
    }

    public void setBignumber(String bignumber) {
        this.bignumber = bignumber;
    }

    public String getNumber1() {
        return number1;
    }

    public void setNumber1(String number1) {
        this.number1 = number1;
    }

    public String getNumber2() {
        return number2;
    }

    public void setNumber2(String number2) {
        this.number2 = number2;
    }
}

02 中戏


public interface BaseLogInterface {
    /**
     * 返回时间日志
     * */
    void endLog(String msg,long startTime);
    /**
     * 返回时间错误日志
     * */
    void endLogError(String msg,long startTime,Throwable e);
    /**
     * 返回开始时间
     * */
    long startLog(String msgKey,String msgValue);

    long init(String name,String param);
    void error(String mag);
    void info(String msg);
}

/**
 * @author yangzhenyu
 * 日志模板
 * */
public abstract  class BaseLog implements BaseLogInterface{
    private static Logger log = LoggerFactory.getLogger(BaseLog.class);
    private ReentrantLock lock = new ReentrantLock();
    private String clazz;

    public void setClazz(String clazz) {
        this.clazz = clazz;
    }

    /**
     * 打印错误日志
     * */
    public void error(String msg){
        try{
            lock.lock();
            log.error(msg);
        }finally {
            lock.unlock();
        }
    }
    /**
     * 打印普通日志
     * */
    public void info(String msg){
        try{
            lock.lock();
              log.info(msg);
        }finally {
            lock.unlock();
        }
    }
    /**
     * 返回时间日志
     * */
    public final void endLog(String msg,long startTime){
        try{
            lock.lock();
            long endTime = System.currentTimeMillis();
            log.info("<======执行源:【{}】==> {}执行结束,耗时:{}秒 =======>",clazz,msg,((endTime-startTime)/1000));
        }finally {
            lock.unlock();
        }

    }
    /**
     * 返回时间错误日志
     * */
    public final void endLogError(String msg,long startTime,Throwable e){
        try{
            lock.lock();
            long endTime = System.currentTimeMillis();
            log.error(String.format("<======执行源:【%s】==> %s执行结束,耗时:%s秒 =======>",clazz,msg,((endTime-startTime)/1000)),e);
        }finally {
            lock.unlock();
        }

    }
    /**
     * 返回开始时间
     * */
    public final long startLog(String msgKey,String param){
        try{
            lock.lock();
            log.info("<======执行源:【{}】==>方法[{}}]开始执行  =======>",clazz,msgKey);
            log.info("<======参数:【{}】  =======>",param);
            return System.currentTimeMillis();
        }finally {
            lock.unlock();
        }
    }
}


@Api(value = "常量测试类", tags = {"常量测试类"})
@RestController
@RequestMapping(value="/api/util")
public class UtilController extends BaseLog {
    @Override
    public long init(String name, String param) {
        this.setClazz("UtilController");
        return startLog(name,param);
    }
    @Autowired
    private RanDowUtil ranDowUtil;

    @ApiOperation(value = "随机数类测试")
    @CrossOrigin(origins = "*")
    @GetMapping("/ranDow")
    public ResponseBo hello() {
        String msgValue = "lock";
        long startTime = init(msgValue, "");
        try{
            info(String.format("随机字符串:%s,随机int:%s,随机long:%s",ranDowUtil.getValue(),ranDowUtil.getNumber(),ranDowUtil.getBignumber()));
            info(String.format("10以内的随机数:%s,10~20以内的随机数:%s",ranDowUtil.getNumber1(),ranDowUtil.getNumber2()));
            endLog(msgValue,startTime);
        }catch (Exception e){
            endLogError(msgValue,startTime,e);
            return ResponseBo.error("失败" + e.getMessage());
        }
        return ResponseBo.ok();
    }
}

03 杀青

调用测试类:
在这里插入图片描述
结果:
在这里插入图片描述
测试成功!!!

以上是关于如何优雅的写随机数(java)-实战的主要内容,如果未能解决你的问题,请参考以下文章

Springboot中如何优雅的写好controller层代码

如何优雅的写单元测试?

如何优雅的写单元测试?

如何优雅的写 Controller 层代码?

python基础===如何优雅的写代码(转自网络)

如何优雅的写UI——选项卡美化