SpringBoot开发中的一些小细节(四)

SpringBoot开发中的一些小细节(四)

2018, Dec 28    

Code Review

这周被点名来做code view了来着,然后昨天晚上做了一个小时的code review,还是相当紧张,然后今天改了一天代码 特此总结

ApplicationListener

这个地方原来主要实现的功能是spring3中的功能,在启动了整个项目之后,让watch pods和watch service启动并且只启动一次。
(启动一个单线程,回调函数,生命周期) 原来的做法是使用spring task在应用启动之后,就启动一次然后一直运行

//    @Scheduled(cron = "${schedule.kubeService}")
    @Scheduled(fixedDelay = 999999999)
    protected void gitlabProjectTask() {
        kubernetesService.collectServices();
        customServiceService.bindServiceAndProject();
        kubernetesService.watchServices();
    }

//    @Scheduled(cron = "${schedule.kubePod}")
//    @Scheduled(cron = "0 0,14 6,18 * * ? ")
    //taskexecutor
//    ScheduledExecutorTask
//    new 一个单线程一直跑就可以了
    @Scheduled(fixedDelay = 999999999)
    public void collectPod() {
        kubernetesService.collectPods();
        kubernetesService.watchPods();
    }

现在使用的是ApplicationListener

public class KubernetesServiceImpl implements KubernetesService, ApplicationListener<ApplicationReadyEvent> {
 //生命周期
    @Override
    public void onApplicationEvent(ApplicationReadyEvent event) {
        collectServices();
        customServiceService.bindServiceAndProject();
        watchServices();

        collectPods();
        watchPods();

    }
}

这样既可
这样就可以在线程启动的时候异步的启动这些服务
使用注解(to do)或者继承ApplicationListener

MongoDB的修改操作方式

在修改mongoTemplate的update的时候,会发现使用update的话,会需要修改很多的key值,这样的操作不如直接全部删了然后全部再加进去

Query query = Query.query(Criteria.where("classId").is("1"));
Student student = new Student("1", "lisi", 18, "man");
Update update = new Update();
//update.push("Students", student);
update.addToSet("Students", student);
mongoTemplate.upsert(query, update, "class");

使用Strings的时候nullOrEmpty的判断

Strings.isNullOrEmpty(username)
推荐使用的是Apache的StringUtil或者google的
不能使用 username.equals(“”)

如何只在debug的时候才开始打印日志

log.debug("user: {}", username);
if (log.isDebugEnabled()) {
    for (Map.Entry<String, CustomServiceDeployDto> stringCustomServiceDeployDtoEntry : serviceAndTag.entrySet()) {
        log.debug("      service and tag: {}", JSONObject.toJSON(stringCustomServiceDeployDtoEntry));
    }
}

泛型警告的问题

将redisTemplate修改为StringRedisTemplate

返回空的集合应该使用

Collections.emptyList()

bug修复

历史记录刷新的时候,value是一个map,而map中的service的值没有