自学内容网 自学内容网

第一篇-基础-第四章-配置SpringBoot项目

4.1-SpringBoot项目的配置文件

项目默认的配置文件为/src/main/resources/application.properties

涉及系统核心配置信息都可保存在此文件中,比如端口号,mysql相关信息,第三方相关信息等。

4.1.1 配置文件的格式

  • 1,properties格式

典型的键值对文本形式,k=v,如果存在层级,a.b.c.k=v,使用#来进行注释说明

  • 2,yml格式

yml是YAML的缩写,它是一种可读性高的用于表达数据序列化的文本格式,也是用键值对来进行数据匹配k: v

如果出现多层键值对,则必须分行处理,但相同父级层级可以共用

key1:
    key2:
        name: Mr_Sun_01
        age: 18
        
key3:
    name: Mr_Sun_00
    age: 18

两种格式没有优劣性,习惯就行(二次开发照着原来的写皆可),应避免同时出现2个格式的配置文件,否则yml格式的会被忽略掉(毕竟properties是ide创建项目自带的原配)

4.1.2 达成约定的配置信息

#端口号
server.port=8088

#配置context-path
server.servlet.context-path=/

#错误页地址
server.error.path=/error

#session超时时间(分钟),默认为30分钟
server.servlet.session.timeout=60

#服务器绑定的IP地址,如果本机地址不在此ip地址则启动失败
server.address=127.0.0.1

#Tomcat最大线程数,默认为200
server.tomcat.threads.max=100

#Tomcat的URI字符编码
server.tomcat.uri-encoding=utf-8

4.2-读取配置信息的值

4.2.1使用@Value注解读取值

    1,单级
    @Value("${key}")
    String value;
    
    2,多层级
    @Value("${key1.key2.key3}")
    String value;

使用@Value读取配置信息时一定要确保配置信息存在,否在项目运行不起来

4.2.2使用Environment环境组件读取值

Environment不是注解,只是系统提供的一个环境组件接口,也就是一个不普通的类,它比@Value更加灵活,获取配置信息时,如果不存在,可以设置默认值,不填默认值时会获取得到null值。

@AutoWired
Environment env;

env.containsProperty(key)   是否存在此key
env.getProperty(key)    获取配置信息key对应的value,不存在则为null
env.getProperty(key , default_value )     获取配置信息key对应的value,不存在则返回默认值
env.getProperty(key , Class<T> targetType , default_value) 确定返回的信息的类型,默认返回的是字符串

4.2.3使用映射类的对象读取值(@ConfigurationProperties)

将具有相同层级的配置信息构建出一个配置类,使用@ConfigurationProperities注解此配置类

可以将映射类注册为组件
1,配置类中信息
student.info.name=lilei
student.info.age=13
student.info.address=guangdong_shenzhen
#配置中可以有数组/List
#student.info.score[0]=100
#student.info.score[1]=120
#配置中可以有hashmap,与数组相似,所以hashmap应避免使用整型作为key
#student.info.book[b1]=Math
#student.info.book[b2]=Chinese


2,创建配置信息类
@Component                                            //组件类声明
@ConfigurationProperties(prefix = "student.info")     //配置类映射声明,同时确定前缀
public class StudentInfo {
    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;
    }

    @Override
    public String toString() {
        return "StudentInfo{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", address='" + address + '\'' +
                '}';
    }
}


3,映射类注册为组件,注入配置类即可完成配置信息读取

@Autowired
StudentInfo info;

@RequestMapping("/hello")
public String sayHello() {
    return "hello " + info.toString();
}
可以将映射类的对象注册为Bean
1,此时的映射类不需要任何的注解
public class StudentInfo {
    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;
    }

    @Override
    public String toString() {
        return "StudentInfo{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", address='" + address + '\'' +
                '}';
    }
}

2,将映射类注册为Bean

@Bean
@ConfigurationProperties(prefix = "student.info")
public StudentInfo studentInfo(){
    return new StudentInfo();
}

3,注入Bean完全配置类读取
@Autowired
StudentInfo info;

@RequestMapping("/hello")
public String sayHello() {
    return "hello " + info.toString();
}

注册为Bean有个好处是进行别名管理,并且统一管理所有的配置信息的映射类的对象。

注意注意:2种方式不能同时使用,否则会出现2个相同的Bean,导致无法识别。

4.3-SpringBoot支持多配置文件

SpringBoot支持多配置文件,从而实现在不同的部署环境读取不同的配置信息。

4.3.1加载多个配置文件

创建项目时,SpringBoot会在src/main/resources下自动创建配置文件application.properties,主要用于保存核心配置信息。你也可以根据项目需要创建单独的配置文件,

同时,用@PropertySource注解加载配置文件,注解标注在SpringBoot的启动类上。

1,在src/main/resources目录下新建myconfig.properties文件,写入配置信息
new_name=Lily

2,在启动类加载此配置文件
@SpringBootApplication
@PropertySource(value = "classpath:myconfig.properties")//多个配置文件就用{}括起来
public class Test01Application {

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

3,正常引入此配置即可(这里使用Environment)
env.getProperty("new_name")

注意注意: src/main/resources目录在SpringBoot中的抽象路径为classpath

如果自定义配置文件src/main/resources目录下的子目录config下,则加载的路径如下:

@PropertySource("classpath:config/myconfig.properties")

4.3.2切换不同版本的配置文件

SpringBoot支持切换不同版本的配置文件,在application.properties文件中填写spring.profiles.active配置信息后,即可允许程序除了加载application.properties配置文件外,还会加载不同版本的配置文件。

spring.profiles.active=suffix1,suffix2,suffix3

每一个值表示一个后缀,每个后缀都表示一个名为application-{suffix}.properties的配置文件。

4.4-使用@Configuration注解声明配置类

除了读取编写自己写的配置信息,还可以读取项目启动自动生成的配置信息Bean,也可以通过配置类重写这些Bean,此时需要用到@Configuration注解。

被@Configuration标注过的配置类在SpringBoot启动时就会被加载启动。

以接口错误页面为例子

一旦接口调用错误,出现的是默认的404页面提示

我们可以重写SpringBoot自动创建的Bean,让提示更加友好一些。

1,写一个配置类,重新相应的处理方法

@Configuration
public class ErrorPageConfig {
    
    //系统原先会自动生成一个Bean来响应400或者500的错误,现在在配置类中重写此方法,重新定义跳转路径
    @Bean
    public ErrorPageRegistrar getErrorPageRegister() {
        return new ErrorPageRegistrar() {
            @Override
            public void registerErrorPages(ErrorPageRegistry registry) {
                //出现400的错误,跳到/404去
                ErrorPage error404 = new ErrorPage(HttpStatus.NOT_FOUND, "/404");
                //出现500的错误,跳到/500地址去
                ErrorPage error500 = new ErrorPage(HttpStatus.INTERNAL_SERVER_ERROR, "/500");
                registry.addErrorPages(error404,error500);//登基错误页
            }

        };
    }
}

2,在控制器类中重写友好页面信息

@RequestMapping("/404")
public String hello404() {
    return "我是自定义的404出错页面";
}

@RequestMapping("/500")
public String hello500() {
    return "我是自定义的500出错页面";
}

3,输入错误的接口地址,就可以返回友好的错误返回信息

打完收工。


原文地址:https://blog.csdn.net/sunguanyong/article/details/142468861

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!