SpringBoot Util 工具类读取 application.properties 文件中的值

实际开发中会遇到不同的生产环境的参数不一样,要根据生产环境来选择实际的参数。

比如我后端需要有一个 url 请求,这个 url 请求在不同的环境下(dev,test,alpha,beta,product)需要访问相应的链接。那么我可以在 application.properties 或者 application.yml 文件中写不同的 url, 根据环境变量判断使用哪一个。

所以,看我的,下面是解决办法

1
2
3
4
5
6
7
8
# application.properties
url.auth.prefix.dev=http://dev.xx.com
url.auth.prefix.test=http://test.xx.com
url.auth.prefix.alpha=http://alpha.xx.com
url.auth.prefix.beta=http://beta.xx.com
url.auth.prefix.prod=http://xx.com

url.api.login=/auth/login

ENVUtil.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
// 要有这个注解,如果不是 Bean,也不会自动加载
@Component
public class ENVUtil {

private static String env;

// 注意这里不能是 static 静态方法,否则会失效
@Value("${env}")
public void setEnv(String env) {
ENVUtil.env = env;
}

public static ENV getENV() {
try {
// string 转 enum 的方法
return ENV.valueOf(env.toUpperCase());
} catch (Exception e) {
return ENV.DEV;
}
}
}

ENV.java

1
2
3
4
5
6
7
8
public enum  ENV {
// 环境 dev, test, alpha, beta, prod
DEV,
TEST,
ALPHA,
BETA,
PROD
}

URLUtil.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
@Component
public class URLUtil {

private static String loginUrl;

private static ENV env = ENVUtil.getENV();

private static String authDevPrefix;

private static String authTestPrefix;

private static String authAlphaPrefix;

private static String authBetaPrefix;

private static String authProdPrefix;

private static String loginApi;

@Value("${url.auth.prefix.dev}")
public void setAuthDevPrefix(String authDevPrefix) {
URLUtil.authDevPrefix = authDevPrefix;
}

@Value("${url.auth.prefix.test}")
public void setAuthTestPrefix(String authTestPrefix) {
URLUtil.authTestPrefix = authTestPrefix;
}

@Value("${url.auth.prefix.alpha}")
public void setAuthAlphaPrefix(String authAlphaPrefix) {
URLUtil.authAlphaPrefix = authAlphaPrefix;
}

@Value("${url.auth.prefix.beta}")
public void setAuthBetaPrefix(String authBetaPrefix) {
URLUtil.authBetaPrefix = authBetaPrefix;
}

@Value("${url.auth.prefix.prod}")
public void setAuthProdPrefix(String authProdPrefix) {
URLUtil.authProdPrefix = authProdPrefix;
}

@Value("${url.api.login}")
public void setLoginApi(String loginApi) {
URLUtil.loginApi = loginApi;
}

// 初始化 Bean 之后会执行这个注解的方法,前提是这个类是 Bean
@PostConstruct
public void init() {
switch (env) {
case DEV:
loginUrl = authDevPrefix + loginApi;
break;
case TEST:
loginUrl = authTestPrefix + loginApi;
break;
case ALPHA:
loginUrl = authAlphaPrefix + loginApi;
break;
case BETA:
loginUrl = authBetaPrefix + loginApi;
break;
case PROD:
loginUrl = authProdPrefix + loginApi;
break;
default:
loginUrl = authDevPrefix + loginApi;
}
}

public static String getLoginUrl() {
return loginUrl;
}
}