目录结构

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/.
├─.mvn # mvn 配置目录
└─wrapper
├─src # 主要的源码目录
├─main # 主包
├─java # 一般认为这里是代码区
└─org
└─demo
└─resources # 资源目录
├─static # 静态资源
└─templates # 模板文件
└─application.properties # 默认配置文件,本节重点
└─test # 测试用例
└─target
└─ ...

配置文件

\src\main\resources\application 是 Spring-boot 的默认配置文件。
支持包括 properties、yaml 在内的多种格式。一般使用yaml

基于环境的配置文件

应用启动时将会加载 application.yaml 和 application-dev.yaml 两个配置文件

1
2
3
spring:
profiles:
active: dev

自定义配置文件

  • 配置文件不要求以 application 开头,可以任意命名,例如 main.properties
  • 经过我测试发现,yaml无法使用类操作,暂时使用properties

应用内操作配置文件

内容

1
2
3
4
5
6
7
mail.host=smtp.office365.com
mail.port=587
mail.encryption=TLS
mail.username=im@println.org
mail.password=123456
mail.from.address=here.dev@outlook.com
mail.from.name=here.dev@outlook.com

新建类

Getter Setter 方法不能少,否则无法读取到配置值

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
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.PropertySource;
import org.springframework.stereotype.Component;

// 把类声明为组件
@Component
// 声明配置文件的路径和位置
@PropertySource("classpath:mail.properties")
// 这份配置的前缀
@ConfigurationProperties(prefix = "mail")
public class MailProperties
{
// 对应配置文件中的 前缀(mail).host
private String host;
// mail.port
private int port;
// mail.encryption
private String encryption;
// mail.username
private String username;
// mail.password
private String password;
// mail.from , from的下一级配置用子类表示,类型也就是类名
private From from;

// 操作from的类
public static class From
{
// 对应 mail.from.addrees
private String address;
// mail.from.name
private String name;

@Override
public String toString()
{
return "From{" + "address='" + address + '\'' + ", name='" + name + '\'' + '}';
}

public String getAddress()
{
return address;
}

public void setAddress(String address)
{
this.address = address;
}

public String getName()
{
return name;
}

public void setName(String name)
{
this.name = name;
}
}

@Override
public String toString()
{
return "MailProperties{" + "host='" + host + '\'' + ", port=" + port + ", encryption='" + encryption + '\'' +
", username='" + username + '\'' + ", password='" + password + '\'' + ", from=" + from + '}';
}

public From getFrom()
{
return from;
}

public void setFrom(From from)
{
this.from = from;
}

public String getHost()
{
return host;
}

public void setHost(String host)
{
this.host = host;
}

public Integer getPort()
{
return port;
}

public void setPort(Integer port)
{
this.port = port;
}

public String getEncryption()
{
return encryption;
}

public void setEncryption(String encryption)
{
this.encryption = encryption;
}

public String getUsername()
{
return username;
}

public void setUsername(String username)
{
this.username = username;
}

public String getPassword()
{
return password;
}

public void setPassword(String password)
{
this.password = password;
}
}

测试

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import org.devttl.properties.MailProperties;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class Application
{
public static void main(String[] args)
{
SpringApplication.run(Application.class, args);
}

// 注入配置文件类
public Application(MailProperties mailProperties)
{
// 打印到控制台
System.out.println(mailProperties.toString());
}
}

输出

MailProperties{host='smtp.office365.com', port=587, encryption='TLS', username='im@println.org', password='123456', from=From{address='here.dev@outlook.com', name='here.dev@outlook.com'}}