springmvc启动时从数据库中初始化系统常量
springmvc启动时从数据库中初始化系统常量
设计的目标是,把项目的系统常量配置,放在数据库中,在项目初始化时从项目中获取配置信息,利用反射技术,把key-value对应的值自动封装进配置类。
1.例:数据库中的字段与实体类中的key对应,实现自动封装
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类,自动封装属性
但注意:数据库中的value字段的值一定要与属性的类型对应,不可能int类型的属性放一个字符串的值。
评论区
请写下您的评论...
猜你喜欢
数据库基础
3825
产生原因:数据库时区不一致解决办法:在数据库中链接中加:&serverTimezone=Asia/Shanghaiurl:jdbc:mysql://localhost:3306/test
spring/springmvc
4502
springmvc项目启动时执行controller在springmvc的配置文件中加入controller的bean,注意bean加载的顺序beanclass
weblog
1282
首先到tomcat的安装目录(解压目录)执行如下命令即可运行:./bin/startup.sh或者直接到bin目录下执行如下命令:./startup.shtomcat的默认端口是8080如果是在centos7版本部署的tomcat服务器,需要将8080端口放开执行如下命令:firewall-cmd--zone=public--add-port=8080/tcp--permanentfirewall
java 数据库
2609
java项目-数据库之间定时进行数据交换服务(右上方下载)压缩包内附sql脚本,本项目为springboot+mybatis框架,导入项目即可启动测试。目的,实现两个数据库定时自动进行数据同步,定时
java基础,springboot
1631
修改成正确的用户即可
将服务设置为开机启动:
sudosystemctlenablemyApp
三、自定义JVM参数 如果是用java-jar的方式启动的java应用,我们可以直接在命令行中指定
ofc
c#二维数组的初始化和遍历
weblog
3294
定义数组int[,]area={{0,0},{0,1},{1,0},{0,-1},{-1,0},{1,1},{1,-1},{-1,-1},{-1,1}};遍历数组for(inti=0
框架
7724
springboot项目启动后执行特定方法有时项目需求,需要项目启动的时候向数据库中查询一下系统属性,或者需要加载某个特定的方法。那么在springboot中可以用如下方法实现第一种实现,实现
blog
springmvc统一返回异常信息
spring/springmvc
2274
springmvc统一返回异常信息当服务器代码为: @RequestMapping("/res") publicMyAjaxResultres(@RequestParam(name
最新发表
归档
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
2021-04
4
2021-05
4
2021-06
1
2021-07
7
2021-08
2
2021-09
8
2021-10
9
2021-11
16
2021-12
14
2022-01
7
2022-05
1
2022-08
3
2022-09
2
2022-10
2
2022-12
5
2023-01
3
2023-02
1
2023-03
4
2023-04
2
2023-06
3
2023-07
4
2023-08
1
2023-10
1
2024-02
1
2024-03
1
2024-04
1
2024-08
1
标签
算法基础
linux
前端
c++
数据结构
框架
数据库
计算机基础
储备知识
java基础
ASM
其他
深入理解java虚拟机
nginx
git
消息中间件
搜索
maven
redis
docker
dubbo
vue
导入导出
软件使用
idea插件
协议
无聊的知识
jenkins
springboot
mqtt协议
keepalived
minio
mysql
ensp
网络基础
xxl-job
rabbitmq
haproxy
srs
音视频
webrtc
javascript
加密算法
目录
没有一个冬天不可逾越,没有一个春天不会来临。最慢的步伐不是跬步,而是徘徊,最快的脚步不是冲刺,而是坚持。