Commit 7c35a79c authored by ZhengJie's avatar ZhengJie
Browse files

[新增功能](el-admin v2.5): v2.5 beta

详情 https://www.ydyno.com/archives/1225.html
parent d35ffc9d
/*
* Copyright 2019-2020 Zheng Jie
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package me.zhengjie.modules.mnt.websocket;
import com.alibaba.fastjson.JSONObject;
......@@ -11,8 +26,8 @@ import java.io.IOException;
import java.util.Objects;
import java.util.concurrent.CopyOnWriteArraySet;
/**
* @author: ZhangHouYing
* @date: 2019-08-10 15:46
* @author ZhangHouYing
* @date 2019-08-10 15:46
*/
@ServerEndpoint("/webSocket/{sid}")
@Slf4j
......
package me.zhengjie.modules.monitor.config;
import me.zhengjie.modules.monitor.service.VisitsService;
import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.stereotype.Component;
/**
* 初始化站点统计
* @author Zheng Jie
*/
@Component
public class VisitsInitialization implements ApplicationRunner {
private final VisitsService visitsService;
public VisitsInitialization(VisitsService visitsService) {
this.visitsService = visitsService;
}
@Override
public void run(ApplicationArguments args){
System.out.println("--------------- 初始化站点统计,如果存在今日统计则跳过 ---------------");
visitsService.save();
System.out.println("--------------- 初始化站点统计完成 ---------------");
}
}
\ No newline at end of file
package me.zhengjie.modules.monitor.domain;
import lombok.Data;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.bean.copier.CopyOptions;
import javax.persistence.*;
import java.io.Serializable;
/**
* @author Zhang houying
* @date 2019-11-03
*/
@Entity
@Data
@Table(name="monitor_server")
public class Server implements Serializable {
/**
* 编号
*/
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private Integer id;
/**
* 名称
*/
@Column(name = "name")
private String name;
/**
* IP地址
*/
@Column(name = "address",nullable = false)
private String address;
/**
* 访问端口
*/
@Column(name = "port")
private Integer port;
/**
* 状态
*/
@Column(name = "state")
private String state;
/**
* CPU使用率
*/
@Column(name = "cpu_rate")
private Double cpuRate;
/**
* CPU内核数
*/
@Column(name = "cpu_core")
private Integer cpuCore;
/**
* 内存总数
*/
@Column(name = "mem_total")
private Double memTotal;
/**
* 内存使用量
*/
@Column(name = "mem_used")
private Double memUsed;
/**
* 磁盘总量
*/
@Column(name = "disk_total")
private Double diskTotal;
/**
* 磁盘使用量
*/
@Column(name = "disk_used")
private Double diskUsed;
/**
* 交换区总量
*/
@Column(name = "swap_total")
private Double swapTotal;
/**
* 交换区使用量
*/
@Column(name = "swap_used")
private Double swapUsed;
/**
* 排序
*/
@Column(name = "sort")
private Integer sort;
public void copy(Server source){
BeanUtil.copyProperties(source,this, CopyOptions.create().setIgnoreNullValue(true));
}
}
package me.zhengjie.modules.monitor.domain;
import lombok.Data;
import org.hibernate.annotations.CreationTimestamp;
import javax.persistence.*;
import java.io.Serializable;
import java.sql.Timestamp;
/**
* pv 与 ip 统计
*
* @author Zheng Jie
* @date 2018-12-13
*/
@Entity
@Data
@Table(name = "visits")
public class Visits implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(unique = true)
private String date;
@Column(name = "pv_counts")
private Long pvCounts;
@Column(name = "ip_counts")
private Long ipCounts;
@CreationTimestamp
@Column(name = "create_time")
private Timestamp createTime;
@Column(name = "week_day")
private String weekDay;
}
package me.zhengjie.modules.monitor.domain.vo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import javax.validation.constraints.NotBlank;
import java.io.Serializable;
/**
* @author Zheng Jie
* @date 2018-12-10
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class RedisVo implements Serializable {
@NotBlank
private String key;
@NotBlank
private String value;
}
package me.zhengjie.modules.monitor.repository;
import me.zhengjie.modules.monitor.domain.Server;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
/**
* @author Zhang houying
* @date 2019-11-03
*/
public interface ServerRepository extends JpaRepository<Server, Integer>, JpaSpecificationExecutor<Server> {
}
package me.zhengjie.modules.monitor.repository;
import me.zhengjie.modules.monitor.domain.Visits;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.stereotype.Repository;
import java.util.List;
/**
* @author Zheng Jie
* @date 2018-12-13
*/
@Repository
public interface VisitsRepository extends JpaRepository<Visits,Long> {
/**
* findByDate
* @param date 日期
* @return Visits
*/
Visits findByDate(String date);
/**
* 获得一个时间段的记录
* @param date1 日期1
* @param date2 日期2
* @return List
*/
@Query(value = "select * FROM visits where create_time between ?1 and ?2",nativeQuery = true)
List<Visits> findAllVisits(String date1, String date2);
}
package me.zhengjie.modules.monitor.rest;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import me.zhengjie.aop.log.Log;
import me.zhengjie.modules.monitor.domain.Server;
import me.zhengjie.modules.monitor.service.ServerService;
import me.zhengjie.modules.monitor.service.dto.ServerQueryCriteria;
import org.springframework.data.domain.Pageable;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.util.Set;
/**
* @author Zhang houying
* @date 2019-11-03
*/
@Api(tags = "服务监控管理")
@RestController
@RequestMapping("/api/server")
public class ServerController {
private final ServerService serverService;
public ServerController(ServerService serverService) {
this.serverService = serverService;
}
@GetMapping
@Log("查询服务监控")
@ApiOperation("查询服务监控")
@PreAuthorize("@el.check('server:list')")
public ResponseEntity<Object> getServers(ServerQueryCriteria criteria, Pageable pageable){
return new ResponseEntity<>(serverService.queryAll(criteria,pageable),HttpStatus.OK);
}
@PostMapping
@Log("新增服务监控")
@ApiOperation("新增服务监控")
@PreAuthorize("@el.check('server:add')")
public ResponseEntity<Object> create(@Validated @RequestBody Server resources){
return new ResponseEntity<>(serverService.create(resources),HttpStatus.CREATED);
}
@PutMapping
@Log("修改服务监控")
@ApiOperation("修改服务监控")
@PreAuthorize("@el.check('server:edit')")
public ResponseEntity<Object> update(@Validated @RequestBody Server resources){
serverService.update(resources);
return new ResponseEntity<>(HttpStatus.NO_CONTENT);
}
@DeleteMapping
@Log("删除服务监控")
@ApiOperation("删除服务监控")
@PreAuthorize("@el.check('server:del')")
public ResponseEntity<Object> delete(@RequestBody Set<Integer> ids){
serverService.delete(ids);
return new ResponseEntity<>(HttpStatus.OK);
}
}
package me.zhengjie.modules.monitor.rest;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import me.zhengjie.modules.monitor.service.VisitsService;
import me.zhengjie.utils.RequestHolder;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* @author Zheng Jie
* @date 2018-12-13
*/
@RestController
@RequestMapping("/api/visits")
@Api(tags = "系统:访问记录管理")
public class VisitsController {
private final VisitsService visitsService;
public VisitsController(VisitsService visitsService) {
this.visitsService = visitsService;
}
@PostMapping
@ApiOperation("创建访问记录")
public ResponseEntity<Object> create(){
visitsService.count(RequestHolder.getHttpServletRequest());
return new ResponseEntity<>(HttpStatus.CREATED);
}
@GetMapping
@ApiOperation("查询")
public ResponseEntity<Object> get(){
return new ResponseEntity<>(visitsService.get(),HttpStatus.OK);
}
@GetMapping(value = "/chartData")
@ApiOperation("查询图表数据")
public ResponseEntity<Object> getChartData(){
return new ResponseEntity<>(visitsService.getChartData(),HttpStatus.OK);
}
}
package me.zhengjie.modules.monitor.service;
import me.zhengjie.modules.monitor.domain.Server;
import me.zhengjie.modules.monitor.service.dto.ServerDTO;
import me.zhengjie.modules.monitor.service.dto.ServerQueryCriteria;
import org.springframework.data.domain.Pageable;
import java.util.List;
import java.util.Map;
import java.util.Set;
/**
* @author Zhang houying
* @date 2019-11-03
*/
public interface ServerService {
/**
* 查询数据分页
* @param criteria 条件参数
* @param pageable 分页参数
* @return Map<String,Object>
*/
Map<String,Object> queryAll(ServerQueryCriteria criteria, Pageable pageable);
/**
* 查询所有数据不分页
* @param criteria 条件参数
* @return List<ServerDTO>
*/
List<ServerDTO> queryAll(ServerQueryCriteria criteria);
/**
* 根据ID查询
* @param id ID
* @return ServerDTO
*/
ServerDTO findById(Integer id);
/**
* 创建服务监控
* @param resources /
* @return /
*/
ServerDTO create(Server resources);
/**
* 编辑服务监控
* @param resources /
*/
void update(Server resources);
/**
* 删除
* @param id /
*/
void delete(Set<Integer> id);
}
package me.zhengjie.modules.monitor.service;
import org.springframework.scheduling.annotation.Async;
import javax.servlet.http.HttpServletRequest;
/**
* @author Zheng Jie
* @date 2018-12-13
*/
public interface VisitsService {
/**
* 提供给定时任务,每天0点执行
*/
void save();
/**
* 新增记录
* @param request /
*/
@Async
void count(HttpServletRequest request);
/**
* 获取数据
* @return /
*/
Object get();
/**
* getChartData
* @return /
*/
Object getChartData();
}
package me.zhengjie.modules.monitor.service.dto;
import lombok.Data;
import java.io.Serializable;
/**
* @author Zhang houying
* @date 2019-11-03
*/
@Data
public class ServerDTO implements Serializable {
private Integer id;
private String name;
private String address;
private Integer port;
private String state;
/** CPU使用率 */
private Float cpuRate;
/** CPU内核数 */
private Integer cpuCore;
/** 内存总数 */
private Float memTotal;
/** 内存使用量 */
private Float memUsed;
/** 磁盘总量 */
private Float diskTotal;
/** 磁盘使用量 */
private Float diskUsed;
/** 交换区总量 */
private Float swapTotal;
/** 交换区使用量 */
private Float swapUsed;
private Integer sort;
}
package me.zhengjie.modules.monitor.service.dto;
import lombok.Data;
import me.zhengjie.annotation.Query;
/**
* @author Zhang houying
* @date 2019-11-03
*/
@Data
public class ServerQueryCriteria{
@Query(blurry = "name,address")
private String blurry;
}
\ No newline at end of file
package me.zhengjie.modules.monitor.service.impl;
import cn.hutool.http.HttpUtil;
import com.alibaba.fastjson.JSONObject;
import me.zhengjie.modules.monitor.domain.Server;
import me.zhengjie.modules.monitor.repository.ServerRepository;
import me.zhengjie.modules.monitor.service.ServerService;
import me.zhengjie.modules.monitor.service.dto.ServerDTO;
import me.zhengjie.modules.monitor.service.dto.ServerQueryCriteria;
import me.zhengjie.modules.monitor.service.mapper.ServerMapper;
import me.zhengjie.utils.PageUtil;
import me.zhengjie.utils.QueryHelp;
import me.zhengjie.utils.ValidationUtil;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
import java.util.Map;
import java.util.Set;
/**
* @author Zhang houying
* @date 2019-11-03
*/
@Service
@Transactional(propagation = Propagation.SUPPORTS, readOnly = true, rollbackFor = Exception.class)
public class ServerServiceImpl implements ServerService {
private final ServerRepository serverRepository;
private final ServerMapper serverMapper;
public ServerServiceImpl(ServerRepository serverRepository, ServerMapper serverMapper) {
this.serverRepository = serverRepository;
this.serverMapper = serverMapper;
}
@Override
public Map<String,Object> queryAll(ServerQueryCriteria criteria, Pageable pageable){
Page<Server> page = serverRepository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root,criteria,criteriaBuilder),pageable);
page.forEach(server -> {
try {
server.setState("1");
String url = String.format("http://%s:%d/api/serverMonitor",server.getAddress(),server.getPort());
String res = HttpUtil.get(url,3000);
JSONObject obj = JSONObject.parseObject(res);
server.setCpuRate(obj.getDouble("cpuRate"));
server.setCpuCore(obj.getInteger("cpuCore"));
server.setMemTotal(obj.getDouble("memTotal"));
server.setMemUsed(obj.getDouble("memUsed"));
server.setDiskTotal(obj.getDouble("diskTotal"));
server.setDiskUsed(obj.getDouble("diskUsed"));
server.setSwapTotal(obj.getDouble("swapTotal"));
server.setSwapUsed(obj.getDouble("swapUsed"));
} catch (Exception e) {
server.setState("0");
e.printStackTrace();
}
});
return PageUtil.toPage(page.map(serverMapper::toDto));
}
@Override
public List<ServerDTO> queryAll(ServerQueryCriteria criteria){
return serverMapper.toDto(serverRepository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root,criteria,criteriaBuilder)));
}
@Override
public ServerDTO findById(Integer id) {
Server server = serverRepository.findById(id).orElseGet(Server::new);
ValidationUtil.isNull(server.getId(),"Server","id",id);
return serverMapper.toDto(server);
}
@Override
@Transactional(rollbackFor = Exception.class)
public ServerDTO create(Server resources) {
return serverMapper.toDto(serverRepository.save(resources));
}
@Override
@Transactional(rollbackFor = Exception.class)
public void update(Server resources) {
Server server = serverRepository.findById(resources.getId()).orElseGet(Server::new);
ValidationUtil.isNull( server.getId(),"Server","id",resources.getId());
server.copy(resources);
serverRepository.save(server);
}
@Override
@Transactional(rollbackFor = Exception.class)
public void delete(Set<Integer> ids) {
for (Integer id : ids) {
serverRepository.deleteById(id);
}
}
}
package me.zhengjie.modules.monitor.service.impl;
import lombok.extern.slf4j.Slf4j;
import me.zhengjie.modules.monitor.domain.Visits;
import me.zhengjie.modules.monitor.repository.VisitsRepository;
import me.zhengjie.modules.monitor.service.VisitsService;
import me.zhengjie.repository.LogRepository;
import me.zhengjie.utils.StringUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import javax.servlet.http.HttpServletRequest;
import java.time.LocalDate;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* @author Zheng Jie
* @date 2018-12-13
*/
@Slf4j
@Service
@Transactional(propagation = Propagation.SUPPORTS, readOnly = true, rollbackFor = Exception.class)
public class VisitsServiceImpl implements VisitsService {
private final VisitsRepository visitsRepository;
private final LogRepository logRepository;
public VisitsServiceImpl(VisitsRepository visitsRepository, LogRepository logRepository) {
this.visitsRepository = visitsRepository;
this.logRepository = logRepository;
}
@Override
public void save() {
LocalDate localDate = LocalDate.now();
Visits visits = visitsRepository.findByDate(localDate.toString());
if(visits == null){
visits = new Visits();
visits.setWeekDay(StringUtils.getWeekDay());
visits.setPvCounts(1L);
visits.setIpCounts(1L);
visits.setDate(localDate.toString());
visitsRepository.save(visits);
}
}
@Override
public void count(HttpServletRequest request) {
LocalDate localDate = LocalDate.now();
Visits visits = visitsRepository.findByDate(localDate.toString());
visits.setPvCounts(visits.getPvCounts()+1);
long ipCounts = logRepository.findIp(localDate.toString(), localDate.plusDays(1).toString());
visits.setIpCounts(ipCounts);
visitsRepository.save(visits);
}
@Override
public Object get() {
Map<String,Object> map = new HashMap<>(4);
LocalDate localDate = LocalDate.now();
Visits visits = visitsRepository.findByDate(localDate.toString());
List<Visits> list = visitsRepository.findAllVisits(localDate.minusDays(6).toString(),localDate.plusDays(1).toString());
long recentVisits = 0, recentIp = 0;
for (Visits data : list) {
recentVisits += data.getPvCounts();
recentIp += data.getIpCounts();
}
map.put("newVisits",visits.getPvCounts());
map.put("newIp",visits.getIpCounts());
map.put("recentVisits",recentVisits);
map.put("recentIp",recentIp);
return map;
}
@Override
public Object getChartData() {
Map<String,Object> map = new HashMap<>(3);
LocalDate localDate = LocalDate.now();
List<Visits> list = visitsRepository.findAllVisits(localDate.minusDays(6).toString(),localDate.plusDays(1).toString());
map.put("weekDays",list.stream().map(Visits::getWeekDay).collect(Collectors.toList()));
map.put("visitsData",list.stream().map(Visits::getPvCounts).collect(Collectors.toList()));
map.put("ipData",list.stream().map(Visits::getIpCounts).collect(Collectors.toList()));
return map;
}
}
package me.zhengjie.modules.monitor.service.mapper;
import me.zhengjie.base.BaseMapper;
import me.zhengjie.modules.monitor.domain.Server;
import me.zhengjie.modules.monitor.service.dto.ServerDTO;
import org.mapstruct.Mapper;
import org.mapstruct.ReportingPolicy;
/**
* @author Zhang houying
* @date 2019-11-03
*/
@Mapper(componentModel = "spring", unmappedTargetPolicy = ReportingPolicy.IGNORE)
public interface ServerMapper extends BaseMapper<ServerDTO, Server> {
}
/*
* Copyright 2019-2020 Zheng Jie
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package me.zhengjie.modules.quartz.config;
import lombok.RequiredArgsConstructor;
import me.zhengjie.modules.quartz.domain.QuartzJob;
import me.zhengjie.modules.quartz.repository.QuartzJobRepository;
import me.zhengjie.modules.quartz.utils.QuartzManage;
import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.stereotype.Component;
import java.util.List;
/**
......@@ -14,17 +29,12 @@ import java.util.List;
* @date 2019-01-07
*/
@Component
@RequiredArgsConstructor
public class JobRunner implements ApplicationRunner {
private final QuartzJobRepository quartzJobRepository;
private final QuartzManage quartzManage;
public JobRunner(QuartzJobRepository quartzJobRepository, QuartzManage quartzManage) {
this.quartzJobRepository = quartzJobRepository;
this.quartzManage = quartzManage;
}
/**
* 项目启动时重新激活启用的定时任务
* @param applicationArguments /
......
/*
* Copyright 2019-2020 Zheng Jie
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package me.zhengjie.modules.quartz.config;
import org.quartz.Scheduler;
......
/*
* Copyright 2019-2020 Zheng Jie
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package me.zhengjie.modules.quartz.domain;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;
import org.hibernate.annotations.CreationTimestamp;
import me.zhengjie.base.BaseEntity;
import javax.persistence.*;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
import java.sql.Timestamp;
/**
* @author Zheng Jie
......@@ -16,51 +31,51 @@ import java.sql.Timestamp;
@Getter
@Setter
@Entity
@Table(name = "quartz_job")
public class QuartzJob implements Serializable {
@Table(name = "sys_quartz_job")
public class QuartzJob extends BaseEntity implements Serializable {
public static final String JOB_KEY = "JOB_KEY";
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "job_id")
@NotNull(groups = {Update.class})
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
/** 定时器名称 */
@Column(name = "job_name")
@ApiModelProperty(value = "定时器名称")
private String jobName;
/** Bean名称 */
@Column(name = "bean_name")
@NotBlank
@ApiModelProperty(value = "Bean名称")
private String beanName;
/** 方法名称 */
@Column(name = "method_name")
@NotBlank
@ApiModelProperty(value = "方法名称")
private String methodName;
/** 参数 */
@Column(name = "params")
@ApiModelProperty(value = "参数")
private String params;
/** cron表达式 */
@Column(name = "cron_expression")
@NotBlank
@ApiModelProperty(value = "cron表达式")
private String cronExpression;
/** 状态 */
@Column(name = "is_pause")
@ApiModelProperty(value = "状态,暂时或启动")
private Boolean isPause = false;
/** 备注 */
@Column(name = "remark")
@NotBlank
private String remark;
@ApiModelProperty(value = "负责人")
private String personInCharge;
@Column(name = "create_time")
@CreationTimestamp
private Timestamp createTime;
@ApiModelProperty(value = "报警邮箱")
private String email;
public @interface Update {}
@ApiModelProperty(value = "子任务")
private String subTask;
@ApiModelProperty(value = "失败后暂停")
private Boolean pauseAfterFailure;
@NotBlank
@ApiModelProperty(value = "备注")
private String description;
}
\ No newline at end of file
/*
* Copyright 2019-2020 Zheng Jie
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package me.zhengjie.modules.quartz.domain;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.hibernate.annotations.CreationTimestamp;
import javax.persistence.*;
import java.io.Serializable;
import java.sql.Timestamp;
......@@ -13,46 +28,40 @@ import java.sql.Timestamp;
*/
@Entity
@Data
@Table(name = "quartz_log")
@Table(name = "sys_quartz_log")
public class QuartzLog implements Serializable {
@Id
@Column(name = "log_id")
@ApiModelProperty(value = "ID", hidden = true)
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
/** 任务名称 */
@Column(name = "job_name")
@ApiModelProperty(value = "任务名称", hidden = true)
private String jobName;
/** Bean名称 */
@Column(name = "baen_name")
@ApiModelProperty(value = "bean名称", hidden = true)
private String beanName;
/** 方法名称 */
@Column(name = "method_name")
@ApiModelProperty(value = "方法名称", hidden = true)
private String methodName;
/** 参数 */
@Column(name = "params")
@ApiModelProperty(value = "参数", hidden = true)
private String params;
/** cron表达式 */
@Column(name = "cron_expression")
@ApiModelProperty(value = "cron表达式", hidden = true)
private String cronExpression;
/** 状态 */
@Column(name = "is_success")
@ApiModelProperty(value = "状态", hidden = true)
private Boolean isSuccess;
/** 异常详细 */
@Column(name = "exception_detail",columnDefinition = "text")
@ApiModelProperty(value = "异常详情", hidden = true)
private String exceptionDetail;
/** 耗时(毫秒) */
@ApiModelProperty(value = "执行耗时", hidden = true)
private Long time;
/** 创建日期 */
@CreationTimestamp
@Column(name = "create_time")
@ApiModelProperty(value = "创建时间", hidden = true)
private Timestamp createTime;
}
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment