您的位置:首页 > 编程语言 > Java开发

SpringBoot入门教程03——SpringBoot配置文件详解

2020-07-15 05:52 393 查看

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环境,有以下几种方法

  1. **把application.yml中的profiles.active改成stg即可 **
  2. **指定应用参数 --spring.profiles.active=stg **
  3. **指定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环境开发运行

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: