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

一。需求:

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

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

二。结构:

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

三。知识点:

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

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

四。优点:

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

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

  1.项目结构

    

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

    注意:里面的格式为json

    

{
"appId": "",
"secret": "",
"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

转载请注明出处!

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

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

  1. DELPHI XE2 采用 JSON 的方式来序列化对象

    DELPHI XE2 采用 JSON 的方式来序列化对象 以下代码测试通过.问题是里面的中文,在反序列化后是乱码. 1. 序列化对象为字符串,Subject 里面的中文看起来正常,仍然是中文: 2.  ...

  2. springboot使用fastJson作为json解析框架

    springboot使用fastJson作为json解析框架 springboot默认自带json解析框架,默认使用jackson,如果使用fastjson,可以按照下列方式配置使用 〇.搭建spri ...

  3. 【转】SpringBoot启动服务的三种方式

    1.IDEA启动 2.命令行启动 首先将命令行位置跳转到当前项目的根目录下,再输入“mvn spring-boot:run”命令,初次操作maven需要下载插件等待几分钟 3.命令行编译为jar启动 ...

  4. SpringBoot三种配置Dubbo的方式

    *必须首先导入dubbo-starter (1).使用SpringBoot配置文件(application.properties或application.yml) dubbo.application. ...

  5. SpringBoot整合Servlet的两种方式

    SpringBoot整合Servlet有两种方式: 1.通过注解扫描完成Servlet组件的注册: 2.通过方法完成Servlet组件的注册: 现在简单记录一下两种方式的实现 1.通过注解扫描完成Se ...

  6. springboot成神之——mybatis在spring-boot中使用的几种方式

    本文介绍mybatis在spring-boot中使用的几种方式 项目结构 依赖 WebConfig DemoApplication 方式一--@Select User DemoApplication ...

  7. SpringBoot从入门到精通二(SpringBoot整合myBatis的两种方式)

    前言 通过上一章的学习,我们已经对SpringBoot有简单的入门,接下来我们深入学习一下SpringBoot,我们知道任何一个网站的数据大多数都是动态的,也就是说数据是从数据库提取出来的,而非静态数 ...

  8. SpringBoot系列-整合Mybatis(注解方式)

    目录 一.常用注解说明 二.实战 三.测试 四.注意事项 上一篇文章<SpringBoot系列-整合Mybatis(XML配置方式)>介绍了XML配置方式整合的过程,本文介绍下Spring ...

  9. SpringBoot集成MyBatis的Bean配置方式

    SpringBoot集成MyBatis的Bean配置方式 SpringBoot是一款轻量级开发的框架,简化了很多原先的xml文件配置方式,接下来就介绍一下如何不适用XML来配置Mybatis spri ...

随机推荐

  1. 以整数元素构成的list中的数字组成最小整数

    问题 把一个int型数组中的数字拼成一个串,这个串代表的数字最小. 思路说明 不同角度,对原题理解有所不同.我依照以下的理解方式求解. 对这个问题的理解: 有一个元素是int类型的list: 将上述l ...

  2. Django视图(一)

    Django视图(一) 一. 概述 作用:视图接受web请求,并相应请求 本质:视图是自定义的一个python中的函数 响应内容:正常视图,重定向视图,错误视图(404,500,400) 响应过程: ...

  3. Inno Setup 安装

    Inno Setup 安装 一.软件下载:http://www.jrsoftware.org/isdl.php#qsp 二.下载后,双击进行安装(包括inno Setup Compiler和Inno ...

  4. Mysql 用户权限管理--从 xxx command denied to user xxx

    今天遇到一个mysql 权限的问题,即标题所述  xxx command denied to user xxx,一般mysql 这种报错,基本都属于当前用户没有进行该操作的权限,需要 root 用户授 ...

  5. 8、RabbitMQ-消息的确认机制(生产者)

    RabbitMQ 之消息确认机制(事务+Confirm) https://blog.csdn.net/u013256816/article/details/55515234 概述: 在 Rabbitm ...

  6. C#获取路径问题

    由于在写控制台的时候,不能获取到绝对的路径.(下面为学习内容) System.IO.Path类中有一些获取路径的方法,可以在控制台程序或者WinForm中根据相对路径来获取绝对路径 获取web物理路径 ...

  7. Java SPI(Service Provider Interface)

    SPI 全称为 (Service Provider Interface) ,是JDK内置的一种服务提供发现机制. 目前有不少框架用它来做服务的扩展发现, 简单来说,它就是一种动态替换发现的机制, 举个 ...

  8. DataFrame概念与创建

    一 概念 Pandas是一个开源的Python数据分析库.Pandas把结构化数据分为了三类: Series,1维序列,可视作为没有column名的.只有一个column的DataFrame: Dat ...

  9. myeclipse安装SVN插件方法

    http://www.cnblogs.com/xdp-gacl/p/3497016.html myeclipse安装SVN插件方法 SVM China 源代码托管中心 http://www.svnch ...

  10. EF中的Guid主键

    除了自增长ID(int),我们还能把主键设置为GUID类型的. 创建我们的数据表 CREATE TABLE dbo.JoinA( AGUID UNIQUEIDENTIFIER PRIMARY KEY ...