Spring Boot属性配置

1. Spring Boot的默认配置文件application.properties或者appliaction.yml

 

2. 自定义属性有多种方法:

2.1对于引用少数几个属性值,可以直接使用@Value注解直接引用自定义属性值,不需要@Configuration等注解配合.

application.properties提供自定义属性的支持,这样我们就可以把一些常量配置在这里:

com.windy.name="windy"
com.windy.want="祝大家新年好"

然后直接在要使用的地方通过注解@Value(value=”${config.name}”)就可以绑定到你想要的属性上面

 

@RestController
public class UserController {

    @Value("${com.windy.name}")
    private  String name;
    @Value("${com.windy.want}")
    private  String want;

    @RequestMapping("/")
    public String hexo(){
        return name+","+want;
    }
}

2.2 有时候属性太多,一个个绑定太累,官方提倡绑定一个对象的Bean.

实现这种方式需要3个步骤:

这里我们新建一个Java类ConfigBean,并在这个类上加上注解@Configuration(下图少了这个注解) 

@Configuration
@ConfigurationProperties(prefix = "com.windy")
//@PropertySource(classpath:application.properties)
public class ConfigBean {
    private String name;
    private String want;
 
    // 省略getter和setter
}

  

还需要在spring Boot入口类加上@EnableConfigurationProperties

@SpringBootApplication
@EnableConfigurationProperties()
public class Chapter2Application {

    public static void main(String[] args) {
        SpringApplication.run(Chapter2Application.class, args);
    }
}

最后在Controller中引入ConfigBean使用即可

@RestController
public class UserController {
    @Autowired
    ConfigBean configBean;

    @RequestMapping("/")
    public String hexo(){
        return configBean.getName()+configBean.getWant();
    }
}

  

 3. 配置文件的优先级

application.properties和application.yml文件可以放在以下四个位置:

  • 外置,在相对于应用程序运行目录的/congfig子目录里。
  • 外置,在应用程序运行的目录里
  • 内置,在config包内
  • 内置,在Classpath根目录

同样,这个列表按照优先级排序,也就是说,src/main/resources/config下application.properties覆盖src/main/resources下application.properties中相同的属性,如图:

此外,如果你在相同优先级位置同时有application.properties和application.yml,那么application.properties里的属性里面的属性就会覆盖application.yml。

 

4. 使用@Profile注解进行配置

首先定义一个DBConnect的接口

@Component
public interface DBConnector {

	public void configure();
	
}

 

然后分别定义Mysql和Oracle的实现类

@Component
@Profile("Mysql")
public class MysqlConnector implements DBConnector {

	@Override
	public void configure() {
		System.out.println("This is Mysql!");
	}

}

 

@Component
@Profile("Oracle")
public class OracleConnector implements DBConnector {

	@Override
	public void configure() {
		System.out.println("This is Oracle!");
	}

}

 

在配置文件application.properties中指定使用哪个实现类

spring.profiles.active=Oracle

 

然后就可以这么用了

@RestController
public class DBContorller {
	
	@Autowired
	DBConnector dbConnector;
	
	@RequestMapping("/db")
	public void dbConnector(){
		
		dbConnector.configure(); //最终打印"This is Oracle!"
		
	}
	
}

  

除了spring.profiles.active来激活一个或者多个profile之外,还可以用spring.profiles.include来叠加profile

spring.profiles.active: Oracle  
spring.profiles.include: proddb,prodmq

  

posted @ 2018-01-20 12:54  fengze  阅读(208)  评论(0编辑  收藏  举报