写在前面
上一篇文章,简单介绍了创建SPRing Boot项目,这篇文章主要记录Spring Boot的简单配置、两种配置文件、通过注解获取配置文件里的值以及多环境的配置。
简单的配置
上一节创建好一个Spring Boot项目之后,会在src/main/resources
下创建一个配置文件application.properties
。下面在该配置文件内进行简单的配置。配置如下:
#配置地址,默认就是本地地址 server.address=127.0.0.1 #配置服务端口,默认为8080 server.port=8080 #配置上下文路径,默认是‘/’ server.context-path=/boot
.yml配置文件
在Spring Boot中,还有一种配置文件,被更多开发者所使用。是以.yml结尾的一种配置文件。 我们首先需要创建这个配置文件,在和application.properties
同一个目录下,我们新建一个application.yml
文件。在该文件下,配置与上一步一样效果的配置。
#需要注意的是,该类型配置文件,冒号与值之间务必要添加空格!!! server: address: 127.0.0.1 port: 8080 context-path: /boot 与上一步的区别显而易见,有层次感,结构清晰,所以,建议使用该类型的配置文件。PS:后面的所有配置都是使用.yml
配置,还有就是,不管你选择哪种,另一种配置文件就能删除了。
通过注解获取配置文件属性
代码中调用配置文件属性
在配置文件中,我们可以设置一些属性,供代码里面调用,比如,我们设置一个人的名字,我们可以在配置文件里这样配置:
server: address: 127.0.0.1 port: 8080 context-path: /boot name: HowieLi age: 18 在代码里调用name
的值,需要使用到@Value
注解,代码如下:
package cn.howieli; import org.springframework.beans.factory.annotation.Value; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RestController; RestController public class HelloController { @Value("${name}") //通过${变量名}调用 private String name; @Value("${age}") private int age; @RequestMapping(value = "/hello", method = RequestMethod.GET) public String hello() { return name + age; } } 此时启动项目,访问http://localhost:8080/boot/hello
,就会显示HowieLi18
了。
配置文件中调用配置文件中的属性
在配置文件中,可以通过${变量名}
来调用上面的属性,配置如下:
server: address: 127.0.0.1 port: 8080 context-path: /boot name: HowieLi age: 18 content: "name: ${name}, age: ${age}" 代码中直接调用content
就可以了,访问启动的应用显示name: HowieLi, age: 18
。
配置文件中配置javaBean
生活中一个人的属性有很多,不光有姓名、年龄,可能还要有身高、住址等等属性,如果我们在配置文件中全部配置出来,在代码中一个一个通过注解调用会不会感觉很傻?不过,幸好Spring Boot提供了解决方案。现在我们将配置文件修改如下:
person: name: HowieLi age: 18之后,创建一个Person类,为属性必须设置get
和set
方法,亲测,不设置,值会为0
或null
,或者直接NullPointerExcepotion
,为方便查看,重写一个toString
方法。Person类如下:
package cn.howieli; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.stereotype.Component; @Component //将Person类交由Spring容器管理 @ConfigurationProperties(prefix = "person") //填写配置文件中的前缀 public class Person { private String name; private int age; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } @Override public String toString() { return "Person [name=" + name + ", age=" + age + "]"; } } 使用@Autowired
注解注入,调用数据:
package cn.howieli; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RestController; @RestController public class HelloController { @Autowired private Person person; @RequestMapping(value = "/hello", method = RequestMethod.GET) public String hello() { return person.toString(); } } 重新启动项目,访问显示Person [name=HowieLi, age=18]
。
多环境配置
在实际开发中,可能会针对不同的环境进行开发,我们作为开发人员,总不能每次部署项目都一个一个的去更改配置吧?我们需要把有限的时间放到更有意义的事上。 接下来,我们在配置文件所在目录下新键一个作为开发环境的配置文件:application-dev.yml
,配置如下:
server: address: 127.0.0.1 port: 8080 context-path: /boot person: name: Lihao age: 20再创建一个作为生产环境的配置文件:application-prod.yml
,配置如下:
server: address: 127.0.0.1 port: 8080 context-path: /boot person: name: HowieLi age: 18此时,修改原配置文件application.yml
,配置如下:
spring: profiles: active: dev 此时重新启动应用,访问http://localhost:8080/boot/hello
,就会显示Person [name=Lihao, age=20]
,name
和age
的值是开发环境下,也就是application-dev.yml
配置文件中的值。反之,将dev
修改为prod
,重新启动应用访问就会显示Person [name=HowieLi, age=18]
。dev
和prod
主要取决于之前创建的两个配置文件。 补充一点,在使用java -jar
命令也可以指定不同的profile
启动,命令如下:
java -jar my-spring-boot.jar --spring.profiles.active=dev 不清楚该命令的可查看我的上一篇博客:Spring Boot学习笔记-STS创建第一个Spring Boot应用 (其它启动方式部分)
结语
以上就是我自己的学习笔记,如有补充或有错,请一定要指正,一起进步。个人博客:https://www.howieli.cn 和个人CSDN博客: http://blog.csdn.net/howieli_1995。