SpringBoot==(mybatis-plus-boot使用)
-
创建Maven项目,配置常用依赖
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.0.7.RELEASE</version> </parent> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <spider-flow.version>${project.version}</spider-flow.version> <alibaba.fastjson.version>1.2.58</alibaba.fastjson.version> <alibaba.druid.version>1.1.16</alibaba.druid.version> <alibaba.transmittable.version>2.11.2</alibaba.transmittable.version> <mybatis.plus.version>3.1.0</mybatis.plus.version> <apache.commons.text.verion>1.6</apache.commons.text.verion> <apache.commons.csv.verion>1.8</apache.commons.csv.verion> <commons.io.version>2.6</commons.io.version> <guava.version>28.2-jre</guava.version> <jsoup.version>1.11.3</jsoup.version> <xsoup.version>0.3.1</xsoup.version> </properties> <dependencies> <!-- spring-boot相关配置 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-quartz</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-mail</artifactId> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-websocket</artifactId> </dependency> <!-- 数据库相关 --> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>${mybatis.plus.version}</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency> <!-- alibaba相关包 --> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>${alibaba.fastjson.version}</version> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid-spring-boot-starter</artifactId> <version>${alibaba.druid.version}</version> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>transmittable-thread-local</artifactId> <version>${alibaba.transmittable.version}</version> </dependency> <!-- apache commons相关 --> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-text</artifactId> <version>${apache.commons.text.verion}</version> </dependency> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-csv</artifactId> <version>${apache.commons.csv.verion}</version> </dependency> <!-- commons包 --> <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>${commons.io.version}</version> </dependency> <dependency> <groupId>commons-codec</groupId> <artifactId>commons-codec</artifactId> </dependency> <!-- 其它包 --> <dependency> <groupId>com.google.guava</groupId> <artifactId>guava</artifactId> <version>${guava.version}</version> </dependency> <dependency> <groupId>org.jsoup</groupId> <artifactId>jsoup</artifactId> <version>${jsoup.version}</version> </dependency> <dependency> <groupId>us.codecraft</groupId> <artifactId>xsoup</artifactId> <version>${xsoup.version}</version> </dependency> </dependencies> 在主项目下创建web---module
-
在web目录的resources下创建配置文件application.properties
server.port=8088 logging.level.root=INFO #logging.level.org.spiderflow=DEBUG #平台最大线程数 spider.thread.max=64 #单任务默认最大线程数 spider.thread.default=8 #设置为true时定时任务才生效 spider.job.enable=false #爬虫任务的工作空间 spider.workspace=/data/spider #布隆过滤器默认容量 spider.bloomfilter.capacity=1000000 #布隆过滤器默认容错率 spider.bloomfilter.error-rate=0.0001 #死循环检测(节点执行次数超过该值时认为是死循环)默认值为5000 #spider.detect.dead-cycle=5000 spring.jackson.date-format=yyyy-MM-dd HH:mm:ss spring.jackson.time-zone=GMT+8 spring.jackson.serialization.fail_on_empty_beans=false spring.mvc.favicon.enabled=false spring.datasource.driver-class-name=com.mysql.jdbc.Driver spring.datasource.username=root spring.datasource.password=1234 spring.datasource.url=jdbc:mysql://localhost:3306/spiderflow?useSSL=false&useUnicode=true&characterEncoding=UTF8&autoReconnect=true #JavaMailSender 邮件发送的配置 spring.mail.protocol=smtp spring.mail.host=smtp.qq.com spring.mail.port=465 spring.mail.username=xxxx@qq.com spring.mail.password=xxxx spring.mail.default-encoding=UTF-8 spring.mail.properties.mail.smtp.auth=true spring.mail.properties.mail.smtp.starttls.enable=true spring.mail.properties.mail.smtp.starttls.required=true spring.mail.properties.mail.smtp.socketFactory.class=javax.net.ssl.SSLSocketFactory spring.mail.properties.mail.smtp.socketFactory.port=465 spring.mail.properties.mail.smtp.socketFactory.fallback=false spring.autoconfigure.exclude=org.springframework.boot.autoconfigure.data.mongo.MongoDataAutoConfiguration,org.springframework.boot.autoconfigure.mongo.MongoAutoConfiguration #selenium 插件配置 #设置chrome的WebDriver驱动路径,下载地址:http://npm.taobao.org/mirrors/chromedriver/,注意版本问题 selenium.driver.chrome=E:/driver/chromedriver.exe #设置fireFox的WebDriver驱动路径,下载地址:https://github.com/mozilla/geckodriver/releases selenium.driver.firefox=E:/driver/geckodriver.exe #爬虫通知相关内容配置,可使用SpiderFlow中的变量名和以下变量名:currentDate:当前发送时间 spider.notice.subject=spider-flow流程通知 spider.notice.content.start=流程开始执行:{name},开始时间:{currentDate} spider.notice.content.end=流程执行完毕:{name},结束时间:{currentDate} spider.notice.content.exception=流程发生异常:{name},异常时间:{currentDate} -
在web项目java文件下创建入口文件***Application
@SpringBootApplication @EnableScheduling @MapperScan("org.spiderflow.*.mapper") public class SpiderApplication implements ServletContextInitializer{ public static void main(String[] args) throws IOException { SpringApplication.run(SpiderApplication.class, args); } @Override public void onStartup(ServletContext servletContext) throws ServletException { //设置文本缓存1M servletContext.setInitParameter("org.apache.tomcat.websocket.textBufferSize", Integer.toString((1024 * 1024))); } @Bean public PaginationInterceptor paginationInterceptor() { return new PaginationInterceptor(); } } -
web目录创建配置放行静态资源文件
java文件下创建configuration文件夹,并创建ResourcesConfiguration* 配置放行静态资源文件 * @author Administrator * */ @Configuration public class ResourcesConfiguration implements WebMvcConfigurer{ @Override public void addResourceHandlers(ResourceHandlerRegistry registry) { registry.addResourceHandler("/static/**").addResourceLocations("classpath:/static/"); } //更改默认首页 @Override public void addViewControllers(ViewControllerRegistry registry) { registry.addViewController("/").setViewName("/index2.html"); registry.setOrder(Ordered.HIGHEST_PRECEDENCE); } @Override public void addCorsMappings(CorsRegistry registry) { registry.addMapping("/**") .allowedOrigins("*") .allowedMethods("GET","POST","OPTIONS") .allowCredentials(true); } } -
创建核心module,关键类(service,model,mapper)
service
@Service public class SpiderFlowService extends ServiceImpl<SpiderFlowMapper, SpiderFlow> { @Autowired SpiderFlowMapper sfMapper; public IPage<SpiderFlow> selectSpiderPage(Page<SpiderFlow> page,String name){ return sfMapper.selectSpiderPage(page,name); } }mapper
public interface SpiderFlowMapper extends BaseMapper<SpiderFlow> { @Select({ "<script>", "select", "(select count(*) from sp_task where flow_id = sf.id and end_time is null) running", "from sp_flow sf", "<if test=\"name != null and name != ''\">", "where name like concat('%',#{name},'%')", "</if>", "order by create_date desc", "</script>" }) IPage<SpiderFlow> selectSpiderPage(Page<SpiderFlow> page, @Param("name") String name); }model
@TableName("sp_flow") public class SpiderFlow { @TableId(type = IdType.UUID) private String id; /** * 定时任务表达式 */ private String cron; private String name; /** * xml流程图 */ private String xml; private String enabled; private Date createDate; private Date lastExecuteTime; private Date nextExecuteTime; /** * 定时执行的执行次数 */ private Integer executeCount; @TableField(exist = false) private Integer running; public SpiderFlow() { } public SpiderFlow(String id, String name) { this.id = id; this.name = name; } public String getId() { return id; } public void setId(String id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getXml() { return xml; } public void setXml(String xml) { this.xml = xml; } public String getCron() { return cron; } public void setCron(String cron) { this.cron = cron; } public String getEnabled() { return enabled; } public void setEnabled(String enabled) { this.enabled = enabled; } public Date getCreateDate() { return createDate; } public void setCreateDate(Date createDate) { this.createDate = createDate; } public Date getLastExecuteTime() { return lastExecuteTime; } public void setLastExecuteTime(Date lastExecuteTime) { this.lastExecuteTime = lastExecuteTime; } public Date getNextExecuteTime() { return nextExecuteTime; } public void setNextExecuteTime(Date nextExecuteTime) { this.nextExecuteTime = nextExecuteTime; } public Integer getExecuteCount() { return executeCount; } public void setExecuteCount(Integer executeCount) { this.executeCount = executeCount; } public Integer getRunning() { return running; } public void setRunning(Integer running) { this.running = running; } }