Spring集成框架(一)

一、Quartz 框架

介绍

QuartzOpenSymphony 开源组织的一个 Java 开源项目, 在 2009 被 Terracotta 收购。 Quartz 是一个==任务调度框架 ==

优点

1、强大的调度功能,例如支持多样的调度方式
2、灵活的应用方式,例如支持任务和调度的多种组合方式
3、分布式和集群功能, Terracotta 在收购后,对原来功能作了进一步提升

调度的三个主要的概念

  1. 调度器 : Quartz 框架的核心是调度器。调度器负责管理 Quartz 应用 运行时环境。调度器不是靠自己做
    所有的工作,而是依赖框架内一些非常重要的部件。为确保可伸缩性, Quartz 采用了基于多线程的架构。
    启动时,框架初始化一套 worker 线程,这套线程被调度器用来执行预定的作业。这就是 Quartz 怎样能
    并发运行多个作业的原理。 Quartz 依赖一套松耦合的线程池管理部件来管理线程环境。
  2. 任务:就是我们自己编写的业务逻辑,交给 quartz 帮我们执行。
  3. 触发器:即调度作业,什么时候开始执行,什么时候结束执行。

二、Quartz 框架核心概念

Quartz 任务调度的主要组成元素

Trigger(触发器)、 Scheduler(任务调度器)、 Job(任务)。 其中 Trigger,Job 是元数据, Scheduler 才是任务调度的控制器。

具体的含义

1、JobDetail: quartz 每次都会直接创建一个 JobDetail,同时创建一个 Job 实例,它不直接接受一个 Job
的实例,但是它接受一个 Job 的实现类,通过 new instance()的反射方式来实例一个 Job,在这里 Job
是一个接口,我们需要自己编写类去实现这个接口。
2、Trigger : 它由 SimpleTrigger 和 CronTrigger 组成, 当仅需要触发一次或者以固定间隔周期性触发执
行, SimpleTrigger是最适合的选择。而 CronTrigger则可以定义 Cron 表达式定义出各种复杂的调度
方案,如每天上午 9:00 执行,每周一、周三、周五下午 5:00 执行。
3、Scheduler:调度器, JobDetail 和 Trigger 可以通过 Scheduler 绑定到一起。

Quartz 基本元素的关系如下图所示:

Quartz 基本元素的关系

三、SpringBoot 集成 Quartz 框架

SpringBoot 集成 Quartz 框架的基本步骤

1) 引入 Quartz 依赖
<!-- pom文件 Spring Quartz依赖 -->
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>2.2.1</version>
<exclusions>
<exclusion>
<artifactId>slf4j-api</artifactId>
<groupId>org.slf4j</groupId>
</exclusion>
</exclusions>
</dependency>

完整的pom文件如下

<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.ysd.springboot</groupId>
<artifactId>springboot-quartz</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>springboot-quartz</name>
<url>http://maven.apache.org</url>
<!-- 项目设置:编码格式UTF-8 -->
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<!-- Spring Boot 启动父依赖 -->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.1.RELEASE</version>
</parent>
<dependencies>
<!-- Spring Boot web依赖 -->
<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>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<!--
optional=true,依赖不会传递,该项目依赖devtools;之后依赖myboot项目的项目如果想要使用devtools,需要
重新引入 -->
<optional>true</optional>
<scope>true</scope><!-- 热部署 -->
</dependency>
<!-- Spring Quartz依赖 -->
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>2.2.1</version>
<exclusions>
<exclusion>
<artifactId>slf4j-api</artifactId>
<groupId>org.slf4j</groupId>
</exclusion>
</exclusions>
</dependency>
<!-- 该依赖必加,里面有sping对schedule的支持 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
</dependency>
<!-- Junit -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
</dependencies>
<build>
<plugins>
<!-- SpringBoot插件 -->
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
2) 我们需要使用注解@Configuration 来定义一个配置类,代码如下:
@Configuration //相当于xml文件中的<beans>
public class ConfigMyTools {
/**
* 格式化当前日期
* @return
*/
@Bean("dateFormat")
public SimpleDateFormat dateFormat(){
return new SimpleDateFormat ("yyyy-MM-dd HH:mm:ss");
}
}

备注: @Configuration, @Bean 这两个注解代替 xml 配置, @Configuration 相当于 xml 中的标签 @Bean 相当于标签 ,通常两者结合使用。

3) 为了方便我们看清楚任务调度的次数,我们声明一个辅助类,代码如下:
@Component("myTask")
public class MyTask {
private int count = 0;
public void say(){
System.out.println("大家好,我是springboot任务调度=>"+count++);
}
}
4) 接下创建一个任务调度的类,代码如下:
package com.ysd.springboot.quartz;
import java.text.SimpleDateFormat;
import java.util.Date;
import javax.annotation.Resource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Configurable;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import com.ysd.springboot.config.MyTask;
@Component
@EnableScheduling //启动定时任务
public class SimpleTask {
@Autowired
private MyTask myTask;
@Resource
private SimpleDateFormat dateFormat;
@Scheduled(fixedRate = 1000 * 3) //每隔三秒
public void reportCurrentTime(){
myTask.say();//执行任务方法
System.out.println ("每隔3秒任务调度一次 现在时间 " + dateFormat.format (new Date
()));
}
//每隔5秒(cron表达式,六个*【*/5算一个,?算一个】,从左到右分别为秒分时天月年)
@Scheduled(cron = "*/5 * * * * ? ")
public void reportCurrentByCron(){
System.out.println ("每隔5秒任务调度一次 Scheduling Tasks Examples By Cron: The time is
now " + dateFormat.format (new Date ()));
}
}

备注: cron = "*/5 * * * * ? "表达式表示秒分时日月年。 */5 表示每隔 5 秒。
@EnableScheduling:放在类前,标注启动定时任务
@Scheduled(表达式): 放在方法前,定义某个定时任务

5) 最后定义主模块启动类,启动测试即可。在控制台的结果如下图:

输出结果

Cron 表达式

cron 的表达式是字符串,实际上是由七个由空格分开的子表达式组成:

在这里插入图片描述

四、SpringBoot 集成 Mybatis 框架

1、添加依赖;除了常规依赖外,需要加入 Mybatis 和 MySQL 依赖。

完整代码,复制修改即可

<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/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.ysd.springboot</groupId>
<artifactId>spring-boot-mybatis</artifactId>
<packaging>jar</packaging>
<version>0.0.1-SNAPSHOT</version>
<name>spring-boot-mybatis</name>
<url>http://maven.apache.org</url>
<!-- Spring Boot 启动父依赖 -->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.1.RELEASE</version>
</parent>
<properties>
<!-- 项目设置:编码格式UTF-8及springboot相关版本 -->
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<mybatis-spring-boot>1.2.0</mybatis-spring-boot>
<mysql-connector>5.1.39</mysql-connector>
<druid>1.0.18</druid>
</properties>
<dependencies>
<!-- Spring Boot SpringMVC 依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- Spring Boot Mybatis 依赖 -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>${mybatis-spring-boot}</version>
</dependency>
<!-- MySQL 连接驱动依赖 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql-connector}</version>
</dependency>
</dependencies>
<build>
<plugins>
<!-- SpringBoot插件 -->
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
<!-- SpringBoot项目打包名称 -->
<finalName>springmybatis</finalName>
</build>
</project>

2、在 application.properties 配置文件中,配置数据源、 Mybatis 的配置及映射文件。

完整代码,复制修改即可

## 数据源配置
spring.datasource.url=jdbc:mysql://localhost:3306/库名
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
## Mybatis 配置
# 实体所在包,起别名
mybatis.typeAliasesPackage=org.spring.springboot.domain
# 映射文件所在路径
mybatis.mapperLocations=classpath:mapper/*.xml

3、 在主模块上注解扫描接口包,使用@MapperScan(“包名”)。

完整代码,复制修改即可

@SpringBootApplication // Spring Boot 应用的标识
@MapperScan("org.spring.springboot.dao") // mapper 接口类扫描包配置
//如果要显示Sql细节还需要在logback配置<logger name="接口类所在包" level="debug" />
public class Application {
public static void main(String[] args) {
// 程序启动入口
// 启动嵌入式的 Tomcat 并初始化 Spring 环境及其各 Spring 组件
SpringApplication.run(Application.class,args);
}
}

注: Controller 层、 Dao 层、 Service 层自动注入和原来 Spring 框架用法的使用完全一样
项目结构图如下:
在这里插入图片描述
: logback 显示 sql 语句, logback-spring.xml 文件细节如下:

<!--
name指定Mybatis接口所在的包,开发模式控制台显示Mybatis的Sql执行细节
-->
<logger name="org.spring.springboot.dao" level="debug" />

详细内容请参考: logback-spring.xml

application.properties 中配置如下:

## Logback配置
# spring输出debug级别以上细节
logging.level.org.springframework.web=info

2、开启事务管理

SpringBoot 开启事务非常简单,只需要在业务层(controller)加注解@Transactional 就可以了。 具体方法如下:
1、在设计 service 层的时候,我们应该合理的抽象出方法包含的内容,然后将方法用@Trasactional 注解
注释,默认在抛出 Exception.class 异常的时候,就会触发方法中所有数据库操作回滚,当然这指的是
增、删、改。
2、SpringBoot2.0 之前的版本需要在 Application 类中添加@EnableAutoConfiguration 或者
@EnableTransactionManag 注解启动事务, 2.0 版本之后不需要加这些注解即可实现

总结: @Transational 方法是可以带参数的,具体的参数解释如下:
在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Boot可以集成多个接口文档框架,其中两个比较常用的是Swagger和Knife4j。下面分别介绍它们的集成方法: 1. Swagger集成: Swagger是一个开源的接口文档框架,可以帮助我们生成、展示和测试API文档。在Spring Boot中,我们可以通过添加相应的依赖和配置来集成Swagger。 首先,在pom.xml文件中添加Swagger的依赖: ```xml <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-boot-starter</artifactId> <version>3.0.0</version> </dependency> ``` 然后,在Spring Boot的启动类上添加`@EnableSwagger2`注解: ```java import springfox.documentation.swagger2.annotations.EnableSwagger2; @EnableSwagger2 @SpringBootApplication public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } } ``` 接下来,我们可以在Controller类的方法上使用Swagger的注解来描述接口信息,例如: ```java import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; @RestController @Api(tags = "示例接口") public class SampleController { @GetMapping("/hello") @ApiOperation("示例接口") public String hello() { return "Hello, Swagger!"; } } ``` 最后,启动Spring Boot应用程序,访问`http://localhost:8080/swagger-ui.html`即可查看生成的接口文档。 2. Knife4j集成: Knife4j是Swagger的增强版,提供了更多的功能和样式定制。在Spring Boot中,我们可以通过添加相应的依赖和配置来集成Knife4j。 首先,在pom.xml文件中添加Knife4j的依赖: ```xml <dependency> <groupId>com.github.xiaoymin</groupId> <artifactId>knife4j-spring-boot-starter</artifactId> <version>3.0.2</version> </dependency> ``` 然后,在Spring Boot的启动类上添加`@EnableKnife4j`注解: ```java import com.github.xiaoymin.knife4j.spring.annotations.EnableKnife4j; @EnableKnife4j @SpringBootApplication public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } } ``` 接下来,我们可以在Controller类的方法上使用Knife4j的注解来描述接口信息,例如: ```java import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; @RestController @Api(tags = "示例接口") public class SampleController { @GetMapping("/hello") @ApiOperation("示例接口") public String hello() { return "Hello, Knife4j!"; } } ``` 最后,启动Spring Boot应用程序,访问`http://localhost:8080/doc.html`即可查看生成的接口文档。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值