【Spring Boot】构造、访问Restful Webservice与定时任务
Spring Boot Guides Examples(1~3)
创建一个RESTful Web Service
- 使用Eclipse 创建一个 Spring Boot项目
Project -> Other -> Spring Boot -> Spring Starter Project
- 直接找到,spring boot自动创建的application类,
#我的是 RestfulWebService1Application.java
右键 -> Run As -> Java Application 运行
------------------console result---------------------
#看见下面两行,则开启成功
2019-02-24 10:38:42.935 INFO 6724 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8080 (http) with context path ''
2019-02-24 10:38:42.940 INFO 6724 --- [ main] c.e.kane.RestfulWebService1Application : Started RestfulWebService1Application in 4.108 seconds (JVM running for 5.631)
- 打开浏览器,键入 localhost:8080会得到下面的报错信息,因为我们还没有定义Controller
Whitelabel Error Page
This application has no explicit mapping for /error, so you are seeing this as a fallback.
Sun Feb 24 10:39:50 CST 2019
There was an unexpected error (type=Not Found, status=404).
No message available
## 可以参考下面的网址,对Whitelabel Error Page 自定义
https://www.baeldung.com/spring-boot-custom-error-page
注:可以自定义该页面,到官网查看
- 开始写如一些java类
// 在Application同级目录下创建Model 文件夹,增加Greeting 类
// Greeting.java
package com.example.kane.Model;
public class Greeting{
private final long id;
private final String content;
public Greeting (long id , String content){
this.id = id ;
this.content = content;
}
public long getId(){
return id;
}
public String getContent(){
return content;
}
}
// 在Application同级目录下创建 Controller文件夹,增加GreetingController
// GreetingController.java
package com.example.kane.Controller;
import java.util.concurrent.atomic.AtomicLong;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
// RestController是Spring4的新的注解,被注解的controller返回域对象,不是view
// 它是@Controller和@ResponseBody的缩写
import org.springframework.web.bind.annotation.RestController;
import com.example.kane.Model.*;
@RestController
public class GreetingController {
private static final String template = "Hello, %s!";
private final AtomicLong counter = new AtomicLong();
@RequestMapping("/greeting")
public Greeting greeting(@RequestParam(value="name", defaultValue="World") String name) {
return new Greeting(counter.incrementAndGet(),
String.format(template, name));
}
}
- 访问 localhost:8080/greeting
# 页面结果
{"id":1,"content":"Hello, World!"}
- 至此一个简单的Restful Web Service 搭好了
注:官方的关于Restful Web Service 网址 https://spring.io/guides/gs/rest-service/
创建一个计划的任务 Scheduling Tasks
- 创建schdule task类
package com.example.kane;
import java.text.SimpleDateFormat;
import java.util.Date;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
@Component
public class SchduleTask {
private static final Logger log = LoggerFactory.getLogger(SchduleTask.class);
private static final SimpleDateFormat dateFormat = new SimpleDateFormat("HH:mm:ss");
@Scheduled(fixedRate = 5000)
public void reportCurrentTime() {
log.info("The time is now {}", dateFormat.format(new Date()));
}
}
- 更改Application 类,增加@EnableScheduling
package com.example.kane;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.scheduling.annotation.EnableScheduling;
@SpringBootApplication
@EnableScheduling
public class RestfulWebService1Application {
public static void main(String[] args) {
SpringApplication.run(RestfulWebService1Application.class, args);
}
}
- 结果,会在console中看到如下输出
2019-02-24 12:00:14.770 INFO 21096 --- [ scheduling-1] com.example.kane.SchduleTask : The time is now 12:00:14
2019-02-24 12:00:19.770 INFO 21096 --- [ scheduling-1] com.example.kane.SchduleTask : The time is now 12:00:19
2019-02-24 12:00:24.770 INFO 21096 --- [ scheduling-1] com.example.kane.SchduleTask : The time is now 12:00:24
## 不停地运行Schdule函数
- 其他的Schdule选项
https://docs.spring.io/spring/docs/current/spring-framework-reference/integration.html#scheduling
// 等待上一个执行之后5秒执行下一次
@Scheduled(fixedDelay=5000)
//-------------------------------------
//上一次开启之后5秒执行下一次,无论第一次是否执行完成
@Scheduled(fixedRate = 5000)
//-------------------------------------
// 使用cron 进行定时的安排,语法与linux cronjob相同
@Scheduled(cron="*/5 * * * * MON-FRI")
注:cron表达式规则
Seconds Minutes Hours DayofMonth Month DayofWeek Year
或
Seconds Minutes Hours DayofMonth Month DayofWeek
字段 | 允许值 | 允许的特殊字符 |
---|---|---|
秒(Seconds) | 0~59的整数 | , - * / 四个字符 |
分(Minutes) | 0~59的整数 | , - * / 四个字符 |
小时(Hours) | 0~23的整数 | , - * / 四个字符 |
日期(DayofMonth) | 1~31的整数(但是你需要考虑你月的天数) | ,- * ? / L W C 八个字符 |
月份(Month) | 1~12的整数或者 JAN-DEC | , - * / 四个字符 |
星期(DayofWeek) | 1~7的整数或者 SUN-SAT (1=SUN) | , - * ? / L C # 八个字符 |
年(可选,留空)(Year) | 1970~2099 | , - * / 四个字符 |
消费一个Restful Web Service
这里的消费意为在java中访问一些Restful API 并获得想要的内容。
- 更改 Application.java文件
package com.example.kane;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.client.RestTemplateBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.client.RestTemplate;
@SpringBootApplication
public class RestfulWebService1Application {
private static final Logger log = LoggerFactory.getLogger(RestfulWebService1Application.class);
public static void main(String[] args) {
// 不启动Spring boot的application,直接运行RestTemplate
// SpringApplication.run(RestfulWebService1Application.class, args);
RestTemplate restTemplate = new RestTemplate();
System.out.println(Quote.class);
Quote quote = restTemplate.getForObject("http://gturnquist-quoters.cfapps.io/api/random", Quote.class);
log.info(quote.toString());
}
/* 下面的代码官方说明是要管理RestTemplate,不明白什么意思
@Bean
public RestTemplate restTemplate(RestTemplateBuilder builder) {
return builder.build();
}
@Bean
public CommandLineRunner run(RestTemplate restTemplate) throws Exception {
return args -> {
Quote quote = restTemplate.getForObject(
"http://gturnquist-quoters.cfapps.io/api/random", Quote.class);
log.info(quote.toString());
};
}*/
}
- 定义一个Quote.java类
// Quote 定义的时候需要知道 restful api 返回的json对象都有什么属性,如果Quote中定义的属性在api中不存在那么将被复制为null,
//我将官网的type属性更改为 type1属性后,结构显示type1:null
package com.example.kane;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
@JsonIgnoreProperties(ignoreUnknown = true)
public class Quote {
private String type1;
private Value value;
public Quote() {
}
public String getType() {
return type1;
}
public void setType(String type) {
this.type1 = type;
}
public Value getValue() {
return value;
}
public void setValue(Value value) {
this.value = value;
}
@Override
public String toString() {
return "Quote{" +
"type='" + type1 + '\'' +
", value=" + value +
'}';
}
}
- 定义Value.java
//value 与 quote相同,定义了这两个类 主要是http://gturnquist-quoters.cfapps.io/api/random返回的json对象中有这两个类
package com.example.kane;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
@JsonIgnoreProperties(ignoreUnknown = true)
public class Value {
private Long id;
private String quote;
public Value() {
}
public Long getId() {
return this.id;
}
public String getQuote() {
return this.quote;
}
public void setId(Long id) {
this.id = id;
}
public void setQuote(String quote) {
this.quote = quote;
}
@Override
public String toString() {
return "Value{" +
"id=" + id +
", quote='" + quote + '\'' +
'}';
}
}
- 上结果
20:59:39.613 [main] INFO com.example.kane.RestfulWebService1Application - Quote{type='null', value=Value{id=4, quote='Previous to Spring Boot, I remember XML hell, confusing set up, and many hours of frustration.'}}
【Spring Boot】构造、访问Restful Webservice与定时任务的更多相关文章
- Spring Boot实战:Restful API的构建
上一篇文章讲解了通过Spring boot与JdbcTemplate.JPA和MyBatis的集成,实现对数据库的访问.今天主要给大家分享一下如何通过Spring boot向前端返回数据. 在现在的开 ...
- Spring Boot Hello World (restful接口)例子
Spring Boot 集成教程 Spring Boot 介绍 Spring Boot 开发环境搭建(Eclipse) Spring Boot Hello World (restful接口)例子 sp ...
- Spring Boot入门教程2-1、使用Spring Boot+MyBatis访问数据库(CURD)注解版
一.前言 什么是MyBatis?MyBatis是目前Java平台最为流行的ORM框架https://baike.baidu.com/item/MyBatis/2824918 本篇开发环境1.操作系统: ...
- SpringBoot实战(十)之使用Spring Boot Actuator构建RESTful Web服务
一.导入依赖 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http ...
- spring boot 配置访问其他模块包中的mapper和xml
maven项目结构如下,这里只是简单测试demo,使用的springboot版本为2.1.3.RELEASE 1.comm模块主要是一些mybatis的mapper接口和对应的xml文件,以及数据库表 ...
- Spring Boot 2.X(十二):定时任务
简介 定时任务是后端开发中常见的需求,主要应用场景有定期数据报表.定时消息通知.异步的后台业务逻辑处理.日志分析处理.垃圾数据清理.定时更新缓存等等. Spring Boot 集成了一整套的定时任务工 ...
- 06.深入浅出 Spring Boot - 数据访问之Druid
代码下载:https://github.com/Jackson0714/study-spring-boot.git 一.Druid是什么? 1.Druid是数据库连接池,功能.性能.扩展性方面都算不错 ...
- 07.深入浅出 Spring Boot - 数据访问之Mybatis(附代码下载)
MyBatis 在Spring Boot应用非常广,非常强大的一个半自动的ORM框架. 代码下载:https://github.com/Jackson0714/study-spring-boot.gi ...
- Spring Boot数据访问之动态数据源切换之使用注解式AOP优化
在Spring Boot数据访问之多数据源配置及数据源动态切换 - 池塘里洗澡的鸭子 - 博客园 (cnblogs.com)中详述了如何配置多数据源及多数据源之间的动态切换.但是需要读数据库的地方,就 ...
随机推荐
- java如何将一个List传入Oracle存储过程
注:本文来源于 深圳gg < java如何将一个List传入Oracle存储过程 > 一:数据库端建一个PL/SQL的数组. CREATE OR REPLACE TYPE tabl ...
- Oracle11g 体系结构
一:Oracle11g 体系结构 二:逻辑储存结构 二.1:数据块(data blocks) ----通过 v$parameter数据字典来查询oracle标准数据块的大小. SYS@orcl> ...
- Confluence 6 home 目录
Confluence Home 目录是存储 Confluence 信息,查找索引,页面附件的地方.其实 Home 目录也可以定义为数据目录. 找到 Home 目录 Confluence 的 home ...
- Confluence 6 查看索引和提示
查看索引 Confluence 使用被称为 Lucene 的搜索引擎.如果你希望在你的 Confluence站点中查看更多有关索引的细节,你可以下载并且运行 Luke.Luke 是一个开发和诊断工具, ...
- Java的家庭记账本程序(E)
日期:2019.2.9 博客期:032 星期二 今天是把程序的相关Bug补一补,嗯`: 1.添加了跳转说明 生成了一个对于成员的权限声明内容,用户再登陆界面点击Go按钮后,切换至说明页面,再次点击Go ...
- python用unittest+HTMLTestRunner的框架测试并生成测试报告
直接贴代码: import unittestfrom selenium import webdriverfrom time import sleepimport osimport time # 定义打 ...
- day10 函数
函数基础 函数概念 为什么用函数 什么是函数 定义函数 调用函数 返回值详解上节回顾 文件处理 修改文件 1.读取要修改文件内容 read可能导致内存溢出 赋值给变量 修改 将修改后的内容重新写入文件 ...
- 通过iostat来查看linux硬盘IO性能|实例分析
iostat查看linux硬盘IO性能 rrqm/s: 每秒进行 merge 的读操作数目.即 delta(rmerge)/s wrqm/s: 每秒进行 merge 的写操作数目.即 delta(wm ...
- Springboot+MyBatis+JPA集成
1.前言 Springboot最近可谓是非常的火,本人也在项目中尝到了甜头.之前一直使用Springboot+JPA,用了一段时间发现JPA不是太灵活,也有可能是我不精通JPA,总之为了多学学Sp ...
- Appium Demo
import unittestimport timefrom appium import webdriverfrom public import configimport os #类继承unittes ...