|
|
@@ -1,10 +1,9 @@
|
|
|
package cn.vbdsm.acquis.timer;
|
|
|
|
|
|
-import java.util.Map;
|
|
|
-
|
|
|
-import javax.annotation.Resource;
|
|
|
-import javax.sql.DataSource;
|
|
|
-
|
|
|
+import cn.vbdsm.acquis.dao.*;
|
|
|
+import cn.vbdsm.common.constants.CronExpression;
|
|
|
+import cn.vbdsm.core.plugin.queue.QueuePlugin;
|
|
|
+import cn.vbdsm.core.plugin.queue.model.QueueItem;
|
|
|
import org.apache.log4j.Logger;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.jdbc.core.JdbcTemplate;
|
|
|
@@ -12,218 +11,221 @@ import org.springframework.scheduling.annotation.Async;
|
|
|
import org.springframework.scheduling.annotation.Scheduled;
|
|
|
import org.springframework.stereotype.Component;
|
|
|
|
|
|
-import cn.vbdsm.acquis.dao.AnalDateAvgDao;
|
|
|
-import cn.vbdsm.acquis.dao.AnalDateFgpDao;
|
|
|
-import cn.vbdsm.acquis.dao.AnalDateMaxDao;
|
|
|
-import cn.vbdsm.acquis.dao.AnalDateMinDao;
|
|
|
-import cn.vbdsm.acquis.dao.OnlineDataEnergyDao;
|
|
|
-import cn.vbdsm.acquis.dao.OnlineDataHarmonicIDao;
|
|
|
-import cn.vbdsm.acquis.dao.OnlineDataHarmonicUDao;
|
|
|
-import cn.vbdsm.acquis.dao.OnlineDataPowerDao;
|
|
|
-import cn.vbdsm.acquis.dao.OnlineDataQtyDao;
|
|
|
-import cn.vbdsm.common.constants.CronExpression;
|
|
|
-import cn.vbdsm.core.plugin.queue.QueuePlugin;
|
|
|
-import cn.vbdsm.core.plugin.queue.model.QueueItem;
|
|
|
+import javax.annotation.Resource;
|
|
|
+import javax.sql.DataSource;
|
|
|
+import java.util.Map;
|
|
|
|
|
|
@Component
|
|
|
public class RebuildTableTimer {
|
|
|
|
|
|
-
|
|
|
- private Logger LOG = Logger.getLogger(this.getClass());
|
|
|
- private QueuePlugin queuePlugin = new QueuePlugin() {
|
|
|
- protected void process(QueueItem item) {}
|
|
|
- };
|
|
|
-
|
|
|
-
|
|
|
+
|
|
|
+ private final Logger LOG = Logger.getLogger(this.getClass());
|
|
|
+ private final QueuePlugin queuePlugin = new QueuePlugin() {
|
|
|
+ protected void process(QueueItem item) {
|
|
|
+ }
|
|
|
+ };
|
|
|
+
|
|
|
+
|
|
|
// @Autowired private AnalData24hEnergyDao analData24hEnergyDao;
|
|
|
-
|
|
|
- @Autowired private AnalDateAvgDao analDateAvgDao;
|
|
|
- @Autowired private AnalDateFgpDao analDateFgpDao;
|
|
|
- @Autowired private AnalDateMaxDao analDateMaxDao;
|
|
|
- @Autowired private AnalDateMinDao analDateMinDao;
|
|
|
- @Autowired private OnlineDataEnergyDao onlineDataEnergyDao;
|
|
|
- @Autowired private OnlineDataHarmonicIDao onlineDataHarmonicIDao;
|
|
|
- @Autowired private OnlineDataHarmonicUDao onlineDataHarmonicUDao;
|
|
|
- @Autowired private OnlineDataPowerDao onlineDataPowerDao;
|
|
|
- @Autowired private OnlineDataQtyDao onlineDataQtyDao;
|
|
|
-
|
|
|
-
|
|
|
- private JdbcTemplate jdbc;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private AnalDateAvgDao analDateAvgDao;
|
|
|
+ @Autowired
|
|
|
+ private AnalDateFgpDao analDateFgpDao;
|
|
|
+ @Autowired
|
|
|
+ private AnalDateMaxDao analDateMaxDao;
|
|
|
+ @Autowired
|
|
|
+ private AnalDateMinDao analDateMinDao;
|
|
|
+ @Autowired
|
|
|
+ private OnlineDataEnergyDao onlineDataEnergyDao;
|
|
|
+ @Autowired
|
|
|
+ private OnlineDataHarmonicIDao onlineDataHarmonicIDao;
|
|
|
+ @Autowired
|
|
|
+ private OnlineDataHarmonicUDao onlineDataHarmonicUDao;
|
|
|
+ @Autowired
|
|
|
+ private OnlineDataPowerDao onlineDataPowerDao;
|
|
|
+ @Autowired
|
|
|
+ private OnlineDataQtyDao onlineDataQtyDao;
|
|
|
+
|
|
|
+
|
|
|
+ private JdbcTemplate jdbc;
|
|
|
// private DynamicDataSourceEntry dynamicDataSourceEntry;
|
|
|
-
|
|
|
- /**
|
|
|
- * 设定数据源
|
|
|
- * @param dataSource
|
|
|
- */
|
|
|
- @Resource(name="dynamicDataSource")
|
|
|
- public void setDataSource(DataSource dataSource){
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 设定数据源
|
|
|
+ *
|
|
|
+ * @param dataSource
|
|
|
+ */
|
|
|
+ @Resource(name = "dynamicDataSource")
|
|
|
+ public void setDataSource(DataSource dataSource) {
|
|
|
// dynamicDataSourceEntry = ((DynamicDataSource) dataSource).getDataSourceEntry();
|
|
|
- jdbc = new JdbcTemplate(dataSource);
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
- /**
|
|
|
- * 重建数据库表
|
|
|
- * @param tableName
|
|
|
- * @return
|
|
|
- */
|
|
|
- private boolean rebuildTable(String tableName){
|
|
|
- String renameTable = tableName + "_bak";
|
|
|
-
|
|
|
- String dropSql = "DROP TABLE IF EXISTS " + renameTable;
|
|
|
-
|
|
|
- String renameSql = "RENAME TABLE " + tableName + " TO " + renameTable;
|
|
|
-
|
|
|
- String getCreateSql = "SHOW CREATE TABLE " + tableName;
|
|
|
-
|
|
|
- //获取重建表结构的执行SQL
|
|
|
- String rebuildSql = null;
|
|
|
- try {
|
|
|
- Map<String,Object> r = jdbc.queryForMap(getCreateSql);
|
|
|
- rebuildSql = r.get("Create Table").toString();
|
|
|
- }catch(Exception e){
|
|
|
- LOG.error("获取表结构信息失败" + e.getStackTrace());
|
|
|
- return false;
|
|
|
- }
|
|
|
- //重置自增长值
|
|
|
- rebuildSql = rebuildSql.replaceFirst("AUTO_INCREMENT=\\d+ ","");
|
|
|
-
|
|
|
- try{
|
|
|
- //判断重命名后的表存不存在,如果存在则先将其删掉
|
|
|
- jdbc.update(dropSql);
|
|
|
- //开始重命名表
|
|
|
- jdbc.update(renameSql);
|
|
|
- //然后重建表
|
|
|
- jdbc.update(rebuildSql.toString());
|
|
|
- }catch(Exception e){
|
|
|
- LOG.error("执行失败" + e.getStackTrace());
|
|
|
- return false;
|
|
|
- }
|
|
|
- return true;
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
- /**
|
|
|
- * 删除表
|
|
|
- * @param tableName
|
|
|
- * @return
|
|
|
- */
|
|
|
- private boolean dropTable(String tableName){
|
|
|
- String renameTable = tableName + "_bak";
|
|
|
- String dropSql = "DROP TABLE IF EXISTS " + renameTable;
|
|
|
- try{
|
|
|
- //删除重命名以后的表
|
|
|
- jdbc.update(dropSql);
|
|
|
- }catch(Exception e){
|
|
|
- return false;
|
|
|
- }
|
|
|
- return true;
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
- @Async
|
|
|
- @Scheduled(cron=CronExpression.TIME_0_HOUR_0_MINUTE_30_SECOND)
|
|
|
- public void rebuildTables(){
|
|
|
-
|
|
|
- //暂停分配任务
|
|
|
- LOG.info("暂停任务分配...");
|
|
|
- queuePlugin.pause();
|
|
|
-
|
|
|
-
|
|
|
+ jdbc = new JdbcTemplate(dataSource);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 重建数据库表
|
|
|
+ *
|
|
|
+ * @param tableName
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ private boolean rebuildTable(String tableName) {
|
|
|
+ String renameTable = tableName + "_bak";
|
|
|
+
|
|
|
+ String dropSql = "DROP TABLE IF EXISTS " + renameTable;
|
|
|
+
|
|
|
+ String renameSql = "RENAME TABLE " + tableName + " TO " + renameTable;
|
|
|
+
|
|
|
+ String getCreateSql = "SHOW CREATE TABLE " + tableName;
|
|
|
+
|
|
|
+ //获取重建表结构的执行SQL
|
|
|
+ String rebuildSql = null;
|
|
|
+ try {
|
|
|
+ Map<String, Object> r = jdbc.queryForMap(getCreateSql);
|
|
|
+ rebuildSql = r.get("Create Table").toString();
|
|
|
+ } catch (Exception e) {
|
|
|
+ LOG.error("获取表结构信息失败" + e.getStackTrace());
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ rebuildSql = rebuildSql.replaceFirst("PRIMARY (.*) USING BTREE", "PRIMARY $1, $1 USING BTREE");
|
|
|
+ //重置自增长值
|
|
|
+ rebuildSql = rebuildSql.replaceFirst("AUTO_INCREMENT=\\d+ ", "");
|
|
|
+
|
|
|
+ try {
|
|
|
+ //判断重命名后的表存不存在,如果存在则先将其删掉
|
|
|
+ jdbc.update(dropSql);
|
|
|
+ //开始重命名表
|
|
|
+ jdbc.update(renameSql);
|
|
|
+ //然后重建表
|
|
|
+ jdbc.update(rebuildSql);
|
|
|
+ } catch (Exception e) {
|
|
|
+ LOG.error("执行失败" + e.getStackTrace());
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 删除表
|
|
|
+ *
|
|
|
+ * @param tableName
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ private boolean dropTable(String tableName) {
|
|
|
+ String renameTable = tableName + "_bak";
|
|
|
+ String dropSql = "DROP TABLE IF EXISTS " + renameTable;
|
|
|
+ try {
|
|
|
+ //删除重命名以后的表
|
|
|
+ jdbc.update(dropSql);
|
|
|
+ } catch (Exception e) {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ @Async
|
|
|
+ @Scheduled(cron = CronExpression.TIME_0_HOUR_0_MINUTE_30_SECOND)
|
|
|
+ public void rebuildTables() {
|
|
|
+
|
|
|
+ //暂停分配任务
|
|
|
+ LOG.info("暂停任务分配...");
|
|
|
+ queuePlugin.pause();
|
|
|
+
|
|
|
+
|
|
|
// String t1 = analData24hEnergyDao.getTableName();
|
|
|
// LOG.warn("开始重建" + t1 + "表...");
|
|
|
// boolean r1 = rebuildTable(t1);
|
|
|
// LOG.warn("重建完成,执行结果:" + r1);
|
|
|
-
|
|
|
- String t2 = analDateAvgDao.getTableName();
|
|
|
- LOG.info("开始重建" + t2 + "表...");
|
|
|
- boolean r2 = rebuildTable(t2);
|
|
|
- LOG.info("重建完成,执行结果:" + r2);
|
|
|
-
|
|
|
- String t3 = analDateFgpDao.getTableName();
|
|
|
- LOG.info("开始重建" + t3 + "表...");
|
|
|
- boolean r3 = rebuildTable(t3);
|
|
|
- LOG.info("重建完成,执行结果:" + r3);
|
|
|
-
|
|
|
- String t4 = analDateMaxDao.getTableName();
|
|
|
- LOG.info("开始重建" + t4 + "表...");
|
|
|
- boolean r4 = rebuildTable(t4);
|
|
|
- LOG.info("重建完成,执行结果:" + r4);
|
|
|
-
|
|
|
- String t5 = analDateMinDao.getTableName();
|
|
|
- LOG.info("开始重建" + t5 + "表...");
|
|
|
- boolean r5 = rebuildTable(t5);
|
|
|
- LOG.info("重建完成,执行结果:" + r5);
|
|
|
-
|
|
|
- String t6 = onlineDataEnergyDao.getTableName();
|
|
|
- LOG.info("开始重建" + t6 + "表...");
|
|
|
- boolean r6 = rebuildTable(t6);
|
|
|
- LOG.info("重建完成,执行结果:" + r6);
|
|
|
-
|
|
|
- String t7 = onlineDataHarmonicIDao.getTableName();
|
|
|
- LOG.info("开始重建" + t7 + "表...");
|
|
|
- boolean r7 = rebuildTable(t7);
|
|
|
- LOG.info("重建完成,执行结果:" + r7);
|
|
|
-
|
|
|
- String t8 = onlineDataHarmonicUDao.getTableName();
|
|
|
- LOG.info("开始重建" + t8 + "表...");
|
|
|
- boolean r8 = rebuildTable(t8);
|
|
|
- LOG.info("重建完成,执行结果:" + r8);
|
|
|
-
|
|
|
- String t9 = onlineDataPowerDao.getTableName();
|
|
|
- LOG.info("开始重建" + t9 + "表...");
|
|
|
- boolean r9 = rebuildTable(t9);
|
|
|
- LOG.info("重建完成,执行结果:" + r9);
|
|
|
-
|
|
|
- String t10 = onlineDataQtyDao.getTableName();
|
|
|
- LOG.info("开始重建" + t10 + "表...");
|
|
|
- boolean r10 = rebuildTable(t10);
|
|
|
- LOG.info("重建完成,执行结果:" + r10);
|
|
|
-
|
|
|
- //恢复任务分配
|
|
|
- LOG.info("恢复任务分配...");
|
|
|
- queuePlugin.resume();
|
|
|
-
|
|
|
-
|
|
|
- LOG.info("开始删除" + t2 + "表的备份...");
|
|
|
- r2 = dropTable(t2);
|
|
|
- LOG.info("删除完成,执行结果:" + r2);
|
|
|
-
|
|
|
- LOG.info("开始删除" + t3 + "表的备份...");
|
|
|
- r3 = dropTable(t3);
|
|
|
- LOG.info("删除完成,执行结果:" + r3);
|
|
|
-
|
|
|
- LOG.info("开始删除" + t4 + "表的备份...");
|
|
|
- r4 = dropTable(t4);
|
|
|
- LOG.info("删除完成,执行结果:" + r4);
|
|
|
-
|
|
|
- LOG.info("开始删除" + t5 + "表的备份...");
|
|
|
- r5 = dropTable(t5);
|
|
|
- LOG.info("删除完成,执行结果:" + r5);
|
|
|
-
|
|
|
- LOG.info("开始删除" + t6 + "表的备份...");
|
|
|
- r6 = dropTable(t6);
|
|
|
- LOG.info("删除完成,执行结果:" + r6);
|
|
|
-
|
|
|
- LOG.info("开始删除" + t7 + "表的备份...");
|
|
|
- r7 = dropTable(t7);
|
|
|
- LOG.info("删除完成,执行结果:" + r7);
|
|
|
-
|
|
|
- LOG.info("开始删除" + t8 + "表的备份...");
|
|
|
- r8 = dropTable(t8);
|
|
|
- LOG.info("删除完成,执行结果:" + r8);
|
|
|
-
|
|
|
- LOG.info("开始删除" + t9 + "表的备份...");
|
|
|
- r9 = dropTable(t9);
|
|
|
- LOG.info("删除完成,执行结果:" + r9);
|
|
|
-
|
|
|
- LOG.info("开始删除" + t10 + "表的备份...");
|
|
|
- r10 = dropTable(t10);
|
|
|
- LOG.info("删除完成,执行结果:" + r10);
|
|
|
-
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
+
|
|
|
+ String t2 = analDateAvgDao.getTableName();
|
|
|
+ LOG.info("开始重建" + t2 + "表...");
|
|
|
+ boolean r2 = rebuildTable(t2);
|
|
|
+ LOG.info("重建完成,执行结果:" + r2);
|
|
|
+
|
|
|
+ String t3 = analDateFgpDao.getTableName();
|
|
|
+ LOG.info("开始重建" + t3 + "表...");
|
|
|
+ boolean r3 = rebuildTable(t3);
|
|
|
+ LOG.info("重建完成,执行结果:" + r3);
|
|
|
+
|
|
|
+ String t4 = analDateMaxDao.getTableName();
|
|
|
+ LOG.info("开始重建" + t4 + "表...");
|
|
|
+ boolean r4 = rebuildTable(t4);
|
|
|
+ LOG.info("重建完成,执行结果:" + r4);
|
|
|
+
|
|
|
+ String t5 = analDateMinDao.getTableName();
|
|
|
+ LOG.info("开始重建" + t5 + "表...");
|
|
|
+ boolean r5 = rebuildTable(t5);
|
|
|
+ LOG.info("重建完成,执行结果:" + r5);
|
|
|
+
|
|
|
+ String t6 = onlineDataEnergyDao.getTableName();
|
|
|
+ LOG.info("开始重建" + t6 + "表...");
|
|
|
+ boolean r6 = rebuildTable(t6);
|
|
|
+ LOG.info("重建完成,执行结果:" + r6);
|
|
|
+
|
|
|
+ String t7 = onlineDataHarmonicIDao.getTableName();
|
|
|
+ LOG.info("开始重建" + t7 + "表...");
|
|
|
+ boolean r7 = rebuildTable(t7);
|
|
|
+ LOG.info("重建完成,执行结果:" + r7);
|
|
|
+
|
|
|
+ String t8 = onlineDataHarmonicUDao.getTableName();
|
|
|
+ LOG.info("开始重建" + t8 + "表...");
|
|
|
+ boolean r8 = rebuildTable(t8);
|
|
|
+ LOG.info("重建完成,执行结果:" + r8);
|
|
|
+
|
|
|
+ String t9 = onlineDataPowerDao.getTableName();
|
|
|
+ LOG.info("开始重建" + t9 + "表...");
|
|
|
+ boolean r9 = rebuildTable(t9);
|
|
|
+ LOG.info("重建完成,执行结果:" + r9);
|
|
|
+
|
|
|
+ String t10 = onlineDataQtyDao.getTableName();
|
|
|
+ LOG.info("开始重建" + t10 + "表...");
|
|
|
+ boolean r10 = rebuildTable(t10);
|
|
|
+ LOG.info("重建完成,执行结果:" + r10);
|
|
|
+
|
|
|
+ //恢复任务分配
|
|
|
+ LOG.info("恢复任务分配...");
|
|
|
+ queuePlugin.resume();
|
|
|
+
|
|
|
+
|
|
|
+ LOG.info("开始删除" + t2 + "表的备份...");
|
|
|
+ r2 = dropTable(t2);
|
|
|
+ LOG.info("删除完成,执行结果:" + r2);
|
|
|
+
|
|
|
+ LOG.info("开始删除" + t3 + "表的备份...");
|
|
|
+ r3 = dropTable(t3);
|
|
|
+ LOG.info("删除完成,执行结果:" + r3);
|
|
|
+
|
|
|
+ LOG.info("开始删除" + t4 + "表的备份...");
|
|
|
+ r4 = dropTable(t4);
|
|
|
+ LOG.info("删除完成,执行结果:" + r4);
|
|
|
+
|
|
|
+ LOG.info("开始删除" + t5 + "表的备份...");
|
|
|
+ r5 = dropTable(t5);
|
|
|
+ LOG.info("删除完成,执行结果:" + r5);
|
|
|
+
|
|
|
+ LOG.info("开始删除" + t6 + "表的备份...");
|
|
|
+ r6 = dropTable(t6);
|
|
|
+ LOG.info("删除完成,执行结果:" + r6);
|
|
|
+
|
|
|
+ LOG.info("开始删除" + t7 + "表的备份...");
|
|
|
+ r7 = dropTable(t7);
|
|
|
+ LOG.info("删除完成,执行结果:" + r7);
|
|
|
+
|
|
|
+ LOG.info("开始删除" + t8 + "表的备份...");
|
|
|
+ r8 = dropTable(t8);
|
|
|
+ LOG.info("删除完成,执行结果:" + r8);
|
|
|
+
|
|
|
+ LOG.info("开始删除" + t9 + "表的备份...");
|
|
|
+ r9 = dropTable(t9);
|
|
|
+ LOG.info("删除完成,执行结果:" + r9);
|
|
|
+
|
|
|
+ LOG.info("开始删除" + t10 + "表的备份...");
|
|
|
+ r10 = dropTable(t10);
|
|
|
+ LOG.info("删除完成,执行结果:" + r10);
|
|
|
+
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
}
|