上一篇我们已经创建了一个最简单的SpringBoot项目,从这一篇开始讲一些我个人在实际项目中运用到的,感觉比较有用的东西。由于是个人的总结,所以个人标书可能没有那么进准,也必然没有官方那么详尽,请大家以SpringBoot官方详尽内容最为最终基准。
    在进行这一篇之前,安利一个软件postman,在开发一些借口请求时候,确实比较好用。官网:https://www.getpostman.com,不过貌似访问比较慢,大家可以百度自行下载。

SpringBoot配置文件

    SpringBoot在我看来最直观的一个优点就是精简了大量的配置文件。大家肯定还记得在以前以SpringMVC来进行一个项目开发的时候,什么web.xml、spring-servlet.xml、mybatis-config.xml等一堆堆的配置文件,搞得真个项目看起来非常复杂,而SpringBoot也考虑到这点,所以在配置文件上尽量的做到精简。
    SpringBoot有properties和yml两种格式的配置文件,你可以选用任意一种格式,单需要注意的是两种配置文件无法混用。下面我们以yml格式的文件来演示配置文件的用途。
    还记得上一篇,我们项目启动成功后,通过访问localhost:8080/chapter_1/hello,获得了相应的返回。接下来我们通过配置文件来改变服务端口来演示配置文件的用法。我们copy一份chapter_1代码,改名为chapter_2,并修改相应的类名,在项目的resources目录下新建application.yml文件,其内容如下:

server:
  port: 8090

然后我们启动项目,此时发现localhost:8080/chapter_2/hello已经无法访问,如下图

springboot获取字段的自定义注解_自定义


而localhost:8090chapter_2/hello则可以访问,如下图

springboot获取字段的自定义注解_自定义属性_02


证明我们的配置文件内容生效。

SpringBoot自定义属性

    可能有人会问,那如果我想自己定义一个属性内容,在程序中要怎么获取其内容呢。SpringBoot对于自定义属性,有3种方式可以很方便的在程序中获取并使用。

@Value注解方式获取

SpringBoot可以通过@Value注解的方式获取自定义属性。如下,我们在application.yml文件中自定义属性my.name:

server:
  port: 8090
my:
  name: willem

然后在代码中通过如下方式获取:

@SpringBootApplication
@RestController
public class BootStrapApplication {
    @Value("${my.name}")
    private String name;

    @RequestMapping(value = "/hello",method = RequestMethod.GET)
    public String hello(){
        return "hello,my name is"+name;
    }

    public static void main(String[] args) {
        SpringApplication.run(BootStrapApplication.class,args);
    }
}

然后启动服务,在postman中访问该接口,返回内容如下:

springboot获取字段的自定义注解_配置文件_03


从返回结果可以看到,我们在属性文件中自定义的值已经引用到程序中。

属性实体类

我们还可以通过@ConfigurationProperties注解将属性值注入实体类中使用。我们新建MyProperties实体类,代码如下:

@Component
@ConfigurationProperties(prefix = "my")
public class MyProperties {
    private String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

其中@ConfigurationProperties中的prefix是告诉SpringBoot这个实体属性是以“my”开头的。
我们在Chapter2Controller新加一个hello2的方法,代码如下

@RestController
@RequestMapping(value = "/chapter_2")
public class Chapter2Controller {
    @Value("${my.name}")
    private String name;

    @Autowired
    private MyProperties myProperties;

    @RequestMapping(value = "/hello",method = RequestMethod.GET)
    public String hello(){
        return "hello,my name is "+name;
    }

    @RequestMapping(value = "/hello2",method = RequestMethod.GET)
    public String hello2(){
        return "hello,my name is "+myProperties.getName();
    }

}

然后访问该接口,得到的结果如下:

springboot获取字段的自定义注解_配置文件_04


成功取到我们自定义的属性。

Environment变量获取

SpringBoot给我们提供了一个Environment对象,可以通过该对象访问属性文件里的内容,所以当然也可以通过Environment来获取我们自定义的属性。我们改动Chapter2Controller代码,如下

@RestController
@RequestMapping(value = "/chapter_2")
public class Chapter2Controller {
    @Value("${my.name}")
    private String name;

    @Autowired
    private MyProperties myProperties;

    @Autowired
    private Environment environment;

    @RequestMapping(value = "/hello",method = RequestMethod.GET)
    public String hello(){
        return "hello,my name is "+name;
    }

    @RequestMapping(value = "/hello2",method = RequestMethod.GET)
    public String hello2(){
        return "hello2,my name is "+myProperties.getName();
    }

    @RequestMapping(value = "/hello3",method = RequestMethod.GET)
    public String hello3(){
        return "hello3,my name is"+environment.getProperty("my.name");
    }
}

我们在代码中新加hello3方法,重启程序后访问该方法,得到如下返回

springboot获取字段的自定义注解_自定义属性_05


我们可以看到,通过以上三种方式,均可以在代码中获取自定义的属性。在SpringBoot中可以很方便的获取系统属性及自定义的属性,如果再结合Maven,可以大大提高项目的开发速度。下一篇,我们将结合Maven来构建多环境的配置。

最后,按照惯例,附上项目目录结构:

springboot获取字段的自定义注解_自定义_06


项目地址:https://github.com/Willem520/spring-boot-learning.git,源码位于chapter_2文件夹下。