Spring Boot实践 第二章 Spring boot 的配置文件

前一章 我们创建了第一个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了 .

        在实际的项目开发中, 我们的项目配置文件都需要分成 开发, 测试, 生成环境的. 如果不划分,那么部署的时候将是一件很头疼的事情. 那么在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的启动配置编辑

            

            新增一个spring boot 启动项

            

            选择启动入口, 填写配置从文件的前缀

         

          最后点击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配置一样, 这里就不多说了, 截个图:

   

   主配置这样引入从配置 :

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的日志配置.敬请期待.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值