SpringBoot配置文件
SpringBoot的配置文件有两种格式,一种是以properties与yml或是yaml结尾的格式,他们的名称都要以application开头才可以;这两种格式的配置文件其实都是一样的,只是说他们的格式不一样,就跟我们之前的.jsp格式与.html格式一样,只是格式不一样的;1、properties格式文件格式:application.properties文件。配置tomcat启动时,端口号的配
SpringBoot的配置文件有两种格式,一种是以properties与yml或是yaml结尾的格式,他们的名称都要以application开头才可以;这两种格式的配置文件其实都是一样的,只是说他们的格式不一样,就跟我们之前的.jsp格式与.html格式一样,只是格式不一样的;
1、properties格式文件
格式:application.properties文件。配置tomcat启动时,端口号的配置
server.port=8081
他其实也是一个key=value的格式,值是直接赋值给对应的主键内容
2、yml与yaml
这两个格式只是后缀名的问题,其实是一样的;就跟html与htm
Yml的格式的话,与properties文件的格式是完全不一样的两种;他的格式的话,主要是以各个层级的关系进行,会相对比较明了的看出各个层级之间的关系;各个层级之间都要做好缩进,同一层级之间的话,左边是需要对齐的:
比较重要的一点,就是在各个属性值的冒号后面,值的前面是要添加一个空格的,不添加的话,在运行的时候,会出现报错
格式:
server:
port: 8081
address:127.0.0.1
对比两个格式之间的区别
properties:
environments.dev.url=http://dev.bar.com
environments.dev.name=Developer Setup
environments.prod.url=http://foo.bar.com
environments.prod.name=My Cool App
yml:
environments:
dev:
url: http://dev.bar.com
name: Developer Setup
prod:
url: http://foo.bar.com
name: My Cool App
通过YAML的配置方式,我们可以看到配置信息利用阶梯化缩进的方式,其结构显得更为清晰易读,同时配置内容的字符量也得到显著的减少。除此之外,YAML还可以在一个单个文件中通过使用spring.profiles.active
属性来定义多个不同的环境配置。例如下面的内容,在指定为test环境时,server.port
将使用8882端口;而在prod环境,server.port
将使用8883端口;如果没有指定环境,server.port
将使用8881端口。
server:
port: 8881
YML:小结
1、配置文件类型
yml/yaml:需要注意空格;各小级之间的话,不能直接用tab进行缩进,因为每个电脑,每个系统的缩进个数是不一样的,这样会有问题
2、yaml:简洁、以数据为核心
基本语法:
大小写敏感
数据值前边必须要有空格,作为分隔符(数量无要求)
使用空格缩进表示层级关系,相同缩进表示同一级
数据格式:
对象
数组,使用“-”表示数组每个原素
纯量(单引号与双引号之间的差别,单引号直接将引号内的内容输出,双引号是识别)
参数引用:
${key}
注意:YAML目前还有一些不足,它无法通过@PropertySource
注解来加载配置。但是,YAML加载属性到内存中保存的时候是有序的,所以当配置文件中的信息需要具备顺序含义时,YAML的配置方式比起properties配置文件更有优势。
多环境配置:
我们在开发任何应用的时候,通常同一套程序会被应用和安装到几个不同的环境,比如:开发、测试、生产等。其中每个环境的数据库地址、服务器端口等等配置都会不同,如果在为不同环境打包时都要频繁修改配置文件的话,那必将是个非常繁琐且容易发生错误的事。
所以对于不同的环境,在SpringBoot中的可以采用更加简便的方式进行配置
在Spring Boot中多环境配置文件名需要满足application-{profile}.properties
的格式,其中{profile}
对应你的环境标识,比如:
application-dev.properties
:开发环境application-test.properties
:测试环境application-pre.properties
:预生产环境application-prod.properties
:生产环境
至于哪个具体的配置文件会被加载,需要在application.properties
文件中通过spring.profiles.active
属性来设置,其值对应配置文件中的{profile}
值。如:spring.profiles.active=test
就会加载application-test.properties
配置文件内容。
自定义参数:
我们除了可以在Spring Boot的配置文件中设置各个Starter模块中预定义的配置属性,也可以在配置文件中定义一些我们需要的自定义属性。比如在application-test.properties
中添加:
cmjConfig.name=miaomao
然后我们需要去定义我们的CmjConfig这个配置类,通过@value注解来加载这些自定义的参数值
package com.cmj.springBootTEST;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
@Component
public class CmjConfig {
@Value("${cmjConfig.name}")
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public CmjConfig(String name) {
super();
this.name = name;
}
public CmjConfig() {
super();
// TODO Auto-generated constructor stub
}
@Override
public String toString() {
return "CmjConfig [name=" + name + "]";
}
}
在我们的Controller层的编辑
package com.cmj.springBootTEST.WEB;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.cmj.springBootTEST.CmjConfig;
@RestController
@RequestMapping("hello2")
public class OneController {
@Autowired
private CmjConfig cmjConfig;
@RequestMapping("")
public String hello() {
System.out.println("e43333");
System.out.println(cmjConfig.getName());
return "helloworld2"+cmjConfig.getName();
}
}
通过注入的方式进行注入
@Autowired
private CmjConfig cmjConfig;
不能直接new这个的对象,会出现后面没有办法真的获取到对应内容
最后通过我们的main方法进行调用
package com.cmj.springBootTEST;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Configuration;
@Configuration
@EnableAutoConfiguration
@SpringBootApplication
public class App {
public static void main( String[] args ){
SpringApplication.run(App.class, args);
}
}
我们在配置文件下配置多个内容时,比如:
name: didid
person:
name: idjiji
address: 127.0.0.1
配置文件下,有多个name属性值,这个时候我们如果想要person里面相关属性值时,我们需要在实体类上的@configurationProperties(prefix=“person”)去定义他的前缀是persn,这时,我们拿到的才是person中的属性值:
package com.cmj.springBootTEST;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
@Configuration
@ConfigurationProperties(prefix = "person")
public class Person {
private String name;
private int age;
private String address;
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;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public Person(String name, int age, String address) {
super();
this.name = name;
this.age = age;
this.address = address;
}
public Person() {
super();
// TODO Auto-generated constructor stub
}
@Override
public String toString() {
return "Person [name=" + name + ", age=" + age + ", address=" + address + "]";
}
}
@ConfigurationProperties 注解向Spring Boot声明该类中的所有属性和配置文件中相关的配置进行绑定。
- prefix = "person":声明配置前戳,将该前戳下的所有属性进行映射。
@Component 或者@Configuration:将该组件加入Spring Boot容器,只有这个组件是容器中的组件,配置才生效。
更多推荐
所有评论(0)