代码编写时多重覆盖配置文件的方法

2019-09-28  本文已影响0人  不二不二熊

一、起源

很多时候,当我们在封装自己的框架的时候,一般都是会给使用者预留配置,这个时候配置文件就起作用了。一般而言我们在预留配置文件的时候都是采取三层覆盖的方式,即application配置文件覆盖实体类默认属性,用户配置覆盖application配置文件。

二、展示

public enum LoginType {
    /**
     * 返回视图
     */
    REDIRECT,
    /**
     * 返回json
     */
    JSON;

    LoginType() {
    }

}
@ConfigurationProperties(prefix = "customer.setting")
@Data
public class SettingProperties {
    /**
     * 默认返回json
     */
    private LoginType loginType = LoginType.JSON;
}
##用户自定义跳转方式
customer.setting.loginType=redirect

如上面所展示的,如果用户没有配置loginType那么默认会使用json方式跳转,如果配置成了redirect那么则会变为视图跳转,这是很常见的。

@ConfigurationProperties(prefix = "com.imoc")
@Data
@Configuration
public class UserConfigition {
    private MyUser user;
}
@Data
public class MyUser  {
    /**
     * 用户自定义id
     */
    private int id;
}
##自定义userid
com.imoc.user.id = 15
@RestController
@RequestMapping("/servlet")
public class ParmeatTest {
    @Autowired
    private UserConfigition userConfigition;
    /**
     * <一句话功能描述>:获取传入参数,如果没有的话则使用默认值
     * <功能详细描述>:
     * @Param:
     * @Return: int
     */
    @GetMapping("/parameterTest")
    public int getUesrId(){
        //从RequestContextHolder中获取request
        HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
        //从request中获取参数userId
        int userId = ServletRequestUtils.getIntParameter(request, "userId", userConfigition.getUser().getId());
        return userId;
    }

当我们发起请求(http://localhost:8080/servlet/parameterTest?userId=27)时,如果我们后面不带参数userId,那么返回的就是我们在配置文件时定义的值;如果我们携带了参数userId,那么我们userId的值就将变成27而非15,从而提高了可配置性。

上一篇下一篇

猜你喜欢

热点阅读