只需低头努力,剩下的交给时光,时间会公平地帮你处理一切
配置基本用法
application.yml
book:
name: "Java"
@Value注解可以直接取配置的值
@RestController
@EnableAutoConfiguration
public class ConfigurationDemo {
@Value("${book.name}")
private String bookName;
@RequestMapping("/config")
public String config(){
return bookName;
}
public static void main(String[] args){
SpringApplication.run(ConfigurationDemo.class,args);
}
}
启动程序,访问:localhost:8080/config,显示上显示
Java
这应该是配置最基础的用法了
不同的环境配置
一般在实际开发过程中,我们都会根据不同的环境来读取不同的配置文件
比如,我们要配置一个文件上传的目录,在本地开发环境可能是Windows下的D:\upload目录
在生产Linux环境可能是/home/admin/upload目录,针对这种不同的环境需要不同的配置,我们一般是根据环境来分配置文件
比如,开发环境的配置文件是application-dev.yml,生产环境的配置文件是application-prod.yml
在项目启动时,可以选择性的激活不同的配置文件,达到不同环境配置隔离的效果
application-dev.yml
file:
upload: D:\upload
application-prod.yml
file:
upload: /home/admin/upload
命令行参数
java -jar springBoot-demo-1.0-SNAPSHOT.jar --spring.profiles.active=prod
可以在项目启动的时候,增加命令行参数,命令行参数的优先级比配置文件高
命令行还支持json格式参数,用的不多,了解一下就行
java -jar springBoot-demo-1.0-SNAPSHOT.jar -Dspring.application.json='{"file":{"upload":"user/upload"}}'
自定义配置文件名称
我们项目中默认都是取的application.yml或application.properties文件中的配置
如果不想使用application作为配置文件的名称,可以进行自定义读取的配置名称,只需要指定spring.config.name就行了,如下
java -jar springBoot-demo-1.0-SNAPSHOT.jar --spring.config.name=myconfig
注意,你指定了myconfig为配置文件的名称,项目就不会再读取application配置了
导入配置
有时我们有多个配置文件,可以组织到一起,使用import来进行配置的导入
classpath形式导入
spring:
config:
import: classpath:my-dev.yml
my-dev.yml
myconfig:
import:
name: "yml import config"
file形式导入
spring:
config:
import: file:E:\\workspace\\springBoot-demo\\src\\main\\resources\\dev.properties
dev.properties
myconfig.import.name = "properties import config"
可以看到,不管是yml配置文件还是properties配置文件,都可以被spring.config.import导入
占位符配置
配置文件中,可以获取到配置中属性的引用,直接使用${property}占位符进行引用即可,如下
spring:
app:
name: "springboot-demo"
descript: "${spring.app.name} is a springboot application"
@Value("${spring.app.descript}")
public String descript;
@RequestMapping("/descript")
public String getDescript(){
return descript;
}
访问http://localhost:8080/descript 页面上会显示springboot-demo is a springboot application
配置随机数
springboot内置了随机数的取值方式,可以直接在配置中使用random取出来作为应用的配置项
rand:
number: ${random.value}
intNumber: ${random.int}
longNumber: ${random.long}
uuid: ${random.uuid}
@Value("${rand.uuid}")
public String randomValue;
@RequestMapping("/random")
public String getRandom(){
return c;
}
@ConfigurationProperties
有时候使用@Value(’${property}’)注解获取属性值显得比较麻烦,尤其是当我需要配置多个属性值或者配置本身需要分层级时,就显得很麻烦
@ConfigurationProperties注解可以将属性绑定到JavaBean的属性上
最常见的应用就是我们的数据库连接配置
jdbc:
connection:
url: "jdbc:mysql://localhost:3306/testdb"
username: "root"
passwrod: "123456"
driver: "com.mysql.jdbc.Driver"
新增一个Bean
@ConfigurationProperties(prefix = "jdbc.connection")
@Configuration
public class DataSource {
private String url;
private String username;
private String password;
private String driver;
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
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;
}
public String getDriver() {
return driver;
}
public void setDriver(String driver) {
this.driver = driver;
}
}
@Autowired
private DataSource dataSource;
@RequestMapping("/datasource")
public String getDataSourceUrl(){
return dataSource.getUrl();
}
启动项目,访问http://localhost:8080/datasource 页面上显示jdbc:mysql://localhost:3306/testdb
可以看到@ConfigurationProperties注解将application.yml中的属性配置自动绑定到DataSource的属性上
当然,前提是两边的属性名称要对上,其实两边的属性名称不需要完全对上
比如配置名user_name、user-name都可以绑定到username属性上,这就是relaxed binding,但还是建议两边的属性名最好保持一致,不要给自己找麻烦
其次,就是prefix配置的层级一定要对上才行
以上就是SpringBoot中配置的几种常用的做法,当然还有很多其他配置的用法比较不常用,这里就不多做介绍
如果有兴趣可以去看一下springboot的官方文档
源码已上传至https://github.com/pzjtian/springboot-demo,请持续关注~
如果感觉对你有些帮忙,请收藏好,你的关注和点赞是对我最大的鼓励!
如果想跟我一起学习,坚信技术改变世界,请关注【Java天堂】公众号,我会定期分享自己的学习成果,第一时间推送给您