一:外部配置
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.
*/
@RestController
public 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 world
author:
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.
*/
@RestController
public 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: dev
book:
author: jack
name: hello world
author:
name: jack
age: 18
上面主要增加了:spring.profiles.active=dev
运行程序,输出如下:
修改pring.profiles.active=prod
输出如下: