springmvc启动时从数据库中初始化系统常量

硅谷探秘者 4778 0 0

springmvc启动时从数据库中初始化系统常量


        设计的目标是,把项目的系统常量配置,放在数据库中,在项目初始化时从项目中获取配置信息,利用反射技术,把key-value对应的值自动封装进配置类。


1.例:数据库中的字段与实体类中的key对应,实现自动封装

QQ截图20190304143830.png


QQ截图20190304143903.png

2.实体类:

package club.jiajiajia.resume.common.entity;

public class KeyValue {
	private Integer id;
	private String key;
	private String value;
	public Integer getId() {
		return id;
	}
	public void setId(Integer id) {
		this.id = id;
	}
	public String getKey() {
		return key;
	}
	public void setKey(String key) {
		this.key = key;
	}
	public String getValue() {
		return value;
	}
	public void setValue(String value) {
		this.value = value;
	}
}	

3.系统配置类:

package club.jiajiajia.resume.common.util;
/**
 *系统常量配置 
 */
public class SystemConstants {

	private static String path;//项目路径

	private static String photo_url;//头像url路径
	
	private static int id;//int 类型id
	
	private static Integer num;//Integer 类型num
	
	public static String getPath() {
		return path;
	}

	public static String getPhoto_url() {
		return photo_url;
	}

	public static Integer getId() {
		return id;
	}

	public static Integer getNum() {
		return num;
	}
}

4.项目启动时执行controller,利用反射技术实现自动封装

package club.jiajiajia.resume.common.controller;

import java.lang.reflect.Field;
import java.util.List;

import javax.servlet.ServletContext;

import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.context.ServletContextAware;

import club.jiajiajia.resume.common.dao.SystemMapper;
import club.jiajiajia.resume.common.entity.KeyValue;
import club.jiajiajia.resume.common.util.SystemConstants;
/**
 * 从数据库中初始化参数
 * @author Administrator
 */
public class SystemController implements InitializingBean, ServletContextAware {
    
	@Autowired
	private SystemMapper systemMapper;
	
	/***
	 * 系统配置自动化封装
	 */
    @Override
    public void setServletContext(ServletContext arg0){
    	List<KeyValue> sys=systemMapper.system();
    	Class<?> c=SystemConstants.class;
    	Field f=null;
    	for(KeyValue kv:sys){
    		if(kv.getValue()!=null&&!"".equals(kv.getValue())){
				try {
					f=c.getDeclaredField(kv.getKey());
					f.setAccessible(true);
					if(f.getType()==int.class||f.getType()==Integer.class){
						f.set(SystemConstants.class,new Integer(kv.getValue()));
					}else if(f.getType()==String.class){
						f.set(SystemConstants.class,kv.getValue());
					}
				} catch (NoSuchFieldException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				} catch (SecurityException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				} catch (NumberFormatException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				} catch (IllegalArgumentException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				} catch (IllegalAccessException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
    		}
    	}
    }
    @Override
    public void afterPropertiesSet() throws Exception {
        // TODO Auto-generated method stub
    }
}

5.访问数据库:

package club.jiajiajia.resume.common.dao;

import java.util.List;

import club.jiajiajia.resume.common.entity.KeyValue;

public interface SystemMapper {
	public List<KeyValue> system();
}
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="club.jiajiajia.resume.common.dao.SystemMapper" >
  <select id="system" resultType="club.jiajiajia.resume.common.entity.KeyValue">
  	SELECT sc.id,sc.key,sc.value from system_config sc
  </select>
</mapper>

6.applicationContext.xml配置:放进ioc容器中

<bean class="club.jiajiajia.resume.common.controller.SystemController"></bean>


        这样系统启动的时候就会初始化执行SystemController类,自动封装属性


QQ截图20190304144521.png

        但注意:数据库中的value字段的值一定要与属性的类型对应,不可能int类型的属性放一个字符串的值。

猜你喜欢
数据库基础 2899 产生原因:区不一致解决办法:在链接加:&serverTimezone=Asia/Shanghaiurl:jdbc:mysql://localhost:3306/test
spring/springmvc 3308 springmvc项目执行controller在springmvc的配置文件加入controller的bean,注意bean加载的顺序beanclass
weblog 277 首先到tomcat的安装目录(解压目录)执行如下命令即可运行:./bin/startup.sh或者直接到bin目录下执行如下命令:./startup.shtomcat的默认端口是8080如果是在centos7版本部署的tomcat服务器,需要将8080端口放开执行如下命令:firewall-cmd--zone=public--add-port=8080/tcp--permanentfirewall
java 数据库 1063 java项目-之间定进行交换服务(右上方下载)压缩包内附sql脚本,本项目为springboot+mybatis框架,导入项目即可测试。目的,实现两个进行同步,定
框架 5553 springboot项目后执行特定方法有项目需求,需要项目候向查询一下属性,或者需要加载某个特定的方法。那么在springboot可以用如下方法实现第一种实现,实现
weblog 2547 定义组int[,]area={{0,0},{0,1},{1,0},{0,-1},{-1,0},{1,1},{1,-1},{-1,-1},{-1,1}};遍历组for(inti=0
spring/springmvc 1155 springmvc一返回异信息当服务器代码为: @RequestMapping("/res") publicMyAjaxResultres(@RequestParam(name
weblog 232 mysql修改主键id自递的增值修改方法:执行sqlaltertable表名AUTO_INCREMENT=值;例:altertableusersAUTO_INCREMENT=10000;
归档
2018年11月  12 2018年12月  33 2019年01月  28 2019年02月  28 2019年03月  32 2019年04月  27 2019年05月  33 2019年06月  6 2019年07月  12 2019年08月  12 2019年09月  21 2019年10月  8 2019年11月  15 2019年12月  25 2020年01月  9 2020年02月  5 2020年03月  16 2020年04月  4 2020年06月  1 2020年07月  7 2020年08月  13 2020年09月  9 2020年10月  5 2020年12月  3 2021年01月  1 2021年02月  5 2021年03月  7
标签
算法基础 linux 前端 c++ 数据结构 框架 数据库 计算机基础 储备知识 java基础 ASM 其他 深入理解java虚拟机 nginx git 消息中间件 搜索 maven redis docker dubbo
目录