一、配置文件
SpringBoot使用一个全局的配置文件,配置文件名是固定的;
•application.properties
•application.yml
配置文件的作用:修改SpringBoot自动配置的默认值;SpringBoot在底层都给我们自动配置好;
二、配置文件值注入
1.将配置文件中的参数映射到JavaBean
(1).pom.xml增加
<!--导入配置文件处理器,编写配置文件时就会有提示-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
(2).编写javaBean:
Dog.java
package com.miracle.demo3.bean;
public class Dog {
private String name;
private Integer age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
@Override
public String toString() {
return "Dog{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
Person.java
package com.miracle.demo3.bean;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
import java.util.Date;
import java.util.List;
import java.util.Map;
/**
* 将配置文件中配置的每一个属性的值,映射到这个组件中
* @ConfigurationProperties:告诉SpringBoot将本类中的所有属性和配置文件中相关的配置进行绑定;
* prefix = "person":指明配置文件中哪个前缀开头的属性进行一一映射
*
* 只有这个组件是容器中的组件,才能容器提供的@ConfigurationProperties功能;
* @ConfigurationProperties(prefix = "person")默认从全局配置文件中获取值;
* 如果说,我们只是在某个业务逻辑中需要获取一下配置文件中的某项值,使用@Value加在JavaBean的字段上;
* 如果说,我们专门编写了一个javaBean来和配置文件进行映射,我们就直接使用@ConfigurationProperties;
*/
@Component //将JavaBean加到容器中
@ConfigurationProperties(prefix = "person")
public class Person {
private String lastName;
private Integer age;
private Boolean boss;
private Date birth;
private Map<String,Object> maps;
private List<Object> lists;
private 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 getBoss() {
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 +
'}';
}
}
(3).编写配置文件
application.properties
# 配置person的值
person.last-name=张三
person.age=18
person.boss=false
person.birth=2017/12/15
person.maps.k1=13
person.maps.k2=14
person.lists=a,b,c
person.dog.name=dog
person.dog.age=15
注意配置文件中有中文的时候,会乱码,在idea进行如下设置
然后删除之前的application.properties文件,重新创建application.properties文件
(4).测试效果
在src/test/java/com/miracle/demo3/Demo3ApplicationTests中
package com.miracle.demo3;
import com.miracle.demo3.bean.Person;
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.SpringRunner;
@RunWith(SpringRunner.class)
@SpringBootTest
public class Demo3ApplicationTests {
// 会自动注入person对象
@Autowired
Person person;
@Test
public void contextLoads() {
System.out.println(person);
}
}
2.将配置文件中的参数注入到某个类中
通过@Value注解将配置文件某个参数注入到HelloController.java中
package com.miracle.demo3.controller;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HelloController {
// 这里通过@Value注解用el表达式,将配置文件中person.last-name的值注入到name字段
// @Value("miracle") 还可以直接注入值
@Value("${person.last-name}")
private String name;
@RequestMapping("/hello")
@ResponseBody
public String hello() {
return "hello world quick!" + name;
}
}
三、读取自定义配置文件
1.第一种情况映射到JavaBean
当想要读取src/resources/moduleOne.properties内的配置时
ModuleOne.java
package com.miracle.demo3.bean;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.PropertySource;
import org.springframework.stereotype.Component;
// 告诉springboot来加载classpath下的moduleOne.properties配置文件,并绑定到JavaBean
@PropertySource(value = {"classpath:moduleOne.properties"})
@Component
@ConfigurationProperties(prefix = "moduleOne")
public class ModuleOne {
private String username;
private String password;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
@Override
public String toString() {
return "moduleOne{" +
"username='" + username + '\'' +
", password='" + password + '\'' +
'}';
}
}
src/main/resources/moduleOne.properties
moduleOne.username=miracle
moduleOne.password=123456
2.第二种情况,导入Spring的配置文件,让配置文件里面的内容生效
例如:有一个beans.xml里面定义了很多bean,想让springboot加载
src/main/resources/beans.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="helloService" class="com.miracle.demo3.service.HelloService"></bean>
</beans>
如果想让springBoot加载beans.xml,只需将注解@ImportResource加到(主)配置类上,如下
package com.miracle.demo3;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ImportResource;
@SpringBootApplication // 指定要加载的配置文件
@ImportResource(locations = {"classpath:beans.xml"})
public class Demo3Application {
public static void main(String[] args) {
SpringApplication.run(Demo3Application.class, args);
}
}
3.第三种情况,加载配置类
(1)创建config包
(2)在config包下,创建配置类
MyAppConfig1
package com.miracle.demo3.config;
import com.miracle.demo3.service.HelloService;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* @Configuration:指明当前类是配置类,相当于之前的xml配置文件
* 在xml配置文件中用<bean></bean>标签添加类,这里用@Bean注解
*/
@Configuration
public class MyAppConfig1 {
// 将方法的返回值添加到容器中:在容器中bean的id默认就是方法名
@Bean
public HelloService helloService() {
// 创建bean的同时,new对象前面的方法也会执行
System.out.println("配置类@Bean给容器中添加bean");
return new HelloService();
}
}
四、springBoot多环境切换
profile是springBoot对不同环境提供不同配置功能的支持,通过激活指定参数等方式快速切换环境
1.创建多个profile文件,分别为开发环境,生产环境
默认配置文件:application.properties
开发环境配置文件:application-dev.properties
生产环境配置文件:application-product.properties
当三个文件同时存在时,生效的是默认配置文件
2.激活不同环境的配置文件
在默认配置文件中添加
spring.profiles.active=dev 则表示激活 开发环境配置文件
spring.profiles.active=product 则表示激活 生产环境配置文件
如果在命令行中运行jar包,还可以通过增加命令行参数的方式指定配置
Java -jar jar包的名字 --spring.profiles.active=product
五、配置文件加载位置
1.默认的配置文件加载位置
springBoot启动会扫描以下位置的application.properties文件作为默认配置文件
–file:./config/ –file为项目根目录
–file:./
–classpath:/config/
–classpath:/
优先级由高到底,高优先级的配置会覆盖低优先级的配置;
SpringBoot会从这四个位置全部加载主配置文件;互补配置;
如果不想用springBoot提供的配置文件路径,可以通过在配置文件(application.properties)中定义下面属性来引入额外的配置文件
spring.config.location=/opt/application.properties
六、springBoot配置文件配置详解
application.properties
# 修改内嵌tomcat服务器端口号
server.port=8080
# 修改项目的访问名
server.context-path=/crud
# springBoot格式化前台页面传入的时间参数
spring.mvc.date-format=yyyy-MM-dd HH:mm:ss
# 修改springMVC前端控制器默认拦截的请求路径
server.servlet-path=/
# springMVC jsp视图解析 前缀和后缀配置
spring.mvc.view.prefix=/WEB-INF/
spring.mvc.view.suffix=.jsp