Springboot项目定时任务同步第三方数据给开发、测试、和生产环境共同使用导致数据重复同步。

Springboot项目定时任务同步第三方数据给开发、测试、和生产环境共同使用。 由于这个定时任务在开发环境、测试环境和生产环境都存在,会出现数据重复同步的情况,怎么处理。

在Spring Boot中多环境配置文件名需要满足application-{profile}.properties的格式,其中{profile}对应你的环境标识,比如:
application-dev.properties:开发环境
application-test.properties:测试环境
application-prod.properties:生产环境
至于哪个具体的配置文件会被加载,需要在application.properties文件中通过spring.profiles.active属性来设置,其值对应{profile}值。

如:spring.profiles.active=dev就会加载application-dev.properties配置文件内容

第一步:

我们只需要在不同开发环境中的properties中增加一个标志即可,
比如增加一个dutyTaskFlag,值取“1”时,表示执行该定时任务,值取“0”时表示不执行该定时任务。

application-dev.properties:

#同步排班定时任务执行标志
task.dutyTaskFlag=0
#同步点位信息定时任务标志
task.locationTaskFlag=0

application-test.properties:

#同步排班定时任务执行标志
task.dutyTaskFlag=0
#同步点位信息定时任务标志
task.locationTaskFlag=0

application-prod.properties:

#同步排班定时任务执行标志
task.dutyTaskFlag=1
#同步点位信息定时任务标志
task.locationTaskFlag=1

第二步:

自定义一个类ConfigBeanValue 接收该配置项的值。

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
 
@Component
public class ConfigBeanValue {
 
    @Value("${task.dutyTaskFlag}")
    public String dutyTaskFlag;
 
    @Value("${task.locationTaskFlag}")
    public String locationTaskFlag;
}

第三步:

在定时任务中,使用该标志进行逻辑控制。


@Slf4j
@Component
@EnableScheduling
public class SyncDutyTask{
 
    @Autowired
    private ConfigBeanValue configBeanValue;
 
    /**
    *每天零点10分执行一次
    */
    @Scheduled(cron="0 10 0 * * ?")
    public void syncDuty() {
       if(null != configBeanValue){
       		System.out.println("dsDutyTaskFlag="+configBeanValue.dutyTaskFlag);
       		System.out.println("dsDutyTaskFlag="+configBeanValue.locationTaskFlag);
       		if("1".equals(configBeanValue.dutyTaskFlag)){
       			//ToDo同步
       		}
       }
    }
}

你可能感兴趣的:(Springboot,项目场景实战,springboot)