数据大屏开发文档

一、开发目标

本程序为一块不停刷新数据的大屏幕的Java后台程序。前端5分钟刷新一次,需要向后台接口请求数据展示到前段。

二、程序架构

程序框架:Spring Boot、Mybatis、

注册中心:nacos

数据库:mogdb

中间件:redis

三、具体实现

整体为 MVC三层结构,为了防止程序出错,在controller层做了redis缓存。

这里使用redis做缓存基于以下2点考虑

  1. redis做缓存使缓存便于管理,可以使用外部工具看到缓存的数据。
  2. 数据与程序本身独立,如果程序宕机了,数据还是在的,安全性更高一些。

下面通过一个接口来展示整个程序的实现

controller层

@RestController
@AllArgsConstructor //自动注入bean的全参数默认实现
@RequestMapping("/large")
public class ShowController {
	
	ShowService showService;

	RedisUtil redisUtil;
    
    /**
	 *  缓存名称 
	 */
	public static final String ACCUMULATED_PREMIUM_CACHE="large-screen:AccumulatedPremium";

	/**
	 * 查询数据
	 */
	@GetMapping("/AccumulatedPremium")
	public R getAccumulatedPremium(){
        //查询数据
		Map<String,Object> accumulatedPremiumVo = showService.getAccumulatedPremiumVo();
        //如果查询到数据,放入redis缓存中,然后向前段返回数据
		if (accumulatedPremiumVo!=null){
			redisUtil.set(ACCUMULATED_PREMIUM_CACHE,accumulatedPremiumVo);
			return R.data(200,accumulatedPremiumVo,"成功");
		}
        //如果程序走到这里,说明上面没有返回,从redis中查询缓存数据
		Object o = redisUtil.get(LargeScreenConstant.ACCUMULATED_PREMIUM_CACHE);
        //缓存数据不为空,返回查询到的缓存数据
		if (o!=null){
			return R.data(200,o,"数据库查询错误,获取redis缓存数据");
		}
		return R.data(500,null,"失败");
	}
}

Service层

//接口
public interface ShowService {
	Map<String,Object> getAccumulatedPremiumVo();
}

//实现
@Service
@Slf4j
public class ShowServiceImpl implements ShowService {
	@Autowired
	showMapper showMapper;

	@Override
	public Map<String,Object> getAccumulatedPremiumVo() {
		try {
			return showMapper.getTotalAccumulatedPremium();
		}catch (Exception e){
			log.error("查询异常"+e.getMessage());
		}
		return null;
	}

DAO层

dao层返回的直接是一个map对象,刚开始开发时,每个接口都对应出了一个pojo对象,但是后续接口频繁修改,导致pojo也不停的修改。但好在查询到的数据几乎都不需要处理,索性直接把pojo删除,sql中把每个字段都写好对应的别名,这样就不需要pojo类了。直接返回map给前端。

  • mapper类
@Mapper
public interface showMapper {
	Map<String,Object> getTotalAccumulatedPremium();
}
  • mapper.xml
<select id="getTotalAccumulatedPremium" resultType="java.util.HashMap">
        select a.statdate,sum(allprem) allprem
        from gjsj_app.fact_view_dp_prem_statistics a
        where a.statdate = to_char(sysdate,'yyyymmdd')
        group by a.statdate ;
    </select>

nacos 的数据库配置,和spring的application.yml不在赘述。

以上就是本程序的全部实现。