在上一篇中我们简单的介绍了 SpringBoot 项目的创建及其启动方式。在这一篇中我们主要介绍一下 SpringBoot 项目的个性化配置。因为通过上一篇中知识我们知道 SpringBoot 项目的默认端口为 8080,那如果我要修改这个默认端口,应该怎么改呢?又比如 SpringBoot 项目在启动时,默认是没有项目名字的,那如果我们想要添加自己喜欢的项目名字又该怎么办呢?这些都在这一篇的内容中。好了,下面我们详细介绍一下怎么修改 SpringBoot 项目中的默认配置。
修改默认端口
在上一篇的 SpringBoot 项目中我们看到在 resources 目录中有一个 application.properties 文件,这个文件就是让我们个性化配置 SpringBoot 项目参数的,也就是说,在这个文件中按照 SpringBoot 为我们提供的参数名,就可以直接修改 SpringBoot 项目的默认参数。下面我们尝试修改 SpringBoot 项目的默认端口。具体修改如下:
在 application.properties 文件中添加下面的参数,然后,启动 application.properties 文件项目即可。
server.port=8081
并且如果我们使用 IDEA 开发工具时,当我们在在 application.properties 文件中输入参数时,IDEA 就会自动为我们提供相关参数提示,这样方便我们修改。也就是如下图所示:
这时我们启动 SpringBoot 项目并且用 8080 端口访问项目时,发现已经找不到服务了。
而如果我们用访问 8081 端口访问项目,则发现服务可以正常访问。这就说明,我们已经成功将 SpringBoot 项目的默认端口修改为 8081 端口了。
虽然上面的方式已经成功的修改了 SpringBoot 项目的默认参数,但在实际的开发中,并不推荐使用 application.properties 文件的方式修改,因为在 SpringBoot 项目中有更推荐的方式。也就是使用 yml 文件的方式。
application.yml 文件
使用 yml 文件的方式修改默认参数,也比较简单,也就是把 application.properties 文件文件修改为 application.yml 文件即可。唯一不同的方式,就是 yml 文件有自己独特的语法,和 properties 文件不同,可以省略很多参数,并且浏览比较直观。下面我们尝试用 yml 文件的方式,将 SpringBoot 的端口修改为 8082 端口。
启动项目后访问刚刚的 8081 端口,发现项目已经访问不了。
这时我们访问 8082 端口,发现项目访问又正常了,这就说明我们使用 yml 的方式修改 SpringBoot 的默认参数方式成功了。
如果我们访问 http://localhost:8082/jilinwu… 地址,即可看到 SpringBoot 接口返回的数据。
修改默认项目名
下面我们还将使用 yml 的方式配置 SpringBoot 项目的项目名。具体参数如下:
server:
port: 8082
context-path: /springboot
我们继续启动项目然后依然访问 http://localhost:8082/jilinwu… 地址,这时发现接口访问失败。
然后我们访问 http://localhost:8082/springb… 地址,发现服务又可正常访问了。
获取配置文件中参数
在实际的项目开发中,我们通常会遇到,读取配置文件中的参数,那么在 SpringBoot 中怎么获取配置文件中的参数呢?下面我们在配置文件中添加如下参数。
server:
port: 8082
context-path: /springboot
email:
username: jilinwula
password: 123456
下面我们在 Controller 中采用如下的方式读取配置文件中的参数。
@RestController
@RequestMapping(“/jilinwula”)
public class JilinwulaController {
@Value(“${email.username}”)
private String username;
@Value(“${email.password}”)
private String password;
@RequestMapping(“/helloworld”)
public Object helloWorld() {
Map<String, Object> map = new HashMap<String, Object>();
map.put(“username”, username);
map.put(“password”, password);
return map;
}
}
我们可以直接使用 @Value 注解来获取配置文件中的参数,并且这个注解不只是在 SpringBoot 中可以使用,这个注解在 Spring 的项目中也可以使用。下面我们启动项目,并访问 http://localhost:8082/springb… 地址,看看是不是可以成功的获取配置文件中的参数。
我们看上图所示,我们成功的获取到了配置文件中的参数。但如果有强迫证的人,对于上面的代码难免有些不满意。因为如果我们要获取配置文件中非常多的参数时,要是按照上面的代码编写,则需要在代码中编写大量的 @Value 注解,这显然是不合理的。那有没有比较方便的办法呢?答案一定是有的,并且 SpringBoot 为我们提供了非常方便的方法获取配置文件中的参数。下面我们看一下这种方式。
我们首先要在项目的 pom.xml 中添加以下依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.4</version>
<scope>provided</scope>
</dependency>
第一个依赖是自动获取配置文件参数的必须依赖,而下面的依赖,则是可以用注解的方式动态生成 get 和 set 方法,这样我们在开发时,就不用在写 get 和 set 方法了,在实际的项目中比较常用。在使用 lombok 生成 get 和 set 方法时,还要在 IDEA 中添加相应的 lombok 插件,否则 IDEA 会提示到不到 get 和 set 方法的警告。
其次我们新创建一下获取配置参数的类,并且添加 @ConfigurationProperties 注解,该注解会自动将配置文件中的参数注入到类中的属性中 (不需要写 @Value 注解)。并且可以指定 prefix 参数来指定要获取配置文件中的前缀。具体代码如下:
package com.jilinwula.springboot.helloworld;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
@Component
@ConfigurationProperties(prefix = “email”)
@Data
public class EmailProperties {
private String username;
private String password;
}
上面中的 @Data,注解就是动态生成 get 和 set 方法的所以上述的代码是不需要写 get 和 set 方法的。下面我们看一下 Controller 中的代码修改:
package com.jilinwula.springboot.helloworld;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.HashMap;
import java.util.Map;
@RestController
@RequestMapping(“/jilinwula”)
public class JilinwulaController {
@Autowired
private EmailProperties emailProperties;
@RequestMapping(“/helloworld”)
public Object helloWorld() {
Map<String, Object> map = new HashMap<String, Object>();
map.put(“username”, emailProperties.getUsername());
map.put(“password”, emailProperties.getPassword());
return map;
}
}
下面我们启动项目并访问接口看看是否能够成功获取配置文件中的参数。
)
下面我们介绍一下在 SpringBoot 中怎么处理不同环境中获取不同的配置参数。下面我们模拟两人环境一个是开发环境,一个是测试环境,我们暂时以不同端口来区分这两个环境的区别。
application-dev.yml:
server:
port: 8081
context-path: /springboot
email:
username: jilinwula
password: 123456
application-test.yml:
server:
port: 8082
context-path: /springboot
email:
username: jilinwula
password: 654321
application.yml:
spring:
profiles:
active: dev
这样当我们在 application.yml 文件中的参数设置为 dev 时,SpringBoot 项目在启动时就会读取 application-dev.yml 中的参数。如果我们将参数设置为 test 时,则 SpringBoot 会读取 application-test.yml 文件中的参数。
下面我们分别启动项目并且访问接口:
当参数为 dev:
当参数为 test:
启动时指定参数
在上一篇中我们已经介绍过了我们可以使用 java -jar 项目的名字的方式启动 SpringBoot 项目。并且,该方式还支持指定 SpringBoot 参数,例如上面刚刚介绍的指定获取同环境的配置参数。具体命里如下:
java -jar jilinwula-springboot-helloworld-0.0.1-SNAPSHOT.jar –spring.profiles.active=dev
我们此时继续访问接口发现还是成功的获取了 dev 环境中的参数。
上述内容就是 SpringBoot 个性化配置的内容,如有不正确,或者需要交流的,欢迎留言,谢谢。
项目源码:
https://github.com/jilinwula/…
原文链接:
http://jilinwula.com/article/…