SpringBoot+Quartz练习

采用Quartz任务调度框架,模拟微信步数排行

  • 用户输入账号、密码登录
  • 登陆成功,在个人中心页面,显示用户基本信息
  • 在任务触发时间,刷新页面,可以看到当日步行排行榜
  • 目录结构
SpringBoot+Quartz练习_第1张图片
image.png

添加pom依赖


    4.0.0

    com.example
    quartz
    0.0.1-SNAPSHOT
    jar

    quartz
    Demo project for Spring Boot

    
        org.springframework.boot
        spring-boot-starter-parent
        2.0.5.RELEASE
         
    

    
        UTF-8
        UTF-8
        1.8
    

    
        
            org.springframework.boot
            spring-boot-starter-data-jpa
        

        
            mysql
            mysql-connector-java
            runtime
        
        
            org.springframework.boot
            spring-boot-starter-test
            test
        

        
            org.projectlombok
            lombok
            1.16.10
        

        
            org.springframework.boot
            spring-boot-starter-web
        

        
        
            org.springframework.boot
            spring-boot-starter-thymeleaf
        

        
            org.webjars
            bootstrap
            3.3.7-1
        

        
            org.springframework.boot
            spring-boot-devtools
            true
            true
        

        
            com.spring4all
            swagger-spring-boot-starter
            1.8.0.RELEASE
        

        
            com.github.xiaoymin
            swagger-bootstrap-ui
            1.8.4
        

        
            org.springframework.boot
            spring-boot-starter-quartz
        
    

    
        
            
                org.springframework.boot
                spring-boot-maven-plugin
            
        
    




  • 实体类

  • SportUser类
package com.example.quartz.entity;

import lombok.Data;
import javax.persistence.*;
import java.util.ArrayList;
import java.util.List;

@Entity
@Data
public class SportUser {
    @GeneratedValue
    @Id
    private Integer id;
    private String account;
    private String password;
    private String avatar;
    private String nickName;

    public SportUser() {
    }

    public SportUser(String account, String password, String avatar, String nickName) {
        this.account = account;
        this.password = password;
        this.avatar = avatar;
        this.nickName = nickName;
    }
    @OneToMany(fetch = FetchType.EAGER,cascade = CascadeType.REMOVE)
    @JoinColumn(name = "sportUser_id")
    private List steps = new ArrayList<>();

    public SportUser(String account, String password, String avatar, String nickName, List steps) {
        this.account = account;
        this.password = password;
        this.avatar = avatar;
        this.nickName = nickName;
        this.steps = steps;
    }
}
  • Step类
package com.example.quartz.entity;

import lombok.Data;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import java.util.Date;


@Entity
@Data
public class Step {
    @GeneratedValue
    @Id
    private Integer id;
    private String account;
    private Date date;
    private String number;

    public Step() {
    }

    public Step(String account, Date date, String number) {
        this.account = account;
        this.date = date;
        this.number = number;
    }
}

DAO层

  • LoginRepository
package com.example.quartz.dao;


import com.example.quartz.entity.SportUser;
        import org.springframework.data.jpa.repository.JpaRepository;
        import org.springframework.data.jpa.repository.Query;
        import org.springframework.data.repository.query.Param;

public interface LoginRepository extends JpaRepository {
    @Query("from SportUser u where u.account = :account")
    SportUser findUser(@Param("account") String account);
}
  • StepRepository
package com.example.quartz.dao;


import com.example.quartz.entity.Step;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;

import java.util.List;

public interface StepRepository extends JpaRepository {

    @Query("FROM Step a WHERE DATEDIFF(a.date,NOW())=0 ORDER BY a.number DESC")
    List find();


    @Query("from Step u WHERE DATEDIFF(u.date,NOW())=0 and u.account = :account")
    Step findUser(@Param("account") String account);
}

配置类

  • QuartzConfig
package com.example.quartz.factory;

import org.quartz.Scheduler;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.quartz.SchedulerFactoryBean;

@Configuration
public class QuartzConfig {
    @Autowired
    private SpringJobFactory springJobFactory;

    @Bean
    public SchedulerFactoryBean schedulerFactoryBean() {
        SchedulerFactoryBean schedulerFactoryBean = new SchedulerFactoryBean();
        schedulerFactoryBean.setJobFactory(springJobFactory);
        return schedulerFactoryBean;
    }

    @Bean
    public Scheduler scheduler() {
        return schedulerFactoryBean().getScheduler();
    }
}
  • SpringJobFactory
package com.example.quartz.factory;

import org.quartz.spi.TriggerFiredBundle;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.config.AutowireCapableBeanFactory;
import org.springframework.scheduling.quartz.AdaptableJobFactory;
import org.springframework.stereotype.Component;


@Component
public class SpringJobFactory extends AdaptableJobFactory {

    @Autowired(required=true)
    private AutowireCapableBeanFactory capableBeanFactory;

    @Override
    protected Object createJobInstance(TriggerFiredBundle bundle) throws Exception {
        Object jobInstance = super.createJobInstance(bundle);
        capableBeanFactory.autowireBean(jobInstance);
        return jobInstance;
    }
}
  • SportJob
package com.example.quartz.factory;

import com.example.quartz.service.StepService;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

import javax.annotation.Resource;


@Component
public class SportJob {
    @Resource
    private StepService stepService;
    //设置每天下午16:16分更新数据
    @Scheduled(cron = "0 16 16 * * ? ")
    public void updateTodayWalks() throws Exception {
        stepService.updateWalks();
    }
}

Service层

  • LoginService
package com.example.quartz.service;

import com.example.quartz.entity.SportUser;
import com.example.quartz.entity.Step;
import java.util.List;

public interface LoginService {
    List get (String account, String password);

    SportUser check(String account,String password);

    List getAll();
}

-LoginServiceImpl

package com.example.quartz.service.Impl;

import com.example.quartz.dao.LoginRepository;
import com.example.quartz.dao.StepRepository;
import com.example.quartz.entity.SportUser;
import com.example.quartz.entity.Step;
import com.example.quartz.service.LoginService;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.List;

@Service
public class LoginServiceImpl implements LoginService {
    @Resource
    private LoginRepository loginRepository;

    @Resource
    private StepRepository stepRepository;

    @Override
    public List get(String account, String password) {
        return loginRepository.findAll();
    }

    @Override
    public SportUser check(String account, String password) {
        List users = loginRepository.findAll();
        SportUser user = new SportUser();
        for (int i=0;i getAll() {
        return stepRepository.findAll();
    }
}

-StepService

package com.example.quartz.service;

public interface StepService {
    void updateWalks();
}

-StepServiceImpl

package com.example.quartz.service.Impl;

import com.example.quartz.dao.StepRepository;
import com.example.quartz.entity.Step;
import com.example.quartz.service.StepService;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.Date;
import java.util.List;
import java.util.Random;

@Service
public class StepServiceImpl implements StepService{

    @Resource
    private StepRepository stepRepository;

    @Override
    public void updateWalks() {
        List list = stepRepository.findAll();
        Random random = new Random();
        for (int i=0;i

Controller层

-LoginController

package com.example.quartz.controller;

import com.example.quartz.dao.StepRepository;
import com.example.quartz.entity.SportUser;
import com.example.quartz.service.LoginService;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;

@Controller
@RequestMapping()
public class LoginController {
    @Resource
    private LoginService loginService;

    @Resource
    private StepRepository stepRepository;

    @RequestMapping(value = "/SportUser")
    public String show(HttpServletRequest request, ModelMap modelMap) {
        String account = request.getParameter("account");
        String password = request.getParameter("password");
        SportUser sportUser = loginService.check(account,password);
        modelMap.addAttribute("sportUser",sportUser);
        modelMap.addAttribute("userStep",stepRepository.findUser(account));
        modelMap.addAttribute("steps",stepRepository.find());
        return "home";
    }

    @RequestMapping("/login")
    public String login(){
        return "login";
    }
}

前端

  • login.html




    
    登录界面
    
    


趣运动
  • home.html




    
    主界面
    
    


今日排行

用户姓名

今日步数

您今日的运动量

距离为7.3公里

今天走的路程较多,请注意休息哦,按摩小腿可以有效缓解酸痛感

合理定制运动计划,能让身体更能接受哦

实现效果

image.png
image.png

你可能感兴趣的:(SpringBoot+Quartz练习)