学习链接:https://www.liaoxuefeng.com/wiki/1252599548343744/1266265125480448

大部分内容来自此教程,以下只是我的学习笔记。

集成JavaMail

JavaMail可用于发送和接收邮件,Spring对其进行了简单的封装。实现略。

集成JMS(Jave Message Service)

JMS是JaveEE的消息服务接口。主要的关系如下:

1
producer│───>│Message Server│───>│Consumer│

在这种关系中,消息服务充当消息中转的作用,而无需消息发送和接收方之前直接通信。消息服务支持连接多个发送和接收方。

如果我们要使用JMS,还需要选择一个具体的JMS产品。常用的JMS服务器有开源的ActiveMQ,商业服务器如WebLogic、WebSphere等也内置了JMS支持。

JMS有两种消息通道:

  • Queue:连接一对一,支持离线存储
  • Top:连接一对多,将消息发送给多方。
    • 持久化机制:离线的某方上线后会收到离线以来的消息
    • 非持久化机制:离线时会错过消息

代码实现使用的对象(与JDBC类似):

  • ConnectionFactory:代表一个到消息服务器的连接池,类似JDBC的DataSource;
  • Connection:代表一个到消息服务器的连接,类似JDBC的Connection;
  • Session:代表一个经过认证后的连接会话;
  • Message:代表一个消息对象。

实现方式略。

集成Scheduler

定时任务的集成,文中给了三种实现方法。

Scheduler

实现方式:

  • AppConfig加上@EnableScheduling注解
  • 实现的具体定时任务方法上加上@Scheduled注解
  • 定时任务的方法所在的class标注@Component

定时的规则写在@Scheduled注解中,例如@Scheduled(initialDelay = 60_000, fixedRate = 60_000)表示启动延迟60s,以60秒的间隔执行任务。可以将这类参数写入配置文件中管理,用属性占位符标记在注解里。

Cron

源于Unix/Linux的crontab任务,可以指定定时任务执行的时间和频率。时间和频率定义类似于crontab的规则。

也是通过在方法上加注释定义实现,如:

1
@Scheduled(cron = "${task.report:0 15 2 * * *}")

Quartz

在Spring中使用定时任务和Cron任务都十分简单,但是要注意到,这些任务的调度都是在每个JVM进程中的。如果在本机启动两个进程,或者在多台机器上启动应用,这些进程的定时任务和Cron任务都是独立运行的,互不影响。

如果一些定时任务要以集群的方式运行,例如每天23:00执行检查任务,只需要集群中的一台运行即可,这个时候,可以考虑使用Quartz

集成JMX (Java Management Extensions)

JMX是一个Java平台的管理和监控接口,主要用于系统监控。常用的运维监控如Zabbix、Nagios等工具对JVM本身的监控都是通过JMX获取的信息。

实现

JMX把所有管理的资源作为MBean(Managed bean),这些MBean全部由MBeanServer管理,如果要访问MBean,可以通过MBeanServer对外提供的访问接口,例如通过RMI或HTTP访问。

注意到使用JMX不需要安装任何额外组件,也不需要第三方库,因为MBeanServer已经内置在JavaSE标准库中了。JavaSE还提供了一个jconsole程序,用于通过RMI连接到MBeanServer,这样就可以管理整个Java进程。

要实现MBean也很简单:

  • 编写MBean:使用@ManagedResource等注解表示类为MBean,其他和普通类一样,也有setter和getter啥的
  • 注册MBean:在AppConfig中加上@EnableMBeanExport注解,告诉Spring自动注册MBean