SpringBoot入门教程03——SpringBoot配置文件详解
SpringBoot入门教程03——SpringBoot配置文件详解
虽然springboot已经自动帮我们做了许多配置,让应用在不做任何配置的情况下就能运行起来,但是在实际的应用场景,我们仍然需要自己修改一些配置。本文主要讲述如何自定义配置,以及如何在应用中读取自定义配置。
自定义配置
当我们创建一个springboot应用时,系统默认为我们在src/main/java/resources目录下创建了application.properties文件。springboot支持properties和yml两种格式的配置文件,但是yml文件实在比properties强大太多,这里统一改成application.yml。
然后在application.yml中添加如下内容:
server: port: 8888
然后在HelloController类中添加如下内容:
@Value("${server.port}") private int port; @Value("${server.port1:9999}") private int port1; @RequestMapping("/port") public String port(){ return "server.port is " + port; } @RequestMapping("/port1") public String port1(){ return "server.port1 is " + port1; }
然后运行SpringbootDemoApplication的main方法,启动应用
打开浏览器输入http://127.0.0.1:8888/port,系统返回 server.port is 8888
打开浏览器输入http://127.0.0.1:8888/port1,系统返回 server.port1 is 9999
由上例可知,注入属性可以用@Value("${placeHolder}"),如果注入了不存在的占位符,系统启动会报错,可以通过@Value("${placeHolder:defaultValue}")解决
开发者工具
工欲善其事,必先利其器,在下一小节前,先补充说明一下几个开发者工具,也就是第一节使用Spring Assistant构建项目时,勾选的3个开发者工具
- Spring Boot DevTools 应用热启动工具,代码改变时不需要重启就能自动加载,开发调试神器
- Lombok 效率神器,只需要在javabean类上加@Data注解,getter、setter、toString、hashcode、equals等方法就能自动生成,而且是在class文件生成,java代码看起来非常清爽。需要在idea安装lombok插件(免费)。
- Spring Configuration Processor 在编写application.properties文件和application.yml文件时给提示,比如配置数据库时输入spring.datasource,下面会有一个列表的key可以选,也非常方便
如果新建项目时没有勾选,也能通过pom文件添加
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <scope>runtime</scope> <optional>true</optional> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configuration-processor</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency>
自定义配置文件
在src/main/java/resources目录下新建user.properties文件,内容如下:
user.name=henry user.age=26
然后在com.henry包下新建config包,然后在config包下新建UserBean类,代码如下:
@Configuration @PropertySource("classpath:user.properties") @ConfigurationProperties(prefix = "user") @Data public class UserBean { private String name; private int age; } //一个@Data注解搞定,省去getter/setter/toString等方法,是不是很清爽
然后在com.henry.controller包下新建UserBeanController类,代码如下:
@RestController public class UserBeanController { @Autowired private UserBean userBean; @RequestMapping("/user") public String user(){ return userBean.getName() +"-"+ userBean.getAge(); } }
然后我们启动应用,打开浏览器输入http://127.0.0.1:8888/user,浏览器显示:
Henry-26
我们首先看一下UserBean上的几个注解
@Configuration 等同于@Component,@Service这些,声明该javabean被spring容器管理
@Data 代码简化注解
@PropertySource 指定从哪个配置文件读取属性
- @PropertySource(“classpath:user.properties”) 从classpath下的user.properties读取
- @PropertySource(value = {“classpath:user.properties”}) 支持从多个配置文件读取,{“xxx”,“xxx2”,…}
- @propertySource有个属性ignoreResourceNotFound默认值为false,如果配置文件不存在会报错,改为true则会忽略
@ConfigurationProperties 指定前缀prefix = “user”,另外还有2个属性,ignoreUnknownFields默认值为true,找不到的字段忽略;ignoreInvalidFields默认值为false,不合法的字段会报错,比如java类中age字段是int类型,但是配置文件的age值为abc就会报错
SpringBoot应用在启动时读配置文件,生成javabean配置类,并给字段赋值,之后放到spring容器中管理,然后在应用的其他地方就能正常使用了,比如上例中通过@Autowired注解注入UserBeanController即可使用
application.yml配置多环境
实际开发的过程中,我们经常遇到多个环境切来切去的需求,下面讲一下此时application.yml如何配置
直接上代码
spring: profiles.active: dev --- spring: profiles: dev server: port: 8080 --- spring: profiles: stg server: port: 8888 --- spring: profiles: prod server: port: 9999
如上,我们定义了3个环境,分别为dev、stg、prod,并指定了当前使用的环境为dev
直接启动应用,启动日志可以看到tomcat started on port(s): 8080 (http) with context path ''
假如我们想切到stg环境,有以下几种方法
- **把application.yml中的profiles.active改成stg即可 **
- **指定应用参数 --spring.profiles.active=stg **
- **指定vm参数 -Dspring.profiles.active=stg **
通过ALT+SHIFT+F10快捷键进入edit configurations界面
经过如图2个步骤,再去运行SpringbootDemoApplication的main方法就读取的时stg的配置了。
打包部署,启动脚本指定环境
maven 先clean,再install
打包完成后,打开idea的Terminal工具,输入命令
cd target java -jar springboot-demo-0.0.1-SNAPSHOT.jar --spring.profiles.active=stg
这里说明一点,指定应用参数的方式能覆盖application.yml中的配置
也就是说应用参数的方式(–spring.profiles.active=stg)优先级高于配置文件方式
配置文件方式高于jvm参数的方式(-Dspring.profiles.active=stg),可以动手试一下
试验之后再把环境切回到dev,后续教程默认是在dev环境开发运行
- 学习笔记(03):最新完整react教程从入门到精通包教包会-【选学】Webpack配置入口文件和打包后的文件...
- mybatis入门教程(配置文件详解、增删改查、接口编程方式)
- SpringBoot非官方教程 | 第二篇:Spring Boot配置文件详解
- SpringBoot从入门到精通教程(八)- 多环境配置文件用法
- Spring基础学习教程(Spring配置文件详解)-03
- 企业级 SpringBoot 教程 (二)Spring Boot配置文件详解
- 学习笔记(03):最新完整react教程从入门到精通包教包会-【选学】Webpack配置入口文件和打包后的文件...
- iptables入门教程配置详解--iptables规则
- Hibernate概述、入门、配置文件详解、四大API详解
- 无废话WCF入门教程四[WCF的配置文件]
- WCF入门教程——WCF的配置文件(四)
- adminLTE 教程 -2 配置文件 app.js详解
- Hibernate入门到开发(三)详解映射配置文件
- Spring MVC 教程,快速入门,深入分析――springMVC-mvc.xml 配置文件片段讲解
- Node.js+Express配置入门教程详解
- Hibernate概述、入门、配置文件详解、四大API详解
- [js高手之路]深入浅出webpack教程系列3-配置文件webpack.config.js详解(下)
- SpringBoot开发详解(三)--SpringBoot配置文件YML注意事项
- 2017.2.13 开涛shiro教程-第十二章-与Spring集成(一)配置文件详解