数据大屏开发文档
一、开发目标
本程序为一块不停刷新数据的大屏幕的Java后台程序。前端5分钟刷新一次,需要向后台接口请求数据展示到前段。
二、程序架构
程序框架:Spring Boot、Mybatis、
注册中心:nacos
数据库:mogdb
中间件:redis
三、具体实现
整体为 MVC三层结构,为了防止程序出错,在controller层做了redis缓存。
这里使用redis做缓存基于以下2点考虑
- redis做缓存使缓存便于管理,可以使用外部工具看到缓存的数据。
- 数据与程序本身独立,如果程序宕机了,数据还是在的,安全性更高一些。
下面通过一个接口来展示整个程序的实现
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不在赘述。
以上就是本程序的全部实现。