• 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);
            }
    
        }
  • 相关阅读:
    BEC listen and translation exercise 44
    中译英12
    BEC listen and translation exercise 43
    中译英11
    BEC listen and translation exercise 42
    中译英10
    BEC listen and translation exercise 41
    中译英9
    BEC listen and translation exercise 40
    中译英8
  • 原文地址:https://www.cnblogs.com/zhengshuangliang/p/9013876.html
Copyright © 2020-2023  润新知