开发者社区> 晨曦dawn> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

SpringBoot-08:SpringBoot采用json的方式实现前后台通用的配置文件

简介: ------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥-------------     一。需求:   本篇博客是最近笔者做的一个项目,已经上线但是还在不断开发,有些页面上的配置,测试服务器和正式服务器的参数不同,需要经常改动,所以直接改页面肯定不合适!   so;产品经理提出一个需求,需要只建一个配置文件,存储正式服务器和测试服务器的配置,要求前后台通用,读取方便,修改方便 二。
+关注继续查看


------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥-------------

 

 

一。需求

  本篇博客是最近笔者做的一个项目,已经上线但是还在不断开发,有些页面上的配置,测试服务器和正式服务器的参数不同,需要经常改动,所以直接改页面肯定不合适!

  so;产品经理提出一个需求,需要只建一个配置文件存储正式服务器和测试服务器的配置要求前后台通用读取方便修改方便

二。结构

  采用.json文件实现前后台通用读取

三。知识点

  前后台不同的.json静态文件读取,解析方式

  编写能让springboot识别到自定义静态资源的路径插件

四。优点

  比.js.properties文件,以及多次请求后台的静态.class文件要优良一些,无论从性能还是被浏览器缓存Gank的因素来讲,这个.json的方式确实优良

五。方案思路以及最后解决

  1.项目结构

    

  2.创建.json文件---->TheServerURL.json

    注意:里面的格式为json

    

 

  { "appId": "123456", "secret": "123456789123", "url61": "http://192.168.1.1", "urlhead": "baidu.com", "urlinit": "www.hao123.com", "urlman": "mi.com", "justChangeThisURL":"https://www.cnblogs.com/DawnCHENXI/" }

 

  3.给springboot注册插件ApplicationConfig,让他识别到放置于resource下的静态资源(.json放在此处是因为修改方便,打成war包之后,它很好找)

 

复制代码
package com.xy.config;

import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;

//这个注解需要启动类去设置一下,否者不会识别
@Configuration
public class ApplicationConfig extends WebMvcConfigurerAdapter {

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        /**
         * 如果我们将/xxxx/** 修改为 /** 与默认的相同时,则会覆盖系统的配置,可以多次使用 addResourceLocations 添加目录,
         * 优先级先添加的高于后添加的。
         *
         * 如果是/xxxx/** 引用静态资源 加不加/xxxx/ 均可,因为系统默认配置(/**)也会作用
         * 如果是/** 会覆盖默认配置,应用addResourceLocations添加所有会用到的静态资源地址,系统默认不会再起作用
         */
        registry.addResourceHandler("/**")
                .addResourceLocations("classpath:/META-INF/resources/")
                .addResourceLocations("classpath:/resources/")
                .addResourceLocations("classpath:/static/")
                .addResourceLocations("classpath:/public/")
                .addResourceLocations("classpath:/");
        registry.addResourceHandler("classpath:/mybatis/**");
        super.addResourceHandlers(registry);
    }
}
复制代码

 

  4.前台页面的使用方式(需要jquery支持)

    

 

 

  function test() { var dataroot="/TheServerURL.json";//json文件路径 var urlTemp; var appid; $.getJSON(dataroot, function(data) { urlTemp = "http://"+data.justChangeThisURL+"/teacher100/skip/login" appid=data.appId var path = "https://open.weixin.qq.com/connect/oauth2/authorize?appid="+appid+"&redirect_uri=" + urlTemp + "&response_type=code&scope=snsapi_userinfo&state=123#wechat_redirect"; window.location.href = path; }); }

 

  5.后端构建个工具类,用来承载前端传回来的值(TheServerURL )

 

复制代码
package com.xy.model;

public class TheServerURL {
    //测试服务器
    
    public static String urlhead="";
    public static String urlinit="";
    public static String urlman="";

    public static String appId="";
    public static String secret="";
    
    public static String url61 = "";

    public static  String justChangeThisURL="";         
    



    public static String getJustChangeThisURL() {
        return justChangeThisURL;
    }

    public static void setJustChangeThisURL(String justChangeThisURL) {
        TheServerURL.justChangeThisURL = justChangeThisURL;
    }

    public static String getUrlhead() {
        return urlhead;
    }

    public static void setUrlhead(String urlhead) {
        TheServerURL.urlhead = urlhead;
    }

    public static String getUrlinit() {
        return urlinit;
    }

    public static void setUrlinit(String urlinit) {
        TheServerURL.urlinit = urlinit;
    }

    public static String getUrlman() {
        return urlman;
    }

    public static void setUrlman(String urlman) {
        TheServerURL.urlman = urlman;
    }

    public static String getAppId() {
        return appId;
    }

    public static void setAppId(String appId) {
        TheServerURL.appId = appId;
    }

    public static String getSecret() {
        return secret;
    }

    public static void setSecret(String secret) {
        TheServerURL.secret = secret;
    }

    public static String getUrl61() {
        return url61;
    }

    public static void setUrl61(String url61) {
        TheServerURL.url61 = url61;
    }



}
复制代码

 

  6.注册插件,在启动项目的时候读取配置(这个可以之后再去拓展,或者再写接口,实时刷新)

 

复制代码
package com.xy.config;

import com.alibaba.fastjson.JSON;
import com.xy.model.TheServerURL;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.ClassPathResource;

import java.io.*;
import java.util.HashMap;

@Configuration
public class TheURLLoadBean {
    public TheURLLoadBean(){
        try {
            //读取到静态资源文件
            org.springframework.core.io.Resource resource = new ClassPathResource("TheServerURL.json");
            File file = null;
            file = resource.getFile();
            //使用io读出数据
            BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(file)));
            String str = null;
            StringBuilder all=new StringBuilder();
            while((str = br.readLine()) != null){
                all.append(str);
            }
            if(all!=null){
                //采用阿里的fastjson解析这个json
                HashMap hashMap=JSON.parseObject(all.toString(),HashMap.class);
                //装配给这个工具类的静态字段
                TheServerURL.urlhead=(String) hashMap.get("urlhead");
                TheServerURL.urlinit=(String) hashMap.get("urlinit");
                TheServerURL.urlman=(String) hashMap.get("urlman");
                TheServerURL.appId=(String) hashMap.get("appId");
                TheServerURL.secret=(String) hashMap.get("secret");
                TheServerURL.url61=(String) hashMap.get("url61");
                TheServerURL.justChangeThisURL=(String) hashMap.get("justChangeThisURL");
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
复制代码

 

  7.后端使用配置文件的参数直接用这个    工具类类名 . 静态字段名     )就可以调用到

 

TheServerURL.appId

 

 

笔者:晨曦Dawn

转载请注明出处!

如果有错误或疑惑,请您指出,互相探讨互相学习,感激不尽!!!!!!!!!!!!

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
Python:数据提取之JSON与JsonPATH
Python:数据提取之JSON与JsonPATH
82 0
【TP5】关于双表联查时json的条件没有对应上时不显示数据
【TP5】关于双表联查时json的条件没有对应上时不显示数据
24 0
【Java】SpringBoot 引入fastjson库进行json格式数据返回实例
fastjson fastjson是阿里巴巴开源的json操作库,功能强大,使用方便。 https://github.com/alibaba/fastjson 放入pom.
2179 0
HttpClient获取并解析JSON数据
package com.example.testjsonandget; import java.io.BufferedReader; import java.
1089 0
从网络获取JSON格式数据
public JSONObject getJson() { JSONObject resultJson = null; if ("".
681 0
+关注
晨曦dawn
谦卑若愚,好学若饥,吾异无他,唯手熟尔! 一个不断追求完美的少年--晨曦Dawn
文章
问答
文章排行榜
最热
最新
相关电子书
更多
Java Spring Boot开发实战系列课程【第15讲】:Spring Boot 2.0 API与Spring REST Docs实战
立即下载
Spring框架入门
立即下载
Spring Boot 2.5开发实战
立即下载