详解Spring Boot使用系统参数表提升系统的灵活性

目录
  • 一、使用系统参数表的好处
  • 二、系统参数表的表结构
  • 三、系统参数表在项目中的使用
    • 3.1、Entity类
    • 3.2、Dao类
    • 3.3、Service类
    • 3.4、ServiceImpl类
    • 3.5、全局配置服务类
    • 3.6、启动时加载
    • 3.7、在服务实现类中访问系统参数

一、使用系统参数表的好处

​​以数据库表形式存储的系统参数表比配置文件(.properties文件或.yaml文件)要更灵活,因为无需重启系统就可以动态更新。

​系统参数表可用于存储下列数据:

表字段枚举值,如下列字段:

`question_type`   TINYINT(4)   NOT NULL DEFAULT 0 COMMENT '题型,1-单选题,2-多选题,3-问答题',

​这个字段现在有3种取值,但是难保将来有扩展的可能,如:是非题、计算题、应用题等。

​因此将取值的枚举值用系统参数表来配置,可以提高系统扩展灵活性。

​另一方面,对于前端而言,就可以通过查询系统参数表数据,用于UI呈现,而不必硬编码。如前端需要用下拉框来显示所有可能的”题型“,这个列表就可以查询系统参数表来获取。

​因此可以将所有字段枚举值纳入系统参数表管理。

参数设置,如邮件参数,对接的第三方系统的URL等。

二、系统参数表的表结构

​系统参数表的表结构如下:

DROP TABLE IF EXISTS `sys_parameters`;
CREATE TABLE `sys_parameters`
(
  `class_id`      INT(11)      NOT NULL DEFAULT 0 COMMENT '参数大类id',
  `class_key`     VARCHAR(60)  NOT NULL DEFAULT '' COMMENT '参数大类key',
  `class_name`    VARCHAR(60)  NOT NULL DEFAULT '' COMMENT '参数大类名称',
  `item_id`       INT(11)      NOT NULL DEFAULT 0 COMMENT '参数大类下子项id',
  `item_key`      VARCHAR(200) NOT NULL DEFAULT '' COMMENT '子项key',
  `item_value`    VARCHAR(200) NOT NULL DEFAULT '' COMMENT '子项值',
  `item_desc`     VARCHAR(512) NOT NULL DEFAULT '' COMMENT '子项描述',

  -- 记录操作信息
  `login_name` VARCHAR(80)  NOT NULL DEFAULT '' COMMENT '操作人账号',
  `delete_flag`   TINYINT(4)   NOT NULL DEFAULT 0 COMMENT '记录删除标记,1-已删除',
  `create_time`   DATETIME  NOT NULL DEFAULT NOW() COMMENT '创建时间',
  `update_time`   DATETIME           DEFAULT NULL ON UPDATE NOW() COMMENT '更新时间',
  PRIMARY KEY (`class_id`, `item_id`)
) ENGINE = InnoDB DEFAULT CHARSET = utf8 COMMENT '系统参数表';

​说明:

​class_id字段只要确保一个参数大类(如一个枚举字段名)使用唯一值。使用class_key和item_key自动,便于提高记录数据和代码的可读性。class_key一般可以取字段名,但如果发生同名时,需要修改,确保不同表的同名字段,使用不同的class_key。对于枚举值类型,item_key可以取item_id相同的值,只是数据类型不同,此item_key转换成整型数,就是对应字段的值。

​这个表的数据一般可以由开发人员提供,包括初始或变动的SQL脚本,由DBA执行,项目无需为此开发界面来维护。

​下面是初始脚本示例:

INSERT INTO sys_parameters(class_id, class_key, class_name, item_id, item_key, item_value, item_desc)
VALUES (11, 'receive_flag', '短信接收标志', 0, '0', '未接收', '');
INSERT INTO sys_parameters(class_id, class_key, class_name, item_id, item_key, item_value, item_desc)
VALUES (11, 'receive_flag', '短信接收标志', 1, '1', '已接收', '');
INSERT INTO sys_parameters(class_id, class_key, class_name, item_id, item_key, item_value, item_desc)
VALUES (11, 'receive_flag', '短信接收标志', 2, '2', '发送失败', '');

INSERT INTO sys_parameters(class_id, class_key, class_name, item_id, item_key, item_value, item_desc)
VALUES (12, 'question_type', '题型', 1, '1', '单选题', '');
INSERT INTO sys_parameters(class_id, class_key, class_name, item_id, item_key, item_value, item_desc)
VALUES (12, 'question_type', '题型', 2, '2', '多选题', '');
INSERT INTO sys_parameters(class_id, class_key, class_name, item_id, item_key, item_value, item_desc)
VALUES (12, 'question_type', '题型', 3, '3', '问答题', '');

INSERT INTO sys_parameters(class_id, class_key, class_name, item_id, item_key, item_value, item_desc)
VALUES (101, 'url_param', 'URL参数', 0, 'url_prefix', 'http://questinvest.abc.com:8880', 'url前缀部分');
INSERT INTO sys_parameters(class_id, class_key, class_name, item_id, item_key, item_value, item_desc)
VALUES (101, 'url_param', 'URL参数', 1, 'url_action', '/questInvest/show', '请求接口方法');

三、系统参数表在项目中的使用

​在Spring Boot项目中,系统参数表一般只需在应用启动时加载一次,并提供更新接口允许管理员来更新数据。下面详细说明使用方法。

3.1、Entity类

​先定义系统参数表的实体类,实体类为SysParameter,代码如下:

package com.abc.questInvest.entity;

import javax.persistence.Column;

import lombok.Data;

/**
 * @className	: SysParameter
 * @description	: 系统参数信息对象类
 *
 */
@Data
public class SysParameter {
	//参数大类id
	@Column(name = "class_id")
	private Integer classId;

	//参数大类key
	@Column(name = "class_key")
	private String classKey;

	//参数大类名称
	@Column(name = "class_name")
	private String className;

	//子项id
	@Column(name = "item_id")
	private Integer itemId;	

	//子项key
	@Column(name = "item_key")
	private String itemKey;	

	//子项值
	@Column(name = "item_value")
	private String itemValue;	

	//子项描述
	@Column(name = "item_desc")
	private String itemDesc;	

	//========记录操作信息================
    // 操作人姓名
    @Column(name = "login_name")
    private String loginName;   

    // 记录删除标记,保留
    @Column(name = "delete_flag")
    private Byte deleteFlag;    

    // 创建时间
    @Column(name = "create_time")
    private Date createTime;

    // 更新时间
    @Column(name = "update_time")
    private Date updateTime;
}

3.2、Dao类

​数据访问类为SysParameterDao,代码如下:

package com.abc.questInvest.dao;

import java.util.List;

import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;

import com.abc.questInvest.entity.SysParameter;

/**
 * @className	: SysParameterDao
 * @description	: sys_parameters表数据访问类
 *
 */
@Mapper
public interface SysParameterDao {

	//查询所有系统参数,按class_id,item_id排序
	@Select("SELECT class_id,class_key,class_name,item_id,item_key,item_value,item_desc"
			+ " FROM sys_parameters WHERE delete_flag = 0"
			+ " ORDER BY class_id,item_id")
    List<SysParameter> selectAll();
}

​SysParameterDao类,使用Mybatis,只需提供查询接口就行了,因为修改在数据库后台执行了。当然如果项目方认为有必要提供界面来维护该表,则可增加相应CRUD的接口。

3.3、Service类

​服务接口类为SysParameterService,代码如下:

package com.abc.questInvest.service;

import java.util.List;

import com.abc.questInvest.entity.SysParameter;

/**
 * @className	: SysParameterService
 * @description	: 系统参数数据服务
 *
 */
public interface SysParameterService {

	/**
	 *
	 * @methodName		: loadData
	 * @description		: 加载数据库中数据,允许重复调用
	 * @return			: 成功返回true,否则返回false。
	 *
	 */
	public boolean loadData();

	/**
	 *
	 * @methodName		: getParameterClass
	 * @description		: 获取指定classKey的参数类别的子项列表
	 * @param classKey	: 参数类别key
	 * @return			: 指定classKey的参数类别的子项列表
	 *
	 */
	public List<SysParameter> getParameterClass(String classKey);

	/**
	 *
	 * @methodName		: getParameterItemByKey
	 * @description		: 根据classKey和itemKey获取参数子项
	 * @param classKey	: 参数类别key
	 * @param itemKey	: 子项key
	 * @return			: SysParameter对象
	 *
	 */
	public SysParameter getParameterItemByKey(String classKey,String itemKey);

	/**
	 *
	 * @methodName		: getParameterItemByValue
	 * @description		: 根据classKey和itemValue获取参数子项
	 * @param classKey	: 参数类别key
	 * @param itemValue	: 子项值
	 * @return			: SysParameter对象
	 *
	 */
	public SysParameter getParameterItemByValue(String classKey,String itemValue);
}

​SysParameterService类定义了下列接口方法:

  • loadData方法,用于初始加载数据和更新数据。
  • getParameterClass方法,获取指定classKey的类别的所有子项列表。此方法调用会非常频繁。
  • getParameterItemByKey方法,根据classKey和itemKey获取参数子项,用于根据枚举值显示物理含义。此方法调用会非常频繁。
  • getParameterItemByValue方法,根据classKey和itemValue获取参数子项,用于根据物理含义取得枚举值。此方法调用会非常频繁。

3.4、ServiceImpl类

​服务实现类为SysParameterServiceImpl,代码如下:

package com.abc.questInvest.service.impl;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.abc.questInvest.dao.SysParameterDao;
import com.abc.questInvest.entity.SysParameter;
import com.abc.questInvest.service.SysParameterService;

import lombok.extern.slf4j.Slf4j;

/**
 * @className	: SysParameterServiceImpl
 * @description	: SysParameterService实现类
 * @summary		: 实现对系统参数的管理
 *
 */
@Slf4j
@Service
public class SysParameterServiceImpl implements SysParameterService{
	//sys_parameters表数据访问对象
	@Autowired
	private SysParameterDao sysParameterDao;

	//管理全部的SysParameter表记录
	private Map<String,Map<String,SysParameter>> sysParameterMap = new HashMap<String,Map<String,SysParameter>>();

	/**
	 *
	 * @methodName		: loadData
	 * @description		: 加载数据库中数据
	 * @return			: 成功返回true,否则返回false。
	 *
	 */
	@Override
	public boolean loadData() {
		try
		{
			//查询sys_parameters表,获取全部数据
			List<SysParameter> sysParameterList = sysParameterDao.selectAll();

			synchronized(sysParameterMap) {
				//先清空map,便于刷新调用
				sysParameterMap.clear();
				//将查询结果放入map对象中,按每个类别组织
				for(SysParameter item : sysParameterList) {
					String classKey = item.getClassKey();
					String itemKey = item.getItemKey();
					Map<String,SysParameter> sysParameterClassMap = null;
					if (sysParameterMap.containsKey(classKey)) {
						//如果存在该类别,则获取对象
						sysParameterClassMap = sysParameterMap.get(classKey);
					}else {
						//如果不存在该类别,则创建
						sysParameterClassMap = new HashMap<String,SysParameter>();
						//加入map中
						sysParameterMap.put(classKey, sysParameterClassMap);
					}
					sysParameterClassMap.put(itemKey,item);
				}
			}
		}catch(Exception e) {
			log.error(e.getMessage());
			e.printStackTrace();
			return false;
		}
		return true;
	}

	/**
	 *
	 * @methodName		: getParameterClass
	 * @description		: 获取指定classKey的参数类别的子项列表
	 * @param classKey	: 参数类别key
	 * @return			: 指定classKey的参数类别的子项列表
	 *
	 */
	@Override
	public List<SysParameter> getParameterClass(String classKey){
		List<SysParameter> sysParameterList = new ArrayList<SysParameter>();

		//获取classKey对应的子map,将所有子项加入列表中
		if (sysParameterMap.containsKey(classKey)) {
			Map<String,SysParameter> sysParameterClassMap = sysParameterMap.get(classKey);
			for(SysParameter item : sysParameterClassMap.values()) {
				sysParameterList.add(item);
			}
		}

		return sysParameterList;
	}

	/**
	 *
	 * @methodName		: getParameterItemByKey
	 * @description		: 根据classKey和itemKey获取参数子项
	 * @param classKey	: 参数类别key
	 * @param itemKey	: 子项key
	 * @return			: SysParameter对象
	 *
	 */
	@Override
	public SysParameter getParameterItemByKey(String classKey,String itemKey) {
		SysParameter sysParameter = null;

		if (sysParameterMap.containsKey(classKey)) {
			//如果classKey存在
			Map<String,SysParameter> sysParameterClassMap = sysParameterMap.get(classKey);
			if (sysParameterClassMap.containsKey(itemKey)) {
				//如果itemKey存在
				sysParameter = sysParameterClassMap.get(itemKey);
			}
		}

		return sysParameter;
	}

	/**
	 *
	 * @methodName		: getParameterItemByValue
	 * @description		: 根据classKey和itemValue获取参数子项
	 * @param classKey	: 参数类别key
	 * @param itemValue	: 子项值
	 * @return			: SysParameter对象
	 *
	 */
	@Override
	public SysParameter getParameterItemByValue(String classKey,String itemValue) {
		SysParameter sysParameter = null;

		if (sysParameterMap.containsKey(classKey)) {
			//如果classKey存在
			Map<String,SysParameter> sysParameterClassMap = sysParameterMap.get(classKey);
			//遍历
			for (Map.Entry<String,SysParameter> item : sysParameterClassMap.entrySet()) {
				if(item.getValue().getItemValue().equals(itemValue)) {
					//如果匹配值
					sysParameter = item.getValue();
					break;
				}
			}
		}

		return sysParameter;

	}
}

​SysParameterServiceImpl类使用了Map<String,Map<String,SysParameter>>类型的属性变量sysParameterMap来管理全部的系统参数,外层Map管理classKey到Map<String,SysParameter>的映射关系,每一项为一个参数类别,而里层Map<String,SysParameter>,用于管理itemKey与SysParameter之间的映射关系,每一项为该类别下的一个子项。使用sysParameterMap属性的目的,是将所有系统参数都加载到内存中,从而无需频繁访问数据库。

​loadData方法,用于初始加载数据和更新时刷新数据,为了防止更新时脏读数据,加了同步锁。这个方法调用不频繁。

3.5、全局配置服务类

​全局配置服务类用于管理全局配置参数,包括系统参数、权限树等。如果只有一种参数,可以不必有此类,因为这样加了一层壳。

​服务接口类为GlobalConfigService,代码如下:

package com.abc.questInvest.service;

/**
 * @className	: GlobalConfigService
 * @description	: 全局变量管理类
 *
 */
public interface GlobalConfigService {

	/**
	 *
	 * @methodName		: loadData
	 * @description		: 加载数据
	 * @return			: 成功返回true,否则返回false
	 *
	 */
	public boolean loadData();

	//获取SysParameterService对象
	public SysParameterService getSysParameterService();

	//获取其它配置数据服务对象
	//public FunctionTreeService getFunctionTreeService();
}

​GlobalConfigService提供了下列接口方法:

  • loadData方法,加载配置对象数据,确定多个配置对象的加载次序。
  • getSysParameterService方法,获取系统参数服务类对象。
  • 获取其它可能的配置服务对象的方法。

​服务实现类为GlobalConfigServiceImpl,代码如下:

package com.abc.questInvest.service.impl;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.abc.questInvest.service.FunctionTreeService;
import com.abc.questInvest.service.GlobalConfigService;
import com.abc.questInvest.service.RoleFuncRightsService;
import com.abc.questInvest.service.SysParameterService;
import com.abc.questInvest.service.TableCodeConfigService;

/**
 * @className	: GlobalConfigServiceImpl
 * @description	: GlobalConfigService实现类
 *
 */
@Service
public class GlobalConfigServiceImpl implements GlobalConfigService{

	//系统参数表数据服务对象
	@Autowired
	private SysParameterService sysParameterService;

	//其它配置数据服务对象

	/**
	 *
	 * @methodName		: loadData
	 * @description		: 加载数据
	 * @return			: 成功返回true,否则返回false
	 *
	 */
	@Override
	public boolean loadData() {
		boolean bRet = false;

		//加载sys_parameters表记录
		bRet = sysParameterService.loadData();
		if (!bRet) {
			return bRet;
		}

		//加载其它配置数据

		return bRet;
	}

	//获取SysParameterService对象
	@Override
	public SysParameterService getSysParameterService() {
		return sysParameterService;
	}

	//获取其它配置数据服务对象方法

}

3.6、启动时加载

​全局配置服务类在应用启动时加载到Spring容器中,这样可实现共享,减少对数据库的访问压力。

​实现一个ApplicationListener类,代码如下:

package com.abc.questInvest;

import javax.servlet.ServletContext;
import org.springframework.context.ApplicationListener;
import org.springframework.context.event.ContextRefreshedEvent;
import org.springframework.stereotype.Component;
import org.springframework.web.context.WebApplicationContext;

import com.abc.questInvest.service.GlobalConfigService;

/**
 * @className	: ApplicationStartup
 * @description	: 应用侦听器
 *
 */
@Component
public class ApplicationStartup implements ApplicationListener<ContextRefreshedEvent>{
    //全局变量管理对象,此处不能自动注入
    private GlobalConfigService globalConfigService = null;

    @Override
    public void onApplicationEvent(ContextRefreshedEvent contextRefreshedEvent) {
        try {
    	    if(contextRefreshedEvent.getApplicationContext().getParent() == null){
    	    	//root application context 没有parent.

    	    	System.out.println("========定义全局变量==================");
    	    	// 将 ApplicationContext 转化为 WebApplicationContext
    	        WebApplicationContext webApplicationContext =
    	                (WebApplicationContext)contextRefreshedEvent.getApplicationContext();
    	        // 从 webApplicationContext 中获取  servletContext
    	        ServletContext servletContext = webApplicationContext.getServletContext();

    	        //加载全局变量管理对象
    	        globalConfigService = (GlobalConfigService)webApplicationContext.getBean(GlobalConfigService.class);
    	        //加载数据
    	        boolean bRet = globalConfigService.loadData();
    	        if (false == bRet) {
    	        	System.out.println("加载全局变量失败");
    	        	return;
    	        }
    	        //======================================================================
    	        // servletContext设置值
    	        servletContext.setAttribute("GLOBAL_CONFIG_SERVICE", globalConfigService);  

    	    }
    	} catch (Exception e) {
    	    e.printStackTrace();
    	}
    }
}

​注意,globalConfigService不能自动注入,否则得到空指针。通过下列代码来加载bean。

//加载全局变量管理对象
globalConfigService = (GlobalConfigService)webApplicationContext.getBean(GlobalConfigService.class);

​代码中,将globalConfigService对象作为全局变量加入ServletContext中,就可以实现共享了。

​在启动类中,加入该应用侦听器ApplicationStartup。

public static void main(String[] args) {
    SpringApplication springApplication = new SpringApplication(QuestInvestApplication.class);
    springApplication.addListeners(new ApplicationStartup());
    springApplication.run(args);
}

3.7、在服务实现类中访问系统参数

​HttpServletRequest类型对象request在控制器方法中可以获取,可作为参数传入服务实现类的方法中。下面是服务实现类访问系统参数的示例代码:

//获取ServletContext对象
ServletContext servletContext = request.getServletContext();
//获取全部数据服务对象
GlobalConfigService globalConfigService = (GlobalConfigService)servletContext.getAttribute("GLOBAL_CONFIG_SERVICE");
//获取系统参数url_prefix的值
String url_prefix = "";
SysParameter sysParameter = null;
sysParameter = globalConfigService.getSysParameterService().getParameterItemByKey("url_param", "url_prefix");
if (sysParameter != null) {
    url_prefix = sysParameter.getItemValue();
}

以上就是详解Spring Boot使用系统参数表提升系统的灵活性的详细内容,更多关于Spring Boot使用系统参数表提升系统的灵活性的资料请关注我们其它相关文章!

(0)

相关推荐

  • SpringBoot使用Redisson实现分布式锁(秒杀系统)

    前面讲完了Redis的分布式锁的实现,接下来讲Redisson的分布式锁的实现,一般提及到Redis的分布式锁我们更多的使用的是Redisson的分布式锁,Redis的官方也是建议我们这样去做的.Redisson点我可以直接跳转到Redisson的官方文档. 1.1.引入Maven依赖 <dependency> <groupId>org.redisson</groupId> <artifactId>redisson-spring-boot-starter&l

  • springboot集成redis实现简单秒杀系统

    本文实例为大家分享了springboot集成redis实现简单秒杀系统的具体代码,供大家参考,具体内容如下 项目是有地址的,我会放到文章的最后面 1. 直接service,我们会介绍两种秒杀模式 public interface GoodsService { /** * 通过lua脚本实现的秒杀 * @param skuCode 商品编码 * @param buyNum 购买数量 * @return 购买数量 */ Long flashSellByLuaScript(String skuCode

  • SpringBoot +Vue开发考试系统的教程

    一.考试系统简介 新鲜出炉的一款SpringBoot +Vue的考试系统,支持多种题型:选择题.多选题.判断题.填空题.综合题以及数学公式.支持在线考试,教师在线批改试卷. 二.项目架构 后端技术栈 SpringBoot: SpringBoot是由Pivotal团队提供的全新框架,其设计目的是用来简化Spring应用的创建.运行.调试.部署等. Mybatis: 一个持久层的框架,与数据库进行交互,将数据持久化到关系型数据库中 Shiro: 一个功能强大且易于使用的Java安全框架,进行身份验证

  • 详解Spring Boot使用系统参数表提升系统的灵活性

    目录 一.使用系统参数表的好处 二.系统参数表的表结构 三.系统参数表在项目中的使用 3.1.Entity类 3.2.Dao类 3.3.Service类 3.4.ServiceImpl类 3.5.全局配置服务类 3.6.启动时加载 3.7.在服务实现类中访问系统参数 一.使用系统参数表的好处 ​​以数据库表形式存储的系统参数表比配置文件(.properties文件或.yaml文件)要更灵活,因为无需重启系统就可以动态更新. ​系统参数表可用于存储下列数据: 表字段枚举值,如下列字段: `ques

  • 详解spring boot jpa整合QueryDSL来简化复杂操作

    前言 使用过spring data jpa的同学,都很清楚,对于复杂的sql查询,处理起来还是比较复杂的,而本文中的QueryDSL就是用来简化JPA操作的. Querydsl定义了一种常用的静态类型语法,用于在持久域模型数据之上进行查询.JDO和JPA是Querydsl的主要集成技术.本文旨在介绍如何使用Querydsl与JPA组合使用.JPA的Querydsl是JPQL和Criteria查询的替代方法.QueryDSL仅仅是一个通用的查询框架,专注于通过Java API构建类型安全的SQL查

  • 详解Spring Boot中使用Flyway来管理数据库版本

    如果没有读过上面内容的读者,有兴趣的可以一阅.在上面的使用JdbcTemplate一文中,主要通过spring提供的JdbcTemplate实现对用户表的增删改查操作.在实现这个例子的时候,我们事先在MySQL中创建了用户表.创建表的过程我们在实际开发系统的时候会经常使用,但是一直有一个问题存在,由于一个系统的程序版本通过git得到了很好的版本控制,而数据库结构并没有,即使我们通过Git进行了语句的版本化,那么在各个环境的数据库中如何做好版本管理呢?下面我们就通过本文来学习一下在Spring B

  • 详解Spring Boot 访问Redis的三种方式

    目录 前言 开始准备 RedisTemplate JPA Repository Cache 总结 前言 最近在极客时间上面学习丁雪丰老师的<玩转 Spring 全家桶>,其中讲到访问Redis的方式,我专门把他们抽出来,在一起对比下,体验一下三种方式开发上面的不同, 分别是这三种方式 RedisTemplate JPA Repository Cache 开始准备 开始之前我们需要有Redis安装,我们采用本机Docker运行Redis, 主要命令如下 docker pull redis doc

  • 详解spring boot starter redis配置文件

    spring-boot-starter-Redis主要是通过配置RedisConnectionFactory中的相关参数去实现连接redis service. RedisConnectionFactory是一个接口,有如下4个具体的实现类,我们通常使用的是JedisConnectionFactory. 在spring boot的配置文件中redis的基本配置如下: # Redis服务器地址 spring.redis.host=192.168.0.58 # Redis服务器连接端口 spring.

  • 实例详解Spring Boot实战之Redis缓存登录验证码

    本章简单介绍redis的配置及使用方法,本文示例代码在前面代码的基础上进行修改添加,实现了使用redis进行缓存验证码,以及校验验证码的过程. 1.添加依赖库(添加redis库,以及第三方的验证码库) <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-redis</artifactId> </dependency&

  • 详解Spring boot Admin 使用eureka监控服务

    前言 最近刚好有空,来学习一下如何搭建spring boot admin环境.其中遇到很多的坑. 网上大多都是使用admin-url的方式直接来监控的,感觉一点也不灵活,这不是我想要的结果,所以本篇介绍借助eureka服务注册和发现功能来灵活监控程序. 本文主要记录spring boot admin的搭建过程,希望能有所帮助.其实非常的简单,不要被使用常规方式的误导! 环境介绍 IDE:intellij idea jdk: java8 maven:3.3.9 spring boot:1.5.6

  • 详解spring boot rest例子

    简介:本文将帮助您使用 Spring Boot 创建简单的 REST 服务. 你将学习 什么是 REST 服务? 如何使用 Spring Initializr 引导创建 Rest 服务应用程序? 如何创建获取 REST 服务以检索学生注册的课程? 如何为学生注册课程创建 Post REST 服务? 如何利用 postman 执行 rest 服务? 本教程使用的 rest 服务 在本教程中,我们将使用适当的 URI 和 HTTP 方法创建三个服务: @GetMapping("/ students

  • 详解Spring Boot 目录文件结构

    1.目录结构 src/main/java:存放代码 src/main/resources resources:(Spring Boot 默认的)存放资源文件 static:(Spring Boot 默认的)存放静态文件,比如 css.js.image, (访问方式 http://localhost:8080/js/main.js) public:(Spring Boot 默认的)存放公共文件 templates:(用户自己定义的,可以随便取名,但这里使用公认的文件名)存放静态页面,比如 jsp.

  • 详解Spring Boot 打包分离依赖JAR 和配置文件

    1:自定义路径 <properties> <!--自定义路径--> <directory>d:/im/</directory> </properties> 2:把配置文件打包出来 <build> <plugins> <!--上线部署 JAR启动分离依赖lib和配置--> <!--打包jar--> <plugin> <groupId>org.apache.maven.plugi

随机推荐