前一章 我们创建了第一个spring boot 程序, 这一章分享一下spring boot的配置方式和一些技巧.
spring boot 的特性之一就是 配置简单.
spring boot不再使用之前spring 的xml配置方式, xml的配置方式太复杂,且相互引用很麻烦.
spring boot 提供两种配置文件方式 ,一种是 *.properties方式. 另一种是*.yml方式. 下面将分别介绍一下.
1. properties方式的配置文件:
我们接着上一章的工程继续. 先来一个简单的, 配置一下tomcat的信息:
首先在resources的根目录下面创建一个 application.properties 文件 . 这里的文件名 application 是默认的,如果使用其他名字的文件, 且没有进行引入,那么就找不到配置文件了.
在这个配置文件中添加如下代码:
# 指定tomcat的字符集
server.tomcat.uri-encoding: UTF-8
#设定tomcat的最大工作线程数
server.tomcat.max-threads: 10
#设定http监听端口
server.port: 18080
#设定Tomcat的base 目录,如果没有指定则使用临时目录.
server.tomcat.basedir: target/tomcat
这里配置了 spring boot 内嵌的tomcat的一些属性. 接下来我们启动一下程序, 发现访问端口变成18080了 .
![](https://img-blog.csdn.net/20180821224321901?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2pzZjE5ODM=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)
在实际的项目开发中, 我们的项目配置文件都需要分成 开发, 测试, 生成环境的. 如果不划分,那么部署的时候将是一件很头疼的事情. 那么在spring boot 中是怎么划分配置文件的环境呢, 我们接着往下走.
在resources目录下新建一个application-dev.properties 文件 , 把上面的那些代码从application.properties 中复制到application-dev.properties中,并且把server.port改成28080. 最后, 在application.properties的最上面加一句话 spring.profiles.active: dev
最终两个配置文件变成如下内容:
application.properties
spring.profiles.active: dev
# 指定tomcat的字符集
server.tomcat.uri-encoding: UTF-8
#设定tomcat的最大工作线程数
server.tomcat.max-threads: 10
#设定http监听端口
server.port: 18080
#设定Tomcat的base 目录,如果没有指定则使用临时目录.
server.tomcat.basedir: target/tomcat
application-dev.properties
# 指定tomcat的字符集
server.tomcat.uri-encoding: UTF-8
#设定tomcat的最大工作线程数
server.tomcat.max-threads: 10
#设定http监听端口
server.port: 28080
#设定Tomcat的base 目录,如果没有指定则使用临时目录.
server.tomcat.basedir: target/tomcat
运行一下,发现访问端口变成28080了.
原理是这样的, application.properties 我们叫它主配置文件, application-dev.properties 我们叫它从配置文件. 一个项目中只能有一个主配置文件, 但是可以有多个从配置文件. 一般把不需要区分环境的配置信息放在主配置文件中(比如说数据驱动, JPA, 日志的配置). 把一些需要区分环境的配置文件放在从配置文件中(比如说数据库连接等). 从配置文件的命名规则是application-从配置后缀.properties , 我们可以用dev表示开发环境 application-dev.properties , 用test表示测试环境 application-test.properties, 用pro表示生产环境 application-pro.properties, 然后引入从配置即可. 引入从配置文件的方式有以下几种:
- 在主配置文件中引入, 在主配置文件中添加 spring.profiles.active: dev #从配置后缀 .
- 在IDEA 中配置Spring boot的启动项中添加具体的启动环境, 方法如下:
打开IDEA的启动配置编辑
![](https://img-blog.csdn.net/20180821224812983?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2pzZjE5ODM=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)
新增一个spring boot 启动项
![](https://img-blog.csdn.net/20180821224831977?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2pzZjE5ODM=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)
选择启动入口, 填写配置从文件的前缀
![](https://img-blog.csdn.net/2018082122485211?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2pzZjE5ODM=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)
最后点击ok, 就可以了.
在部署环境的启动脚本中的启动命令 java -jar (见第一章) 添加 --spring.profiles.active=pro 例如 :java -jar ***.jar --spring.profiles.active=pro
2. yml方式的配置文件:
这种方式和.properties 很类似 , 就是把server.tomcat.uri-encoding 在 . 的地方逐级用: 分割,用缩进表示所属就行了. 具体的写法如下:
server:
tomcat:
uri-encoding: UTF-8
max-threads: 10
basedir: target/tomcat
port: 18080
这里一定要注意每一行的缩进,不然就报错了.
比较一下properties的写法:
server.tomcat.uri-encoding: UTF-8
server.tomcat.max-threads: 10
server.port: 18080
server.tomcat.basedir: target/tomcat
spring boot 官方推荐yml的写法, 个人也比较喜欢yml的写法.
yml方式也可以用主从配置文件的方式区分环境, 使用方式和properties配置一样, 这里就不多说了, 截个图:
![](https://img-blog.csdn.net/20180821225356384?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2pzZjE5ODM=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)
主配置这样引入从配置 :
spring:
profiles:
active: dev
大家可以自己试试.
其实spring boot 设计到的框架的配置远没有这么简单, 后面我们引入其他框架的时候会一一介绍它们的配置方法. 后面涉及到的配置文件都将采用yml的方式.
在实际开发中, 除了处理框架的配置之外,我们常常会用到自定义常量的配置, 下面介绍一下常量的配置.
其实自定义的配置是可以写到框架配置文件中的,但是这样不太友好, 还是另外建一个文件来放置这些配置吧. 我们建立一个config.properties文件,然后加入两个自定义配置
default.name=jerry
default.address=China
我们先按照文件进行分组的方式获取配置的值, 首先定义一个类 ConfigSetting.java, 代码如下:
@Configuration
@PropertySource("classpath:config.properties")
public class ConfigSetting {
@Value("${default.name}")
private String defaultName;
@Value("${default.address}")
private String defaultAddress;
public String getDefaultName() {
return defaultName;
}
public void setDefaultName(String defaultName) {
this.defaultName = defaultName;
}
public String getDefaultAddress() {
return defaultAddress;
}
public void setDefaultAddress(String defaultAddress) {
this.defaultAddress = defaultAddress;
}
}
这样配置读取的类就完成了, 这个类通过注解@Configuration 指定这个类是一个配置类, 通过 @PropertySource("classpath:config.properties") 指定配置文件的路径, 在属性上通过 @Value 对应配置文件中的key, 这样,spring 就会自动把配置中的value绑定到属性上,我们直接通过get方法获取属性值即可.
下面我们在DemoController中注入这个ConfigSetting 并添加两个Controller方法, 来测试一下配置的读取, 代码如下:
@Autowired
private ConfigSetting configSetting;
@RequestMapping("/name")
String getName() {
return "name: " + configSetting.getDefaultName();
}
@RequestMapping("/address")
String getAddress() {
return "address: " + configSetting.getDefaultAddress();
}
启动项目, 访问 http://localhost:18080/name 和 http://localhost:18080/address 发现,配置文件的值已经被读取到了.
在实际开发过程中, 有时候需要按照前缀分组不同的配置,那么我们可以采用另外一种办法, 还是使用上面config.properties的配置文件, 我们需要获取到所有default前缀的配置, 我们再创建一个类 DefaultSetting.java 代码如下:
@Configuration
@PropertySource("classpath:config.properties")
@ConfigurationProperties(prefix = "default")
public class DefaultSetting {
private String name;
private String address;
public String getName() {
return name;
}
public String getAddress() {
return address;
}
}
和上面那种配置一样,唯一的区别是通过@ConfigurationProperties指定配置前缀, 属性对应后缀即可绑定到配置的值, 大家可以自己写个Controller 注入DefaultSetting试一下获取属性值.
spring boot的基本配置方法就介绍到这了, 后面我们用到其他的包的时候也会介绍它们的配置的写法.
本章结束
下面一章里将介绍spring boot的日志配置.敬请期待.