springboot-Quartz 集成源码分析和demo
springboot-Quartz 集成源码跟踪
在pom.xml里加入
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-quartz</artifactId>
</dependency>
利用starter的原理在
spring.factories里有
org.springframework.boot.autoconfigure.quartz.QuartzAutoConfiguration
则启动的时候就会加载QuartzAutoConfiguration,下面看下QuartzAutoConfiguration
@Configuration
@ConditionalOnClass({ Scheduler.class, SchedulerFactoryBean.class,PlatformTransactionManager.class })//加入QuartzProperties.class
@EnableConfigurationProperties(QuartzProperties.class)
@AutoConfigureAfter({ DataSourceAutoConfiguration.class,HibernateJpaAutoConfiguration.class })
public class QuartzAutoConfiguration {private final QuartzProperties properties;//构造器注入QuartzProperties
public QuartzAutoConfiguration(QuartzProperties properties,ObjectProvider<SchedulerFactoryBeanCustomizer> customizers,ObjectProvider<JobDetail[]> jobDetails,ObjectProvider<Map<String, Calendar>> calendars,ObjectProvider<Trigger[]> triggers, ApplicationContext applicationContext) {this.properties = properties;this.customizers = customizers;this.jobDetails = jobDetails.getIfAvailable();this.calendars = calendars.getIfAvailable();this.triggers = triggers.getIfAvailable();this.applicationContext = applicationContext;}//定义一个SchedulerFactoryBean,前提是没有SchedulerFactoryBean
@Bean@ConditionalOnMissingBeanpublic SchedulerFactoryBean quartzScheduler() {//new 了一个SchedulerFactoryBeanSchedulerFactoryBean schedulerFactoryBean = new SchedulerFactoryBean();SpringBeanJobFactory jobFactory = new SpringBeanJobFactory();jobFactory.setApplicationContext(this.applicationContext);schedulerFactoryBean.setJobFactory(jobFactory);//这里可以定义很多quartz.properteis里的属性if (this.properties.getSchedulerName() != null) {schedulerFactoryBean.setSchedulerName(this.properties.getSchedulerName());}schedulerFactoryBean.setAutoStartup(this.properties.isAutoStartup());schedulerFactoryBean.setStartupDelay((int) this.properties.getStartupDelay().getSeconds());schedulerFactoryBean.setWaitForJobsToCompleteOnShutdown(this.properties.isWaitForJobsToCompleteOnShutdown());schedulerFactoryBean.setOverwriteExistingJobs(this.properties.isOverwriteExistingJobs());if (!this.properties.getProperties().isEmpty()) {schedulerFactoryBean.setQuartzProperties(asProperties(this.properties.getProperties()));}if (this.jobDetails != null && this.jobDetails.length > 0) {schedulerFactoryBean.setJobDetails(this.jobDetails);}if (this.calendars != null && !this.calendars.isEmpty()) {schedulerFactoryBean.setCalendars(this.calendars);}if (this.triggers != null && this.triggers.length > 0) {schedulerFactoryBean.setTriggers(this.triggers);}customize(schedulerFactoryBean);return schedulerFactoryBean;} }
以下是SchedulerFactoryBean,可以看到是
implements FactoryBean,也就是这是Scheduler 这个定义的生成者
public class SchedulerFactoryBean extends SchedulerAccessor implements FactoryBean<Scheduler>,BeanNameAware, ApplicationContextAware, InitializingBean, DisposableBean, SmartLifecycle {//getObject() 是FactoryBean<Scheduler>的接口方法public Scheduler getObject() {return this.scheduler;}
}
FactoryBean和BeanFactory的区别,其实2者除了名字颠倒外,没有必然的关系。BeanFactory是个工厂类,顾名思义就是生产Bean的工厂。而FactoryBean是个生成BeanDefinition的类。
当代码里有这种@Autowired注入Scheduler的时候,如下
@AutowiredScheduler scheduler;
BeanFactory会根据name为Scheduler
来获取Scheduler,最终会通过SchedulerFactoryBean.getObject()来得到Scheduler。
通过分析得出FactoryBean.getObject()里得到的是this.scheduler.
public class SchedulerFactoryBean extends SchedulerAccessor implements FactoryBean<Scheduler>,BeanNameAware, ApplicationContextAware, InitializingBean, DisposableBean, SmartLifecycle {private Scheduler scheduler;public Scheduler getObject() {return this.scheduler;}
}
但这个Scheduler 在哪里被构造处理呢?
SchedulerFactoryBean implements InitializingBean
,在InitializingBean
里有afterPropertiesSet()
public class SchedulerFactoryBean extends SchedulerAccessor implements FactoryBean<Scheduler>,BeanNameAware, ApplicationContextAware, InitializingBean, DisposableBean, SmartLifecycle {public void afterPropertiesSet() throws Exception {...// Initialize the Scheduler instance...//这里初始化了Schedulerthis.scheduler = prepareScheduler(prepareSchedulerFactory());try {registerListeners();registerJobsAndTriggers();}catch (Exception ex) {...}}}
bean 生命周期简单理解如下,注意InitializingBean#afterPropertiesSet()所处的位置
->construcor
->initialization(各种autowired)
->BeanPostProcessor#postProcessBeforeInitialization
->@postConsruct 或 InitializingBean#afterPropertiesSet() 或 @Bean(initMethod="xxx")
->BeanPostProcessor#postProcessAfterInitialization
->@PreDestroy
看prepareSchedulerFactory()方法,最后返回了SchedulerFactory
,赋值给了SchedulerFactoryBean
的scheduler
public class SchedulerFactoryBean{private Class<? extends SchedulerFactory> schedulerFactoryClass = StdSchedulerFactory.class;private SchedulerFactory prepareSchedulerFactory() throws SchedulerException, IOException {private SchedulerFactory schedulerFactory;//这里这个SchedulerFactory肯定为空,当然有办法可以让它不为空,通过定义SchedulerFactoryBeanCustomizer来实现 SchedulerFactory schedulerFactory = this.schedulerFactory;if (schedulerFactory == null) {// Create local SchedulerFactory instance (typically a StdSchedulerFactory)//这里也写了这里是实例化出StdSchedulerFactoryschedulerFactory = BeanUtils.instantiateClass(this.schedulerFactoryClass);if (schedulerFactory instanceof StdSchedulerFactory) {//调用initSchedulerFactory来填充StdSchedulerFactory)//看过Quartz的官方demo,就知道StdSchedulerFactory用来生产出shedulerinitSchedulerFactory((StdSchedulerFactory) schedulerFactory);}else if (this.configLocation != null || this.quartzProperties != null ||this.taskExecutor != null || this.dataSource != null) {throw new IllegalArgumentException("StdSchedulerFactory required for applying Quartz properties: " + schedulerFactory);}// Otherwise, no local settings to be applied via StdSchedulerFactory.initialize(Properties)}// Otherwise, assume that externally provided factory has been initialized with appropriate settingsreturn schedulerFactory;}
}
initSchedulerFactory主要是将配置信息配置到schedulerFactory里
private void initSchedulerFactory(StdSchedulerFactory schedulerFactory) throws SchedulerException, IOException {Properties mergedProps = new Properties();... CollectionUtils.mergePropertiesIntoMap(this.quartzProperties, mergedProps);...//这里很重要,//可以直接通过 application.properties里的配置来配置quartz.properties里的配置spring.quartz.properties.xxxschedulerFactory.initialize(mergedProps);}
只所以看这里,是由于springboot的quartz整合官方文档实在是太过简单,只有寥寥数语
Quartz Scheduler configuration can be customized using spring.quartz properties and SchedulerFactoryBeanCustomizer beans,
which allow programmatic SchedulerFactoryBean customization.
Advanced Quartz configuration properties can be customized using spring.quartz.properties.*.
翻译过来就是
Quartz Scheduler可以通过使用spring.quartz 的properties 和写SchedulerFactoryBeanCustomizer这个类来达到客户化SchedulerFactoryBean 的配置。更进一步的配置可以通过spring.quartz.properties.*
这样写连例子都没有,未免太过简略了。没有看源码根本不知道说的什么
prepareScheduler(prepareSchedulerFactory()) 在一些列的调用后会到StdSchedulerFactory的
private Scheduler instantiate()。这是个很长的方法
,但逻辑还算简单,各种初始化,下面只列出jobStore的配置
private Scheduler instantiate() throws SchedulerException {//cfg 就是上个代码片段里的mergedPropsif (cfg == null) {initialize();}//jobstore,如果不配,默认是RAMJobStore//在application.properties里可以配置为//spring.quartz.properties.org.quartz.jobStore.class=org.quartz.impl.jdbcjobstore.JobStoreTXString jsClass = cfg.getStringProperty(PROP_JOB_STORE_CLASS,RAMJobStore.class.getName());try {js = (JobStore) loadHelper.loadClass(jsClass).newInstance();} catch (Exception e) {initException = new SchedulerException("JobStore class '" + jsClass+ "' could not be instantiated.", e);throw initException;}SchedulerDetailsSetter.setDetails(js, schedName, schedInstId);//这里可以获取到spring.quartz.properties.org.quartz.jobStore.xxx//xxx是jobStore这个类的里属性,比如isClustered,clusterCheckinInterval等//在applicaiton.properties配置成spring.quartz.properties.org.quartz.jobStore.isClustered = truetProps = cfg.getPropertyGroup(PROP_JOB_STORE_PREFIX, true, new String[] {PROP_JOB_STORE_LOCK_HANDLER_PREFIX});try {setBeanProps(js, tProps);} catch (Exception e) {initException = new SchedulerException("JobStore class '" + jsClass+ "' props could not be configured.", e);throw initException;}}
因此我们要配置集群就可以在application.properties配置成如下:
spring.quartz.properties.org.quartz.jobStore.class=org.springframework.scheduling.quartz.LocalDataSourceJobStore
spring.quartz.properties.org.quartz.jobStore.isClustered = true
spring.quartz.properties.org.quartz.jobStore.clusterCheckinInterval = 10000
spring.quartz.properties.org.quartz.scheduler.instanceId = AUTO
Demo 1
这个例子主要是Quartz的简单应用。Quartz api 写的很人性化,只要看下方法名就知道什么意思,几乎不需要查文档。
需求 如下图需要能定制不同的执行计划
code
public static void main(String[] args) throws SchedulerException {// Grab the Scheduler instance from the FactoryScheduler scheduler = StdSchedulerFactory.getDefaultScheduler();// and start it offscheduler.start();// define the job and tie it to our MyJob classJobDetail job = newJob(MyJob.class).withIdentity("job1", "group1").build();//DAILY on12:00 START 【now】- END 【2019-3-1】GregorianCalendar calendar=new GregorianCalendar();calendar.set(2019,3,1);Date endTime=calendar.getTime();Trigger triggerDaily = newTrigger().withIdentity("triggerDaily", "group1").startNow().endAt(endTime).withSchedule(dailyAtHourAndMinute(12,0)).build();//DAILY exclude Sunday on 12:00 START 【now】- END 【2019-3-1】 Trigger triggerDaily2 = newTrigger().withIdentity("triggerDaily2", "group1").startNow().endAt(endTime).withSchedule(atHourAndMinuteOnGivenDaysOfWeek(12,0,2,3,4,5,6,7)).build();//WEELKY monday 12:00 START 【now】- END 【2019-3-1】Trigger triggerWeekly = newTrigger().withIdentity("triggerWeekly", "group1").startNow().endAt(endTime).withSchedule(weeklyOnDayAndHourAndMinute(DateBuilder.MONDAY,12,0)).build();//MONTHLY 31th 12:00 START 【now】- END 【2019-3-1】Trigger triggerMonthly = newTrigger().withIdentity("triggerMonthly", "group1").startNow().endAt(endTime).withSchedule(monthlyOnDayAndHourAndMinute(31,12,0)).build();// Tell quartz to schedule the job using our trigger//one job can only have one trigger//scheduler.scheduleJob(job, triggerDaily);//scheduler.scheduleJob(job, triggerDaily1);//scheduler.scheduleJob(job, triggerWeekly);scheduler.scheduleJob(job, triggerMonthly);}
Demo 2
需求:
- 动态的增加,删除schedule任务。
- 支持集群,只能集群里的一台机器执行。
- 当其中一台机器宕机,其它机器要能继续执行。
通过springmvc来做这个例子。
执行sql
在maven lib里找到org.quartz-scheduler:quartz:2.3.0里的tables_mysql_innodb.sql
Code
application.properies
server.port=9999
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/ssmdb?serverTimezone=UTC
spring.datasource.username=root
spring.datasource.password=devuser
spring.datasource.driverClassName=com.mysql.cj.jdbc.Driverspring.quartz.job-store-type=jdbc
#开启集群
spring.quartz.properties.org.quartz.jobStore.isClustered = true
spring.quartz.properties.org.quartz.jobStore.clusterCheckinInterval = 10000
spring.quartz.properties.org.quartz.scheduler.instanceId = AUTO
@SpringBootApplication
public class SchedualBootstrap {private Logger logger = LoggerFactory.getLogger(this.getClass());public static void main(String[] args) {SpringApplicationBuilder builder =new SpringApplicationBuilder(SchedualBootstrap.class);builder.run(args);}@AutowiredScheduler scheduler;//加入监听@PostConstructpublic void init(){scheduler.getListenerManager().addSchedulerListener(new SchedulerListenerSupport(){@Overridepublic void jobDeleted(JobKey jobKey) {logger.info(jobKey.getName()+" is deleted");}public void jobAdded(JobDetail jobDetail) {logger.info(jobDetail.getKey().getName()+" is add");}public void jobScheduled(Trigger trigger) {logger.info(trigger.getJobKey()+" is trigger");}});}
public class JobBean {private String jobName;private int intervalSecond;//...setter and getter
}
rest 方式增加,减少schedual task
@RestController
public class schedualController {@AutowiredScheduler scheduler;@PostMapping("/schedual/add")public void addSchedual(@RequestBody JobBean jobBean){try {JobDetail jobDetail = newJob(MyJob.class).withIdentity(jobBean.getJobName(), "group1").usingJobData("jobName", jobBean.getJobName()).storeDurably().build();scheduler.addJob(jobDetail,true);// Trigger the job to run now, and then repeat every 2 secondsTrigger trigger = newTrigger().withIdentity("trigger-"+jobBean.getJobName(), "group1").forJob(jobDetail).startNow().withSchedule(simpleSchedule().withIntervalInSeconds(jobBean.getIntervalSecond()).repeatForever()).build();scheduler.scheduleJob(trigger);} catch (SchedulerException e) {e.printStackTrace();}}@PostMapping("/schedual/{key}/delete")public void deleteSchedual(@PathVariable String key){JobKey jobKey = new JobKey(key,"group1");try {if(scheduler.checkExists(jobKey)){scheduler.deleteJob(jobKey);}} catch (SchedulerException e) {e.printStackTrace();}}
}
job
@DisallowConcurrentExecution
public class MyJob implements org.quartz.Job{Logger logger = LoggerFactory.getLogger(this.getClass());private String JobName;public String getJobName() {return JobName;}public void setJobName(String jobName) {JobName = jobName;}public MyJob() {}public void execute(JobExecutionContext context) throws JobExecutionException {JobKey key = context.getJobDetail().getKey();logger.info(key.getName());logger.info(getJobName()+" : [Hello World! MyJob is executing.]");}
}
How to run
- 修改application.properties server.port=9999 启动
- 修改application.properties server.port=9998 启动
- 打开postman,http://127.0.0.1:9998/schedual/add
body
{"jobName":"job1","intervalSecond":1
}
增加1个job1 ,每1秒运行一次
- 打开postman,http://127.0.0.1:9999/schedual/add
body
{"jobName":"job2","intervalSecond":3
}
增加1个job2 ,没3秒运行一次
看控制台输出,9998 运行job1,9999运行job2
5.关闭9999,会发现9998,运行job1和job2
github code
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
相关文章
- 整型变量转换为字符串变量(myitoa)
将整型变量转换为字符串变量 最近刷编程题,总是有统计数字类型的题目。于是想出将整型转换为字符串,再逐一寻找的暴力做法,但怎样将整型变量转换为字符串变量呢,C中头文件里有atoi现成的函数可以使用,倔强的自己非要自己写一个,同样简单粗暴方法 #include<iostream>…...
2024/4/20 20:54:36 - DS18B20工作原理
下面简单介绍一下ds18b20的东西吧1.DS18B20是Dallas公司生产的数字温度传感器,具有体积小、适用电压宽、经济灵活的特点。它内部使用了onboard专利技术,全部传感元件及转换电路集成在一个形如三极管的集成电路内。DS18B20有电源线、地线及数据线3根引脚线,工作电压范围为3~…...
2024/4/20 20:54:35 - SpringBoot Quartz指定时间执行任务及取消该定时任务
SpringBoot Quartz指定时间执行任务及取消未执行的定时任务Quartz指定时间执行任务一:导入依赖二:实例化需要定时的任务三:构建一个JobBuilder的实例四:**编写触发器**五:通过Scheduler调度器来调度取消未执行的定时任务如何向execute方法里传参 之前都是使用quartz实现周…...
2024/5/5 17:06:31 - DSP TMS320C6000基础学习(1)——介绍
主要内容1. Why process signals digitally? (1)模拟电路由模拟组件构成:电阻、电容及电感等,这些组件随着电压、温度或机械结构的改变会动态影响到模拟电路的效果; (2)数字电路具有好的噪声抑制能力,少的开发时间和功耗 虽然数字电路有那么多优点,在有些情况下还必须…...
2024/4/20 20:54:33 - 三极管开关电路
三极管除了可以当做交流信号放大器之外,也可以做为开关使用。严格说起来,三极管与一般的机械接点式开关在动作上并不完全相同,但是它却具有一些机械式开关所没有的特点。图1所示,即为三极管电子开关的基本电路图。由下图可知,负载电阻被直接跨接于三极管的集电极与电源之间…...
2024/4/21 0:54:22 - C++ 整型和字符串相互转换(转载)
itoa功 能:把一整数转换为字符串用 法:char *itoa(int value, char *string, int radix);详细解释:itoa是英文integer to array(将int整型数转化为一个字符串,并将值保存在数组string中)的缩写.参数:value: 待转化的整数。radix: 是基数的意思,即先将value转化为radix进制的数…...
2024/4/21 0:54:21 - Quartz的负载均衡如何实现
项目中使用Quartz来管理定时任务,配置将任务信息保存到关系型数据库中,并且使用的是集群模式。集群会保证同一个任务到达触发时间的时候,只有一台机器去执行该任务。我现在想了解的是:1.Quartz如何保证任务只在一个节点运行(即任务不会重复执行)?2.在集群的哪个节点上运行…...
2024/4/21 0:54:21 - quartz多任务调度+spring 实现
转自:http://www.cnblogs.com/MrRightZhao/p/7986727.html一.Quartz的学习简述 客官,不要急,请看完下面的内容... 代码可以直接拷贝使用,本文是编写2个定时方法来实现的,如果想要执行1个,删除另1个即可。但是想要知道执行原理请看最后的原理分析二.执行任务类 1 pa…...
2024/4/21 0:54:20 - DSP快速复盘——时钟系统总结(基本知识+核心代码)基于TMS2802x处理器
写作背景:我最近在写一个DSP的项目,由于上一次接触DSP处理器写代码是在一两年之前,再加上之前主要是学习了STM32,关于DSP的一些知识已经忘记得差不多了。现在重新捡起DSP来,又要花费大量得时间来重新找资料,读文档。所以产生了写点东西得想法,主要的目的是把DSP的硬件知…...
2024/4/21 0:54:18 - Y1 MOS管电路工作原理及详解
MOS管电路工作原理及详解目录MOS管电路工作原理及详解目录 MOS管画法辨认 辨认D G S边 辨认N沟道还是P沟道 辨认寄生二极管方向 总结MOS管开关条件 导通条件 多少伏导通 实例MOS管实物辨认 辨认三个脚万用表辨认MOS管 辨认PN 原理 辨认MOS管是好是坏备注MOS管画法辨认辨认D G S…...
2024/4/21 0:54:17 - 整型转换为字符串
在CH375B的一个例程中用到 sprintf函数来进行整型数转字符串工作。 下面对这个sprintf说明一下,其实感觉他好像是一个非常有用的函数, 1.可以将多个数据按指定要求转换成字符串。i=sprintf((char *)mCmdParam.ByteWrite.mByteBuffer,"%2d-%2d-%2d,%2d:%2d,%d,%d,%d,%…...
2024/4/21 0:54:18 - quartz触发器失败策略
概念理解misfire顾名思义, 就是quartz在应该触发trigger的时候未能及时将其触发( 原因可能是线程池没有线程可用 ), 这将导致trigger的下次触发时间落在在当前时间之前, 那么按照正常的quartz调度流程, 该trigger就再没有机会被调度了. 由于一个调度器实例在每次调度过程中都会…...
2024/4/21 0:54:16 - 呵呵~~开始玩DSP!
工作的需要最近两天开始玩DSP了,因为是做控制用所以只能玩2000系列的了,本来以为TMS320LF2407A已经停产了,打算玩28xx但是无意中上了TI的官方网站发现还是active呵呵,那就玩2407A吧,毕竟简单点而且满足项目的需求,作为入门应该不是问题哦!以下的几篇博文中将从入门开始记…...
2024/4/21 0:54:14 - Java Quartz实现定时任务
1.pom配置 <dependency><groupId>org.quartz-scheduler</groupId><artifactId>quartz</artifactId><version>2.3.0</version> </dependency>2.创建job import org.quartz.Job; import org.quartz.JobExecutionContext; import…...
2024/4/22 7:43:55 - Linux下整型转换成字符串函数——itoa
http://blog.chinaunix.net/uid-21515847-id-1825074.html 在Linux中的字符串函数库中提供了标准的atoi函数(将字符串转换成整型),但是却没有提供将整型转换成字符串的itoa函数。现在一个程序中要使用这项功能,既然人家不给我们提供,我们只能自己写一个了。函数源码如下:vo…...
2024/4/21 0:54:12 - DSP_F28335入门(2)——时钟电路及系统控制
1.时钟源与锁相环电路 F28335的时钟源有两种,外部时钟源信号,内部时钟源信号。 其中,内部时钟源信号接法时更常用的接法。如图:XCLKIN引脚置地,X1、X2引脚之间直接接入晶振。如下图,内部信号时钟源与外部信号时钟源通过异或门选择接入后成为OSCLK即振荡器时钟信号,该信号…...
2024/4/21 0:54:11 - 三极管管脚判断图详解
对于三极管管脚还有其判断问题其实是电子上的基础知识,不过相信有很多朋友都已经忘记如何判断的了,我们都知道三极管是有管芯、三个电极和管壳组成的,这三个电极分别叫做集电极c、发射极e和基极b。而目前我们常见的三极管有锗合金管和硅平面管两种,而每种有分为PNP和NPN两类…...
2024/4/21 0:54:12 - Spring quartz 集群模式下trigger_state error问题原因
问题描述在项目中采用了Spring quartz调度任务来执行定时任务,quartz本身是支持集群化方式的,可以配置一个数据源,quartz会在数据库中创建一系列的表,使用这些表来存储调度的信息,集群中所有的节点都访问这一个数据库,这样可以实现集群环境下的定时任务调度。但是在最近生…...
2024/4/20 4:31:14 - C语言将任意类型(整型、长整型、浮点型等)的数字转换为字符串 itoa()
1, C语言提供了几个标准库函数,可以将任意类型(整型、长整型、浮点型等)的数字转换为字符串,下面列举了各函数的方法及其说明。 ● itoa():将整型值转换为字符串。 ● ltoa():将长整型值转换为字符串。 ● ultoa():将无符号长整型值转换为字符串。 ● gcvt():将浮点型数转…...
2024/4/21 0:54:09 - Quartz时间设置问题
Quartz 时间设置问题以上就是时间的定义 而实际代码中我们喜欢定义为6个,也就是最后一个年不写一一对应,因为每月第几天和每星期的第几天有冲突,只要设置一个就可以,根据你们的业务需求把不满足的设置为?就可以了。需要注意的是设置星期的的时候 1代表的是星期天,2才是星…...
2024/4/21 0:54:07
最新文章
- 【学习AI-相关路程-工具使用-自我学习-NVIDIA-cuda-工具安装 (1)】
【学习AI-相关路程-工具使用-自我学习-NVIDIA-cuda (1)】 1、前言2、环境配置1、对于jetson orin nx 的cuda环境2、对于Ubuntu 20.04下cuda环境 3、自我总结-安装流程1、在ubuntu下,如果想使用cuda平台,应该注意什么 和 都安装什么…...
2024/5/5 19:23:18 - 梯度消失和梯度爆炸的一些处理方法
在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言,在此感激不尽。 权重和梯度的更新公式如下: w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...
2024/3/20 10:50:27 - 从头开发一个RISC-V的操作系统(二)RISC-V 指令集架构介绍
文章目录 前提ISA的基本介绍ISA是什么CISC vs RISCISA的宽度 RISC-V指令集RISC-V ISA的命名规范模块化的ISA通用寄存器Hart特权级别内存管理与保护异常和中断 目标:通过这一个系列课程的学习,开发出一个简易的在RISC-V指令集架构上运行的操作系统。 前提…...
2024/5/5 1:33:57 - 【JavaScript】如何在npm中切换源以及使用指定源安装依赖
忘不掉的是什么我也不知道 想不起当年模样 看也看不到 去也去不了的地方 也许那老街的腔调是属于我的忧伤 嘴角那点微笑越来越勉强 忘不掉的是什么我也不知道 放不下熟悉片段 回头望一眼 已经很多年的时间 透过手指间看着天 我又回到那老街 靠在你们身边渐行渐远 …...
2024/5/5 8:47:29 - 【外汇早评】美通胀数据走低,美元调整
原标题:【外汇早评】美通胀数据走低,美元调整昨日美国方面公布了新一期的核心PCE物价指数数据,同比增长1.6%,低于前值和预期值的1.7%,距离美联储的通胀目标2%继续走低,通胀压力较低,且此前美国一季度GDP初值中的消费部分下滑明显,因此市场对美联储后续更可能降息的政策…...
2024/5/4 23:54:56 - 【原油贵金属周评】原油多头拥挤,价格调整
原标题:【原油贵金属周评】原油多头拥挤,价格调整本周国际劳动节,我们喜迎四天假期,但是整个金融市场确实流动性充沛,大事频发,各个商品波动剧烈。美国方面,在本周四凌晨公布5月份的利率决议和新闻发布会,维持联邦基金利率在2.25%-2.50%不变,符合市场预期。同时美联储…...
2024/5/4 23:54:56 - 【外汇周评】靓丽非农不及疲软通胀影响
原标题:【外汇周评】靓丽非农不及疲软通胀影响在刚结束的周五,美国方面公布了新一期的非农就业数据,大幅好于前值和预期,新增就业重新回到20万以上。具体数据: 美国4月非农就业人口变动 26.3万人,预期 19万人,前值 19.6万人。 美国4月失业率 3.6%,预期 3.8%,前值 3…...
2024/5/4 23:54:56 - 【原油贵金属早评】库存继续增加,油价收跌
原标题:【原油贵金属早评】库存继续增加,油价收跌周三清晨公布美国当周API原油库存数据,上周原油库存增加281万桶至4.692亿桶,增幅超过预期的74.4万桶。且有消息人士称,沙特阿美据悉将于6月向亚洲炼油厂额外出售更多原油,印度炼油商预计将每日获得至多20万桶的额外原油供…...
2024/5/4 23:55:17 - 【外汇早评】日本央行会议纪要不改日元强势
原标题:【外汇早评】日本央行会议纪要不改日元强势近两日日元大幅走强与近期市场风险情绪上升,避险资金回流日元有关,也与前一段时间的美日贸易谈判给日本缓冲期,日本方面对汇率问题也避免继续贬值有关。虽然今日早间日本央行公布的利率会议纪要仍然是支持宽松政策,但这符…...
2024/5/4 23:54:56 - 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响
原标题:【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响近日伊朗局势升温,导致市场担忧影响原油供给,油价试图反弹。此时OPEC表态稳定市场。据消息人士透露,沙特6月石油出口料将低于700万桶/日,沙特已经收到石油消费国提出的6月份扩大出口的“适度要求”,沙特将满…...
2024/5/4 23:55:05 - 【外汇早评】美欲与伊朗重谈协议
原标题:【外汇早评】美欲与伊朗重谈协议美国对伊朗的制裁遭到伊朗的抗议,昨日伊朗方面提出将部分退出伊核协议。而此行为又遭到欧洲方面对伊朗的谴责和警告,伊朗外长昨日回应称,欧洲国家履行它们的义务,伊核协议就能保证存续。据传闻伊朗的导弹已经对准了以色列和美国的航…...
2024/5/4 23:54:56 - 【原油贵金属早评】波动率飙升,市场情绪动荡
原标题:【原油贵金属早评】波动率飙升,市场情绪动荡因中美贸易谈判不安情绪影响,金融市场各资产品种出现明显的波动。随着美国与中方开启第十一轮谈判之际,美国按照既定计划向中国2000亿商品征收25%的关税,市场情绪有所平复,已经开始接受这一事实。虽然波动率-恐慌指数VI…...
2024/5/4 23:55:16 - 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试
原标题:【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试美国和伊朗的局势继续升温,市场风险情绪上升,避险黄金有向上突破阻力的迹象。原油方面稍显平稳,近期美国和OPEC加大供给及市场需求回落的影响,伊朗局势并未推升油价走强。近期中美贸易谈判摩擦再度升级,美国对中…...
2024/5/4 23:54:56 - 【原油贵金属早评】市场情绪继续恶化,黄金上破
原标题:【原油贵金属早评】市场情绪继续恶化,黄金上破周初中国针对于美国加征关税的进行的反制措施引发市场情绪的大幅波动,人民币汇率出现大幅的贬值动能,金融市场受到非常明显的冲击。尤其是波动率起来之后,对于股市的表现尤其不安。隔夜美国股市出现明显的下行走势,这…...
2024/5/4 18:20:48 - 【外汇早评】美伊僵持,风险情绪继续升温
原标题:【外汇早评】美伊僵持,风险情绪继续升温昨日沙特两艘油轮再次发生爆炸事件,导致波斯湾局势进一步恶化,市场担忧美伊可能会出现摩擦生火,避险品种获得支撑,黄金和日元大幅走强。美指受中美贸易问题影响而在低位震荡。继5月12日,四艘商船在阿联酋领海附近的阿曼湾、…...
2024/5/4 23:54:56 - 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势
原标题:【原油贵金属早评】贸易冲突导致需求低迷,油价弱势近日虽然伊朗局势升温,中东地区几起油船被袭击事件影响,但油价并未走高,而是出于调整结构中。由于市场预期局势失控的可能性较低,而中美贸易问题导致的全球经济衰退风险更大,需求会持续低迷,因此油价调整压力较…...
2024/5/4 23:55:17 - 氧生福地 玩美北湖(上)——为时光守候两千年
原标题:氧生福地 玩美北湖(上)——为时光守候两千年一次说走就走的旅行,只有一张高铁票的距离~ 所以,湖南郴州,我来了~ 从广州南站出发,一个半小时就到达郴州西站了。在动车上,同时改票的南风兄和我居然被分到了一个车厢,所以一路非常愉快地聊了过来。 挺好,最起…...
2024/5/4 23:55:06 - 氧生福地 玩美北湖(中)——永春梯田里的美与鲜
原标题:氧生福地 玩美北湖(中)——永春梯田里的美与鲜一觉醒来,因为大家太爱“美”照,在柳毅山庄去寻找龙女而错过了早餐时间。近十点,向导坏坏还是带着饥肠辘辘的我们去吃郴州最富有盛名的“鱼头粉”。说这是“十二分推荐”,到郴州必吃的美食之一。 哇塞!那个味美香甜…...
2024/5/4 23:54:56 - 氧生福地 玩美北湖(下)——奔跑吧骚年!
原标题:氧生福地 玩美北湖(下)——奔跑吧骚年!让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 啊……啊……啊 两…...
2024/5/4 23:55:06 - 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!
原标题:扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!扒开伪装医用面膜,翻六倍价格宰客!当行业里的某一品项火爆了,就会有很多商家蹭热度,装逼忽悠,最近火爆朋友圈的医用面膜,被沾上了污点,到底怎么回事呢? “比普通面膜安全、效果好!痘痘、痘印、敏感肌都能用…...
2024/5/5 8:13:33 - 「发现」铁皮石斛仙草之神奇功效用于医用面膜
原标题:「发现」铁皮石斛仙草之神奇功效用于医用面膜丽彦妆铁皮石斛医用面膜|石斛多糖无菌修护补水贴19大优势: 1、铁皮石斛:自唐宋以来,一直被列为皇室贡品,铁皮石斛生于海拔1600米的悬崖峭壁之上,繁殖力差,产量极低,所以古代仅供皇室、贵族享用 2、铁皮石斛自古民间…...
2024/5/4 23:55:16 - 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者
原标题:丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者【公司简介】 广州华彬企业隶属香港华彬集团有限公司,专注美业21年,其旗下品牌: 「圣茵美」私密荷尔蒙抗衰,产后修复 「圣仪轩」私密荷尔蒙抗衰,产后修复 「花茵莳」私密荷尔蒙抗衰,产后修复 「丽彦妆」专注医学护…...
2024/5/4 23:54:58 - 广州械字号面膜生产厂家OEM/ODM4项须知!
原标题:广州械字号面膜生产厂家OEM/ODM4项须知!广州械字号面膜生产厂家OEM/ODM流程及注意事项解读: 械字号医用面膜,其实在我国并没有严格的定义,通常我们说的医美面膜指的应该是一种「医用敷料」,也就是说,医用面膜其实算作「医疗器械」的一种,又称「医用冷敷贴」。 …...
2024/5/4 23:55:01 - 械字号医用眼膜缓解用眼过度到底有无作用?
原标题:械字号医用眼膜缓解用眼过度到底有无作用?医用眼膜/械字号眼膜/医用冷敷眼贴 凝胶层为亲水高分子材料,含70%以上的水分。体表皮肤温度传导到本产品的凝胶层,热量被凝胶内水分子吸收,通过水分的蒸发带走大量的热量,可迅速地降低体表皮肤局部温度,减轻局部皮肤的灼…...
2024/5/4 23:54:56 - 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...
解析如下:1、长按电脑电源键直至关机,然后再按一次电源健重启电脑,按F8健进入安全模式2、安全模式下进入Windows系统桌面后,按住“winR”打开运行窗口,输入“services.msc”打开服务设置3、在服务界面,选中…...
2022/11/19 21:17:18 - 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。
%读入6幅图像(每一幅图像的大小是564*564) f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...
2022/11/19 21:17:16 - 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...
win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面,在等待界面中我们需要等待操作结束才能关机,虽然这比较麻烦,但是对系统进行配置和升级…...
2022/11/19 21:17:15 - 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...
有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows,请勿关闭计算机”的提示,要过很久才能进入系统,有的用户甚至几个小时也无法进入,下面就教大家这个问题的解决方法。第一种方法:我们首先在左下角的“开始…...
2022/11/19 21:17:14 - win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...
置信有很多用户都跟小编一样遇到过这样的问题,电脑时发现开机屏幕显现“正在配置Windows Update,请勿关机”(如下图所示),而且还需求等大约5分钟才干进入系统。这是怎样回事呢?一切都是正常操作的,为什么开时机呈现“正…...
2022/11/19 21:17:13 - 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...
Win7系统开机启动时总是出现“配置Windows请勿关机”的提示,没过几秒后电脑自动重启,每次开机都这样无法进入系统,此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一:开机按下F8,在出现的Windows高级启动选…...
2022/11/19 21:17:12 - 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...
有不少windows10系统用户反映说碰到这样一个情况,就是电脑提示正在准备windows请勿关闭计算机,碰到这样的问题该怎么解决呢,现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法:1、2、依次…...
2022/11/19 21:17:11 - 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...
今天和大家分享一下win7系统重装了Win7旗舰版系统后,每次关机的时候桌面上都会显示一个“配置Windows Update的界面,提示请勿关闭计算机”,每次停留好几分钟才能正常关机,导致什么情况引起的呢?出现配置Windows Update…...
2022/11/19 21:17:10 - 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...
只能是等着,别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚,只能是考虑备份数据后重装系统了。解决来方案一:管理员运行cmd:net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...
2022/11/19 21:17:09 - 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?
原标题:电脑提示“配置Windows Update请勿关闭计算机”怎么办?win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢?一般的方…...
2022/11/19 21:17:08 - 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...
关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!关机提示 windows7 正在配…...
2022/11/19 21:17:05 - 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...
钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...
2022/11/19 21:17:05 - 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...
前几天班里有位学生电脑(windows 7系统)出问题了,具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面,长时间没反应,无法进入系统。这个问题原来帮其他同学也解决过,网上搜了不少资料&#x…...
2022/11/19 21:17:04 - 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...
本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法,并在最后教给你1种保护系统安全的好方法,一起来看看!电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中,添加了1个新功能在“磁…...
2022/11/19 21:17:03 - 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...
许多用户在长期不使用电脑的时候,开启电脑发现电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机。。.这要怎么办呢?下面小编就带着大家一起看看吧!如果能够正常进入系统,建议您暂时移…...
2022/11/19 21:17:02 - 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...
配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!配置windows update失败 还原更改 请勿关闭计算机&#x…...
2022/11/19 21:17:01 - 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...
不知道大家有没有遇到过这样的一个问题,就是我们的win7系统在关机的时候,总是喜欢显示“准备配置windows,请勿关机”这样的一个页面,没有什么大碍,但是如果一直等着的话就要两个小时甚至更久都关不了机,非常…...
2022/11/19 21:17:00 - 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...
当电脑出现正在准备配置windows请勿关闭计算机时,一般是您正对windows进行升级,但是这个要是长时间没有反应,我们不能再傻等下去了。可能是电脑出了别的问题了,来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...
2022/11/19 21:16:59 - 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...
我们使用电脑的过程中有时会遇到这种情况,当我们打开电脑之后,发现一直停留在一个界面:“配置Windows Update失败,还原更改请勿关闭计算机”,等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢࿰…...
2022/11/19 21:16:58 - 如何在iPhone上关闭“请勿打扰”
Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...
2022/11/19 21:16:57