job 定时任务的五种创建方式 || xxl-job 定时任务调度中心

11 篇文章 2 订阅
订阅专栏

Quartz表达式生成地址: http://cron.qqe2.com/
----支持生成定时任务表达式和反解析,使用Quartz表达式的定时任务如下
1、xxl-job
2、springboot 的 @Scheduled
3、Quartz 框架

一、job 定时任务的五种创建方式

1、使用线程创建 job 定时任务

/**
  * TODO  使用线程创建 job 定时任务
  * @author 王松
  * @date  2019/9/14 0014 22:12
  */
public class JobThread {

    public static class Demo01 {
        static long count = 0;

        public static void main(String[] args) {
            Runnable runnable = new Runnable() {
                @Override
                public void run() {
                    while (true) {
                        try {
                            Thread.sleep(1000);
                            count++;
                            System.out.println(count);
                        } catch (Exception e) {
                            // TODO: handle exception
                        }
                    }
                }
            };
            Thread thread = new Thread(runnable);
            thread.start();
        }
    }
}

2、使用 TimerTask 创建job定时任务

/**
 * TODO  使用 TimerTask 创建job定时任务
 *
 * @author 王松
 * @date 2019/9/14 0014 20:50
 */
public class JobTimerTask {

    static long count = 0;
    public static void main(String[] args) {
        TimerTask timerTask = new TimerTask() {
            @Override
            public void run() {
                count++;
                System.out.println(count);
            }
        };
        //创建timer对象设置间隔时间
        Timer timer = new Timer();
        // 间隔天数
        long delay = 0;
        // 间隔毫秒数
        long period = 1000;
        timer.scheduleAtFixedRate(timerTask, delay, period);
    }
}

3、使用线程池创建 job定时任务

**
  * TODO  使用线程池创建 job定时任务
  * @author 王松
  * @date  2019/9/14 0014 20:56 
  */
public class JobScheduledExecutorService {
        public static void main(String[] args) {
            Runnable runnable = new Runnable() {
                @Override
                public void run() {
                    // task to run goes here
                    System.out.println("Hello !!");
                }
            };
            ScheduledExecutorService service = Executors.newSingleThreadScheduledExecutor();
            // 第二个参数为首次执行的延时时间,第三个参数为定时执行的间隔时间
            service.scheduleAtFixedRate(runnable, 1, 1, TimeUnit.SECONDS);
        }
}

4.Quartz 框架

1.引入maven依赖

<dependencies>
		<!-- quartz -->
		<dependency>
			<groupId>org.quartz-scheduler</groupId>
			<artifactId>quartz</artifactId>
			<version>2.2.1</version>
		</dependency>
		<dependency>
			<groupId>org.quartz-scheduler</groupId>
			<artifactId>quartz-jobs</artifactId>
			<version>2.2.1</version>
		</dependency>
	</dependencies>

2.任务调度类

public class MyJob implements Job {

    @Override
    public void execute(JobExecutionContext context) throws JobExecutionException {
        System.out.println("quartz MyJob date:" + System.currentTimeMillis());
    }
}
  1. 启动类
public class JobQuartz {

    public static void main(String[] args) throws SchedulerException {
        //1.创建Scheduler的工厂
        SchedulerFactory sf = new StdSchedulerFactory();
        //2.从工厂中获取调度器实例
        Scheduler scheduler = sf.getScheduler();
        //3.创建JobDetail,
        JobDetail jb = JobBuilder.newJob(MyJob.class)
                //job的描述
                .withDescription("this is a ram job")
                //job 的name和group
                .withIdentity("ramJob", "ramGroup")
                .build();
        //任务运行的时间,SimpleSchedle类型触发器有效,3秒后启动任务
        long time=  System.currentTimeMillis() + 3*1000L;
        Date statTime = new Date(time);
        //4.创建Trigger
        //使用SimpleScheduleBuilder或者CronScheduleBuilder
        Trigger t = TriggerBuilder.newTrigger()
                .withDescription("")
                .withIdentity("ramTrigger", "ramTriggerGroup")
                //.withSchedule(SimpleScheduleBuilder.simpleSchedule())
                //默认当前时间启动
                .startAt(statTime)
                //两秒执行一次,Quartz表达式,支持各种牛逼表达式
                .withSchedule(CronScheduleBuilder.cronSchedule("0/2 * * * * ?"))
                .build();
        //5.注册任务和定时器
        scheduler.scheduleJob(jb, t);
        //6.启动 调度器
        scheduler.start();
    }

5. springboot 的 @Scheduled 注解

@Component
@Configuration      //1.主要用于标记配置类,兼备Component的效果。
@EnableScheduling   // 2.开启定时任务
public class SaticScheduleTask {
     
    @Scheduled(cron = "0/5 * * * * ?")  //3.添加定时任务
    //@Scheduled(fixedRate=5000)        //或直接指定时间间隔,例如:5秒
    private void configureTasks() {
        System.err.println("执行静态定时任务时间: " + LocalDateTime.now());
    }
}

二、xxl-job 任务调度后台 Admin

xxl-job 有什么用?
--------分布式集群的情况下,保证定时任务不被重复执行。
--------执行原理同Nginx 类型,所有定时任务通过任务调度平台分发,也可配置负载均衡等等
--------首先让我们能够使用起来,搭建一个自己的任务

第一步: github下载源码导入

下载地址:https://github.com/xuxueli/xxl-job/
当前版本目录结构 2.1.1
在这里插入图片描述

第二步: 执行sql

文件地址:xxl-job/doc/db/tables_xxl_job.sql
当前2.1.1版本sql
在这里插入图片描述

第三步: 修改xxl-job-admin项目配置

配置文件:application.properties
修改数据库连接
在这里插入图片描述

第四步: 启动admin项目

springboot 方式启动项目,
在这里插入图片描述
访问 http://localhost:8080/xxl-job-admin/
账号密码:admin / 123456
在这里插入图片描述
任务调度中心就搭建好了
接下来需要创建一个服务器连接任务调度中心

三、自创建boot项目的任务xxl-job 示例demo

创建一个 boot 项目

我的目录结构
在这里插入图片描述

pom.xml

web核心及 xxl-job-core

      <!-- spring-boot-starter-web (spring-webmvc + tomcat) -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <!-- xxl-job-core  版本号根据自己下载的版本修改 -->
        <dependency>
            <groupId>com.xuxueli</groupId>
            <artifactId>xxl-job-core</artifactId>
            <version>2.1.1-SNAPSHOT</version>
        </dependency>

logback.xml

日志配置直接拷贝

<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="false" scan="true" scanPeriod="1 seconds">

    <contextName>logback</contextName>
    <property name="log.path" value="/data/applogs/xxl-job/xxl-job-executor-sample-springboot.log"/>

    <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%d{HH:mm:ss.SSS} %contextName [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>
    </appender>

    <appender name="file" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${log.path}</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${log.path}.%d{yyyy-MM-dd}.zip</fileNamePattern>
        </rollingPolicy>
        <encoder>
            <pattern>%date %level [%thread] %logger{36} [%file : %line] %msg%n
            </pattern>
        </encoder>
    </appender>

    <root level="info">
        <appender-ref ref="console"/>
        <appender-ref ref="file"/>
    </root>

</configuration>

application.properties 加入配置

-----需修改或自定义
1、xxl-job admin 地址
2、xxl.job.executor.appname 自定义名称,后台配置必须对应
3、xxl.job.executor.ip 当前电脑Ip,或部署项目的电脑Ip
4、xxl.job.executor.port 端口

# 端口号
server.port=8081
# 日志
logging.config=classpath:logback.xml

### xxl-job admin 地址,多个逗号分隔"
xxl.job.admin.addresses=http://127.0.0.1:8080/xxl-job-admin

### xxl-job名称 || socket ip 当前项目部署的ip地址/本机ip || socket 端口号
xxl.job.executor.appname=xxl-job-executor-sample
xxl.job.executor.ip=192.168.43.153
xxl.job.executor.port=9999

### xxl-job, access token
xxl.job.accessToken=
### xxl-job log path
xxl.job.executor.logpath=/data/applogs/xxl-job/jobhandler
### xxl-job log retention days
xxl.job.executor.logretentiondays=-1

添加boot配置类 XxlJobConfig

package xxljob.config;
import com.xxl.job.core.executor.impl.XxlJobSpringExecutor;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * xxl-job xxljob.config
 *
 * @author xuxueli 2017-04-28
 */
@SuppressWarnings("ALL")
@Configuration
public class XxlJobConfig {
    private Logger logger = LoggerFactory.getLogger(XxlJobConfig.class);

    @Value("${xxl.job.admin.addresses}")
    private String adminAddresses;

    @Value("${xxl.job.executor.appname}")
    private String appName;

    @Value("${xxl.job.executor.ip}")
    private String ip;

    @Value("${xxl.job.executor.port}")
    private int port;

    @Value("${xxl.job.accessToken}")
    private String accessToken;

    @Value("${xxl.job.executor.logpath}")
    private String logPath;

    @Value("${xxl.job.executor.logretentiondays}")
    private int logRetentionDays;


    @Bean(initMethod = "start", destroyMethod = "destroy")
    public XxlJobSpringExecutor xxlJobExecutor() {
        logger.info(">>>>>>>>>>> xxl-job xxljob.config init.");
        XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor();
        xxlJobSpringExecutor.setAdminAddresses(adminAddresses);
        xxlJobSpringExecutor.setAppName(appName);
        xxlJobSpringExecutor.setIp(ip);
        xxlJobSpringExecutor.setPort(port);
        xxlJobSpringExecutor.setAccessToken(accessToken);
        xxlJobSpringExecutor.setLogPath(logPath);
        xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays);
        System.err.println(ip+":"+port);
        return xxlJobSpringExecutor;
    }

    /**
     * 针对多网卡、容器内部署等情况,可借助 "spring-cloud-commons" 提供的 "InetUtils" 组件灵活定制注册IP;
     *
     *      1、引入依赖:
     *          <dependency>
     *             <groupId>org.springframework.cloud</groupId>
     *             <artifactId>spring-cloud-commons</artifactId>
     *             <version>${version}</version>
     *         </dependency>
     *
     *      2、配置文件,或者容器启动变量
     *          spring.cloud.inetutils.preferred-networks: 'xxx.xxx.xxx.'
     *
     *      3、获取IP
     *          String ip_ = inetUtils.findFirstNonLoopbackHostInfo().getIpAddress();
     */
}

任务job

@JobHandler(value="demoJobHandler")
@Component
public class DemoJobHandler extends IJobHandler {

     static int count;
    @Override
    public ReturnT<String> execute(String param) throws Exception {
        System.out.println("执行job任务"+count++);
        return SUCCESS;
    }
}

admin 后台配置

执行管理器下
在这里插入图片描述
任务管理下
编辑任务

定时规则生成: http://cron.qqe2.com/
job任务名:@JobHandler注解值 >> 如:@JobHandler(value=“demoJobHandler”)
在这里插入图片描述

启动

在这里插入图片描述
这样就配置完成了
在这里插入图片描述
完成

关注公众号【兮家】,不定时分享干货内容哦
在这里插入图片描述

  • 个人开源项目(通用后台管理系统)–> https://gitee.com/wslxm/spring-boot-plus2 , 喜欢的可以看看

  • 本文到此结束,如果觉得有用,动动小手点赞或关注一下呗,将不定时持续更新更多的内容…,感谢大家的观看!

xxl-job:分布式任务调度框架。(分布式任务调度平台XXL-JOB
02-04
XXL作业 XXL-JOB,一个分布式任务调度框架。 介绍 XXL-JOB是一个分布式任务调度框架。 它的核心设计目标是快速发展,学习简单,轻巧且易于扩展的内容。 现在,它已经是开源的,许多公司在生产环境中使用它,真正的“开箱即用”。 XXL-JOB是一个分布式任务调度平台,其核心设计目标是开发Swift,学习简单,轻量级,易扩展。更换开放源代码并连接到公司线上产品线,开箱即用。 文献资料 通讯 产品特点 1,简单:支持通过Web页面对任务进行CRUD操作,操作简单,一分钟上手; 2,动态:支持动态修改任务状态,启动/停止任务,以及终止运行中任务,即时生效; 3,调度中心HA(中心式)
jobHandler调度
04-11
资源使用说明:http://blog.csdn.net/qq5132834/article/details/70053723
【Java】xxl-job的快速入门
m0_64210833的博客
04-14 1324
xxl-job的简单入门案例
XxJobConfig调度任务配置
Jerry的博客
11-20 978
@Slf4j @Data @Configuration @ComponentScan(basePackages = "cn.edc.wechat.edcwechatpublic.config") public class XxlJobConfig { @Value("${xxl.job.admin.addresses}") private String adminAddresses; @Value("${xxl.job.executor.appname}") priva
spring boot 接入xxl-job IJobHandler @JobHandler 分布式任务调度用法
热门推荐
JesseCary的博客
05-16 3万+
步骤一下:jar 包 <!--任务调度--> <dependency> <groupId>com.xuxueli</groupId> <artifactId>xxl-job-core</artifactId> <version&g...
定时任务最简单的3种实现方法
weixin_64051447的博客
06-20 4664
定时任务在实际的开发中特别常见,比如电商平台 30 分钟后自动取消未支付的订单,以及凌晨的数据汇总和备份等,都需要借助定时任务来实现,那么我们本文就来看一下。
xxl-job】轻松实现分布式定时任务demo实例
Dream it Possible
10-11 1万+
【项目描述】 前段时间专门独立了一个spring boot服务,用于做和第三方erp系统的对接工作。此服务的第一个需求工作就是可以通过不同的规则,设置不同的定时任务,从而获取erp系统的商品数据。所以,系统架构采用了xxl-job实现分布式定时任务。 【学习背景】 此项目不是我负责的,在上个月同事让我帮忙处理一个问题,便带给了我学习的机会,这个框架已经在线上环境使用,但框架也不是我参与搭建的,所以...
xxl-job任务调度中心集群部署详细文档
01-19
1、XXL-JOB调度中心集群部署要求 2、Nginx负载均衡配置 3、解决xxl-job集群重复执行任务问题
xxl-job分布式任务调度平台-其他
06-12
XXL-JOB是一个轻量级分布式任务调度平台,其核心设计目标是开发迅速、学习简单、轻量级、易扩展。现已开放源代码并接入多家公司线上产品线,开箱即用。 XXL-JOB特点: 1、简单:支持通过Web页面对任务进行CRUD操作,...
分布式任务调度中心xxl-job
最新发布
05-10
3、调度中心HA(中心式):调度采用中心式设计,“调度中心”自研调度组件并支持集群部署,可保证调度中心HA; 4、执行器HA(分布式):任务分布式执行,任务”执行器”支持集群部署,可保证任务执行HA; 5、注册...
xxl-job2.3.0集成nacos配置,注册中心
05-11
xxl-job2.3.0任务调度中心集成nacos配置,注册中心,xxl-job是一款开源的分布式任务调度框架
定时任务简单的3种实现方法
鑫和皓的博客
07-09 3061
本文介绍了简单的三种实现定时任务的方法,包括使用操作系统定时任务、使用第三方定时任务库以及使用编程语言自带的定时任务功能。其中,timer 对象用于调度定时任务的执行时间,calendar 对象用于设置定时任务的执行时间,new BackupTask() 创建一个 BackupTask 类的实例,用于执行备份数据库的操作。scheduleAtFixedRate() 方法用于添加定时任务,第一个参数为定时任务的实例,第二个参数为定时任务的开始时间,第三个参数为定时任务的间隔时间。
20191114 分布式job调度中心
陈如水的专栏
12-06 701
分布式job配置中心 相当于注册中心,每个需要跑定时任务的微服务都需要自动或者手动注册到上面。 管理后台 执行器管理,任务管理,调度日志,可以查看某个job的执行状况。 多个任务Handler,配置一个端口。一个执行器中可以包含多个Handler,把当前项目注册到分布式job管理中心,成为一个执行器。 1)一个项目中包含多个Handler任务; 一个执行器中可能会配置多个任务。每...
xxl-job分布式任务调度项目搭建(单机部署demo)
IBLiplus的博客
04-23 4752
今天学习了一下分布式任务开源项目xxl-job,然后自己在本地“搭建”了一个单机的任务项目。 写了一个定时任务,每分钟向数据库中添加一条数据,很简单的项目,大家可以通过该项目作为xxl-job的入门小试。 先介绍一下大致是怎样的吧: 第一部分,xxl-job作为一个单独的项目,需要部署在tomcat上面,当然是进行一些简单的配置之后。 第二部门,是我单独创建了一个springboot项目,...
springboot集成xxl-job快速入门demo
HBLOG
02-28 519
一、xxl-job介绍XXL-JOB是一个分布式任务调度平台,其核心设计目标是开发迅速、学习简单、轻量级、易扩展。现已开放源代码并接入多家公司线上产品线,开箱即用。二、测试环境搭建采用docker-compose来搭建测试环境,具体配置如下:docker-compose-xxl-job.yml# 参考文档:https://www.xuxueli.com/xxl-job version: "3" n...
xxl-job手动注册JobHandler
wsdhla的专栏
09-29 6628
xxl-job手动注册JobHandler
分布式任务调度系列 - XXL-JOB
代码的知行者
01-06 5605
本内容仅用于个人学习笔记,如有侵扰,联系删除程序为解决一个信息处理任务而预先编制的工作执行方案,这就是定时任务,核心组成如下:日常开发中,定时任务主要分为如下两种使用场景:在启动类上使用注解,表示开启定时任务 根据业务需要,在方法上使用注解,属性配置定时规则 启动项目就可以看控制台看到定时任务执行效果是一个开源的,具有丰富的任务管理功能以及高性能,高可用等特点的轻量级分布式任务调度平台,其核心设计目标是开发迅速、学习简单、轻量级、易扩展、开箱即用!!! 系统组成:总结:​ 调度中心和执行器两个模块分开部署,
分布式任务调度平台xxl-job demo
qq_41999391的博客
06-01 550
1.项目要用到xxl-job,写了demo,记录一下 1.git 上拉源码,源码地址 https://github.com/xuxueli/xxl-job.git,项目结构如下 2.执行sql脚本,官方提供脚本路径是xxl-job\doc\db,将sql脚本在数据库执行即可 。 3.修改数据库链接信息,在xxl-jon-admin里的配置文件将数据库链接替换为自己文件。然后启动,访问lo...
xxl-job的demo使用及源码解读
qishiheyongshi的专栏
09-05 428
xxl-job的demo使用及源码解读
使用代码创建xxljob定时任务到任务调度中心
05-24
首先需要引入xxl-job-core和xxl-job-executor两个依赖。 然后可以通过以下代码实现向任务调度中心创建定时任务: ```java public class XxlJobDemo { public static void main(String[] args) { // 1. 初始化调度中心地址和访问令牌信息 XxlJobExecutor executor = new XxlJobExecutor(); executor.setAdminAddresses("http://localhost:8080/xxl-job-admin"); executor.setAccessToken("xxl-job-token"); // 2. 创建定时任务 XxlJobInfo jobInfo = new XxlJobInfo(); jobInfo.setJobGroup(1); jobInfo.setJobCron("0 0/1 * * * ?"); jobInfo.setJobDesc("定时任务描述"); jobInfo.setExecutorHandler("demoJobHandler"); jobInfo.setExecutorParam("参数"); jobInfo.setAuthor("author"); try { int jobId = XxlJobAdminImpl.getInstance().add(jobInfo); System.out.println("任务添加成功,jobId:" + jobId); } catch (Exception e) { e.printStackTrace(); } } } ``` 其中,`XxlJobExecutor`是xxl-job-executor提供的入口类,需要设置调度中心地址和访问令牌信息;`XxlJobInfo`表示定时任务信息,需要设置所属分组、cron表达式、任务描述、执行器处理器、执行器参数和作者等信息;`XxlJobAdminImpl`是xxl-job-core提供的实现类,向调度中心发送任务创建请求。 需要注意的是,`demoJobHandler`需要在xxl-job-executor项目中实现,用于执行具体的业务逻辑。

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

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
写文章

热门文章

  • 关于Nginx 配置出现 405 Method Not Allowed 一次血的教训 50647
  • git -- 安装及配置 35839
  • job 定时任务的五种创建方式 || xxl-job 定时任务调度中心 30714
  • Nginx 502错误: Failed to load resource: the server responded with a status of 502 (Bad Gateway) 30104
  • IntelliJ Idea -- 多次启动同一个main 方法 22241

分类专栏

  • java 必备知识
  • java se 10篇
  • java ee 5篇
  • jdk 新特性 11篇
  • 多线程 / 并发 / 锁 6篇
  • springboot 45篇
  • spring/ springMvc 4篇
  • 数据库 Mysql 15篇
  • crud 框架 (mybatis-plus/ jpa等) 12篇
  • json 6篇
  • 工具类 20篇
  • java 进阶知识
  • 设计模式 9篇
  • 数据结构与算法 5篇
  • 源码分析 14篇
  • API 设计/安全/架构 21篇
  • nio / netty /socket 2篇
  • jvm 3篇
  • 模板语法 (thymeleaf) 1篇
  • 第三方API 对接 3篇
  • 微服务/分布式 1篇
  • 搜索引擎 ES 7篇
  • 缓存 redis 5篇
  • 分布式解决方案 11篇
  • Spring Cloud Alibaba 7篇
  • Spring Cloud 10篇
  • MQ-消息中间件 10篇
  • Zookeeper 2篇
  • 前端知识 3篇
  • 微信公众号/小程序 3篇
  • 前端框架 (vue+ layui 等) 18篇
  • 待定
  • html / css 2篇
  • javaScript / jquery / ts 3篇
  • 部署运维 4篇
  • Linux 15篇
  • Nginx 11篇
  • docker 11篇
  • Jenkins / k8s 8篇
  • 开发工具
  • 代码管理 (git /svn) 11篇
  • idea / eclipse 设置篇 20篇
  • 开发工具 4篇
  • 错误专栏 15篇
  • 其他 6篇
  • 隐私
  • 开源项目 2篇
  • 待定5
  • 待定6
  • 待定7

最新评论

  • git 没拉代码就提交重出现 error: cannot pull with rebase: Your index contains uncommitted changes.

    cuixbo: git pull --rebase --autostash 或者配置 git config --global rebase.autoStash true

  • springboot -- 每天自动备份 mysql 数据

    温柔体贴的你: 请问,我sql文件有了,但是没有sql语句是怎么回事呢

  • vue3 添加编辑页使用 cron 表达式生成

    向着五星的方向: 互关一下表情包表情包

  • jdk8 根据时间进行分组统计

    涛涛不绝 : 大佬,统计的代码有没有源码参考一下表情包

  • 关于Nginx 配置出现 405 Method Not Allowed 一次血的教训

    樱_: 你都说了' 此配置意思就是出现405,直接转为200,可是并没有解决问题,依然无效 ',那就是走到了 / 的配置了啊

您愿意向朋友推荐“博客详情页”吗?

  • 强烈不推荐
  • 不推荐
  • 一般般
  • 推荐
  • 强烈推荐
提交

最新文章

  • vue3 添加编辑页使用 cron 表达式生成
  • ubuntu 相关命令记录
  • spring-boot 项目打包后运行 org/springframework/data/redis/connection/zset/Tuple 错误
2023年6篇
2022年33篇
2021年17篇
2020年117篇
2019年154篇
2018年10篇

目录

目录

评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值

哆哆女性网网络推广seo培训班微信怎么群发消息给好友不建群武汉广电网姓安的女孩起名武汉卫生局赤峰网站建设公司中世纪小说周公解梦安卓版网站建设难学吗1000种梦的解析沈姓宝宝起名建筑劳务公司起名有什么要求网站制作行业动态乐蜂网客服小宝贝起名子迅速建设网站山海经的有企业即时通讯网站的优化哪家好顾起名字起名大全免费软件免费算死命阅读小说重庆seo公司哪家好煤炭公司名字起名大全网站优化要多少钱起名含水的字有哪些方氏男人起名意木轩姓刘怎么起名男孩沈阳哪有给小孩起名字的地方淀粉肠小王子日销售额涨超10倍罗斯否认插足凯特王妃婚姻不负春光新的一天从800个哈欠开始有个姐真把千机伞做出来了国产伟哥去年销售近13亿充个话费竟沦为间接洗钱工具重庆警方辟谣“男子杀人焚尸”男子给前妻转账 现任妻子起诉要回春分繁花正当时呼北高速交通事故已致14人死亡杨洋拄拐现身医院月嫂回应掌掴婴儿是在赶虫子男孩疑遭霸凌 家长讨说法被踢出群因自嘲式简历走红的教授更新简介网友建议重庆地铁不准乘客携带菜筐清明节放假3天调休1天郑州一火锅店爆改成麻辣烫店19岁小伙救下5人后溺亡 多方发声两大学生合买彩票中奖一人不认账张家界的山上“长”满了韩国人?单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#青海通报栏杆断裂小学生跌落住进ICU代拍被何赛飞拿着魔杖追着打315晚会后胖东来又人满为患了当地回应沈阳致3死车祸车主疑毒驾武汉大学樱花即将进入盛花期张立群任西安交通大学校长为江西彩礼“减负”的“试婚人”网友洛杉矶偶遇贾玲倪萍分享减重40斤方法男孩8年未见母亲被告知被遗忘小米汽车超级工厂正式揭幕周杰伦一审败诉网易特朗普谈“凯特王妃P图照”考生莫言也上北大硕士复试名单了妈妈回应孩子在校撞护栏坠楼恒大被罚41.75亿到底怎么缴男子持台球杆殴打2名女店员被抓校方回应护栏损坏小学生课间坠楼外国人感慨凌晨的中国很安全火箭最近9战8胜1负王树国3次鞠躬告别西交大师生房客欠租失踪 房东直发愁萧美琴窜访捷克 外交部回应山西省委原副书记商黎光被逮捕阿根廷将发行1万与2万面值的纸币英国王室又一合照被质疑P图男子被猫抓伤后确诊“猫抓病”

哆哆女性网 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化