美文网首页
Spring Boot + Quartz综合练习

Spring Boot + Quartz综合练习

作者: 啦啦啦哈啦啦啦 | 来源:发表于2018-10-12 17:01 被阅读0次

    实体类

    • SportUser.java
    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;
    
        @OneToMany(fetch = FetchType.EAGER,cascade = CascadeType.REMOVE)
        @JoinColumn(name = "sportUser_id")
        private List<Step> steps = new ArrayList<>();
    
        public SportUser() {
        }
    
        public SportUser(String account, String password, String avatar) {
            this.account = account;
            this.password = password;
            this.avatar = avatar;
        }
    
    
        public String getAccount() {
            return account;
        }
    
        public void setAccount(String account) {
            this.account = account;
        }
    
        public String getPassword() {
            return password;
        }
    
        public void setPassword(String password) {
            this.password = password;
        }
    
        public String getAvatar() {
            return avatar;
        }
    
        public void setAvatar(String avatar) {
            this.avatar = avatar;
        }
    }
    
    • Step.java
    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;
        }
    
        public Integer getId() {
            return id;
        }
    
        public void setId(Integer id) {
            this.id = id;
        }
    
        public String getAccount() {
            return account;
        }
    
        public void setAccount(String account) {
            this.account = account;
        }
    
        public Date getDate() {
            return date;
        }
    
        public void setDate(Date date) {
            this.date = date;
        }
    
        public String getNumber() {
            return number;
        }
    
        public void setNumber(String number) {
            this.number = number;
        }
    }
    

    dao层

    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;
    
    import java.util.List;
    
    public interface LoginRepository extends JpaRepository<SportUser,Integer> {
        @Query("from SportUser u where u.account = :account")
        SportUser findUser(@Param("account") String account);
    }
    
    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<Step,Integer> {
        @Query("FROM Step a WHERE DATEDIFF(a.date,NOW())=0 ORDER BY a.number DESC")
        List<Step> find();
    
        @Query("from Step u WHERE DATEDIFF(u.date,NOW())=0 and u.account = :account")
        Step findUser(@Param("account") String account);
    
    }
    

    config

    package com.example.quartz.config;
    
    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();
        }
    }
    
    package com.example.quartz.config;
    
    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
        private AutowireCapableBeanFactory capableBeanFactory;
    
        @Override
        protected Object createJobInstance(TriggerFiredBundle bundle) throws Exception {
            Object jobInstance = super.createJobInstance(bundle);
            capableBeanFactory.autowireBean(jobInstance);
            return jobInstance;
        }
    }
    

    service

    package com.example.quartz.service;
    
    import com.example.quartz.entity.SportUser;
    import com.example.quartz.entity.Step;
    import com.example.quartz.entity.SportUser;
    import com.example.quartz.entity.Step;
    
    import java.util.List;
    
    public interface LoginService {
        List<SportUser> get(String account, String password);
    
        SportUser check(String account, String password);
    
        List<Step> getAll();
    }
    
    package com.example.quartz.service;
    
    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 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<SportUser> get(String account, String password) {
            return loginRepository.findAll();
        }
    
        @Override
        public SportUser check(String account, String password) {
            List<SportUser> users = loginRepository.findAll();
            SportUser user = new SportUser();
            for (int i=0;i<users.size();i++){
                String name = users.get(i).getAccount();
                String pass = users.get(i).getPassword();
                if (name.equals(account)){
                    if (pass.equals(password)){
                        user = users.get(i);
                    }
                }
            }
            return user;
        }
    
        @Override
        public List<Step> getAll() {
            return stepRepository.findAll();
        }
    }
    
    package com.example.quartz.service;
    
    import com.example.quartz.dao.StepRepository;
    import com.example.quartz.entity.Step;
    import lombok.extern.slf4j.Slf4j;
    import org.springframework.scheduling.annotation.Scheduled;
    import org.springframework.stereotype.Component;
    
    import javax.annotation.Resource;
    import java.util.Date;
    
    @Slf4j
    @Component
    public class SportJob  {
        @Resource
        private StepRepository stepRepository;
        @Scheduled(cron = "40 14 2 * * ?")
        public void execute() throws Exception{
            Date date = new Date();
            Step[] steps = {
                    new Step("111",date,"4673"),
                    new Step("222",date,"1287"),
                    new Step("333",date,"3576"),
                    new Step("444",date,"1245"),
                    new Step("555",date,"7467"),
            };
            for (int i = 0 ; i < 5 ;i++){
                stepRepository.save(steps[i]);
            }
        }
    }
    

    界面

    • login.html
    <!DOCTYPE html>
    <html xmlns:th="http://www.thymeleaf.org">
    <html>
    <head>
        <meta charset="UTF-8">
        <title>登录界面</title>
        <link rel="stylesheet" href="/webjars/bootstrap/3.3.7-1/css/bootstrap.min.css" />
        <style>
            .content{
                background-color: rgb(61,55,67)
            }
            .navbar-n{
                background-color: rgb(61,55,67)
            }
            .search{
                margin-top: -25px;
                margin-left: 950px;
                font-size: 16px;
                color: white
            }
            .content{
                margin-top: -30px;
                margin-left: 1050px;
                font-size: 16px;
                color: white
            }
            .user{
                margin-top: -30px;
                margin-left: 1150px;
                width: 20px;
                height: 20px
            }
            .login{
                margin-top: -20px;
                margin-left: 1177px;
                font-size: 16px;
                color: white
            }
            .wechat{
                margin-top: -30px;
                margin-left: 1300px;
                width: 30px;
                height: 30px
            }
            .weibo{
                margin-top: -28px;
                margin-left: 1340px;
                width: 30px;
                height: 30px
            }
            .twitter{
                margin-top: -28px;
                margin-left: 1380px;
            }
            .ins{
                margin-top: -28px;
                margin-left: 1420px;
            }
            .form{
                height: 710px;
            }
            .panell{
                margin-left: 560px;
                margin-top: 150px;
                width: 400px;
                height: 342px;
                background-color: rgb(88,76,96);
                border-color: rgb(88,76,96)
            }
            .loginn{
                font-size: 18px;
                color: white;
            }
            .register{
                margin-top: -36px;
                margin-left: 50px;
                font-size: 18px;
                color: rgb(37,31,42)
            }
            .inputt{
                height: 45px;
                background-color: rgb(69,61,75);
                border-color: rgb(69,61,75)
            }
            .input2{
                color: white;
                height: 45px;
                background-color: rgb(69,61,75);
                border-color: rgb(69,61,75);
                width: 300px
            }
            .inputtt{
                height: 45px;
                background-color: rgb(69,61,75);
                border-color: rgb(69,61,75);
            }
            .password{
                height: 45px;
                background-color: rgb(69,61,75);
                border-color: rgb(69,61,75);
                width: 308px;
                color: white;
            }
            .foot{
                background-color: rgb(221,221,221);
                height: 90px
            }
            .way{
                margin-left: 110px;
                margin-top: 20px;
                color: rgb(141,135,147);
                font-size: 12px
            }
            .qq{
                width: 18px;
                height: 18px;
                margin-left: 210px;
                margin-top: -57px
            }
            .weibo1{
                margin-top: -57px;
                margin-left: 10px;
            }
    
    
        </style>
    </head>
    <body class="content">
    <div>
        <nav class="navbar navbar-default navbar-n">
            <div class="container-fluid">
                <div class="navbar-header">
                    <a class="navbar-brand" href="#">
                        <img src="https://staticweb.keepcdn.com/showstatic/images/logo-16fc21eba7.png">
                        <p class="search">发现精选</p>
                        <p class="content">课程内容</p>
                        <img src="img/user.png" class="user">
                        <p class="login">登录/注册</p>
                        <img src="img/wechat.png" class="wechat">
                        <img src="img/weibo.png" class="weibo">
                        <img src="img/twitter.png" class="twitter">
                        <img src="img/ins.png" class="ins">
                    </a>
                </div>
            </div>
    
            <form action="/SportUser" method="post" id="login" class="form">
                <div class="panel panel-default panell" >
                    <div class="panel-body">
                        <table>
                            <tr>
                                <td>
                                    <p class="loginn">登录</p>
                                    <p class="register">注册</p>
                                </td>
    
                            </tr>
                            <tr>
                                <td>
                                    <div class="input-group" >
                                        <span  class="input-group-addon inputt" id="basic-addon1">+86</span>
                                        <input type="text" name="account" class="form-control input2" placeholder="账号" >
                                    </div>
                                </td>
                            </tr>
                            <tr>
                            <td height="30px"></td>
                            </tr>
                            <tr>
    
                                <td>
                                    <div class="input-group" >
                                        <span class="input-group-addon inputtt" id="basic-addon2" >
                                            <img src="img/password.png">
                                        </span>
                                        <input  type="password" name="password" class="form-control password" placeholder="密码" >
                                    </div>
                                </td>
                            </tr>
                            <tr>
                                <td style="height: 30px"></td>
                            </tr>
                            <tr>
                                <td>
                                    <button style="width: 350px" type="submit" id="button" class="btn btn-success">登录</button>
                                </td>
                            </tr>
                            <tr>
                                <td style="height: 20px"></td>
                            </tr>
                        </table>
                    </div>
                    <div class="panel-footer foot">
                        <p class="way">其他登录方式:</p>
                        <img src="img/qq.png" class="qq">
                        <img src="img/weibo.png" class="weibo1">
                    </div>
                </div>
            </form>
    </div>
    </body>
    </html>
    
    • home.html
    <!DOCTYPE html>
    <html xmlns:th="http://www.thymeleaf.org">
    <html>
    <head>
        <meta charset="UTF-8">
        <title>主界面</title>
        <link rel="stylesheet" href="/webjars/bootstrap/3.3.7-1/css/bootstrap.min.css" />
        <style>
            .avatar{
                width: 70px;
                height: 70px;
            }
            .navbar1{
                background-color: rgb(61,55,67);
                height: 65px;
                border-color: rgb(2,2,2);
            }
            .content{
                background-color: rgb(61,55,67);
            }
            .avatar1{
                width: 50px;
                height: 50px;
                margin-left: 1250px;
                margin-top: -42px;
            }
            .account{
                margin-left: 1315px;
                margin-top: -35px;
                color: white;
                font-size: 18px;
            }
            .number{
                color: white;
                font-size: 30px;
            }
            .num{
                color: white;
                font-size: 25px;
            }
            .step{
                margin-left: 20px;
                margin-top:20px;
                font-size: 50px;
                color:rgb(49,165,110);
            }
            .way{
                color: white;
                font-size: 22px;
            }
            .set{
                padding-top: 20px;
                background-color: rgb(88,79,96);
                height: 380px
            }
            .thumbnail2{
                background-color: rgb(88,79,96);
                border-color: rgb(88,79,96);
            }
            .set2{
                color: white;
                font-size: 20px;
            }
    
        </style>
    </head>
    <body class="content" >
        <div>
            <nav class="navbar navbar-default navbar1" >
                <div class="container-fluid">
                    <div class="navbar-header">
                        <a class="navbar-brand" href="#">
                            <img src="https://staticweb.keepcdn.com/showstatic/images/logo-16fc21eba7.png">
                            <img th:src="${sportUser.avatar}" class="img-circle avatar avatar1">
                            <p th:text="'' + ${sportUser.account}" class="account"></p>
                        </a>
                    </div>
                </div>
            </nav>
        </div>
    
        <div class="container">
            <div class="row">
                <div class="col-md-8">
                    <div style="padding-top: 50px">
                        <p class="number">
                            您今日的活动量:
                        </p>
                    </div>
                    <p class="num">步数:</p>
                    <p class="step" th:text="${userStep.number}"></p>
                    <p class="way">距离5.60公里</p>
                    <p class="way">热量126千卡</p>
                    <p class="way">生命在于运动</p>
                    <P class="way">今日的步数还没有达到10000步标准哦~继续加油哦</P>
                    <p></p>
                </div>
                <div class="col-md-4"  style="padding-top: 50px">
                    <div class="set">
                        <div class="thumbnail thumbnail2" >
                            <h1 style="color: white;" align="center">好友排行</h1>
                            <div class="row">
                                <div class="col-md-6">
                                    <div style="margin-left: 20px">
                                        <p class="set2">我的好友</p>
                                    </div>
    
                                </div>
                                <div class="col-md-6">
                                    <div style="margin-left: 20px">
                                        <p class="set2">今日步数</p>
                                    </div>
                                </div>
                                <div class="row">
                                    <div th:each="step:${steps}">
                                        <div style="margin-top: 30px">
                                            <div class="col-md-6">
                                                <div style="margin-left: 50px;">
                                                    <p style="color: rgb(221,221,221)" th:text="${step.account}"></p>
                                                </div>
                                            </div>
                                            <div class="col-md-6">
                                                <div style="margin-left: 50px">
                                                    <p style="color:rgb(49,165,110);" th:text="${step.number}"></p>
                                                </div>
                                            </div>
                                        </div>
    
                                    </div>
                                </div>
                    </div>
    
                </div>
            </div>
        </div>
    
        </div>
    </div>
    </body>
    </html>
    
    

    相关文章

      网友评论

          本文标题:Spring Boot + Quartz综合练习

          本文链接:https://www.haomeiwen.com/subject/mzrgaftx.html