定时任务

应用场景:电商项目中,如果一个订单如果长时间没有支付,那么则订单应该做超时处理.

 

Quartz介绍

Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,它可以与J2EEJ2SE应用程序相结合也可以单独使用。Quartz可以用来创建简单或为运行十个,百个,甚至是好几万个Jobs这样复杂的程序。Jobs可以做成标准的Java组件或 EJBsQuartz的最新版本为Quartz 2.3.0

 

Quarez定时任务.可以在任何时间间隔内启动定时任务(JOB)

1.30秒执行一次,或者40秒/50秒执行一次

2.在一天内执行几次

3.可以执行一个月内执行几次

4.可以在一年内执行几次.

 

1.调度器

主要监控定时任务的时间,如果时间到了则开始运行任务

2.JOB

主要描述,做什么样的操作

3.触发器

当接收到调度器的指令后,运行指定的任务.

调用流程:

1.当一个任务定义之后(job),需要将任务的信息(任务处理类/方法)需要注册到调度器中.

2.调度器会实时的监控哪些任务需要马上执行.如果到了执行的时间则会调用触发器执行任务.

3.接收到处理任务后,触发器开启一个线程执行该任务.等待下一次任务的执行.

 

将将jar包文件添加到项目的parent中,之后打包

<!-- 定时任务 -->

        <dependency>

            <groupId>org.quartz-scheduler</groupId>

            <artifactId>quartz</artifactId>

            <version>2.2.1</version>

        </dependency>

        <!--定时任务需要依赖c3p0jar包  -->

        <dependency>

            <groupId>c3p0</groupId>

            <artifactId>c3p0</artifactId>

            <version>0.9.1.2</version>

        </dependency>

 

调度器配置文件:

<!-- 定义任务bean -->

    <bean name="paymentOrderJobDetail" class="org.springframework.scheduling.quartz.JobDetailFactoryBean">

        <!-- 指定具体的job类 -->

        <property name="jobClass" value="com.jt.order.job.PaymentOrderJob" />

        <!-- 指定job的名称 -->

        <property name="name" value="paymentOrder" />

        <!-- 指定job的分组 -->

        <property name="group" value="Order" />

        <!-- 必须设置为true,如果为false,当没有活动的触发器与之关联时会在调度器中删除该任务  -->

        <property name="durability" value="true"/>

        <!-- 指定spring容器的key,如果不设定在job中的jobmap中是获取不到spring容器的 -->

        <property name="applicationContextJobDataKey" value="applicationContext"/>

    </bean>

   

    <!-- 定义触发器 -->

    <bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">

        <property name="jobDetail" ref="paymentOrderJobDetail" />

        <!-- 定义定时任务的时间表达式 每一分钟执行一次 -->

        <property name="cronExpression" value="0 0/1 * * * ?" />

    </bean>

    <!-- 定义调度器 -->

    <bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">

        <property name="triggers">

            <list>

                <ref bean="cronTrigger" />

            </list>

        </property>

    </bean>

 

定时任务处理类:

//定时任务的处理类

public class PaymentOrderJob extends QuartzJobBean{

    

    @Override

    protected void executeInternal(JobExecutionContext context) throws JobExecutionException {

        //获取spring容器对象

        ApplicationContext springContext =

                (ApplicationContext)

                context.getJobDetail().getJobDataMap().get("applicationContext");

       

        //获取orderMapper接口

        OrderMapper mapper =

                springContext.getBean(OrderMapper.class);

       

        //需要将超时的订单做过期处理

        //**

         /* 1.2天没有支付则超时

         * 2.需要关闭未支付的订单 状态码为1改为6

         * 3.

         * sql:update 表名 set status = 6

         * where status = 1 and created < new Date() - 2

         */

        Date agoDate = new DateTime().minusDays(2).toDate();

       

        //执行超时任务

        mapper.updateStatus(agoDate);

        System.out.println("定时任务操作成功!!!!!");

    }

}

资源下载链接为: https://pan.quark.cn/s/5c50e6120579 在Android移动应用开发中,定位功能扮演着极为关键的角色,尤其是在提供导航、本地搜索等服务时,它能够帮助应用获取用户的位置信息。以“baiduGPS.rar”为例,这是一个基于百度地图API实现定位功能的示例项目,旨在展示如何在Android应用中集成百度地图的GPS定位服务。以下是对该技术的详细阐述。 百度地图API简介 百度地图API是由百度提供的一系列开放接口,开发者可以利用这些接口将百度地图的功能集成到自己的应用中,涵盖地图展示、定位、路径规划等多个方面。借助它,开发者能够开发出满足不同业务需求的定制化地图应用。 Android定位方式 Android系统支持多种定位方式,包括GPS(全球定位系统)和网络定位(通过Wi-Fi及移动网络)。开发者可以根据应用的具体需求选择合适的定位方法。在本示例中,主要采用GPS实现高精度定位。 权限声明 在Android应用中使用定位功能前,必须在Manifest.xml文件中声明相关权限。例如,添加<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />,以获取用户的精确位置信息。 百度地图SDK初始化 集成百度地图API时,需要在应用启动时初始化地图SDK。通常在Application类或Activity的onCreate()方法中调用BMapManager.init(),并设置回调监听器以处理初始化结果。 MapView的创建 在布局文件中添加MapView组件,它是地图显示的基础。通过设置其属性(如mapType、zoomLevel等),可以控制地图的显示效果。 定位服务的管理 使用百度地图API的LocationClient类来管理定位服务
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值