Spring boot 学习(前篇)

一、准备工作

环境:

jdk: jdk1.8
maven: maven3.39
Maven项目对象模型(POM),可以通过一小段描述信息来管理项目的构建,报告和文档的软件项目管理工具
http://maven.apache.org/download.cgi
安装:http://jingyan.baidu.com/article/20095761bd195ecb0621b465.html

image.png

IDEA
http://www.jetbrains.com/idea/

image.png

二、新建一个项目HelloSpringBoot

image.png
image.png
image.png
image.png

关于Maven详解
.Maven的作用
在开发中,为了保证编译通过,我们会到处去寻找jar包,当编译通过了,运行的时候,却发现"ClassNotFoundException",我们想到的是,难道还差jar包?
每个Java项目的目录结构都没有一个统一的标准,配置文件到处都是,单元测试代码到底应该放在那里也没有一个权威的规范。
因此,我们就要用到Maven(使用Ant也可以,不过编写Ant的xml脚本比较麻烦)----一个项目管理工具。
Maven主要做了两件事:
统一开发规范与工具
统一管理jar包

image.png
image.png
image.png

第一种启动方式:

image.png

真慢。。

image.png

访问http://localhost:8080/
因为什么页面都没写,所以是返回404

image.png

新建一个类HelloController

image.png
image.png
@RestController
public class HelloController {
    @RequestMapping(value = "/hello" , method = RequestMethod.GET)
    public String say(){
        return "Hello Spring Boot!";
    }
}

访问http://localhost:8080/hello
image.png
第二种启动方式

进入到项目目录

mvn spring-boot:run
image.png
第三种启动方式
image.png
//先编译下环境
mvn install
image.png
cd target
java -jar test-0.0.1-SNAPSHOT.jar
image.png
image.png

三、属性配置

application.properties
修改下端口和访问路径

server.port=8081
server.context-path=/test
image.png

启动:

image.png

访问:http://localhost:8081/test/hello

image.png

使用yml文件配置
yml简介
YML文件格式是YAML (YAML Aint Markup Language)编写的文件格式,YAML是一种直观的能够被电脑识别的的数据数据序列化格式,并且容易被人类阅读,容易和脚本语言交互的,可以被支持YAML库的不同的编程语言程序导入,比如: C/C++, Ruby, Python, Java, Perl, C#, PHP等。

其他比较
http://www.cnblogs.com/songchaoke/p/3376323.html

application.yml
设置端口号改为:8082,区分下。

server:
  port: 8082
  context-path: /test
image.png

删除application.properties
访问http://localhost:8082/test/hello

image.png

配置一个参数 cupSize:

image.png
server:
  port: 8082
  context-path: /test
  cupSize: B

在HelloController.java 中获取到。

image.png
@RestController
public class HelloController {
    @Value("${cupSize}")
    private String cupSize;

    @RequestMapping(value = "/hello" , method = RequestMethod.GET)
    public String say(){
        return cupSize;
    }
}

报错:
Caused by: java.lang.IllegalArgumentException: Could not resolve placeholder 'cupSize' in value "${cupSize}"

image.png

修改代码:

image.png
@Value("${server.cupSize}")
    public String cupSize;

运行http://localhost:8082/test/hello

image.png

content

image.png
server:
  port: 8082
  context-path: /test
  cupSize: B
  age: 18
  content: "cupSize: ${server.cupSize},age: ${server.age}"
@RestController
public class HelloController {
    @Value("${server.cupSize}")
    public String cupSize;

    @Value("${server.age}")
    public Integer age;

    @Value("${server.content}")
    public String content;



    @RequestMapping(value = "/hello" , method = RequestMethod.GET)
    public String say(){
        return content;
    }
}

访问http://localhost:8082/test/hello

image.png
多项注入参数

image.png

application.yml

  server:
    port: 8082
    context-path: /test
  girl:
    cupSize: B
    age: 18
新建配置类 GirlProperties.java
@Component
@ConfigurationProperties(prefix = "girl")
public class GirlProperties {
    private String cupSize;
    private Integer age;

    public void setCupSize(String cupSize) {
        this.cupSize = cupSize;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public String getCupSize() {
        return cupSize;
    }

    public Integer getAge() {
        return age;
    }
}

ps:
简化配置文件的读取:
@value
[http://www.cnblogs.com/BensonHe/p/3963940.html]
分组获取:
@Component作用
http://www.cnblogs.com/savage-ce/p/5667596.html
@ConfigurationProperties
@Autowired

HelloController.java

@RestController
public class HelloController {
  /*  @Value("${server.cupSize}")
    public String cupSize;

    @Value("${server.age}")
    public Integer age;

    @Value("${server.content}")
    public String content;
*/

  @Autowired
  private GirlProperties girlProperties;


    @RequestMapping(value = "/hello" , method = RequestMethod.GET)
    public String say(){
        return girlProperties.getCupSize();
    }
}

运行结果:

image.png
多个配置文件application.yml转换

application.yml

image.png
  spring:
    profiles:
      active: dev

application-dev.yml

  server:
    port: 8082
    context-path: /test
  girl:
    cupSize: B
    age: 18

application-prod.yml

  server:
    port: 8081
    context-path: /test
  girl:
    cupSize: F
    age: 18

运行:http://localhost:8082/test/hello

image.png

修改 :application.yml

  spring:
    profiles:
      active: prod

访问:http://localhost:8081/test/hello

image.png
同时启动不同配置下的服务

启动application-prod.yml配置环境

//cd test项目目录下
mvn install
java -jar target/test-0.0.1-SNAPSHOT.jar --spring.profiles.active=prod
java -jar target/test-0.0.1-SNAPSHOT.jar --spring.profiles.active=dev

可以尝试启动下,注意端口不要被占用。

知识点:


image.png

四、Controller的使用

image.png

@Controller
@ResponseBody
等同于
@RestController

分别访问"/hello","/hi" 后缀得到相同结果。
@RequestMapping(value = {"/hello","/hi"} , method = RequestMethod.GET)

访问:http://localhost:8081/test/hi

image.png

@RequestMapping("/hi")

@Controller
@ResponseBody
@RequestMapping("/hi")
public class HelloController {
  @Autowired
  private GirlProperties girlProperties;


    @RequestMapping(value = "/say" , method = RequestMethod.GET)
    public String say(){
        return girlProperties.getCupSize();
    }
}
image.png

我们也可以看到启动项中已经标明访问路径:

image.png

访问:http://localhost:8081/test/hi/say

image.png

method = RequestMethod.POST 可以下载个postman 试试

注解参数
image.png
@PathVariable
 @RequestMapping(value = "/say/{id}" , method = RequestMethod.GET)
    public String say(@PathVariable("id") Integer id){
        return "id : " + id;
    }
image.png

访问:http://localhost:8081/test/hi/say/11

image.png

访问:http://localhost:8081/test/hi/say/xxx
报错!

image.png

同理:

@RequestMapping(value = "/{id}/say" , method = RequestMethod.GET)

前后输入效果一样的

@RequestParam
 @RequestMapping(value = "/say" , method = RequestMethod.GET)
    public String say(@RequestParam("id") Integer myid){
        return "id : " + myid;
    }
image.png

访问:http://localhost:8081/test/hi/say?idd=111

image.png

访问:http://localhost:8081/test/hi/say?idd=

image.png

修改代码:

 @RequestMapping(value = "/say" , method = RequestMethod.GET)
    public String say(@RequestParam(value="id",required = false,defaultValue = "0") Integer myid){
        return "idd : " + myid;
    }
image.png

不写参数默认是 0


image.png

此外:(同理POST)

@RequestMapping(value = "/say" , method = RequestMethod.GET)
//可简化成:
@GetMapping(value = "/say")

参考资料:http://www.imooc.com/video/13592

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 222,252评论 6 516
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 94,886评论 3 399
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 168,814评论 0 361
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,869评论 1 299
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,888评论 6 398
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 52,475评论 1 312
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 41,010评论 3 422
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,924评论 0 277
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,469评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,552评论 3 342
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,680评论 1 353
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 36,362评论 5 351
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 42,037评论 3 335
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,519评论 0 25
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,621评论 1 274
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 49,099评论 3 378
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,691评论 2 361

推荐阅读更多精彩内容