lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/entity/LogTable.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/job/ImportXmlToDataJob.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/LogTableMapper.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/LogTableMapper.xml | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/ILogTableService.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/LogTableServiceImpl.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/util/SqlExecutor.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
lxzn-module-system/lxzn-system-start/src/main/resources/application-dev.yml | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/entity/LogTable.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,39 @@ package org.jeecg.modules.mdc.entity; import com.baomidou.mybatisplus.annotation.TableName; import io.swagger.annotations.ApiModel; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.experimental.Accessors; import java.io.Serializable; import java.util.Date; /** * @author Lius * @date 2024/12/18 14:19 */ @Data @TableName("log_table") @EqualsAndHashCode(callSuper = false) @Accessors(chain = true) @ApiModel(value = "log_table对象", description = "sqlè®°å½è¡¨") public class LogTable implements Serializable { private static final long serialVersionUID = 953864495681756550L; /** * æä½ç±»åï¼INSERT / UPDATE / DELETEï¼ */ private String action; /** * å建æ¶é´ */ private Date createTime; /** * sqlè®°å½ */ private String sqlLog; } lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/job/ImportXmlToDataJob.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,62 @@ package org.jeecg.modules.mdc.job; import lombok.extern.slf4j.Slf4j; import org.jeecg.common.util.DateUtils; import org.jeecg.modules.mdc.service.ILogTableService; import org.jeecg.modules.mdc.util.ThrowableUtil; import org.jeecg.modules.quartz.entity.QuartzJob; import org.jeecg.modules.quartz.entity.SysQuartzLog; import org.jeecg.modules.quartz.service.IQuartzJobService; import org.jeecg.modules.quartz.service.ISysQuartzLogService; import org.jeecg.modules.system.service.ISysAnnouncementService; import org.quartz.Job; import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; import javax.annotation.Resource; import java.util.Date; import java.util.List; /** * @author Lius * @date 2024/12/19 16:43 */ @Slf4j public class ImportXmlToDataJob implements Job { @Resource private ISysQuartzLogService sysQuartzLogService; @Resource private IQuartzJobService quartzJobService; @Resource private ISysAnnouncementService sysAnnouncementService; @Resource private ILogTableService logTableService; @Override public void execute(JobExecutionContext context) throws JobExecutionException { SysQuartzLog quartzLog = new SysQuartzLog(); quartzLog.setCreateTime(new Date()); List<QuartzJob> byJobClassName = this.quartzJobService.findByJobClassName(this.getClass().getName()); if (byJobClassName != null && !byJobClassName.isEmpty()) { quartzLog.setJobId(byJobClassName.get(0).getId()); } log.info("宿¶å¯¼å ¥sqlæ°æ®ä»»å¡ ImportXmlToDataJob start! æ¶é´:" + DateUtils.now()); long startTime = System.currentTimeMillis(); try { logTableService.importXmlToData(); quartzLog.setIsSuccess(0); } catch (Exception e) { quartzLog.setIsSuccess(-1); quartzLog.setExceptionDetail(ThrowableUtil.getStackTrace(e)); // åéæ¶æ¯éç¥ sysAnnouncementService.jobSendMessage("宿¶å¯¼å ¥sqlæ°æ®ä»»å¡", quartzLog.getExceptionDetail()); } long endTime = System.currentTimeMillis(); quartzLog.setExecutionTime(Integer.parseInt(String.valueOf(endTime - startTime))); sysQuartzLogService.save(quartzLog); } } lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/LogTableMapper.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,11 @@ package org.jeecg.modules.mdc.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.jeecg.modules.mdc.entity.LogTable; /** * @author Lius * @date 2024/12/18 14:24 */ public interface LogTableMapper extends BaseMapper<LogTable> { } lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/LogTableMapper.xml
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="org.jeecg.modules.mdc.mapper.LogTableMapper"> </mapper> lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/ILogTableService.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,17 @@ package org.jeecg.modules.mdc.service; import com.baomidou.mybatisplus.extension.service.IService; import org.jeecg.modules.mdc.entity.LogTable; /** * @author Lius * @date 2024/12/18 14:29 */ public interface ILogTableService extends IService<LogTable> { /** * å¯¼å ¥åæ¥æ°æ®sqlæ§è¡å°æ°æ®åº */ void importXmlToData(); } lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/LogTableServiceImpl.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,80 @@ package org.jeecg.modules.mdc.service.impl; import cn.hutool.core.io.FileUtil; import cn.hutool.core.io.file.FileReader; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import lombok.extern.slf4j.Slf4j; import org.jeecg.common.exception.JeecgBootException; import org.jeecg.modules.mdc.entity.LogTable; import org.jeecg.modules.mdc.mapper.LogTableMapper; import org.jeecg.modules.mdc.service.ILogTableService; import org.jeecg.modules.mdc.util.SqlExecutor; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; import java.io.File; import java.util.ArrayList; import java.util.List; /** * @author Lius * @date 2024/12/18 14:29 */ @Service @Slf4j public class LogTableServiceImpl extends ServiceImpl<LogTableMapper, LogTable> implements ILogTableService { @Value("${fileService.localFilePath}") private String localFilePath; @Value("${fileService.newFilePath}") private String newFilePath; @Value("${fileService.failedLocFilePath}") private String failedLocFilePath; @Resource private SqlExecutor sqlExecutor; /** * å¯¼å ¥åæ¥æ°æ®sqlæ§è¡å°æ°æ®åº */ @Override @Transactional(rollbackFor = Exception.class) public void importXmlToData() { File[] files = FileUtil.ls(localFilePath); List<String> failedSqlList = new ArrayList<>(); // ç¨äºå卿§è¡å¤±è´¥ç SQL for (File file : files) { if (file.isFile()) { String loFilePath = localFilePath + file.getName(); FileReader fileReader = new FileReader(loFilePath); List<String> sqlList = fileReader.readLines(); log.info("æå读åå°{}æ¡sql,æ§è¡æä½", sqlList.size()); for (String sql : sqlList) { try { sqlExecutor.execute(sql); } catch (Exception e) { failedSqlList.add(sql); } } if (!failedSqlList.isEmpty()) { try { FileUtil.appendLines(failedSqlList, failedLocFilePath, "UTF-8"); } catch (Exception e) { throw new JeecgBootException("æ°æ®åå ¥æä»¶å¤±è´¥ï¼"); } } if (Integer.parseInt(file.getName().substring(file.getName().length() - 10, file.getName().length() - 4)) == 1) { // å é¤å岿件 FileUtil.clean(newFilePath); } // å¤ä»½ FileUtil.move(new File(loFilePath), new File(newFilePath + file.getName()), true); } } } } lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/util/SqlExecutor.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,29 @@ package org.jeecg.modules.mdc.util; import org.apache.ibatis.jdbc.SqlRunner; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.springframework.stereotype.Component; import javax.annotation.Resource; /** * @author Lius * @date 2025/1/3 13:26 */ @Component public class SqlExecutor { @Resource private SqlSessionFactory sqlSessionFactory; public void execute(String sql) { try (SqlSession sqlSession = sqlSessionFactory.openSession(true)) { SqlRunner runner = new SqlRunner(sqlSession.getConnection()); runner.run(sql); } catch (Exception e) { // e.printStackTrace(); throw new RuntimeException("Error executing SQL: " + sql, e); } } } lxzn-module-system/lxzn-system-start/src/main/resources/application-dev.yml
@@ -321,3 +321,8 @@ interval: 10000 # çæ§é´é(ms) security: encryption-key: 1234567890abcdef # å è§£å¯ç§é¥ #mdcæä»¶è·¯å¾é ç½® fileService: localFilePath: D:/data/sql/ #æ¬å°æä»¶è·¯å¾ newFilePath: D:/data/bak/ #å¤ä»½æä»¶è·¯å¾ failedLocFilePath: D:/data/failed/failed.sql #失败æä»¶è·¯å¾