目录

1、基础技术框架

2、完整pom.xml

3、初始化脚本

4、项目结构截图:

5、业务模块说明

6、通用模块说明

7、系统初始化配置

8、系统入口

9、配置参数和日志

10、Mapper 配置文件

11、定时任务实列化

12、程序效果截图:


1、基础技术框架

技术名称 版本
SpringBoot 2.1.9.RELEASE
MyBatis-plus 3.3.1
DM8 18
lombok 1.18.10
hutool-all 5.5.2
druid 1.2.3
swagger3 3.0.0
aop 1.9.4
fastjson 1.2.47
elastic-job 2.1.5

2、完整pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.building</groupId><artifactId>digipower-building</artifactId><version>0.0.1-SNAPSHOT</version><packaging>jar</packaging><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.1.9.RELEASE</version><relativePath /> <!-- lookup parent from repository --></parent><properties><java.version>1.8</java.version><maven-jar-plugin.version>3.1.1</maven-jar-plugin.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><!-- 集成Mybatis-plus --><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.3.1</version></dependency><!-- 集成DM8 驱动包  --><dependency><groupId>dm.jdbc</groupId><artifactId>DmJdbcDriver18</artifactId><version>18</version></dependency><!--集成lombok --><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><!-- 集成guava 工具包 --><!-- 集成hutool-all 工具包 --><dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.5.2</version></dependency><!--druid 数据库连接池 --><dependency><groupId>com.alibaba</groupId><artifactId>druid-spring-boot-starter</artifactId><version>1.2.3</version></dependency><!-- swagger3 接口文档生成器 --><dependency><groupId>io.springfox</groupId><artifactId>springfox-boot-starter</artifactId><version>3.0.0</version><exclusions><exclusion><groupId>org.springframework.plugin</groupId><artifactId>spring-plugin-core</artifactId></exclusion><exclusion><groupId>org.springframework.plugin</groupId><artifactId>spring-plugin-metadata</artifactId></exclusion></exclusions></dependency><dependency><groupId>org.springframework.plugin</groupId><artifactId>spring-plugin-core</artifactId><version>2.0.0.RELEASE</version></dependency><dependency><groupId>org.springframework.plugin</groupId><artifactId>spring-plugin-metadata</artifactId><version>2.0.0.RELEASE</version></dependency><!-- 集成SpringAop --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-aop</artifactId></dependency><!-- 集成Alibaba fastjson --><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.47</version></dependency><!-- 集成elastic-job 分布式定时任务  --><dependency><groupId>com.dangdang</groupId><artifactId>elastic-job-lite-spring</artifactId><version>2.1.5</version></dependency> </dependencies><build><finalName>gcxt-building</finalName><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><configuration><excludes><exclude><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></exclude></excludes></configuration></plugin></plugins></build>
</project>

3、初始化脚本

CREATE TABLE "SYSDBA"."SYS_BUILDING_INFO"
(
"SID" VARCHAR(50) NOT NULL,
"DISTRICT" VARCHAR(50),
"SUB_DISTRICT" VARCHAR(50),
"BUSINESS_ID" VARCHAR(50),
"BASIC_ID" VARCHAR(50),
"TYPE" VARCHAR(50),
"NAME" VARCHAR(50),
"LOCATION" VARCHAR(500),
"ATTRIBUTES" VARCHAR(500),
CLUSTER PRIMARY KEY("SID")) STORAGE(ON "MAIN", CLUSTERBTR) ;COMMENT ON COLUMN "SYSDBA"."SYS_BUILDING_INFO"."ATTRIBUTES" IS '楼栋详情信息';
COMMENT ON COLUMN "SYSDBA"."SYS_BUILDING_INFO"."BASIC_ID" IS '楼栋编码';
COMMENT ON COLUMN "SYSDBA"."SYS_BUILDING_INFO"."BUSINESS_ID" IS '楼栋业务ID';
COMMENT ON COLUMN "SYSDBA"."SYS_BUILDING_INFO"."DISTRICT" IS '行政区域';
COMMENT ON COLUMN "SYSDBA"."SYS_BUILDING_INFO"."LOCATION" IS '楼栋地理位置';
COMMENT ON COLUMN "SYSDBA"."SYS_BUILDING_INFO"."NAME" IS '楼栋名称';
COMMENT ON COLUMN "SYSDBA"."SYS_BUILDING_INFO"."SID" IS '主键';
COMMENT ON COLUMN "SYSDBA"."SYS_BUILDING_INFO"."SUB_DISTRICT" IS '区域街道';
COMMENT ON COLUMN "SYSDBA"."SYS_BUILDING_INFO"."TYPE" IS '业务类型';

4、项目结构截图:

5、业务模块说明

com.digipower.entity = 实体对象定义

com.digipower.mapper= 接口映射

com.digipower.service= 服务定义

com.digipower.service.impl= 服务实列化

com.digipower.controller=业务控制层

package com.digipower.entity;import java.io.Serializable;import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.extension.activerecord.Model;import lombok.Builder;
import lombok.Data;
import lombok.EqualsAndHashCode;@Data
@TableName("sys_building_info")
@EqualsAndHashCode(callSuper = false)
@Builder
@SuppressWarnings("serial")
public class BuildingInfo extends Model<BuildingInfo> implements Serializable{private String sid;private String district;private String subDistrict;private String businessId;private String basicId;private String type;private String name;private String location;private String attributes;
}
package com.digipower.mapper;import org.apache.ibatis.annotations.Mapper;import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.digipower.entity.BuildingInfo;@Mapper
public interface BuildingInfoMapper extends BaseMapper<BuildingInfo> {}
package com.digipower.service;import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.digipower.entity.BuildingInfo;public interface BuildingInfoService extends IService<BuildingInfo>  {/*** 查询列表数据* * @param building  楼栋信息 * @param current 当前页* @param size    每页显示条数* @return*/public Page<BuildingInfo> listData(BuildingInfo building, long current, long size);}
package com.digipower.service.impl;import org.springframework.stereotype.Service;import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.digipower.entity.BuildingInfo;
import com.digipower.mapper.BuildingInfoMapper;
import com.digipower.service.BuildingInfoService;import cn.hutool.core.util.StrUtil;@Service
public class BuildingInfoServiceImpl extends ServiceImpl<BuildingInfoMapper, BuildingInfo> implements BuildingInfoService {@Overridepublic Page<BuildingInfo> listData(BuildingInfo building, long current, long size) {// TODO Auto-generated method stubQueryWrapper<BuildingInfo> queryWrapper = new QueryWrapper<>();if (null != building.getSid()) {queryWrapper.eq("sid", building.getSid());}//districtif (StrUtil.isNotBlank(building.getDistrict())) {queryWrapper.eq("district", building.getDistrict());}// if (StrUtil.isNotBlank(building.getSubDistrict())) {queryWrapper.eq("sub_district", building.getSubDistrict());}if (StrUtil.isNotBlank(building.getName())) {queryWrapper.like("name", building.getName());}return baseMapper.selectPage(new Page<>(current, size), queryWrapper);}}
package com.digipower.controller;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.digipower.common.Response;
import com.digipower.entity.BuildingInfo;
import com.digipower.service.BuildingInfoService;@Controller
@RequestMapping(value = "building")
public class BuildingInfoController {@Autowiredprivate BuildingInfoService buildingInfoService;@RequestMapping(value = "listData")@ResponseBodypublic Response<Page<BuildingInfo>> listData(BuildingInfo auth, @RequestParam(name = "page") long current,@RequestParam(name = "limit") long size) {Page<BuildingInfo> page = buildingInfoService.listData(auth, current, size);return Response.success(page);}}

6、通用模块说明

com.digipower.common= 响应封装和UUID生成工具

com.digipower.common.elastic.job= 定时任务框架封装

package com.digipower.common;import java.io.PrintWriter;import javax.servlet.ServletResponse;import cn.hutool.json.JSONUtil;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
public class Response<T> {/*** 响应码*/private int code;/*** 响应消息体*/private String msg;/*** 响应数据*/private T data;/*** 失败响应* * @param code 响应码* @param msg  响应消息体* @param data 响应数据* @return*/public static <T> Response<T> error(int code, String msg, T data) {return new Response<T>(code, msg, data);}/*** 失败响应* * @param msg 响应消息体* @return*/public static <T> Response<T> error(String msg) {return new Response<T>(500, msg, null);}/*** 成功响应* * @param data 响应数据* @return*/public static <T> Response<T> success(T data) {return new Response<T>(200, null, data);}/*** 成功响应* * @param msg 响应消息体* @return*/public static <T> Response<T> success(String msg) {return new Response<T>(200, msg, null);}/*** 成功响应* * @param msg  响应消息体* @param data 响应数据* @return*/public static <T> Response<T> success(String msg, T data) {return new Response<T>(200, msg, data);}/*** Response输出Json格式* * @param response* @param data     返回数据*/public static void responseJson(ServletResponse response, Object data) {PrintWriter out = null;try {response.setCharacterEncoding("UTF-8");response.setContentType("application/json");out = response.getWriter();out.println(JSONUtil.toJsonStr(data));out.flush();} catch (Exception e) {} finally {if (out != null) {out.close();}}}
}
package com.digipower.common;import java.util.UUID;/*** UUID 工具类* @author zzg**/
public class UUIDUtils {public static String getUUID(){return UUID.randomUUID().toString().replace("-", "");}
}
package com.digipower.common.elastic.job;import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.dangdang.ddframe.job.reg.zookeeper.ZookeeperConfiguration;
import com.dangdang.ddframe.job.reg.zookeeper.ZookeeperRegistryCenter;@Configuration
public class ElasticRegCenterConfig {// zookeeper地址信息@Value("${zookeeper.serverLists}")private String serverList;// 命名空间@Value("${zookeeper.namespace}")private String namespace;@Value("${zookeeper.digest}")private String digest;@Bean(initMethod = "init")public ZookeeperRegistryCenter regCenter() {ZookeeperConfiguration zookeeperConfiguration = new ZookeeperConfiguration(serverList, namespace);if(StringUtils.isNotEmpty(digest)){zookeeperConfiguration.setDigest(digest);}return new ZookeeperRegistryCenter(zookeeperConfiguration);}}
package com.digipower.common.elastic.job;import javax.annotation.PostConstruct;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.Configuration;
import com.dangdang.ddframe.job.api.simple.SimpleJob;
import com.dangdang.ddframe.job.config.JobCoreConfiguration;
import com.dangdang.ddframe.job.config.simple.SimpleJobConfiguration;
import com.dangdang.ddframe.job.lite.config.LiteJobConfiguration;
import com.dangdang.ddframe.job.lite.spring.api.SpringJobScheduler;
import com.dangdang.ddframe.job.reg.zookeeper.ZookeeperRegistryCenter;/*** 分布式任务实例化* @author zzg**/
@Configuration
public class ElasticSchedulerInit {// 日志记录public static final Logger log = LoggerFactory.getLogger(ElasticSchedulerInit.class);@Autowiredprivate ZookeeperRegistryCenter regCenter;@Autowiredprivate ApplicationContext applicationContext;@PostConstructpublic void startSimpleJob() {applicationContext.getBeansWithAnnotation(ElasticSchedulerParam.class).forEach((className, obj) -> {ElasticSchedulerParam config = obj.getClass().getAnnotation(ElasticSchedulerParam.class);String cron = StringUtils.defaultIfBlank(config.cron(), config.value());int shardingTotalCount = config.shardingTotalCount();String shardingItemParameters = config.shardingItemParameters();MyElasticJobListener elasticJobListener = new MyElasticJobListener();SimpleJob simpleJob = (SimpleJob) obj;new SpringJobScheduler(simpleJob, regCenter,getLiteJobConfiguration(simpleJob.getClass(), cron, shardingTotalCount, shardingItemParameters),elasticJobListener).init();});}// 私有方法private LiteJobConfiguration getLiteJobConfiguration(final Class<? extends SimpleJob> jobClass, final String cron,final int shardingTotalCount, final String shardingItemParameters) {return LiteJobConfiguration.newBuilder(new SimpleJobConfiguration(JobCoreConfiguration.newBuilder(jobClass.getName(), cron, shardingTotalCount).shardingItemParameters(shardingItemParameters).build(),jobClass.getCanonicalName())).overwrite(true).build();}}
package com.digipower.common.elastic.job;import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;import org.springframework.core.annotation.AliasFor;/*** 分布式定时任务注解* * @author zzg**/@Target({ ElementType.TYPE })
@Retention(RetentionPolicy.RUNTIME)
@Inherited
@Documented
public @interface ElasticSchedulerParam {@AliasFor("value")String cron() default "";@AliasFor("cron")String value() default "";int shardingTotalCount() default 1;String shardingItemParameters() default "0=0";
}
package com.digipower.common.elastic.job;import java.text.SimpleDateFormat;
import java.util.Date;import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;import com.dangdang.ddframe.job.executor.ShardingContexts;
import com.dangdang.ddframe.job.lite.api.listener.ElasticJobListener;/*** 自定义ElasticJob 定时器* @author zzg**/
public class MyElasticJobListener implements ElasticJobListener {private static final Logger logger = LoggerFactory.getLogger(MyElasticJobListener.class);/*** 长日期格式*/public static String TIME_FORMAT = "yyyy-MM-dd HH:mm:ss";private long beginTime = 0;@Overridepublic void beforeJobExecuted(ShardingContexts shardingContexts) {beginTime = System.currentTimeMillis();logger.info("===>{} JOB BEGIN TIME: {} <===", shardingContexts.getJobName(), beginTime);}@Overridepublic void afterJobExecuted(ShardingContexts shardingContexts) {long endTime = System.currentTimeMillis();logger.info("===>{} JOB END TIME: {},TOTAL CAST: {} <===", shardingContexts.getJobName(), endTime,endTime - beginTime);}/*** 将长整型数字转换为日期格式的字符串** @param time* @param format* @return*/public static String convert2String(long time, String format) {if (time > 0l) {if (StringUtils.isBlank(format))format = TIME_FORMAT;SimpleDateFormat sf = new SimpleDateFormat(format);Date date = new Date(time);return sf.format(date);}return "";}}

7、系统初始化配置

com.digipower.config = 系统配置化

package com.digipower.config;import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.transaction.annotation.EnableTransactionManagement;import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;@Configuration
@EnableTransactionManagement(proxyTargetClass = true)
public class MybatisPlusConfig {/*** 注入分页插件*/@Beanpublic PaginationInterceptor paginationInterceptor() {return new PaginationInterceptor();}
}

8、系统入口

package com.digipower;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;/*** * @ClassName:  BuildingApplication   * @Description: 程序启动入口   */
@SpringBootApplication
public class BuildingApplication {public static void main(String[] args) {// TODO Auto-generated method stubSpringApplication.run(BuildingApplication.class, args);}}

9、配置参数和日志

application.properties

# \u6307\u5B9A\u670D\u52A1\u7AEF\u53E3
server.port=5088
# \u6307\u5B9A\u65E5\u5FD7\u6587\u4EF6\u914D\u7F6E
logging.config=classpath:logback.xml# DM setting
spring.datasource.url=jdbc:dm://127.0.0.1:5256/SYSDBA
spring.datasource.username=SYSDBA
spring.datasource.password=SYSDBA
spring.datasource.driver-class-name=dm.jdbc.driver.DmDriver
# druid \u6570\u636E\u5E93\u8FDE\u63A5\u6C60\u914D\u7F6E
# \u4E0B\u9762\u4E3A\u8FDE\u63A5\u6C60\u7684\u8865\u5145\u8BBE\u7F6E\uFF0C\u5E94\u7528\u5230\u4E0A\u9762\u6240\u6709\u6570\u636E\u6E90\u4E2D
# \u521D\u59CB\u5316\u5927\u5C0F\uFF0C\u6700\u5C0F\uFF0C\u6700\u5927
spring.datasource.druid.initialSize=10
spring.datasource.druid.minIdle=10
spring.datasource.druid.maxActive=200
# \u914D\u7F6E\u83B7\u53D6\u8FDE\u63A5\u7B49\u5F85\u8D85\u65F6\u7684\u65F6\u95F4
spring.datasource.druid.maxWait=6000
# \u914D\u7F6E\u95F4\u9694\u591A\u4E45\u624D\u8FDB\u884C\u4E00\u6B21\u68C0\u6D4B\uFF0C\u68C0\u6D4B\u9700\u8981\u5173\u95ED\u7684\u7A7A\u95F2\u8FDE\u63A5\uFF0C\u5355\u4F4D\u662F\u6BEB\u79D2
spring.datasource.druid.timeBetweenEvictionRunsMillis=60000
# \u914D\u7F6E\u4E00\u4E2A\u8FDE\u63A5\u5728\u6C60\u4E2D\u6700\u5C0F\u751F\u5B58\u7684\u65F6\u95F4\uFF0C\u5355\u4F4D\u662F\u6BEB\u79D2
spring.datasource.druid.minEvictableIdleTimeMillis=100000
spring.datasource.druid.validationQuery=SELECT 1 FROM DUAL
spring.datasource.druid.testWhileIdle=true
spring.datasource.druid.testOnBorrow=false
spring.datasource.druid.testOnReturn=false
# \u6253\u5F00PSCache\uFF0C\u5E76\u4E14\u6307\u5B9A\u6BCF\u4E2A\u8FDE\u63A5\u4E0APSCache\u7684\u5927\u5C0F
spring.datasource.druid.poolPreparedStatements=true
spring.datasource.druid.maxPoolPreparedStatementPerConnectionSize=20
# \u914D\u7F6E\u76D1\u63A7\u7EDF\u8BA1\u62E6\u622A\u7684filters\uFF0C\u53BB\u6389\u540E\u76D1\u63A7\u754C\u9762sql\u65E0\u6CD5\u7EDF\u8BA1\uFF0C'wall'\u7528\u4E8E\u9632\u706B\u5899
spring.datasource.druid.filters=stat,slf4j
# \u901A\u8FC7connectProperties\u5C5E\u6027\u6765\u6253\u5F00mergeSql\u529F\u80FD\uFF1B\u6162SQL\u8BB0\u5F55
spring.datasource.druid.connectionProperties=druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000# \u914D\u7F6EMyBatis-plus
mybatis-plus.mapper-locations=classpath:mapper/*.xml
mybatis-plus.global-config.db-config.id-type=AUTO# elastic-job\u5B9A\u65F6\u4EFB\u52A1\u914D\u7F6E\u53C2\u6570
zookeeper.serverLists=127.0.0.1:2181
zookeeper.namespace=building_elasticjob
zookeeper.digest=# setting
building.url=http://127.0.0.1/gw/BUILDING/shenzhenS/LOU
building.key=KZZfAHBau2Xme6irarMoD1ohume1E7DoGzQdGeJCE1GgnPIOmvz2U94Cf9vqM72jnjKgoyHmppBgwwLi6wZED0a/RtzEZ7grD04kOLFcLAE=

logback.xml

<?xml version="1.0" encoding="UTF-8"?> <!-- 从高到地低 OFF 、 FATAL 、 ERROR 、 WARN 、 INFO 、 DEBUG 、 TRACE 、 ALL -->
<!-- 日志输出规则  根据当前ROOT 级别,日志输出时,级别高于root默认的级别时  会输出 -->
<!-- 以下  每个配置的 filter 是过滤掉输出文件里面,会出现高级别文件,依然出现低级别的日志信息,通过filter 过滤只记录本级别的日志-->  <!-- 属性描述 scan:性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true scanPeriod:设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,
默认单位是毫秒。当scan为true时,此属性生效。默认的时间间隔为1分钟。   debug:当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false。 -->
<configuration scan="true" scanPeriod="60 seconds" debug="false">  <!-- 定义日志文件 输入位置 -->  <property name="log_dir" value="/logs/building" />  <!-- 日志最大的历史 30天 -->  <property name="maxHistory" value="30"/>  <!-- ConsoleAppender 控制台输出日志 -->  <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">  <!-- 对日志进行格式化 -->  <encoder>  <pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger -%msg%n</pattern>  </encoder>  </appender>  <!-- ERROR级别日志 -->  <!-- 滚动记录文件,先将日志记录到指定文件,当符合某个条件时,将日志记录到其他文件 RollingFileAppender-->  <appender name="ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender">  <!-- 过滤器,只记录WARN级别的日志 -->  <filter class="ch.qos.logback.classic.filter.LevelFilter">  <level>ERROR</level>  <onMatch>ACCEPT</onMatch>  <onMismatch>DENY</onMismatch>  </filter>  <!-- 最常用的滚动策略,它根据时间来制定滚动策略.既负责滚动也负责出发滚动 -->  <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">  <!--日志输出位置  可相对、和绝对路径 -->  <fileNamePattern>${log_dir}/%d{yyyy-MM-dd}/error.log</fileNamePattern>  <!-- 可选节点,控制保留的归档文件的最大数量,超出数量就删除旧文件假设设置每个月滚动,且<maxHistory>是6,  则只保存最近6个月的文件,删除之前的旧文件。注意,删除旧文件是,那些为了归档而创建的目录也会被删除-->  <maxHistory>${maxHistory}</maxHistory>  </rollingPolicy>  <encoder>  <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n</pattern>  </encoder>  </appender>  <!-- WARN级别日志 appender -->  <appender name="WARN" class="ch.qos.logback.core.rolling.RollingFileAppender">  <!-- 过滤器,只记录WARN级别的日志 -->  <filter class="ch.qos.logback.classic.filter.LevelFilter">  <level>WARN</level>  <onMatch>ACCEPT</onMatch>  <onMismatch>DENY</onMismatch>  </filter>  <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">  <fileNamePattern>${log_dir}/%d{yyyy-MM-dd}/warn.log  </fileNamePattern>  <maxHistory>${maxHistory}</maxHistory>  </rollingPolicy>  <encoder>  <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n</pattern>  </encoder>  </appender>  <!-- INFO级别日志 appender -->  <appender name="INFO" class="ch.qos.logback.core.rolling.RollingFileAppender">  <!-- 过滤器,只记录INFO级别的日志 -->  <filter class="ch.qos.logback.classic.filter.LevelFilter">  <level>INFO</level>  <onMatch>ACCEPT</onMatch>  <onMismatch>DENY</onMismatch>  </filter>  <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">  <fileNamePattern>${log_dir}/%d{yyyy-MM-dd}/info.log  </fileNamePattern>  <maxHistory>${maxHistory}</maxHistory>  </rollingPolicy>  <encoder>  <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n</pattern>  </encoder>  </appender>  <!-- DEBUG级别日志 appender -->  <appender name="DEBUG" class="ch.qos.logback.core.rolling.RollingFileAppender">  <filter class="ch.qos.logback.classic.filter.LevelFilter">  <level>DEBUG</level>  <onMatch>ACCEPT</onMatch>  <onMismatch>DENY</onMismatch>  </filter>  <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">  <fileNamePattern>${log_dir}/%d{yyyy-MM-dd}/debug.log  </fileNamePattern>  <maxHistory>${maxHistory}</maxHistory>  </rollingPolicy>  <encoder>  <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n</pattern>  </encoder>  </appender>  <logger name="org.springframework.web"/><logger name="com.digipower" /><!-- root级别   DEBUG -->  <root level="INFO">  <!-- 控制台输出 -->  <appender-ref ref="STDOUT" />  <!-- 文件输出 -->  <appender-ref ref="ERROR" />  <appender-ref ref="INFO" />  <appender-ref ref="WARN" />  <appender-ref ref="DEBUG" />  </root>
</configuration>

10、Mapper 配置文件

BuildingInfoMapper.xml

<?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="com.digipower.mapper.BuildingInfoMapper"></mapper>

11、定时任务实列化

com.digipower.job = 定时任务实列化对象

package com.digipower.job;import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;import com.dangdang.ddframe.job.api.ShardingContext;
import com.dangdang.ddframe.job.api.simple.SimpleJob;
import com.digipower.common.UUIDUtils;
import com.digipower.common.elastic.job.ElasticSchedulerParam;
import com.digipower.entity.BuildingInfo;
import com.digipower.service.BuildingInfoService;import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.http.HttpUtil;
import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONObject;@ElasticSchedulerParam(cron = "* */2 * * * ?", shardingTotalCount = 1, shardingItemParameters = "0=Core")
@Component
public class BuildingJobDemo implements SimpleJob {private static final Logger log = LoggerFactory.getLogger(BuildingJobDemo.class);@Value("${building.url}")private String url;@Value("${building.key}")private String key;@Autowiredprivate BuildingInfoService buildingInfoService;@Overridepublic void execute(ShardingContext shardingContext) {// TODO Auto-generated method stubint num = buildingInfoService.count();System.out.println("楼栋数据总数:" + num);// 存在记录不执行插入操作// hutool 发起网络请求Map<String, Object> map = new HashMap<>();// 存放参数map.put("pageNum", 1);map.put("pageSize", 500);map.put("district", "龙岗区");map.put("subDistrict", "坂田街道");map.put("operation", "list");HashMap<String, String> headers = new HashMap<>();// 存放请求头,可以存放多个请求头headers.put("Content-Type", "application/json");headers.put("szvsud-license-key", key);// 发送POST请求并接收响应数据String result = HttpUtil.createPost(url).addHeaders(headers).form(map).execute().body();if (StrUtil.isNotEmpty(result)) {analyzeJSON(result);}}public void analyzeJSON(String str) {List<BuildingInfo> list = new ArrayList<BuildingInfo>();System.out.println("后台响应:" + str);JSONObject json = new JSONObject(str);boolean success = json.getBool("success");System.out.println("楼栋数据请求是否成功:" + success);if (success) {JSONArray array = json.getJSONArray("dataList");for (int i = 0; i < array.size(); i++) {JSONObject jsonObject = array.getJSONObject(i);BuildingInfo obj = BuildingInfo.builder().attributes(jsonObject.getJSONObject("attributes").toString()).basicId(jsonObject.getStr("basicId")).businessId(jsonObject.getStr("id")).district("龙岗区").location(jsonObject.getJSONObject("location").toString()).name(jsonObject.getStr("name")).sid(UUIDUtils.getUUID()).subDistrict("坂田街道").type(jsonObject.getStr("type")).build();list.add(obj);}}if (CollectionUtil.isNotEmpty(list)) {buildingInfoService.saveBatch(list);}}}

12、程序效果截图:

SpringBoot + MyBatis-Plus+DM8 +Elasic-job 通用代码框架相关推荐

  1. python 解决IndentationError: unexpected unindent的报错!和通用代码框架,import requests def getHTMLText(url)...的解释

    python报错IndentationError: expected an indented block. 解决办法很简单,是脚本缩进的问题,检查脚本缩进是否有空格和tab混用的情况或者是缩进明显不对 ...

  2. 爬取京东网页的通用代码框架及其问题(MOOC)

    在MOOC学习了用python爬取网页的方法.因为和上一次看视频相隔时间太久,有一些知识点遗忘了,查了一些资料整理下来. 首先,爬取网页的通用代码框架如下: >>> import r ...

  3. 网络爬虫学习2 - 爬取网页的通用代码框架、HTTP协议、Requests库的各种方法

    网络爬虫MOOC学习打卡 - 第二天 文章目录 网络爬虫MOOC学习打卡 - 第二天 一.爬取网页的通用代码框架 1.理解requests库的异常 2.Respones类提供了一个方法 -- r.ra ...

  4. python中response对象的属性,python爬虫response对象及通用代码框架

    ** - 1.Response对象的属性 ** 属性 说明 r.status_code HTTp请求的返回状态,200表示连接成功,404表示失败 r.text HTTp响应内容的字符串形式,即url ...

  5. 爬取网页的通用代码框架

    import requests def getHTMLText(url)try:r = requests.get(url,timeout=30)r.raise_for_status()r.encodi ...

  6. 一篇搞定 SpringBoot+Mybatis+Shiro 实现多角色权限管理

    初衷:我在网上想找整合springboot+mybatis+shiro并且多角色认证的博客,发现找了好久也没有找到想到的,现在自己会了,就打算写个博客分享出去,希望能帮到你. 原创不易,请点赞支持! ...

  7. 个人信息管理系统代码_Thymeleaf+SpringBoot+Mybatis实现的易游网旅游信息管理系统...

    项目简介 项目源码:麻烦转发后关注@JAVA梦想口服液私信回复[源码]即可获取! 本系统是基于Thymeleaf+SpringBoot+Mybatis.是非常标准的SSM三大框架(SpringBoot ...

  8. javaweb 图书管理系统完整代码_Thymeleaf+SpringBoot+Mybatis实现的家庭财务管理系统

    项目简介 项目来源于: https:// gitee.com/darlingzhangs h/graduation_project 本系统是基于Thymeleaf+SpringBoot+Mybatis ...

  9. 一个基于SpringBoot + Mybatis + Vue的代码生成器

    点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! code-gen 一款代码生成工具,可自定义模板生成不同的 ...

最新文章

  1. 详解目标检测之Neck选择
  2. 安装firefox 3.6.4 (ubuntu 10.04)
  3. golang实现生产者和消费者
  4. golang的new函数_new()和make()函数以及Golang中的示例
  5. 【Django】Django Debug Toolbar调试工具配置
  6. 求最长回文串-从动态规划到马拉车之路(下)
  7. Ranger-Usersync安装
  8. RabbitMq(十三)消息发送确认与回调机制
  9. java word转图片tiff_Word 2010中将文档保存为TIFF图片的方法
  10. 北京东二环——东四联通机房
  11. Linux下MongoDB非正常关闭启动异常解决方法
  12. Struts 标签 —— Bean 标签
  13. 主流开源 BI 产品对比---------2020开源BI工具都有哪些,哪个好用
  14. 陈华钧等 | OpenKG区块链:构建可信开放的联邦知识图谱平台
  15. 高德地图接口申请 地图接口集成 高德地图API文档
  16. 使用C++实现FC红白机模拟器 Cartridge 与 Mapper(实现篇)
  17. 从联立方程式看机器学习的数学模式
  18. win10修改docker镜像的存储位置
  19. C语言中exit(0)、exit(1)、exit(2)有什么不同?
  20. 进制转换之 十进制转换成m进制

热门文章

  1. 14.CPU调度——CPU调度策略
  2. 微信小程序转发动态消息的问题
  3. Photoshop制作倒影的两种方法
  4. 树莓派cpu检测_利用xively监控树莓派的CPU温度
  5. 遇见逆水寒服务器修复,遇见逆水寒暂时关服修整,改为乙女游戏,下次再见就是氪金之时?...
  6. pyqt中label标签填充背景色
  7. 036 《你喜欢的样子我都有》观后感
  8. 暗影格斗3为什么显示服务器无响应,暗影格斗3黑屏怎么办 暗影格斗3黑屏解决方法推荐...
  9. 年轻人的第一台智能音箱:小米小爱音箱Play版
  10. 页面中到达顶部和底部的按钮