SpringBoot 读取环境变量 是开发中必不可少的一部分,下面介绍 SpringBoot 中读取环境变量的几种方法。
在此之前我们先在配置文件 application.properties 文件中配置以下条目:
wx.appkey = 12345
wx.appsecret = 23456
wx.redirect_uri = https://www.yxjc123.com
1. @Value("${proprties}") 注解
我们可以在SpringBoot 中使用这些属性文件,以下是使用方法。
@RestController
public class PropsController {
@Value("${wx.appkey}")
private String appkey;//配置参数appkey
@Value("${wx.appsecret}")
private String appsecret;//配置参数appsecret
@RequestMapping("/prop")
public String prop() {
return appkey + ":" + appsecret;
}
}
使用@Value("${proprties}")
注解的方式虽然很容易使用,但是如果我们有多个属性,这将是一个非常繁琐的过程。 SpringBoot 引入了一种新的方法,以更简洁的方式处理这些属性,并提供了验证这些配置值的选项。
2. 使用 @ConfigurationProperties 读取
为了理解这个特性,我们可以举一个自定义属性文件的例子,它包含数据库、电子邮件服务器和微信的配置属性,例如:
#微信
wx.appkey = 12345
wx.appsecret = 23456
wx.redirect_uri = https://www.yxjc123.com
#数据库配置
spring.datasource.yxjc.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.yxjc.driver-class-name= com.mysql.cj.jdbc.Driver
spring.datasource.yxjc.jdbc-url= jdbc:mysql://127.0.0.1:3306/yxjc123?useUnicode=true&characterEncoding=utf8
spring.datasource.yxjc.username= root
spring.datasource.yxjc.password= root
#qq邮箱配置
spring.mail.host=smtp.qq.com
spring.mail.port=465
spring.mail.username=xxx@qq.com
spring.mail.from=xxx@qq.com
spring.mail.password=password
通过使用 @ConfigurationProperties
注解,我们可以定义一个Java类绑定这些属性。
在上面的配置项中,都有各自的前缀,我们可以在@ConfigurationProperties
注解上使用前缀属性,比如wx,
package com.example.yxjc.props;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;
@Configuration
@ConfigurationProperties(prefix = "wx")
public class WxProps {
private String appkey;
private String appsecret;
private String redirect_uri;
//getter and setter
public String getAppkey() {
return appkey;
}
public void setAppkey(String appkey) {
this.appkey = appkey;
}
public String getAppsecret() {
return appsecret;
}
public void setAppsecret(String appsecret) {
this.appsecret = appsecret;
}
public String getRedirect_uri() {
return redirect_uri;
}
public void setRedirect_uri(String redirect_uri) {
this.redirect_uri = redirect_uri;
}
}
controller中使用
@RestController
public class PropsController {
@Resource
private WxProps wxProps;
@RequestMapping("/prop")
public String prop() {
return wxProps.getAppkey() + ":" + wxProps.getAppsecret();
}
}
我们运行上面的应用程序,所有在属性文件中定义的前缀为"wx"的属性都会自动绑定/分配给这个WxProps 对象。3. 使用@PropertySource读取配置文件
在处理上述示例时,假设我们想在自定义属性文件 (wx.properties) 中定义这些属性) 而不是在 application.properties 文件中。我们可以使用@PropertySource
注解来义自定义属性文件。
现在我们新建一个wx.properties
文件位于目录\yxjcBoot\src\main\resources\wx.properties下,内容还是
#微信
wx2.appkey = 12345
wx2.appsecret = 23456
wx2.redirect_uri = https://www.yxjc123.com
配置文件类
package com.example.yxjc.props;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
@Configuration
@PropertySource("classpath:wx.properties")
@ConfigurationProperties(prefix = "wx2")
public class WxProps2 {
private String appkey;
private String appsecret;
private String redirect_uri;
//getter and setter
public String getAppkey() {
return appkey;
}
public void setAppkey(String appkey) {
this.appkey = appkey;
}
public String getAppsecret() {
return appsecret;
}
public void setAppsecret(String appsecret) {
this.appsecret = appsecret;
}
public String getRedirect_uri() {
return redirect_uri;
}
public void setRedirect_uri(String redirect_uri) {
this.redirect_uri = redirect_uri;
}
}
使用方法:
import javax.annotation.Resource;
@RestController
public class PropsController {
@Resource
private WxProps2 wxProps2;
@RequestMapping("/prop")
public String prop() {
return wxProps2.getAppkey();
}
}
4. 使用 Environment 读取配置文件
该种方式是直接读取配置文件信息
例子:
@RestController
public class PropsController {
@Autowired
private Environment environment;
@RequestMapping("/prop")
public String prop() {
return environment.getProperty("wx.appkey");
}
}
总结
对于配置项目较少的情况或者是想简单一点直接使用@Value
注解即可。
对于配置项较多且有分类的情况建议使用 @ConfigurationProperties
读取