zoukankan      html  css  js  c++  java
  • springboot @Value 类中读取配置文件 .properties null 原因和解决方案

    问题:在一个工具类中,通过@Value来映射配置文件的值,得到的总是null

    原因:不能用new工具类的方式,应该是用容器注册(@Autowried)的方式使用此工具类,就能得到配置文件里的值

    上代码:

    工具类:

    package com.***.***.utils;
    
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.stereotype.Component;
    import system.Decimal;
    
    import java.math.BigDecimal;
    
    @Component
    public class RoundCalculationUtil {
    
        @Value("${***.round.calculation}")
        private String calculationWay;
    
        public BigDecimal reCalculateAmount(BigDecimal amount){
            if(calculationWay.equals("currencyround")){
                return currencyRound(amount);
            }else {
                return round(amount);
            }
        }
    
        public BigDecimal round(BigDecimal amount) {
            BigDecimal result = amount.setScale(0, BigDecimal.ROUND_DOWN);
            BigDecimal lastRound2 = amount.setScale(2, BigDecimal.ROUND_DOWN).subtract(result);
            if (lastRound2.compareTo(new BigDecimal("0.50")) >= 0) {
                result = result.add(new BigDecimal("1"));
            }
    
            return result;
        }
    
        public BigDecimal currencyRound(BigDecimal amount){
            BigDecimal result = amount.setScale(2,BigDecimal.ROUND_DOWN);
            BigDecimal firstRound4=amount.setScale(4,BigDecimal.ROUND_DOWN);
            BigDecimal lastRound2=firstRound4.subtract(firstRound4.setScale(2,BigDecimal.ROUND_DOWN));
            if(lastRound2.compareTo(new BigDecimal("0.0005"))>=0){
                result=result.add(new BigDecimal("0.01"));
            }
            return result;
        }
    
    }

    调用处:

    @Autowired
        RoundCalculationUtil roundCalculationUtil;
    
        @RequestMapping(value = "/roundtest", method = RequestMethod.GET)
        public ResponseData<String> roundTest(@RequestParam(value = "amount", required = true, defaultValue = "100.1111") BigDecimal amount,
                 @RequestParam(value = "roundcalculation", required = false, defaultValue = "currencyround") String roundcalculation) {
            try {
                BigDecimal result=roundCalculationUtil.reCalculateAmount(amount);
            
                //BigDecimal result=new RoundCalculationUtil ().reCalculateAmount(amount);//will get null from .properties file
    
                DecimalFormat df = new DecimalFormat("0.00");
                return new ResponseData(NotificationMsg.SUCCESS, df.format(result));
            } catch (Exception e) {
                logger.error(e);
                return new ResponseData(NotificationMsg.FAILED, e);
            }
    
        }
  • 相关阅读:
    (文章转载)GetTextMetrics与GetTextExtent的区别
    (文章转载)
    (文章转载)在刷新窗口时经常要调用重绘函数
    (文章转载)MCI编程
    Visual C#的Excel编程
    EXCEL中合并单元格
    Excel、Exchange 和 C# (摘要)
    C# 查询一个值方法ExecuteScalar()
    如何用C#在Excel中生成图表?
    javascript 常用方法
  • 原文地址:https://www.cnblogs.com/zhengshuangliang/p/9013876.html
Copyright © 2011-2022 走看看