当前位置: 首页 > news >正文

正则采集器之二——后台搭建

本人是java程序员,所以使用java界流行的架构来搭建后台。后台使用java作为后端语言,mysql作为数据库,redis作为缓存中间件。采用SpringBoot作为java端依赖管理、bean生命周期管理的容器,mybatis作为数据库持久化框架,shiro作为鉴权框架。

1、新建maven项目

命名为reptile,接着加入依赖:

<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 https://maven.apache.org/xsd/maven-4.0.0.xsd"><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.4.2</version></parent><modelVersion>4.0.0</modelVersion><groupId>com.learn.reptile</groupId><artifactId>reptile</artifactId><version>0.0.1-SNAPSHOT</version><properties><java.version>1.8</java.version><mybatis.plus.version>3.4.2</mybatis.plus.version><druid.version>1.1.18</druid.version><mysql.version>8.0.13</mysql.version><!--<log4j.version>1.2.17</log4j.version>--><hutool.version>5.5.8</hutool.version><guava.version>28.1-jre</guava.version><shiro.version>1.13.0</shiro.version><httpclient.version>4.5.3</httpclient.version></properties><dependencies><!-- Druid引入 --><dependency><groupId>com.alibaba</groupId><artifactId>druid-spring-boot-starter</artifactId><version>${druid.version}</version></dependency><!-- 数据源驱动 --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>${mysql.version}</version></dependency><!-- mybatis-plus依赖 --><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>${mybatis.plus.version}</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><exclusions><exclusion><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-logging</artifactId></exclusion></exclusions></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-log4j2</artifactId><version>2.4.2</version></dependency><!-- spring-boot-starter-data-redis --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-aop</artifactId></dependency><dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><!--            <optional>true</optional>--></dependency><!-- guava支持 --><dependency><groupId>com.google.guava</groupId><artifactId>guava</artifactId><version>${guava.version}</version></dependency><dependency><groupId>com.alibaba.fastjson2</groupId><artifactId>fastjson2</artifactId><version>2.0.13</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><scope>runtime</scope><optional>true</optional></dependency><!--        shiro 核心类库--><dependency><groupId>org.apache.shiro</groupId><artifactId>shiro-core</artifactId><version>${shiro.version}</version></dependency><!-- shiro 整合sping --><dependency><groupId>org.apache.shiro</groupId><artifactId>shiro-spring</artifactId><version>${shiro.version}</version></dependency><!-- 日志框架依赖 --><!--<dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>${log4j.version}</version></dependency>--><dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpclient</artifactId><version>${httpclient.version}</version></dependency><dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>${hutool.version}</version></dependency><!--        okhttp依赖--><dependency><groupId>com.squareup.okhttp3</groupId><artifactId>okhttp</artifactId><version>4.9.1</version></dependency></dependencies><build><resources><resource><directory>src/main/resources</directory><filtering>true</filtering></resource><resource><directory>src/main/java</directory><includes><include>**/*.xml</include></includes></resource></resources><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><configuration><source>8</source><target>8</target></configuration></plugin><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><configuration><includeSystemScope>true</includeSystemScope></configuration><executions><execution><goals><goal>repackage</goal></goals></execution></executions></plugin></plugins></build>
</project>

接着新建包

  • com.learn.reptile.config 配置文件
  • com.learn.reptile.entity 实体类
  • com.learn.reptile.mapper 数据库操作接口
  • com.learn.reptile.utils 工具类
  • com.learn.reptile.web web层类

新建启动类 ReptileApplication

package com.learn.reptile;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication(scanBasePackages = "com.learn.reptile")
public class ReptileApplication {public static void main(String[] args) {SpringApplication.run(ReptileApplication.class, args);}}

2、配置文件

在src/main/resources下新建配置文件application.yml,内容如下:

server:port: 8080spring:application:name: reptilemain:allow-bean-definition-overriding: truejackson:date-format: yyyy-MM-dd HH:mmtime-zone: GMT+8servlet:multipart:max-file-size: 100MBmax-request-size: 100MBredis:database: 1host: sincerely-hostpassword: 85861367LiGzydatasource:username: testpassword: testurl: jdbc:mysql://localhost:3306/reptile?useUnicode=true&useSSL=false&characterEncoding=utf-8&serverTimezone=Asia/Shanghai&allowMultiQueries=true&allowPublicKeyRetrieval=truedriver-class-name: com.mysql.cj.jdbc.Driverinitial-size: 2min-idle: 1max-active: 20max-wait: 60000timeBetweenEvictionRunsMillis: 60000minEvictableIdleTimeMillis: 300000validationQuery: "select 'x'"testWhileIdle: truetestOnBorrow: falsetestOnReturn: falsepoolPreparedStatements: truemaxPoolPreparedStatementPerConnectionSize: 20filters: statmybatis-plus:global-config:id-type: 0db-column-underline: falserefresh-mapper: truetype-aliases-package: com.learn.reptile.entity.pomapper-locations: classpath:/mapper/*.xmlconfiguration:log-impl: org.apache.ibatis.logging.stdout.StdOutImpllogging:config: classpath:log4j2.xmlshiro:session-timeout: 1000000

log4j2.xml定义好日志级别、记录位置和格式

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN" monitorInterval="30"><Properties><Property name="LOG_PATTERN">%d{yyyy-MM-dd HH:mm:ss.SSS} %5p %logger{36} --- [%15.15t] %l : %m%n</Property></Properties><Appenders><Console name="Console" target="SYSTEM_OUT" follow="true"><PatternLayout pattern="${LOG_PATTERN}"/></Console><RollingRandomAccessFile name="DebugFile"fileName="logs/debug.log"filePattern="logs/debug-%d{yyyy-MM-dd}.log"><PatternLayout pattern="${LOG_PATTERN}"/><Policies><TimeBasedTriggeringPolicy interval="1" modulate="true" /><SizeBasedTriggeringPolicy size="10MB" /></Policies><!-- Max 10 files will be created everyday --><DefaultRolloverStrategy max="10"><Delete basePath="logs" maxDepth="10"><!-- Delete all files older than 30 days --><IfLastModified age="30d" /></Delete></DefaultRolloverStrategy></RollingRandomAccessFile><Async name="AsyncDebugFile"><AppenderRef ref="DebugFile" /></Async><RollingRandomAccessFile name="InfoFile"fileName="logs/info.log"filePattern="logs/info-%d{yyyy-MM-dd}.log"><PatternLayout pattern="${LOG_PATTERN}"/><Policies><TimeBasedTriggeringPolicy interval="1" modulate="true" /><SizeBasedTriggeringPolicy size="10MB" /></Policies><!-- Max 10 files will be created everyday --><DefaultRolloverStrategy max="10"><Delete basePath="logs" maxDepth="10"><!-- Delete all files older than 30 days --><IfLastModified age="30d" /></Delete></DefaultRolloverStrategy></RollingRandomAccessFile><Async name="AsyncInfoFile"><AppenderRef ref="InfoFile" /></Async><RollingRandomAccessFile name="WarnFile"fileName="logs/warn.log"filePattern="logs/warn-%d{yyyy-MM-dd}.log"><PatternLayout pattern="${LOG_PATTERN}"/><Policies><TimeBasedTriggeringPolicy interval="1" modulate="true" /><SizeBasedTriggeringPolicy size="10MB" /></Policies><!-- Max 10 files will be created everyday --><DefaultRolloverStrategy max="10"><Delete basePath="logs" maxDepth="10"><!-- Delete all files older than 30 days --><IfLastModified age="30d" /></Delete></DefaultRolloverStrategy></RollingRandomAccessFile><Async name="AsyncWarnFile"><AppenderRef ref="WarnFile" /></Async><RollingRandomAccessFile name="ErrorFile"fileName="logs/error.log"filePattern="logs/error-%d{yyyy-MM-dd}.log"><PatternLayout pattern="${LOG_PATTERN}"/><Policies><TimeBasedTriggeringPolicy interval="1" modulate="true" /><SizeBasedTriggeringPolicy size="10MB" /></Policies><!-- Max 10 files will be created everyday --><DefaultRolloverStrategy max="10"><Delete basePath="logs" maxDepth="10"><!-- Delete all files older than 30 days --><IfLastModified age="30d" /></Delete></DefaultRolloverStrategy></RollingRandomAccessFile><Async name="AsyncErrorFile"><AppenderRef ref="ErrorFile" /></Async></Appenders><Loggers><Logger name="com.learn.reptile" level="debug" additivity="false"><AppenderRef ref="Console" /><AppenderRef ref="AsyncDebugFile" /></Logger><Root level="info"><AppenderRef ref="Console" /><AppenderRef ref="AsyncDebugFile" /><AppenderRef ref="AsyncInfoFile" /><AppenderRef ref="AsyncWarnFile" /><AppenderRef ref="AsyncErrorFile" /></Root></Loggers>
</Configuration>

github代码:GitHub - guzhangyu/reptile-api: 商品正则采集器

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 前后端分离开发遵循接口规范-YAPI
  • 如何使用 Puppeteer 绕过 Akamai
  • Java导出Excel给每一列设置不同样式示例
  • 谷粒商城实战笔记-64-商品服务-API-品牌管理-OSS前后联调测试上传
  • 【BSV生态亮点】体育进入区块链时代:波兰奥委会与Zetly建立战略伙伴关系
  • 【Golang 面试 - 基础题】每日 5 题(九)
  • WPF多语言国际化,中英文切换
  • day7 使用 Protobuf 通信
  • 层次特征的尺度艺术:sklearn中的缩放技术
  • 【语音识别和生成】语音识别和语音合成技术
  • 基于SpringBoot+Vue前后端分离的高校实验室预约管理系统的设计与实现
  • 细说MCU的DAC改变输出信号频率的方法
  • AUTOSAR BSW OBD Config 配置
  • 第09课 Scratch入门篇:小鸡啄米-自制积木实现
  • 随堂测小程序的设计
  • IE9 : DOM Exception: INVALID_CHARACTER_ERR (5)
  • JS中 map, filter, some, every, forEach, for in, for of 用法总结
  • 【399天】跃迁之路——程序员高效学习方法论探索系列(实验阶段156-2018.03.11)...
  • CentOS 7 防火墙操作
  • eclipse的离线汉化
  • httpie使用详解
  • JAVA_NIO系列——Channel和Buffer详解
  • Java比较器对数组,集合排序
  • Laravel5.4 Queues队列学习
  • mysql innodb 索引使用指南
  • passportjs 源码分析
  • React-flux杂记
  • Shadow DOM 内部构造及如何构建独立组件
  • vue和cordova项目整合打包,并实现vue调用android的相机的demo
  • webpack+react项目初体验——记录我的webpack环境配置
  • 今年的LC3大会没了?
  • 如何设计一个微型分布式架构?
  • 通过来模仿稀土掘金个人页面的布局来学习使用CoordinatorLayout
  • 原创:新手布局福音!微信小程序使用flex的一些基础样式属性(一)
  • media数据库操作,可以进行增删改查,实现回收站,隐私照片功能 SharedPreferences存储地址:
  • 没有任何编程基础可以直接学习python语言吗?学会后能够做什么? ...
  • ​zookeeper集群配置与启动
  • ​中南建设2022年半年报“韧”字当头,经营性现金流持续为正​
  • # Spring Cloud Alibaba Nacos_配置中心与服务发现(四)
  • # 计算机视觉入门
  • $().each和$.each的区别
  • (32位汇编 五)mov/add/sub/and/or/xor/not
  • (LeetCode) T14. Longest Common Prefix
  • (PADS学习)第二章:原理图绘制 第一部分
  • (八)Flask之app.route装饰器函数的参数
  • (附源码)ssm教师工作量核算统计系统 毕业设计 162307
  • (附源码)ssm旅游企业财务管理系统 毕业设计 102100
  • (附源码)计算机毕业设计ssm基于Internet快递柜管理系统
  • .NET 4.0中使用内存映射文件实现进程通讯
  • .NET Framework与.NET Framework SDK有什么不同?
  • .Net 访问电子邮箱-LumiSoft.Net,好用
  • .NET 给NuGet包添加Readme
  • .NET 使用 JustAssembly 比较两个不同版本程序集的 API 变化
  • .NET/C# 中设置当发生某个特定异常时进入断点(不借助 Visual Studio 的纯代码实现)
  • .NET处理HTTP请求