Spring Boot Guides Examples(1~3)

参考网址:https://spring.io/guides

创建一个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与定时任务的更多相关文章

  1. Spring Boot实战:Restful API的构建

    上一篇文章讲解了通过Spring boot与JdbcTemplate.JPA和MyBatis的集成,实现对数据库的访问.今天主要给大家分享一下如何通过Spring boot向前端返回数据. 在现在的开 ...

  2. Spring Boot Hello World (restful接口)例子

    Spring Boot 集成教程 Spring Boot 介绍 Spring Boot 开发环境搭建(Eclipse) Spring Boot Hello World (restful接口)例子 sp ...

  3. Spring Boot入门教程2-1、使用Spring Boot+MyBatis访问数据库(CURD)注解版

    一.前言 什么是MyBatis?MyBatis是目前Java平台最为流行的ORM框架https://baike.baidu.com/item/MyBatis/2824918 本篇开发环境1.操作系统: ...

  4. SpringBoot实战(十)之使用Spring Boot Actuator构建RESTful Web服务

    一.导入依赖 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http ...

  5. spring boot 配置访问其他模块包中的mapper和xml

    maven项目结构如下,这里只是简单测试demo,使用的springboot版本为2.1.3.RELEASE 1.comm模块主要是一些mybatis的mapper接口和对应的xml文件,以及数据库表 ...

  6. Spring Boot 2.X(十二):定时任务

    简介 定时任务是后端开发中常见的需求,主要应用场景有定期数据报表.定时消息通知.异步的后台业务逻辑处理.日志分析处理.垃圾数据清理.定时更新缓存等等. Spring Boot 集成了一整套的定时任务工 ...

  7. 06.深入浅出 Spring Boot - 数据访问之Druid

    代码下载:https://github.com/Jackson0714/study-spring-boot.git 一.Druid是什么? 1.Druid是数据库连接池,功能.性能.扩展性方面都算不错 ...

  8. 07.深入浅出 Spring Boot - 数据访问之Mybatis(附代码下载)

    MyBatis 在Spring Boot应用非常广,非常强大的一个半自动的ORM框架. 代码下载:https://github.com/Jackson0714/study-spring-boot.gi ...

  9. Spring Boot数据访问之动态数据源切换之使用注解式AOP优化

    在Spring Boot数据访问之多数据源配置及数据源动态切换 - 池塘里洗澡的鸭子 - 博客园 (cnblogs.com)中详述了如何配置多数据源及多数据源之间的动态切换.但是需要读数据库的地方,就 ...

随机推荐

  1. Confluence 6 其他需要备份和恢复的地方

    XML 备份被描述用于在 Confluence 备份使用的其他方法,例如升级和移动服务器.使用上面描述的备份和恢复方法也适用这些地方. 我们的 upgrade guide 不要求使用一个 XML 备份 ...

  2. Confluence 6 在初始化配置时候的问题

    提交一个 服务器请求(support request) 然后在你的服务请求中同时提供下面的信息. 下载一个 LDAP 浏览器,你可以通过这个确定你的 LDAP 服务器配置正确.Atlassian 推荐 ...

  3. 【Linux】安装多个JDK并切换

    一.JDK安装1.将安装包jdk-8u111-linux-x64.tar.gz拷贝到安装目录(如/usr/java)下.2.添加可执行权限chmod +x jdk-8u111-linux-x64.ta ...

  4. Python基础之面向对象的软件开发思路

    当我们来到生产环境中的时候,对一个软件需要开发的时候,刚开始也可能会懵逼,挝耳挠腮.不知从何下手,其 实,大家也不要苦恼,这是大多数程序员都会遇到的问题.那么,我们就要想一想了,既然大家都会这样,到低 ...

  5. PDF如何去除背景,PDF去除背景颜色

    PDF文件在使用的时候大多都是单调的白色背景,但是也有小伙伴再制作PDF文件的时候会给PDF文件添加背景颜色,会有影响文字阅读的情况,这个时候就需要把背景颜色去除了,那么该怎么做呢,不会的小伙们就跟小 ...

  6. Nginx详解五:Nginx基础篇之HTTP请求

    http请求 如今的http请求已经不是每一次请求都进行一次三次握手,可以在请求与相应之后,客户端和服务端不断的发送FIN和ACK包来保持连接的状态,即:长连接 HTTP请求建立在一次TCP连接基础上 ...

  7. 数据结构c++实现代码-链表

    /*节点Node的相关声明与定义*/ //Node.h #include<iostream> using namespace std; template<typename T> ...

  8. 使用SecureCRT脚本备份网络设备配置的一点感悟

    https://blog.csdn.net/qq_25294171/article/details/85158458

  9. javascript var变量删除

    var有三种声明的情形: var声明的全局变量 var在函数范围内声明的局部变量 eval中声明的全局变量. 首先, 1.2种情形var声明的变量是无法删除的. 尽管var声明的全局变量是属于wind ...

  10. Typescript知识梳理

    概述 TypeScript简称TS,具有类型系统,且是JavaScript的超集. 它可以编译成普通的JavaScript代码.TypeScript支持任意浏览器,任意环境,任意系统并且是开源的.通过 ...