使用Eclipse快速创建SpringBoot 项目,YML语法、配置文件注入值、、配置文件占位符、Profile

我们只需要选择需要用到的模板,向导会联网创建Spring Boot项目
默认生成的Spring Boot项目

  • 主程序
  • resources文件夹中的目录结构
  • static:保存所有的静态资源:js、css、images
  • templates:保存所有的模板页面(Spring Boot默认jar包使用嵌入式的tomcat,默认不支持JSP页面);可以使用模板引擎(freemaker,thymeleaf);
  • application.properties:Spring Boot配置的默认文件,可以修改一些默认设置

配置文件

– Spring Boot使用一个全局配置文件,配置文件名是固定的application.properties
application.yml
– 配置文件的作用:修改Spring Boot自动配置的默认值;Spring Boot在底层都给我们自动配置好;

YML

	以数据为中心,比json、xml等更适合做配置文件
	配置例子:
	sever:
		port: 8081

YML语法

  • key:空格value 来表示一对键值对
  • 以空格的缩进来控制层级关系;只要是左对齐的一列数据就是同一层级的

值的写法

 字面量:普通的值(数字、字符串、布尔)
k: v:字面直接来写
	字符串默认不用加上单引号或者双引号
	“”:双引号,会变成转义字符,变成特殊的意义
		name: “张三 \n 李四”    输出:张三 换行 李四
	‘’:单引号,不会转义,只是一个普通的字符串数据
对象、Map(属性和值)(键值对):
k: v:在下一行写对象的属性和值得关系;注意缩进
	对象也是k: v的方式
	friends:
		lastName: zhangsan
		age: 20
行内写法:
	friends: {lastName: zhangsan,age: 18}
数组(List、Set)
用- 值表示数组中的一个元素
pets:
-	dog
-	cat
-	pig
行内:
pets: [cat,dog,pig]
@value获取值和@ConfigurationProperties获取值比较
ConfigurationProperties value
功能 批量注入配置文件中的属性 一个一个在属性中指定
松散绑定(松散语法) 支持(就是可以使用驼峰) 不支持
spEl 不支持 支持
JSR303数据效验 支持(@Validated、@email) 不支持
复杂类型封装 支持 不支持

配置文件注入值

package com.blh.springBoot.bean;

import java.util.Date;
import java.util.List;
import java.util.Map;

import javax.validation.constraints.Email;

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
import org.springframework.validation.annotation.Validated;

/**
 * 将配置文件中配置的每一个属性的值,映射到这个组件中
 * @ConfigurationProperties:告诉SpringBoot将本类中所有的属性和配置文件中的相关配置进行绑定(默认从配置文件中获取值)
 * 		prefix = "person"  表示配置文件中person的所有属性进行一一映射
 * 注意:只有这个组件在容器中的组件,才能提供@ConfigurationProperties此功能
 * @author 25442
 *
 */
@Component
@ConfigurationProperties(prefix = "person")
@Validated//效验
public class Person {
	@Email//邮箱模式
	String lastName;
	Integer age;
	boolean boss;
	Date birth;
	
	Map<String, Object> maps;
	List<Object> lists;
	Dog dog;
	public String getLastName() {
		return lastName;
	}
	public void setLastName(String lastName) {
		this.lastName = lastName;
	}
	public Integer getAge() {
		return age;
	}
	public void setAge(Integer age) {
		this.age = age;
	}
	public boolean isBoss() {
		return boss;
	}
	public void setBoss(boolean boss) {
		this.boss = boss;
	}
	public Date getBirth() {
		return birth;
	}
	public void setBirth(Date birth) {
		this.birth = birth;
	}
	public Map<String, Object> getMaps() {
		return maps;
	}
	public void setMaps(Map<String, Object> maps) {
		this.maps = maps;
	}
	public List<Object> getLists() {
		return lists;
	}
	public void setLists(List<Object> lists) {
		this.lists = lists;
	}
	public Dog getDog() {
		return dog;
	}
	public void setDog(Dog dog) {
		this.dog = dog;
	}
	@Override
	public String toString() {
		return "Person [lastName=" + lastName + ", age=" + age + ", boss=" + boss + ", birth=" + birth + ", maps="
				+ maps + ", lists=" + lists + ", dog=" + dog + "]";
	}
	
	
}

@PropertySource
//加载类路径下的person.properties的内容并它绑定数据
@PropertySource(value = {"classpath:person.properties"})
@Component
@ConfigurationProperties(prefix = "person")
//@Validated//效验
public class Person {
//	@Email//邮箱模式
	String lastName;
	Integer age;
	boolean boss;
	Date birth;

@ImportResource

导入Spring的配置文件,让配置文件里面的内容生效;
Spring Boot里面没有Spring的配置文件我们自己编写的配置文件也不能自动识别。
想让Spring的配置文件生效,加载进来;就需要一个@ImportResource注解标注在	application类上
package com.blh.springBoot;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ImportResource;
//导入spring的配置文件让其生效
@ImportResource(locations = {"classpath:beans.xml"})
@SpringBootApplication
public class SpringBoot02ConfigApplication {

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

}

SpringBoot推荐给容器中添加组件的方式:推荐使用全注解的方式
1、 配置类=====Spring配置文件
2、 使用@Bean给容器中添加组件

package com.blh.springBoot.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import com.blh.springBoot.service.HelloService;

/*
 * 指明当前类是一个配置类,就是来代替之前的spring配置文件
 * 在配置文件中用标签添加组件
 */


@Configuration
public class MyAppConfig {
	//将方法的返回值添加到容器中;容器中这个组件默认的id就是方法名
	@Bean
	public HelloService helloService() {
		System.out.println("@Bean给容器中添加组件了");
		return new HelloService();
	}
}


配置文件中的占位符

RandomValuePropertySource:配置文件中可以使用随机数

${random.value}、${random.int}、${random.long} ${random.int(10)}、${random.int[1024,65536]}

属性配置占位符

可以在配置文件引用配置过的属性
${app.name:默认值}来指定找不到属性时的默认值

Profile

1、 多profile文件

	我们在主配置文件编写的时候,文件名可以是application-{Proflile}.properties/yml
默认是使用application.properties里面的
yml支持多文档块方式
server:
  port: 8081
spring:
  profiles:
    active: prod
---
server:
  port: 8083
spring:
  profiles: dev
---
spring:
  profiles: prod #指定属于哪个环境
server:
  port: 8084
  

激活指定Profile

1、在application.properties配置文件中指定要激活的配置文件

spring.profiles.active=dev

2、 命令行:

--spring.profileactive=dev

3、虚拟机参数

-Dspring.profile.active=dev

你可能感兴趣的:(springboot,java学习)