SpringBoot-08:SpringBoot采用json的方式实现前后台通用的配置文件
------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥-------------
一。需求:
本篇博客是最近笔者做的一个项目,已经上线但是还在不断开发,有些页面上的配置,测试服务器和正式服务器的参数不同,需要经常改动,所以直接改页面肯定不合适!
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的方式实现前后台通用的配置文件的更多相关文章
- DELPHI XE2 采用 JSON 的方式来序列化对象
DELPHI XE2 采用 JSON 的方式来序列化对象 以下代码测试通过.问题是里面的中文,在反序列化后是乱码. 1. 序列化对象为字符串,Subject 里面的中文看起来正常,仍然是中文: 2. ...
- springboot使用fastJson作为json解析框架
springboot使用fastJson作为json解析框架 springboot默认自带json解析框架,默认使用jackson,如果使用fastjson,可以按照下列方式配置使用 〇.搭建spri ...
- 【转】SpringBoot启动服务的三种方式
1.IDEA启动 2.命令行启动 首先将命令行位置跳转到当前项目的根目录下,再输入“mvn spring-boot:run”命令,初次操作maven需要下载插件等待几分钟 3.命令行编译为jar启动 ...
- SpringBoot三种配置Dubbo的方式
*必须首先导入dubbo-starter (1).使用SpringBoot配置文件(application.properties或application.yml) dubbo.application. ...
- SpringBoot整合Servlet的两种方式
SpringBoot整合Servlet有两种方式: 1.通过注解扫描完成Servlet组件的注册: 2.通过方法完成Servlet组件的注册: 现在简单记录一下两种方式的实现 1.通过注解扫描完成Se ...
- springboot成神之——mybatis在spring-boot中使用的几种方式
本文介绍mybatis在spring-boot中使用的几种方式 项目结构 依赖 WebConfig DemoApplication 方式一--@Select User DemoApplication ...
- SpringBoot从入门到精通二(SpringBoot整合myBatis的两种方式)
前言 通过上一章的学习,我们已经对SpringBoot有简单的入门,接下来我们深入学习一下SpringBoot,我们知道任何一个网站的数据大多数都是动态的,也就是说数据是从数据库提取出来的,而非静态数 ...
- SpringBoot系列-整合Mybatis(注解方式)
目录 一.常用注解说明 二.实战 三.测试 四.注意事项 上一篇文章<SpringBoot系列-整合Mybatis(XML配置方式)>介绍了XML配置方式整合的过程,本文介绍下Spring ...
- SpringBoot集成MyBatis的Bean配置方式
SpringBoot集成MyBatis的Bean配置方式 SpringBoot是一款轻量级开发的框架,简化了很多原先的xml文件配置方式,接下来就介绍一下如何不适用XML来配置Mybatis spri ...
随机推荐
- Linux Min装机--配置JDK替换OpenJDK
@Linux Min装机--配置JDK替换OpenJDK 1.将下载的JDK压缩包解压到/usr/lib/jvm wil use : 一.文件复制命令cp 命令格式:cp [-adfilp ...
- 劳动节前得空半天-总结一下最近使用的LINUX命令
一.搜索文件 1.locate xxx.log 全盘搜索xxx.log文件 2.which java 查找命令 3.ll xxx.log 在目录下查找文件 二.搜索内 ...
- php数组的定义和数组的赋值
1.php执行过程 加载页面 语法检测 执行脚本 $arr=array(1,2,3); 索引数组 $arr=array("name"=>"user1", ...
- @PostConstruct与@PreDestroy讲解及实例
关于在spring 容器初始化 bean 和销毁前所做的操作定义方式有三种: 第一种:通过@PostConstruct 和 @PreDestroy 方法 实现初始化后和销毁bean之前进行的操作 第 ...
- linux mysql access denied for user ‘root’@’localhost'(using password:YES)
linux安装完mysql后,使用程序连接报以上错误解决方法,重新设置密码,步骤如下 1.先停掉原来的服务 service mysqld stop 2.使用安全模式登陆,跳过密码验证 mysqld_s ...
- System.Reflection 获取描述
我们需要获取类,属性,方法的描述.这个跟获取枚举的描述一样,需要我们通过反射来做.这还需要我们的利用System.ComponentModel:Description 的属性来完成. 新建一个类:使 ...
- 闲话缓存:ZFS 读缓存深入研究-ARC(一)
在Solaris ZFS 中实现的ARC(Adjustable Replacement Cache)读缓存淘汰算法真是很有意义的一块软件代码.它是基于IBM的Megiddo和Modha提出的ARC(A ...
- L2-006 树的遍历 (后序中序求层序)
题目: 给定一棵二叉树的后序遍历和中序遍历,请你输出其层序遍历的序列.这里假设键值都是互不相等的正整数. 输入格式: 输入第一行给出一个正整数N(≤30),是二叉树中结点的个数.第二行给出其后序遍历序 ...
- 虚拟机系统ubuntu12.04(内网环境下的虚拟主机)开启远程连接访问
一.工具准备: 1.内网虚拟机Ubuntu12.04系统主机一台,开放端口为:29999 2.远程连接软件:mobaxterm 二.开启步骤: 1.查看端口状态信息: netstat -antl | ...
- Jquery中select使用
select获取当前选中的value $('#DDLDEP').change(function () { var depId = $(this).children('option:selected') ...