1.在启动类中添加 @EnableScheduling 注解
@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients
@MapperScan("com.gactoyota.system.mapper")
@EnableScheduling
public class SystemApplication {
public static void main(String[] args) {
SpringApplication.run(SystemApplication.class, args);
}
}
2 编写config 实现 SchedulingConfigurer
@Component
@Slf4j
public class ScheduledConfig implements SchedulingConfigurer {
@Value("${spring.datasource.driver-class-name}")
private String driverName;
@Value("${spring.datasource.url}")
private String url;
@Value("${spring.datasource.username}")
private String username;
@Value("${spring.datasource.password}")
private String password;
@Resource
private IDeviceDataTabsService deviceDataTabsService;
@SneakyThrows
@Override
public void configureTasks(ScheduledTaskRegistrar scheduledTaskRegistrar) {
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
Date date = new Date();
String dataForStr = dateFormat.format(date);
String[] split = dataForStr.split("-");
StringBuilder stringBuilder = new StringBuilder();
for (int i = 0; i < split.length; i++) {
if (i <= 1) {
stringBuilder.append(split[i]);
}
}
stringBuilder.append("01");
String thisSysDate = stringBuilder.toString();
QueryWrapper<DeviceDataTabs> queryWrapper = new QueryWrapper<>();
queryWrapper.like("table_name", thisSysDate);
List<DeviceDataTabs> list = deviceDataTabsService.list(queryWrapper);
if (list.size() == 0) {
String tableName = autoTable(thisSysDate);
log.info("表创建成功!");
DeviceDataTabs deviceDataTabs = new DeviceDataTabs();
deviceDataTabs.setCreateDate(date);
deviceDataTabs.setTableName(tableName);
if (deviceDataTabsService.save(deviceDataTabs)) {
log.info("当前月份表初始化成功!!【" + tableName + "】");
}
}
scheduledTaskRegistrar.addTriggerTask(
() -> {
Date dateOne = new Date();
String thisDate = dateFormat.format(dateOne);
String thisDateDay = thisDate.replace("-", "");
try {
thisDateDay = autoTable(thisDateDay);
log.info("表创建成功!");
} catch (Exception e) {
e.printStackTrace();
}
log.info("thisDateDay : " + thisDateDay);
DeviceDataTabs deviceDataTabs = new DeviceDataTabs();
deviceDataTabs.setCreateDate(date);
deviceDataTabs.setTableName(thisDateDay);
deviceDataTabsService.save(deviceDataTabs);
}
, triggerContext -> {
String cron = "0 0 0 1 * ?";
log.info("定时创建表任务启动!");
return new CronTrigger(cron).nextExecutionTime(triggerContext);
}
);
}
public String autoTable(String tabName) throws Exception {
Class.forName(driverName);
Connection conn = DriverManager.getConnection(url, username, password);
Statement stat = conn.createStatement();
String tableName = "device_data_" + tabName;
stat.executeUpdate("CREATE TABLE " + tableName + " (" +
" `id` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '主键Id'," +
" `numerial_number` decimal(6, 3) NULL DEFAULT NULL COMMENT '数值'," +
" `picture_name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '图片名称'," +
" `create_date` datetime(0) NULL DEFAULT NULL COMMENT '创建时间'," +
" `voltage` decimal(3, 1) NULL DEFAULT NULL COMMENT '电压'," +
" `device_id` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '设备Id'," +
" `data_status` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '数据状态'," +
" `is_deleted` int NULL DEFAULT 0 COMMENT '是否已删除'," +
" PRIMARY KEY (`id`) USING BTREE" +
") ");
ResultSet result = stat.executeQuery("select * from " + tableName);
while (result.next()) {
System.out.println(result.getInt("id") + " " + result.getString("name"));
}
result.close();
stat.close();
conn.close();
return tableName;
}
}