Quartz学习——SSMM(Spring+SpringMVC+Mybatis+Mysql)和Quartz集成详解(四)

通过前面的学习,你可能大致了解了Quartz,本篇博文为你打开学习SSMM+Quartz的旅程!欢迎上车,开始美好的旅程! 
本篇是在SSM框架——Spring+SpringMVC+Mybatis的搭建教程这篇为基础上进行的,如果不了解SSM搭建请先点击闪现到查看详情:闪现

一:环境介绍

工具:Eclipse+ Mysql 
框架:Spring+SpringMVC+Mybatis 
日志:logback 
构建工具:Maven 
单元测试:Junit4 
Quartz版本:2.2.1

二:SSMM+Quartz集成详解

1:概述

在之前SSM框架的基础集合Quartz写一个简单的Web项目,实现Quartz的动态添加,修改和删除功能!(这里只是对Cron类型的Trigger进行操作)

2:项目结构

这里写图片描述

3:初始化

在项目中找到初始化sql——quartz_test.sql ,导入自己的数据库中!初始化的表信息如下:

<span style="color:#000000"><code>qrtz_blob_triggers,
qrtz_calendars, 
qrtz_fired_triggers, 
qrtz_locks, 
qrtz_paused_trigger_grps, 
qrtz_scheduler_state, 
qrtz_simple_triggers, 
qrtz_simprop_triggers,
qrtz_triggers, 
user_t</code></span>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

4:配置文件介绍

(1):在ApplicationContext.xml中添加下面的配置:

<span style="color:#000000"><code><bean name=<span style="color:#009900">"quartzScheduler"</span> class=<span style="color:#009900">"org.springframework.scheduling.quartz.SchedulerFactoryBean"</span> >
        <<span style="color:#000088">property</span> name=<span style="color:#009900">"dataSource"</span> <span style="color:#000088">ref</span> =<span style="color:#009900">"dataSource"</span> />       
        <<span style="color:#000088">property</span> name=<span style="color:#009900">"applicationContextSchedulerContextKey"</span> value=<span style="color:#009900">"applicationContextKey"</span>/>
        <<span style="color:#000088">property</span> name=<span style="color:#009900">"configLocation"</span> value=<span style="color:#009900">"classpath:quartz.properties"</span>/>           
    </bean></code></span>
  • 1
  • 2
  • 3
  • 4
  • 5

这里写图片描述

(2):添加quartz.properties配置文件

<span style="color:#000000"><code><span style="color:#009900"># Default Properties file for use by StdSchedulerFactory</span>
<span style="color:#009900"># to create a Quartz Scheduler Instance, if a different</span>
<span style="color:#009900"># properties file is not explicitly specified.</span>
<span style="color:#009900">#</span>

<span style="color:#009900">#============================================================================</span>
<span style="color:#009900"># Configure Main Scheduler Properties</span>
<span style="color:#009900">#============================================================================</span>
org.quartz.scheduler.instanceName: quartzScheduler
org.quartz.scheduler.instanceId = AUTO

org.quartz.scheduler.rmi.export: <span style="color:#006666">false</span>
org.quartz.scheduler.rmi.proxy: <span style="color:#006666">false</span>
org.quartz.scheduler.wrapJobExecutionInUserTransaction: <span style="color:#006666">false</span>
<span style="color:#009900">#============================================================================</span>
<span style="color:#009900"># Configure ThreadPool</span>
<span style="color:#009900">#============================================================================</span>
org.quartz.threadPool.class: org.quartz.simpl.SimpleThreadPool
org.quartz.threadPool.threadCount: <span style="color:#006666">2</span>
org.quartz.threadPool.threadPriority: <span style="color:#006666">5</span>
org.quartz.threadPool.threadsInheritContextClassLoaderOfInitializingThread: <span style="color:#006666">true</span>

org.quartz.jobStore.misfireThreshold: <span style="color:#006666">60000</span>
<span style="color:#009900">#============================================================================</span>
<span style="color:#009900"># Configure JobStore</span>
<span style="color:#009900">#============================================================================</span>

<span style="color:#009900">#default config</span>
<span style="color:#009900">#org.quartz.jobStore.class: org.quartz.simpl.RAMJobStore</span>
<span style="color:#009900">#持久化配置</span>
org.quartz.jobStore.class:org.quartz.impl.jdbcjobstore.JobStoreTX
org.quartz.jobStore.driverDelegateClass:org.quartz.impl.jdbcjobstore.StdJDBCDelegate
org.quartz.jobStore.useProperties:<span style="color:#006666">true</span>

<span style="color:#009900">#============================================================================</span>
<span style="color:#009900">#havent cluster spring</span>
<span style="color:#009900">#============================================================================</span>
org.quartz.jobStore.isClustered = <span style="color:#006666">false</span>  

<span style="color:#009900">#数据库表前缀</span>
org.quartz.jobStore.tablePrefix:qrtz_
<span style="color:#009900">#org.quartz.jobStore.dataSource:qzDS</span>

<span style="color:#009900">#============================================================================</span>
<span style="color:#009900"># Configure Datasources</span>
<span style="color:#009900">#============================================================================</span>
<span style="color:#009900">#JDBC驱动  Sping去管理dataSource ,这里不在配置数据源信息</span>
<span style="color:#009900">#org.quartz.dataSource.qzDS.driver:com.mysql.jdbc.Driver</span>
<span style="color:#009900">#org.quartz.dataSource.qzDS.URL:jdbc:mysql://localhost:3306/quartz_test</span>
<span style="color:#009900">#org.quartz.dataSource.qzDS.user:root</span>
<span style="color:#009900">#org.quartz.dataSource.qzDS.password:root</span>
<span style="color:#009900">#org.quartz.dataSource.qzDS.maxConnection:10</span></code></span>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52

5:关键代码简单介绍

(1):过滤器 
添加过滤器拦截请求,若用户没有登录,则跳转到登录页面! 
a. 新增LoginFilter.java,核心代码如下:

<span style="color:#000000"><code>    <span style="color:#9b859d">@Override</span>
    <span style="color:#000088">public</span> <span style="color:#000088">void</span> <span style="color:#009900">doFilter</span>(ServletRequest req, ServletResponse resp, FilterChain chain) <span style="color:#000088">throws</span> IOException, ServletException {
        HttpServletRequest request = (HttpServletRequest) req;
        HttpServletResponse response = (HttpServletResponse) resp;
        HttpSession session = request.getSession();
        <span style="color:#880000">//判断Session中是否有登录用户信息</span>
        String toke = (String) session.getAttribute(CommonConstant.LONGIN_TOKE);
        <span style="color:#000088">if</span>(!StringUtils.isEmpty(toke)){
            chain.doFilter(req, resp);
        }<span style="color:#000088">else</span>{
            <span style="color:#880000">//若没有则,跳转到登录页面</span>
            response.sendRedirect(request.getContextPath() + <span style="color:#009900">"/user/toLogin"</span>);
        }
    }</code></span>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

b.在web.xml配置过滤器:

<span style="color:#000000"><code> <<span style="color:#4f4f4f">filter</span>>
    <<span style="color:#4f4f4f">filter</span>-name>LoginFilter</<span style="color:#4f4f4f">filter</span>-name>
    <<span style="color:#4f4f4f">filter</span>-<span style="color:#000088">class</span>>org.ssm.dufy.<span style="color:#4f4f4f">filter</span>.LoginFilter</<span style="color:#4f4f4f">filter</span>-<span style="color:#000088">class</span>>
  </<span style="color:#4f4f4f">filter</span>>
  <<span style="color:#4f4f4f">filter</span>-mapping>
    <<span style="color:#4f4f4f">filter</span>-name>LoginFilter</<span style="color:#4f4f4f">filter</span>-name>
    <url-pattern>/</url-pattern>
  </<span style="color:#4f4f4f">filter</span>-mapping></code></span>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

(2)BAO和Service接口 
Dao主要是用户的一些操作!

<span style="color:#000000"><code><span style="color:#000088">public</span> <span style="color:#000088">interface</span> IUserDao {
    <span style="color:#000088">int</span> deleteByPrimaryKey(Integer id);

    <span style="color:#000088">int</span> insert(User record);

    <span style="color:#000088">int</span> insertSelective(User record);

    User selectByPrimaryKey(Integer id);

    <span style="color:#000088">int</span> updateByPrimaryKeySelective(User record);

    <span style="color:#000088">int</span> updateByPrimaryKey(User record);

    User findUser(User user);
}</code></span>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

Service主要是对定时任务的一些操作!

<span style="color:#000000"><code><span style="color:#000088">package</span> org.ssm.dufy.service;

<span style="color:#000088">public</span> <span style="color:#000088">interface</span> <span style="color:#4f4f4f">QuartzService</span> {

    <span style="color:#880000">/**
     * addJob(方法描述:添加一个定时任务) <br />
     * (方法适用条件描述: – 可选)
     * 
     *<span style="color:#4f4f4f"> @param</span> jobName
     *            作业名称
     *<span style="color:#4f4f4f"> @param</span> jobGroupName
     *            作业组名称
     *<span style="color:#4f4f4f"> @param</span> triggerName
     *            触发器名称
     *<span style="color:#4f4f4f"> @param</span> triggerGroupName
     *            触发器组名称
     *<span style="color:#4f4f4f"> @param</span> cls
     *            定时任务的class
     *<span style="color:#4f4f4f"> @param</span> cron
     *            时间表达式 void
     *<span style="color:#4f4f4f"> @exception</span>
     *<span style="color:#4f4f4f"> @since</span> 1.0.0
     */</span>
    <span style="color:#000088">public</span> <span style="color:#000088">void</span> <span style="color:#009900">addJob</span>(String jobName, String jobGroupName,String triggerName, String triggerGroupName, Class cls, String cron);

    <span style="color:#880000">/**
     * 
     *<span style="color:#4f4f4f"> @param</span> oldjobName 原job name
     *<span style="color:#4f4f4f"> @param</span> oldjobGroup 原job group
     *<span style="color:#4f4f4f"> @param</span> oldtriggerName 原 trigger name
     *<span style="color:#4f4f4f"> @param</span> oldtriggerGroup 原 trigger group
     *<span style="color:#4f4f4f"> @param</span> jobName
     *<span style="color:#4f4f4f"> @param</span> jobGroup
     *<span style="color:#4f4f4f"> @param</span> triggerName
     *<span style="color:#4f4f4f"> @param</span> triggerGroup
     *<span style="color:#4f4f4f"> @param</span> cron
     */</span>
    <span style="color:#000088">public</span> <span style="color:#000088">boolean</span> <span style="color:#009900">modifyJobTime</span>(String oldjobName,String oldjobGroup, String oldtriggerName, String oldtriggerGroup, String jobName, String jobGroup,String triggerName, String triggerGroup, String cron);

    <span style="color:#880000">/**
     * 修改触发器调度时间
     *<span style="color:#4f4f4f"> @param</span> triggerName  触发器名称
     *<span style="color:#4f4f4f"> @param</span> triggerGroupName  触发器组名称
     *<span style="color:#4f4f4f"> @param</span> cron cron表达式
     */</span>
    <span style="color:#000088">public</span> <span style="color:#000088">void</span> <span style="color:#009900">modifyJobTime</span>(String triggerName,
            String triggerGroupName, String cron);


    <span style="color:#880000">/**
     * 暂停指定的任务
     *<span style="color:#4f4f4f"> @param</span> jobName 任务名称
     *<span style="color:#4f4f4f"> @param</span> jobGroupName 任务组名称 
     *<span style="color:#4f4f4f"> @return</span>
     */</span>
    <span style="color:#000088">public</span> <span style="color:#000088">void</span> <span style="color:#009900">pauseJob</span>(String jobName,String jobGroupName);

    <span style="color:#880000">/**
     * 恢复指定的任务
     *<span style="color:#4f4f4f"> @param</span> jobName 任务名称
     *<span style="color:#4f4f4f"> @param</span> jobGroupName 任务组名称 
     *<span style="color:#4f4f4f"> @return</span>
     */</span>
    <span style="color:#000088">public</span> <span style="color:#000088">void</span> <span style="color:#009900">resumeJob</span>(String jobName,String jobGroupName);

    <span style="color:#880000">/**
     * 删除指定组任务
     *<span style="color:#4f4f4f"> @param</span> jobName 作业名称
     *<span style="color:#4f4f4f"> @param</span> jobGroupName 作业组名称
     *<span style="color:#4f4f4f"> @param</span> triggerName 触发器名称
     *<span style="color:#4f4f4f"> @param</span> triggerGroupName 触发器组名称
     */</span>
    <span style="color:#000088">public</span> <span style="color:#000088">void</span> <span style="color:#009900">removeJob</span>(String jobName, String jobGroupName,
            String triggerName, String triggerGroupName);


    <span style="color:#880000">/**
     * 开始所有定时任务。启动调度器
     */</span>
    <span style="color:#000088">public</span> <span style="color:#000088">void</span> <span style="color:#009900">startSchedule</span>();

    <span style="color:#880000">/**
     * 关闭调度器
     */</span>
    <span style="color:#000088">public</span> <span style="color:#000088">void</span> <span style="color:#009900">shutdownSchedule</span>();
}
</code></span>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87

操作用户通过Mybatis进行,操作定时器任务,使用的Quartz封装好的接口!

主要的实现代码就不在这里展示!如需查看请看源码!

(3)Controller 
(1):UserController

处理一些用户的请求操作!

(2):QuartzController

处理Quartz的请求操作!

6:任务类

<span style="color:#000000"><code><span style="color:#000088">package</span> org.ssm.dufy.job;

<span style="color:#000088">import</span> java.util.Date;

<span style="color:#000088">import</span> org.quartz.Job;
<span style="color:#000088">import</span> org.quartz.JobExecutionContext;
<span style="color:#000088">import</span> org.quartz.JobExecutionException;

<span style="color:#000088">public</span> <span style="color:#000088">class</span> <span style="color:#4f4f4f">HelloWorldJob</span> <span style="color:#000088">implements</span> <span style="color:#4f4f4f">Job</span>{


    <span style="color:#880000">/**
     * "0/5 * * * * ?  五秒运行一次 
     */</span>
    <span style="color:#9b859d">@Override</span>
    <span style="color:#000088">public</span> <span style="color:#000088">void</span> <span style="color:#009900">execute</span>(JobExecutionContext arg0) <span style="color:#000088">throws</span> JobExecutionException {
        System.out.println(<span style="color:#009900">"----hello world---"</span> + <span style="color:#000088">new</span> Date());
    }

}
</code></span>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

7:待优化地方

  • 界面的美观性
  • 可以添加Simple类型的Trigger
  • 用户信息的管理
  • 抽象Job的Dao类 
    。。。。。。

三:运行效果介绍

有两种方式启动本实例项目: 
1:Tomcat方式,Tomcat方式不在讲解! 
2:Jetty方式 
在pom.xml中配置了Jetty的依赖的插件!

<span style="color:#000000"><code><span style="color:#006666"><<span style="color:#4f4f4f">plugin</span>></span>
                <span style="color:#006666"><<span style="color:#4f4f4f">groupId</span>></span>org.apache.maven.plugins<span style="color:#006666"></<span style="color:#4f4f4f">groupId</span>></span>
                <span style="color:#006666"><<span style="color:#4f4f4f">artifactId</span>></span>maven-war-plugin<span style="color:#006666"></<span style="color:#4f4f4f">artifactId</span>></span>
                <span style="color:#006666"><<span style="color:#4f4f4f">version</span>></span>2.4<span style="color:#006666"></<span style="color:#4f4f4f">version</span>></span>
            <span style="color:#006666"></<span style="color:#4f4f4f">plugin</span>></span>
            <span style="color:#006666"><<span style="color:#4f4f4f">plugin</span>></span>
                <span style="color:#006666"><<span style="color:#4f4f4f">groupId</span>></span>org.mortbay.jetty<span style="color:#006666"></<span style="color:#4f4f4f">groupId</span>></span>
                <span style="color:#006666"><<span style="color:#4f4f4f">artifactId</span>></span>jetty-maven-plugin<span style="color:#006666"></<span style="color:#4f4f4f">artifactId</span>></span>
                <span style="color:#006666"><<span style="color:#4f4f4f">version</span>></span>8.1.15.v20140411<span style="color:#006666"></<span style="color:#4f4f4f">version</span>></span>

                <span style="color:#006666"><<span style="color:#4f4f4f">configuration</span>></span>
                    <span style="color:#006666"><<span style="color:#4f4f4f">scanIntervalSeconds</span>></span>10<span style="color:#006666"></<span style="color:#4f4f4f">scanIntervalSeconds</span>></span>
                    <span style="color:#006666"><<span style="color:#4f4f4f">stopPort</span>></span>9999<span style="color:#006666"></<span style="color:#4f4f4f">stopPort</span>></span>
                    <span style="color:#006666"><<span style="color:#4f4f4f">reload</span>></span>manual<span style="color:#006666"></<span style="color:#4f4f4f">reload</span>></span>
                    <span style="color:#006666"><<span style="color:#4f4f4f">webAppConfig</span>></span>
                        <span style="color:#006666"><<span style="color:#4f4f4f">contextPath</span>></span>/ssm_quratz<span style="color:#006666"></<span style="color:#4f4f4f">contextPath</span>></span>
                    <span style="color:#006666"></<span style="color:#4f4f4f">webAppConfig</span>></span>
                    <span style="color:#006666"><<span style="color:#4f4f4f">connectors</span>></span>
                        <span style="color:#006666"><<span style="color:#4f4f4f">connector</span> <span style="color:#4f4f4f">implementation</span>=<span style="color:#009900">"org.eclipse.jetty.server.nio.SelectChannelConnector"</span>></span>
                            <span style="color:#006666"><<span style="color:#4f4f4f">port</span>></span>8080<span style="color:#006666"></<span style="color:#4f4f4f">port</span>></span>
                            <span style="color:#006666"><<span style="color:#4f4f4f">maxIdleTime</span>></span>60000<span style="color:#006666"></<span style="color:#4f4f4f">maxIdleTime</span>></span>
                        <span style="color:#006666"></<span style="color:#4f4f4f">connector</span>></span>
                    <span style="color:#006666"></<span style="color:#4f4f4f">connectors</span>></span>
                <span style="color:#006666"></<span style="color:#4f4f4f">configuration</span>></span>
            <span style="color:#006666"></<span style="color:#4f4f4f">plugin</span>></span></code></span>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25

在Eclipse运行步骤如在截图:

这里写图片描述

配置的参数:

<span style="color:#000000"><code>-server -<span style="color:#009900">Xms1024m</span> -<span style="color:#009900">Xmx2048m</span> -<span style="color:#009900">XX</span><span style="color:#009900">:PermSize=</span><span style="color:#006666">512</span>m -<span style="color:#009900">XX</span><span style="color:#009900">:MaxPermSize=</span><span style="color:#006666">512</span>m -<span style="color:#009900">XX</span><span style="color:#009900">:+CMSClassUnloadingEnabled</span> -<span style="color:#009900">XX</span><span style="color:#009900">:+PrintGCDetails</span> -<span style="color:#009900">Xloggc</span><span style="color:#009900">:%M2_HOME<span style="color:#009900">%/gc.log -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=%M2_HOME%/</span>java_pid</span>.hproyuan</code></span>
  • 1

配置好之后运行启动不报错就ok!

最后打开浏览器,输入 http://localhost:8080/ssm_quratz

3:运行结果图 
(1)登录页面

这里写图片描述

(2)任务列表页面

这里写图片描述
(3)新增页面(编辑页面和此类似)

这里写图片描述
(4)Eclipse控制台打印的信息

这里写图片描述

四:源码


SSMM(Spring+SpringMVC+Mybatis+Mysql)和Quartz集成 源码 


Quartz专栏系列

1.Quartz学习——Quartz大致介绍(一)

2.Quartz学习——Quartz简单入门Demo(二)

3.Quartz学习——Spring和Quartz集成详解(三)

4.Quartz学习——SSMM(Spring+SpringMVC+Mybatis+Mysql)和Quartz集成详解(四)

5.Quartz源码——JobStore保存JonDetail和Trigger源码分析(一)

6.Quartz源码——scheduler.start()启动源码分析(二)

7.Quartz源码——QuartzSchedulerThread.run() 源码分析(三)

8.Quartz源码——Quartz调度器的Misfire处理规则(四)

 

原文地址:https://blog.csdn.net/u010648555/article/details/60767633

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring是一个开源的Java应用框架,可以帮助我们快速开发企业级应用程序。Spring提供了一个轻量级的容器,可以管理应用程序中的各种组件,比如控制器、服务、数据访问对象等。 Spring MVC是Spring框架的一个子模块,它提供了一套用于开发Web应用程序的MVC(Model-View-Controller)架构。通过Spring MVC,我们可以将应用程序的逻辑分离为模型、视图和控制器,并通过注解或配置文件来实现请求的处理和响应的渲染。 MyBatis是一个开源的持久层框架,它提供了一种将数据从数据库中映射到Java对象的方法。MyBatis使用SQL语句来操作数据库,通过配置文件可以将SQL语句和Java对象进行映射。在Spring中,我们可以将MyBatis整合到应用程序中,使用它来访问数据库并操作数据。 Quartz是一个开源的Java定时任务调度框架,它可以帮助我们在应用程序中创建和管理定时任务。Quartz提供了灵活的调度机制,可以设置任务的触发时间、重复间隔等参数。在Spring中,我们可以通过配置文件来创建和管理Quartz定时任务,也可以使用注解来指定任务的触发条件和执行逻辑。 在实际应用中,我们可以使用Spring MVC来处理HTTP请求,并调用MyBatis来访问数据库。同时,通过配置文件或注解,我们可以将Quartz集成到应用程序中,创建动态的定时任务。比如,我们可以在Spring的配置文件中配置一个定时任务,指定任务的触发条件和执行逻辑。当应用程序启动时,Quartz会根据配置文件中的设定来创建任务,并按照设定的触发时间执行任务。 总之,通过整合SpringSpring MVC、MyBatisQuartz,我们可以实现一个具有动态定时任务功能的Java应用程序。这些框架提供了丰富的功能和灵活的配置方式,可以帮助我们快速开发高效的企业级应用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值