Spring Boot-基础配置

Posted 幸遥

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring Boot-基础配置相关的知识,希望对你有一定的参考价值。

Spring Boot的一些基础配置

全局配置

基本用法

src/main/resources下可以定义Spring Boot的默认配置文件application.perproties或者application.yml

创建application.yml全局配置文件,使用@Value注入到对象中

ranger:
  name: chenyaping
  age: 21
@Configuration
public class Ranger {
    @Value("${ranger.name}")
    private String name;

    @Value("${ranger.age}")
    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 "Ranger{" +
                "name='" + name + ''' +
                ", age=" + age +
                '}';
    }
}

启动Spring Boot应用程序,打印从容器中获取的Ranger实例如下:

Ranger{name=‘chenyaping‘, age=21}

使用配置文件实现开关

创建配置属性类EmailProperties

@ConfigurationProperties(prefix = "ranger.mail")
public class EmailProperties {
    private String username;

    private Integer port;

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public Integer getPort() {
        return port;
    }

    public void setPort(Integer port) {
        this.port = port;
    }

    @Override
    public String toString() {
        return "EmailProperties{" +
                "username='" + username + ''' +
                ", port=" + port +
                '}';
    }
}

创建自动配置类

@Configuration
@EnableConfigurationProperties(EmailProperties.class)
@ConditionalOnProperty(prefix = "ranger.mail",value = "enable",matchIfMissing = false)
public class EmailSender {
    @Autowired
    private EmailProperties emailProperties;

    @Override
    public String toString() {
        return "EmailSender{" +
                "emailProperties=" + emailProperties +
                '}';
    }
}

改变Yaml文件的配置来开启和关闭EmailSender组件,当ranger.mail.enable为false时

ranger:
  name: chenyaping
  age: 21
  mail:
    enable: true
    port: 22
    username: ${ranger.name}   # 属性间可以引用

启动应用通过ApplicationContext#getBean()获取EmailSender会抛出异常如下:

Exception in thread "main" org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'com.ranger.boot.config.EmailProperties' available
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBean(DefaultListableBeanFactory.java:346)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBean(DefaultListableBeanFactory.java:337)
    at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1123)
    at com.ranger.boot.Application.main(Application.java:22)

当Yaml中ranger.mail.enable的值为true时,运行结果如下:

EmailProperties{username='chenyaping', port=22}
EmailSender{emailProperties=EmailProperties{username='chenyaping', port=22}}

这样,我们就可以通过改变配置文件来实现开关的功能

自定义配置

除了可以在application.yml里配置属性,我们还可以自定义一个配置文件。在src/main/resources目录下新建一个test.properties:

test.username=ranger

创建配置类

@Configuration
@ConfigurationProperties(prefix="test")
@PropertySource("classpath:test.properties")
public class CustomConfig {
    private String username;

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    @Override
    public String toString() {
        return "CustomConfig{" +
                "username='" + username + ''' +
                '}';
    }
}

注解@PropertySource("classpath:test.properties")指明了使用哪个配置文件。启动程序运行结果打印

CustomConfig{username=‘ranger‘}

命令行配置

同样在Spring Boot应用启动时命令行也可以传递参数供配置文件使用

  1. 使用 -D来配置参数
@Configuration
public class CommandLineConfig {

    @Value("${args.username}")
    private String username;

    @Value("${args.age}")
    private String age;
    // getter,setter and toString
    
}

使用mvn clean package来打包应用,然后使用如下命令行来运行

java -jar -Dargs.username=ranger -Dargs.age=22 spring-boot-config-1.0-SNAPSHOT.jar

结果可以看到:CommandLineConfig{username=‘ranger‘, age=‘22‘},参数已经成功注入到配置类中

  1. 使用--

改变命令行的使用方式为如下:

java -jar spring-boot-config-1.0-SNAPSHOT.jar --args.username=ranger --args.age=22

可以看到相同的结果

多配置文件Profile

Profile用来针对不同的环境下使用不同的配置文件,多环境配置文件必须以application-{profile}.yml的格式命,其中{profile}为环境标识。比如定义两个配置文件

application-dev.yml

server:
    port: 8080

application-prod.yml

server:
    port: 80

我们可以在application.yml中使用spring.profile.active这个属性来激活那个配置文件,属性值为application-{profile}.ymlprofile的值

自定义启动bannner

在src/main/resources下创建banner.txt文件,将自己的图案粘贴进去即可

以上是关于Spring Boot-基础配置的主要内容,如果未能解决你的问题,请参考以下文章

Java基础十Spring Boot /Spring Cloud

spring boot 外部配置文件1

Spring Boot-基础配置

Spring Boot基础4-配置文件-多环境配置

[Spring Boot] 3. Spring Boot实现自动配置的基础

[Spring Boot] 3. Spring Boot实现自动配置的基础