微服务架构之Spring Boot(六十一)

2022-05-23 15:39:55 浏览数 (1)

40. Quartz Scheduler

Spring Boot为使用Quartz调度程序提供了一些便利 ,包括 spring-boot-starter-quartz “Starter”。如果Quartz可用,则自动配

置 Scheduler (通过 SchedulerFactoryBean 抽象)。

自动选取以下类型的Beans并与 Scheduler 相关联:

JobDetail :定义一个特定的工作。可以使用 JobBuilder API构建 JobDetail 个实例。

Calendar .

Trigger :定义何时触发特定作业。

默认情况下,使用内存中的 JobStore 。但是,如果应用程序中有 DataSource bean并且相应地配置了 spring.quartz.job-store-type 属

性,则可以配置基于JDBC的存储,如以下示例所示:

spring.quartz.job-store-type=jdbc

使用JDBC存储时,可以在启动时初始化架构,如以下示例所示:

spring.quartz.jdbc.initialize-schema=always

默认情况下,使用Quartz库提供的标准脚本检测并初始化数据库。这些脚本删除现有表,在每次重启时删除所有触发器。也可以通

过设置 spring.quartz.jdbc.schema 属性来提供自定义脚本。

要让Quartz使用 DataSource 而不是应用程序的主 DataSource ,请声明 DataSource bean,用 @QuartzDataSource 注释其 @Bean 方法。这

样做可确保 SchedulerFactoryBean 和架构初始化都使用特定于Quartz的 DataSource 。

默认情况下,配置创建的作业不会覆盖已从永久性作业存储区读取的已注册作业。要启用覆盖现有作业定义,请设

置 spring.quartz.overwrite-existing-jobs 属性。

可以使用 spring.quartz 属性和 SchedulerFactoryBeanCustomizer beans自定义Quartz Scheduler配置,这允许程序

化 SchedulerFactoryBean 自定义。可以使用 spring.quartz.properties.* 自定义高级Quartz配置属性。

特别是, Executor bean与调度程序无关,因为Quartz提供了一种通过 spring.quartz.properties 配置调度程序的方法。如

果需要自定义任务执行程序,请考虑实现 SchedulerFactoryBeanCustomizer 。

作业可以定义setter以注入数据映射属性。常规beans也可以以类似的方式注入,如以下示例所示:

public class SampleJob extends QuartzJobBean {

private MyService myService;

private String name;

// Inject "MyService" bean

public void setMyService(MyService myService) { ... }

// Inject the "name" job data property

public void setName(String name) { ... }

@Override

protected void executeInternal(JobExecutionContext context)

throws JobExecutionException {

...

}

}

41.任务执行和调度

在上下文中没有 TaskExecutor bean的情况下,Spring Boot使用合理的默认值自动配置 ThreadPoolTaskExecutor ,这些默认值可以自动与

异步任务执行相关联( @EnableAsync )和Spring MVC异步请求处理。

线程池使用8个核心线程,可根据负载增长和缩小。可以使用 spring.task.execution 命名空间对这些默认设置进行微调,如以下示例所示:

spring.task.execution.pool.max-threads=16

spring.task.execution.pool.queue-capacity=100

spring.task.execution.pool.keep-alive=10s

这会将线程池更改为使用有界队列,以便在队列满(100个任务)时,线程池增加到最多16个线程。当线程在闲置10秒(而不是默认为60秒)时

回收线程时,池的收缩会更加激进。

如果需要与计划任务执行( @EnableScheduling )相关联,也可以自动配置 ThreadPoolTaskScheduler 。默认情况下,线程池使用一个线

程,并且可以使用 spring.task.scheduling 命名空间对这些设置进行微调。

如果需要创建自定义执行程序或调度程序,则在上下文中可以使用 TaskExecutorBuilder bean和 TaskSchedulerBuilder bean。

42. Spring Integration

Spring Boot为使用Spring集成提供了一些便利,包括 spring-boot-starter-integration “Starter”。Spring集成提供了有关消息传递以

及其他传输(如HTTP,TCP等)的抽象。如果类路径上有Spring Integration,则通过 @EnableIntegration 注释初始化它。

Spring Boot还配置由附加Spring Integration模块的存在触发的一些功能。如果 spring-integration-jmx 也在类路径上,则通过JMX发布消

息处理统计信息。如果 spring-integration-jdbc 可用,则可以在启动时创建默认数据库模式,如以下行所示:

spring.integration.jdbc.initialize-schema=always

有关 详细信息,请参阅 IntegrationAutoConfiguration 和 IntegrationProperties 类。

默认情况下,如果存在千分尺 meterRegistry bean,则千分尺将管理Spring Integration指标。如果您希望使用旧版Spring Integration指

标,请在应用程序上下文中添加 DefaultMetricsFactory bean。

43. Spring Session

Spring Boot为各种数据存储提供Spring Session自动配置。构建Servlet Web应用程序时,可以自动配置以下存储:

JDBC

Redis

Hazelcast

MongoDB的

构建响应式Web应用程序时,可以自动配置以下存储:

Redis

MongoDB的

如果类路径中存在单个Spring Session模块,则Spring Boot会自动使用该存储实现。如果您有多个实现,则必须选择 StoreType 要用于存储会

话的实现。例如,要使用JDBC作为后端存储,您可以按如下方式配置应用程序:

spring.session.store-type=jdbc

您可以通过将 store-type 设置为 none 来禁用Spring Session。

每个商店都有特定的附加设置。例如,可以为JDBC存储定制表的名称,如以下示例所示:

spring.session.jdbc.table-name=SESSIONS

要设置会话超时,可以使用 spring.session.timeout 属性。如果未设置该属性,则自动配置将回退到 server.servlet.session.timeout

的值。

44.对JMX的监测和管理

Java Management Extensions(JMX)提供了一种监视和管理应用程序的标准机制。默认情况下,Spring Boot会创建一个ID为 mbeanServer

的 MBeanServer bean,并公开使用Spring JMX注释( @ManagedResource 注释的任何beans, @ManagedAttribute

或 @ManagedOperation )。

0 人点赞