上一篇我们已经创建了一个最简单的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已经无法访问,如下图
而localhost:8090chapter_2/hello则可以访问,如下图
证明我们的配置文件内容生效。
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中访问该接口,返回内容如下:
从返回结果可以看到,我们在属性文件中自定义的值已经引用到程序中。
属性实体类
我们还可以通过@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();
}
}
然后访问该接口,得到的结果如下:
成功取到我们自定义的属性。
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中可以很方便的获取系统属性及自定义的属性,如果再结合Maven,可以大大提高项目的开发速度。下一篇,我们将结合Maven来构建多环境的配置。
最后,按照惯例,附上项目目录结构:
项目地址:https://github.com/Willem520/spring-boot-learning.git,源码位于chapter_2文件夹下。