Spring Boot : 属性配置&Controller注解补充(四)

来源:互联网 发布:姚明身体数据 编辑:程序博客网 时间:2024/05/29 06:41

目录

  • 目录
  • 属性配置文件分类
  • 属性配置在类中使用Value标签的使用
  • 属性配置在类中使用ConfigurationProperties标签的使用
  • springprofilesactive 的使用
  • jar 方式启动
  • RequestParam 和 GetMapping 介绍

1.属性配置文件分类

属性配置两种文件: .properties和.yml,如我们想要配置tomcat启动时端口和上下文,两种文件配置分别如下:
properties :

server.port=8081server.context-path=/boot

yml : (注意:后边有空格) (推荐使用)

server:  port: 8082  context-path: /boot

大家配置完可以分别通过 http://localhost:8081/boot/ 和 http://localhost:8082/boot/ 测试下.

2.属性配置在类中使用(@Value标签的使用)

application.yml 如下,我们要使用配置文件中的name和age

server:  port: 8081  context-path: /name: miloage: 27

SampleController.java 如下 : 

package cn.milo.controllor;import org.springframework.beans.factory.annotation.Value;import org.springframework.boot.autoconfigure.EnableAutoConfiguration;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.ResponseBody;/** * Created by admin on 2017/6/25. */@Controllerpublic class SampleController {    @Value("${name}")    private String name;    @Value("${age}")    private Integer age;    @RequestMapping("/")    @ResponseBody    public String demo1(){        return "name : " + name + " , age = " + age;    }}

通过http://localhost:8081/验证 输出结果 :

name : milo , age = 27

有时我们需要在配置中使用上边已经配置好的配置如 :

server:  port: 8081  context-path: /name: miloage: 27shangmingtao: name is ${name} , age = ${age}

SampleController.java 如下 : 

    @Value("${shangmingtao}")    private String shangmingtao;    @RequestMapping("/")    @ResponseBody    public String demo1(){        return shangmingtao;    }

通过http://localhost:8081/验证 输出结果 :

name is milo , age = 27

3.属性配置在类中使用(@ConfigurationProperties标签的使用)

将配置文件修改为如下 :

server: port: 8081 context-path: /shangmingtao: name: milo age: 27

新建一个java类, shangmingtao.java(这是我名字 :D)

package cn.milo.controllor;import org.springframework.boot.context.properties.ConfigurationProperties;import org.springframework.stereotype.Component;/** * Created by admin on 2017/7/4. */@Component //这个注解不能丢,否则无法注入@ConfigurationProperties(prefix = "shangmingtao") //指定前缀public class shangmingtao {    private String name;    private Integer age;    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public Integer getAge() {        return age;    }    public void setAge(Integer age) {        this.age = age;    }}

SampleController.java 如下 : 

package cn.milo.controllor;import org.springframework.beans.factory.annotation.Value;import org.springframework.boot.autoconfigure.EnableAutoConfiguration;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.ResponseBody;/** * Created by admin on 2017/6/25. */@Controllerpublic class SampleController {    @Autowired    private shangmingtao shangmingtao;    @RequestMapping("/")    @ResponseBody    public String demo1(){        return shangmingtao.getName() + " , " + shangmingtao.getAge();    }}

访问 : http://localhost:8081/ 结果 :

milo , 27

4.spring.profiles.active 的使用

很多时候我们生产环境和开发环境用的配置是不一样的.每次都要改一大堆配置很麻烦,所以我们通过spring.profiles.active进行切换. resources目录结构 : 这里写图片描述

application.yml

spring:  profiles:    active: dev #根据需要选择启动时选用的配置文件

application-dev.yml

server:  port: 8081  context-path: /shangmingtao:  name: milo  age: 27

application-prod.yml

server:  port: 8082  context-path: /shangmingtao:  name: milo  age: 18

通过spring-boot:run 或执行main方法启动均可,通过访问8081和8082验证自己的配置是否正确.

5.jar 方式启动

通过 clean package方式将项目打成jar包,jar包存放在target目录中,不清楚的同学可以看下我之前写的 maven入门:依赖 聚合 继承(一) , 进到jar所在的目录通过如下命令启动 :

java -jar bootdemo4web.jar --spring.profiles.active=prod

和4中的测试结果一样.

6.@RequestParam 和 @GetMapping 介绍

我之前写过Controller常用注解的介绍, Spring Boot : 自动JSON转换和热部署(二) , 这里做下补充.

@RequestParam 注解 : 此注解用来接通过url传递的参数,如: http://localhost:8082/?id=1 ,大家注意啊,这个url没写错.@RequestMapping(“/”)时这样写是OK的.

看下代码:

    @RequestMapping("/")    @ResponseBody    public String demo1(@RequestParam(value = "id" , defaultValue = "2") Integer id){    /*    defaultValue 中的值必须是字符串,RequestParam会自动转型.    */        return shangmingtao.getName() + " , " + shangmingtao.getAge() + " , id = " +id;    }

@GetMapping注解 :

@GetMapping("demo11") //和下方写法等同@RequestMapping(value = "demo11" , method = RequestMethod.GET)

还有@PostMapping同理.