就是在路由配置文件中添加拦截后发现redis 实例对象化空指针问题不知道咋回事

public class Route extends Routes {
    @Override
    public void config() {
        /**
         * 后台路由配置
         */
        addInterceptor(new TokenInterceptor());
        add("/admin/auth", AuthController.class);
        add("/admin", HomeController.class);
        setBaseViewPath("/WEB-INF/views");
        add("/admin/swagger", SwaggerController.class);

    }
}
public class ManageServices {

    private final Logger logger = Logger.getLogger(ManageServices.class);
    private Admin admin=new Admin();
    private Cache platform = Redis.use("platform");
    public void setRedis(int roleId)
    {
        try {
            List<String> authorities=new ArrayList<>();
            authorities.add("oss:upload");
            List<Record> records= Db.find("select a.authority from t_menu a \n" +
                    "where id in(select menuid from t_permission where code=?)\n" +
                    "and a.authority is not null",roleId);

            for (Record r:records)
            {
                authorities.add(r.getStr("authority"));
            }
            System.out.println(JSONObject.toJSON(authorities));
            System.out.println(platform.exists("permission:"+roleId));
            //platform出现空指针错误
            platform.set("permission:"+roleId,JSONObject.toJSON(authorities));
        }catch (Exception e)
        {
            System.out.println(e);
        }


    }
    

}

好像在路由配置中添加拦截器后

private Cache platform = Redis.use("platform");//无法实例化但在每个方法体内 platform = Redis.use("platform"); 正常,总不能每次创建都做实例化吧


评论区

杜福忠

2019-07-11 20:51

Redis 是在插件configPlugin(..)启动时启动的, 而 configRoute(..)在第2个就启动了.
configConstant(Constants me){me.setConfigPluginOrder(1); 就可以了

杜福忠

2019-07-11 20:54

或者应该把成员变量 private Cache platform = Redis.use("platform"); 放在下面成为33行 为局部变量, Redis.use("platform").xx几乎没啥取值成本的

qin

2019-07-12 09:57