1.pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<!--
这里引用了我自建的父类包,如果没有,可以把父类的pom里面的内容复制到这里来直接引包,
我建一个父类包是为了后面还有很多小项目不用每次都倒,这样把相同公共的包放父类里面
-->
<parent>
<artifactId>springBoot</artifactId>
<groupId>com.guilf</groupId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<artifactId>springBoot2</artifactId>
</project>
2.Application.java (这里的名字可以改,但最后固定一下)如果application.properties的配置文件换了位置,则要下面的改变
package com.guilf;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
/**
* Created by guilf on 2018/8/1.
*/
@SpringBootApplication
public class Application {
public static void main(String[] args) {
// 注意:如果改变了spring boot 配置文件的位置,在启动的时候指定位置
// 测试时,@RunWith(SpringRunner.class)
// @SpringBootTest(classes= PlutoIsOmsWebApplication.class)
// @TestPropertySource(locations="classpath:conf/env/application.properties")
// 也需要指定下;
// System.setProperty("spring.config.location","classpath:conf/env/application.properties");
SpringApplication.run(Application.class,args);
}
}
3.1。配置项application.properties (数组传值)
# 引用数组
my.servers[0]=dev.bar.com
my.servers[1]=foo.bar.com
4.1 接收上面的数组 建一个控制层 ArrayBindProperties.java 下面的@ConfigurationProperties(prefix ="my")中的my对象配置项里面的my,属性值对应配置项的后面
package com.guilf.springBoot2;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
import java.util.ArrayList;
import java.util.List;
/**
* @ClassName: ArrayBindProperties
* @Description: (绑定数组)
* @author guilf on 2018/8/1.
* @version v1.1
*/
@Component
@ConfigurationProperties(prefix ="my")
public class ArrayBindProperties {
private List<String> servers = new ArrayList<String>();
public List<String> getServers() {
return this.servers;
}
}
5.1,ApplicationTest.java 测试类@SpringBootTest(classes ={Application.class})这里吧上面的application文件引进来了
package com.guilf.springBoot2;
import com.guilf.Application;
import com.guilf.springBoot2.*;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.junit.Ignore;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
/**
* Created byguilf on 2018/8/1.
*/
@RunWith(SpringJUnit4ClassRunner.class)
/** @SpringBootTest 在1.4 版本后替换@SpringApplicationConfiguration(Application.class) 加载当前spring boot 环境 **/
@SpringBootTest(classes ={Application.class})
public class ApplicationTest {
private static final Log log = LogFactory.getLog(ApplicationTest.class);
@Autowired
private ArrayBindProperties arrayBindProperties;
// 测试数组
@Test
@Ignore
public void arrayBind(){
System.out.println(arrayBindProperties.getServers());
}
}
6.1测试结果
3.2 配置项application.properties (属性传值)
com.guilf.title=hello world
#参数的引用
com.guilf.text=${com.guilf.title}
tt=123
# 随机字符串
com.guilf.value=${random.value}
# 随机int
com.guilf.number=${random.int}
# 随机long
com.guilf.bignumber=${random.long}
# 10以内的随机数
com.guilf.test1=${random.int(10)}
# 10-20的随机数
com.guilf.test2=${random.int[10,20]}
4.2 ConfigProperties.java
package com.guilf.springBoot2;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
import javax.validation.constraints.NotNull;
import java.util.ArrayList;
import java.util.List;
/**
* @ClassName: BlogProperties
* @Description: (自定义properties 属性值映射类)
* @author guilf on 2018/8/1
* @version v1.1
*/
/** 使用@Component 注解为spring 管理的类,那么在别的类才可以进行注入使用。**/
@Component
/**
当我们不是使用的默认的application.properties文件时,需要locations指定了我们要使用的配置文件路径和名称,
可以这么定义:ConfigurationProperties(locations="classpath:config/company.properties")。
1.5.x 不再这么支持,请使用
@PropertySource(ignoreResourceNotFound = true, value = "classpath:conf/application.properties")
**/
public class ConfigProperties {
@NotNull
@Value("${com.guilf.title}")
private String name;
@Value("${com.guilf.text}")
private String text;
@Value("${com.guilf.value}")
private String value;
@Value("${com.guilf.number}")
private Integer number;
@Value("${com.guilf.bignumber}")
private Long bignumber;
@Value("${com.guilf.test1}")
private Integer test1;
@Value("${com.guilf.test2}")
private Integer test2;
/**
* ${key:defaultVlaue} 表示在对应key 不成在时的默认值
*/
@Value("${tt:test}")
private String tt;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
public Integer getNumber() {
return number;
}
public void setNumber(Integer number) {
this.number = number;
}
public Long getBignumber() {
return bignumber;
}
public void setBignumber(Long bignumber) {
this.bignumber = bignumber;
}
public Integer getTest1() {
return test1;
}
public void setTest1(Integer test1) {
this.test1 = test1;
}
public Integer getTest2() {
return test2;
}
public void setTest2(Integer test2) {
this.test2 = test2;
}
public String getTt() {
return tt;
}
public void setTt(String tt) {
this.tt = tt;
}
public String getText() {
return text;
}
public void setText(String text) {
this.text = text;
}
}
5.2 ApplicationTest.java 也添加
@Autowired
private ConfigProperties configProperties;
@Test
//@Ignore
public void test(){
log.info("=========================configProperties========================="+configProperties.getName());
log.info("随机数测试输出:");
log.info("随机字符串 : " + configProperties.getValue());
log.info("随机int : " + configProperties.getNumber());
log.info("随机long : " + configProperties.getBignumber());
log.info("随机10以下 : " + configProperties.getTest1());
log.info("随机10-20 : " + configProperties.getTest2());
log.info("在配置文件中没有定义key的情况下,blogProperties 中给定默认值:"+configProperties.getTt());
log.info("properties 参数引用:"+configProperties.getText());
}
6.2 内容
3.3 有时项目分开发,测试和预发。这样配置的参数可能就不一样,这样我们可以建多个配置文件
不同文件里面可以配置不同的参数 ,只是参数内容可能不一样
# 服务端口
spring.server.address=192.168.6.204
spring.server.port=2222
application.properties里面则是 其实(test,prod和dev)就是对应的里面的文件
# 多环境配置文件激活属性 不同的值到不同的地方
spring.profiles.active=test
4.3
@PropertySource(ignoreResourceNotFound = true, value = "classpath:conf/${spring.profiles.active}/application-${spring.profiles.active}.properties")
这里面的value就拼接了字符串,把application.properties里面的text 替换${spring.profiles.active} value值就是classpath:conf/test/application-test.properties 就对应了路径
@ConfigurationProperties(prefix = "spring.server")这里面的spring.server 就是对应的上面服务端口的前缀
package com.guilf.springBoot2;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.PropertySource;
import org.springframework.stereotype.Component;
/**
* @ClassName: ProfileProperties
* @Description: (获取多环境下的属性参数)
* @author guilf on 2018/8/1.
* @version v1.1
*/
@Component
@ConfigurationProperties(prefix = "spring.server")
// 指定对应的配置文件的路径 value是拼接路径地方
@PropertySource(ignoreResourceNotFound = true, value = "classpath:conf/${spring.profiles.active}/application-${spring.profiles.active}.properties")
public class ProfileProperties {
private String address;
private String port;
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public String getPort() {
return port;
}
public void setPort(String port) {
this.port = port;
}
}
5.3,在测试类加上
@Autowired
private ProfileProperties profileProperties;
@Test
public void testProfile(){
log.info("当前环境的ip地址:"+profileProperties.getAddress());
log.info("当前环境的端口:"+profileProperties.getPort());
}
6.3,测试内容