接上一篇:《springboot学习2》
6. 任务
Quartz:
工作(job)——用于定义具体执行的工作;工作明细(jobDetail)——用于描述定时工作相关的信息;
触发器(trigger)——用于描述触发工作的规则,通常使用cron表达式定义调度规则;
调度器(scheduler):描述了工作明细和触发器之间的对应关系。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-quartz</artifactId>
</dependency>
定义具体要执行的任务,继承QuartzJobBean
public class MyQuartz extends QuartzJobBean{
@Override
protected void executeInternal(JobExecutionContext context) throws JobExecutionException {
System.out.println("myquartz is running");
}
}
定义工作明细与触发器,并绑定对应的关系
Configuration
public class QuartzConfig {
@Bean
public JobDetail printJobDetail(){
// 绑定具体的工作
return JobBuilder.newJob(MyQuartz.class).storeDurably().build();
}
@Bean
public Trigger printJobTrigger(){
ScheduleBuilder schedule = CronScheduleBuilder.cronSchedule("0/15 * * * * ?");
return TriggerBuilder.newTrigger().forJob(printJobDetail()).withSchedule(schedule).build();
}
}
Task:
@SpringBootApplication
@EnableScheduling
public class Application {}
@Component
public class MyBean {
@Scheduled(cron = "0/1 * * * * ?")
public void print(){
System.out.println("print");
}
}
也可以在application.yml里面进行配置。
7. javamail
SMTP(simple mail transfer protocol):简单邮件传输协议,用来发送电子邮件的协议。
POP3(Post office protocol -version 3):用于接收电子邮件的标准协议。(单向)
IMAP(Internet mail access protocol):互联网消息协议,是POP3的替代协议。(双向绑定)
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
其中password不是邮箱的登录密码,是开启之后获得的授权码
@Autowired
private JavaMailSender javaMailSender;
// 发送人
private String from = "******@qq.com";
// 接收人
private String to = "******@qq.com";
// 标题
private String subject = "测试邮件";
// 正文
private String context = "测试邮件正文内容";
@Override
public void sendMail() {
SimpleMailMessage message = new SimpleMailMessage();
message.setFrom(from+"(小黄黄)");
message.setTo(to);
message.setSubject(subject);
message.setText(context);
javaMailSender.send(message);
}
以上为简单邮件。复杂邮件使用MimeMessage
@Autowired
private JavaMailSender javaMailSender;
// 发送人
private String from = "***@qq.com";
// 接收人
private String to = "***@qq.com";
// 标题
private String subject = "测试邮件";
// 正文
private String context = "<img src='***'/><a href='http://www.baidu.com'>测试邮件正文内容</a>";
File file = new File("D:\\**\\**\\***.rar");
File file2 = new File("D:\\2345Downloads\\fdb6dc860fd5db3a!400x400_big.jpg");
@Override
public void sendMail() {
try{
MimeMessage message = javaMailSender.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(message,true);
helper.setFrom(from+"(小黄黄)");
helper.setTo(to);
helper.setSubject(subject);
helper.setText(context,true);
helper.addAttachment(file.getName(),file);
helper.addAttachment("微信头像.jpg",file2);
javaMailSender.send(message);
}catch (Exception e){
e.printStackTrace();
}
}
消息:
activeMQ:
下载:ActiveMQ
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-activemq</artifactId>
</dependency>
RabbitMq:基于Erlang语言编写,需要首先安装Erlang
Erlang下载地址:https://www.erlang.org/downloads 一键安装,需要依赖windows组件,重启。配置ERLANG_HOME和PATH。
RabbitMQ下载地址: https://rabbitmq.com/install-windows.html,一键安装,安装完重启。
命令:或者直接进入服务开启关闭。
服务管理可视化(插件形式)
与Springboot整合
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
# application.yml
spring:
rabbitmq:
host: localhost
port: 5672
定义交换机
第二种:topic模式
with里面的匹配规则:
RocketMQ:
下载地址:Release Notes - Apache RocketMQ - Version 4.9.3 - Apache RocketMQ
安装,解压缩。默认服务端口号:9876
环境变量配置:ROCKETMQ_HOME,PATH,NAMESRV_ADDR(建议):127.0.0.1:9876
启动命名服务器:点击mqnamesrv.cmd和mqbroker.cmd
例子可在rocketmq/lib/rocketmq-example.4.9.x.jar里面、可进入bin目录cmd.使用
tools org.apache.rocketmq.example.quickstart.producer.class 测试服务器是否正常。
与springboot整合:
<dependency>
<groupId>org.apache.rocketmq</groupId>
<artifactId>rocketmq-spring-boot-starter</artifactId>
<version>2.2.1</version>
</dependency>
rocketmq:
name-server: localhost:9876
producer:
group: group_rocketmq
kafka
下载地址:Apache Kafka 3.x的有点问题,下载2.8.1版本的,解压缩。进入到\bin\windows目录,进入cmd界面。
首先启动zookeeper: kafka_2.13-2.8.1\bin\windows>zookeeper-server-start.bat ../../config/zookeeper.properties
接下来启动kafka服务器:kafka_2.13-2.8.1\bin\windows>kafka-server-start.bat ../../config/server.properties
kafka-topics.bat --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic itheima
》》Created topic itheima.
kafka-topics.bat --zookeeper 127.0.0.1:2181 --list
》》itheima
测试生产者功能和消费者功能需要再开两个cmd窗口
kafka-console-consumer.bat --bootstrap-server localhost:9092 --topic itheima --from-beginning
》》此处输入job
kafka-console-consumer.bat --bootstrap-server localhost:9092 --topic itheima --from-beginning
》》此处接收job
springboot整合kafka
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-kafka</artifactId>
</dependency>
spring:
kafka:
bootstrap-servers: localhost:9082
consumer:
group-id: order
监控
意义:监控服务状态是否宕机;监控服务运行指标(内存、虚拟机、线程、请求等);监控日志;管理服务(服务下线)
实施方式:显示监控信息的服务器,用于获取服务信息,并显示对应的信息;运行的服务,启动时主动上报,告知监控服务器自己需要受到监控。
可视化监控平台:springboot admin.开源社区项目,用于管理和监控Springboot应用程序,客户端注册到服务端后,通过HTTP请求方式,服务端定期从客户端获取对应的信息,并通过UI界面展示对应的信息。
与springboot整合(注意springboot admin与springboot版本一致)
①新建server模块
或者直接添加pom依赖:
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-starter-server</artifactId>
<version>2.6.3</version>
</dependency>
server:
port: 8080
再加上springboot web依赖
@SpringBootApplication
@EnableAdminServer
public class Application {}
②新建client模块,再加上springboot web依赖
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-starter-client</artifactId>
<version>2.6.3</version>
</dependency>
spring:
boot:
admin:
client:
url: http://localhost:8080
management:
endpoint:
health:
show-details: always
endpoints:
web:
exposure:
include: "*"
界面大致如下:
监控原理
Actuator提供了Springboot生产就绪功能,通过断电的配置与访问,获取端点信息;端点描述了一组监控信息,springboot提供了多个内置端点,也可以根据需要自定义端点信息;访问当前应用所有端点信息:/actuator;访问端点详细信息:/actuator/端点名称
主要用的端点名称:loggers(显示和修改应用程序的日志记录器的配置)、metrics(显示当前应用程序的指标度量信息)、health(显示应用程序健康信息)
比如:include: "*" => include: health,info
例如改成下面的:
spring:
boot:
admin:
client:
url: http://localhost:8080
management:
endpoint:
health: # 端点名称 必须有的
show-details: always
info: # 端点名称
enabled: false
endpoints:
web:
exposure:
include: "*"
enabled-by-default: true
其他的监控方式:cmd->jconsole (jms方式,基本上端点功能都是默认开放的)
自定义端点配置
info端点:方式有两种
新建actuator包,新建类
health端点:
同上。
metric端点:
自定义端点
原理篇
bean的加载方式
(一)、xml方式声明bean