最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringMVC Cron定時(shí)器Demo常見問題解決方案

 更新時(shí)間:2020年11月23日 08:37:03   作者:劍道子羽  
這篇文章主要介紹了SpringMVC Cron定時(shí)器Demo常見問題解決方案,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

該技術(shù)的不適用的場景

如果在集群環(huán)境下,多臺(tái)服務(wù)器中只希望有一臺(tái)執(zhí)行,那 Spring 自帶的這種定時(shí)器方式可能不太符合你的需要。
但是,如果每臺(tái)服務(wù)器都需要獨(dú)立執(zhí)行該定時(shí)器任務(wù),且相互之間不存在同步,那么還是可以考慮的

SpringMVC 定時(shí)器

本文著重介紹的是 SpringMVC 配置定時(shí)器的方式,而不是 SpringBoot 配置定時(shí)器的方式。

注解方式

首先,在 Clock 類上添加 @Component,然后,在需要定時(shí)執(zhí)行的方法上面加上 @Scheduled,最后指定 cron 表達(dá)式。

項(xiàng)目結(jié)構(gòu):

Clock.java

package coderead.spring.scheduled;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import java.util.Date;
@Component
public class Clock {
  // 每5秒鐘執(zhí)行一次
  @Scheduled(cron = "*/5 * * * * ?")
  public void testTime() {
    System.out.println(new Date());
  }
}

spring-mvc.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:mvc="http://www.springframework.org/schema/mvc"
    xmlns:task="http://www.springframework.org/schema/task"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
      http://www.springframework.org/schema/beans/spring-beans.xsd
      http://www.springframework.org/schema/mvc
      http://www.springframework.org/schema/mvc/spring-mvc.xsd
      http://www.springframework.org/schema/context
      http://www.springframework.org/schema/context/spring-context.xsd
      http://www.springframework.org/schema/task
      http://www.springframework.org/schema/task/spring-task.xsd">

  <mvc:annotation-driven />

  <context:component-scan base-package="coderead.spring.*" />
  
  <!-- 定時(shí)任務(wù)支持注解 -->
  <task:annotation-driven />
</beans>

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
     version="3.1">
  <!--配置多個(gè)上下文會(huì)導(dǎo)致多次執(zhí)行-->
  <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:spring/spring-mvc.xml</param-value>
  </context-param>

  <!-- ================================== listener ================================== -->
  <listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>


  <!-- ================================== servlet ================================== -->
  <!-- 前端控制器 -->
  <servlet>
    <servlet-name>dispatcherServlet</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value></param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>dispatcherServlet</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>

</web-app>

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<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>coderead.spring</groupId>
  <artifactId>spring-scheduled-test</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>war</packaging>


  <properties>
    <spring.version>5.1.6.RELEASE</spring.version>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>

  <dependencies>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-webmvc</artifactId>
      <version>${spring.version}</version>
    </dependency>
  </dependencies>

  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.1</version>
        <configuration>
          <source>1.8</source>
          <target>1.8</target>
          <encoding>UTF-8</encoding>
        </configuration>
      </plugin>
      <plugin>
        <groupId>org.eclipse.jetty</groupId>
        <artifactId>jetty-maven-plugin</artifactId>
        <version>9.4.33.v20201020</version>
      </plugin>
    </plugins>
  </build>

</project>

如果你不知道怎么用 jetty 啟動(dòng)項(xiàng)目,你可以考慮參考 使用maven-Jetty9-plugin插件運(yùn)行第一個(gè)Servlet

xml 配置方式

如果你需要使用 xml 配置,你會(huì)發(fā)現(xiàn) @Scheduled 注解和 <task:scheduled> 有著相同的屬性。因此我們將上一節(jié)的代碼稍稍改動(dòng)一下:

Clock.java 去掉注解

package coderead.spring.scheduled;
import java.util.Date;
public class Clock {
  public void testTime() {
    System.out.println(new Date());
  }
}

spring-mvc.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:mvc="http://www.springframework.org/schema/mvc"
    xmlns:task="http://www.springframework.org/schema/task"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
      http://www.springframework.org/schema/beans/spring-beans.xsd
      http://www.springframework.org/schema/mvc
      http://www.springframework.org/schema/mvc/spring-mvc.xsd
      http://www.springframework.org/schema/context
      http://www.springframework.org/schema/context/spring-context.xsd
      http://www.springframework.org/schema/task
      http://www.springframework.org/schema/task/spring-task.xsd">

  <mvc:annotation-driven />

  <context:component-scan base-package="coderead.spring.*" />

  <!--用 xml 方式注入 Clock Bean-->
  <bean id="clock" class="coderead.spring.scheduled.Clock" />
  <!--用 xml 方式設(shè)置定時(shí)器-->
  <task:scheduled-tasks>
    <task:scheduled ref="clock" method="testTime" cron="*/5 * * * * ?"/>
  </task:scheduled-tasks>

</beans>

常見問題

@Scheduled 定時(shí)任務(wù)不生效

@Scheduled定時(shí)任務(wù)不生效???

  • 此方法不能有參數(shù)
  • 此方法不能有返回值
  • 此類中不能包含其他帶任何注解的方法(發(fā)現(xiàn)新大陸)

還有一種可能就是沒有在 spring-mvc.xml 文件中加入 <task:annotation-driven /> 而不僅僅是加入 <mvc:annotation-driven />

@Scheduled 定時(shí)任務(wù)執(zhí)行兩次

@Scheduled Spring定時(shí)任務(wù)每次執(zhí)行兩次解決方案

主要原因是 web.xml 同時(shí)設(shè)置了 <context-param> 和 <init-param> 都設(shè)置了 contextConfigLocation,兩次加載配置文件

<web-app ....>
  <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:spring/spring-mvc.xml</param-value>
  </context-param>
  ...
  <servlet>
    <servlet-name>dispatcherServlet</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>classpath:spring/spring-mvc.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
  </servlet>
  ...
</web-app>

cron 表達(dá)式

cron 表達(dá)式是用來規(guī)定代碼執(zhí)行周期的一種表達(dá)式,cron表達(dá)式詳解 這篇文章詳細(xì)的講解了 cron 表達(dá)式的使用細(xì)節(jié)。
以我的淺陋的經(jīng)驗(yàn),我對 cron 表達(dá)式的記憶是:

常用的 cron 表達(dá)式由 6 個(gè)域組成,域和域之間以空格分開

域從左到右,時(shí)間單位從秒開始逐步增大。他們分別是 "秒 分 時(shí) 日期 月份 星期"

因?yàn)槿掌诤托瞧跁?huì)相互影響,通常如果其中一個(gè)用 非? 表示任意,則另一個(gè)必須用 ? 表示“任意”。

原因:通常,在指定日期條件之后,我們雖然希望“任意星期幾”,但是實(shí)際上,此時(shí)星期需要根據(jù)日期的變化而相應(yīng)變化,做不到完全任意。

你還可以通過 在線 Cron 表達(dá)式 來幫助你理解前人代碼中的 cron 表達(dá)式的含義,或者根據(jù)你的需求生成一個(gè)新的 cron 表達(dá)式。

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java?3年面試經(jīng)驗(yàn)告訴你Mybatis是如何進(jìn)行分頁的

    Java?3年面試經(jīng)驗(yàn)告訴你Mybatis是如何進(jìn)行分頁的

    這篇文章主要介紹了Java?3年面試經(jīng)驗(yàn)告訴你Mybatis是如何進(jìn)行分頁的,對于任何ORM框架,分頁的實(shí)現(xiàn)邏輯無外乎兩種,不管怎么包裝,最終給到開發(fā)者的,只是使用上的差異而已,本文給大家講解的很明白,感興趣的朋友一起看看吧
    2022-09-09
  • mybatis中bind標(biāo)簽和concat的使用說明

    mybatis中bind標(biāo)簽和concat的使用說明

    這篇文章主要介紹了mybatis中bind標(biāo)簽和concat的使用說明,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • Java中的移位運(yùn)算符使用及原理詳解

    Java中的移位運(yùn)算符使用及原理詳解

    在 Java 中,移位運(yùn)算符用于對二進(jìn)制數(shù)進(jìn)行位移操作,它們可以將一個(gè)數(shù)的所有位向左或向右移動(dòng)指定的位數(shù),本文小編將給大家詳細(xì)的介紹一下Java移位運(yùn)算符,需要的朋友可以參考下
    2023-09-09
  • 詳解SpringBoot配置連接池

    詳解SpringBoot配置連接池

    本篇文章主要詳解SpringBoot配置連接池,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-04-04
  • 使用Java構(gòu)造和解析Json數(shù)據(jù)的兩種方法(詳解二)

    使用Java構(gòu)造和解析Json數(shù)據(jù)的兩種方法(詳解二)

    這篇文章主要介紹了使用Java構(gòu)造和解析Json數(shù)據(jù)的兩種方法(詳解二)的相關(guān)資料,需要的朋友可以參考下
    2016-03-03
  • JPA save()方法將字段更新為null的解決方案

    JPA save()方法將字段更新為null的解決方案

    這篇文章主要介紹了JPA save()方法將字段更新為null的解決方案,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-01-01
  • Java動(dòng)態(tài)添加view的方法

    Java動(dòng)態(tài)添加view的方法

    這篇文章主要介紹了Java動(dòng)態(tài)添加view的方法,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2017-01-01
  • java學(xué)生管理系統(tǒng)界面簡單實(shí)現(xiàn)(全)

    java學(xué)生管理系統(tǒng)界面簡單實(shí)現(xiàn)(全)

    這篇文章主要為大家詳細(xì)介紹了java學(xué)生管理系統(tǒng)界面的簡單實(shí)現(xiàn),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • 利用Jacob將Excel轉(zhuǎn)換PDF的問題匯總

    利用Jacob將Excel轉(zhuǎn)換PDF的問題匯總

    項(xiàng)目中經(jīng)常會(huì)遇到將excel轉(zhuǎn)換成PDF的需求,下面這篇文章主要給大家介紹了關(guān)于如何利用Jacob將Excel轉(zhuǎn)換PDF問題的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-05-05
  • Spring Boot + thymeleaf 實(shí)現(xiàn)文件上傳下載功能

    Spring Boot + thymeleaf 實(shí)現(xiàn)文件上傳下載功能

    最近同事問我有沒有有關(guān)于技術(shù)的電子書,我打開電腦上的小書庫,但是郵件發(fā)給他太大了,公司又禁止用文件夾共享,于是花半天時(shí)間寫了個(gè)小的文件上傳程序,部署在自己的Linux機(jī)器上,需要的朋友可以參考下
    2018-01-01

最新評(píng)論

县级市| 林州市| 彭山县| 泾源县| 灵台县| 乌鲁木齐市| 瑞金市| 垣曲县| 金川县| 福泉市| 灌云县| 平昌县| 嫩江县| 宝丰县| 岳阳县| 奎屯市| 佳木斯市| 石柱| 宣恩县| 郧西县| 凌海市| 安溪县| 响水县| 依兰县| 依安县| 三河市| 嘉义县| 南川市| 浠水县| 广南县| 襄樊市| 闽侯县| 和平县| 富民县| 乐陵市| 安远县| 克拉玛依市| 嵊州市| 高阳县| 卢氏县| 枝江市|