問題:在一個工具類中,經過@Value來映射配置文件的值,獲得的老是nulljava
緣由:不能用new工具類的方式,應該是用容器註冊(@Autowried)的方式使用此工具類,就能獲得配置文件裏的值spring
上代碼:app
工具類:工具
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; } }
調用處:ui
@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); } }