SpringBoot14-springboot核心-外部配置,日志配置,Profile配置

来源:互联网 发布:多源异构数据 编辑:程序博客网 时间:2024/05/17 21:06

一:外部配置

     Spring Boot允许使用properties文件,yaml文件或命令行参数作为外部配置。

     1,命令行参数配置

      Spring Boot可以是基于jar包运行的,打包jar包的程序可以直接通过命令行运行:

      java -jar xx.jar

 

     可以通过以下命令修改Tomcat端口号:

    java -jar  xx.jar  --server.port=9090


     2,常规属性配置

     在Spring Boot里我们只需要在application.properties定义属性,直接使用@Value注入即可。

     示例,在之前的springboot1项目基础上进行如下修改:

     1)修改application.yml,增加属性:

book:  author: jack  name: hello world

     2)新建一个Controller

package com.jack.controller;import org.springframework.beans.factory.annotation.Value;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RestController;/** * Created by jack on 2017/7/30. */@RestControllerpublic class PropertiesController {    @Value("${book.author}")    private String bookAuthor;    @Value("${book.name}")    private String bookName;    @RequestMapping("/property")    public String helloProperty(){        return "book name is :"+bookName+" and book author is :"+bookAuthor;    }}


   3)运行

   在浏览器输入:http://localhost:8080/property,浏览器输出如下:


   

     3,类型安全的配置(基于properties)

     上例中使用@Value注入每个配置在实际项目中会显得格外麻烦,因为我们的配置通常会是许多个,若使用上面的方式则要使用@Value注入很多次

      Spring Boot还提供了基于类型安全的配置方式,通过@ConfigurationProperties将properties属性和一个Bean及其属性关联,从而实现类型安全的配置。

     修改application.yml,如下:

book:  author: jack  name: hello worldauthor:  name: jack  age: 18


   类型安全的Bean,代码如下:

package com.jack.config;import org.springframework.boot.context.properties.ConfigurationProperties;import org.springframework.stereotype.Component;@Component/** *通过@ConfigurationProperties加装properties文件内的配置,通过prefix属性指定properties的配置 * 的前缀,通过locations指定properties文件的位置 */@ConfigurationProperties(prefix = "author")public class AuthorSetting {    /**     * 姓名     */    private String name;    /**     * 年龄     */    private int age;    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public int getAge() {        return age;    }    public void setAge(int age) {        this.age = age;    }}


测试代码如下:

package com.jack.controller;import com.jack.config.AuthorSetting;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.beans.factory.annotation.Value;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RestController;/** * Created by jack on 2017/7/30. */@RestControllerpublic class PropertiesController {    @Value("${book.author}")    private String bookAuthor;    @Value("${book.name}")    private String bookName;    @Autowired    private AuthorSetting authorSetting;    @RequestMapping("/property")    public String helloProperty(){        System.out.println("helloProperty()");        return "book name is :"+bookName+" and book author is :"+bookAuthor;    }    @RequestMapping("/author")    public String author(){        return "name: "+authorSetting.getName()+",age: "+authorSetting.getAge();    }}

    这里使用post man进行测试接口输入:http://localhost:8080/author,效果如下:




4,日志配置

    spring boot支持Java Util Logging,Log4J,Log4J2和Logback作为日志框架,无论使用哪种日志框架,Spring boot已为当前使用日志框架的控制台输出及文件输出做好了配置,默认情况下,Spring boot使用Logback作为日志框架。

    配置日志级别:

   logging.file=D:/mylog/log.log


   配置日志文件,格式为logging.level.包名=级别:

  logging.level.org.springframework.web=DEBUG



4,Profile配置

    Profile是Spring用来针对不同的环境对不同的配置提供支持,全局Profiel配置使用application-{profile}.properties(如application-{prod}.properties)

    通过在application.properties中设置spring.profiles.active=prod来指定活动的Profile。

    下面做一个演示,生产prod和开发dev环境,生产环境8080,开发环境9090

    生产和开发环境的配置文件如下:

application-prod.yml如下:

server:  port: 8080


application-dev.yml如下:

server:  port: 9090


   修改application.yml代码如下:

spring:  profiles:    active: devbook:  author: jack  name: hello worldauthor:  name: jack  age: 18


   上面主要增加了:spring.profiles.active=dev


   运行程序,输出如下:



  修改pring.profiles.active=prod


  输出如下: