Springboot之application.properties

阅读数:111 评论数:0

跳转到新版页面

分类

python/Java

正文

1、配置文件的格式

springboot可以识别两种格式的配置文件,分别是yml文件与properties文件,我们可以将application.properties文件换成application.yml,这两个文件都可以被springboot自动识别并加载,但是如果是自定义的配置文件 ,最好还是使用properties格式的文件,因为springboot中暂时还并未提供手动加载yml格式文件的功能(指注解方式)。

application.properties配置文件要被springboot自动加载,需要放置到指定的位置:src/main/resource目录下,一般自定义配置文件也位于此目录下。

2、配置文件的加载

application.properties配置文件是在springboot项目启动的时候被自动加载的,其内部的相关配置会自动覆盖springboot默认的对应设置项,所以的配置项均会保存到spring容器之中。

(1)注解加载自定义属性文件

@PropertySource("classpath:xxx.properties")

这个注解专门用来加载指定位置properties文件,通常的做法是新建一个配置类,使用@Configuration标注,再加上之前的@PropertySource("classpath:xxx.properties")注解,而类的内部并不需要任何内容,这是一个纯粹的配置加载类,由于@Configuration(底层为@Component),他会被spring的扫描器扫到,并加载到JVM,并创建Bean,而创建的时候就会执行配置文件中配置项的加载,然后就可以在Spring容器中类用@Value("${key}")的方式使用,一般将其配置在字段顶部,表示将配置项的值赋值给该字段。

(2)属性绑定JavaBean

更多的情况是将配置项与一个JavaBean绑定起来使用,这样绑定一次,就可以随时使用。

(3)@ConfigurationProperties

该注解有一个prefix属性,通过指定的前缀,绑定配置文件的配置,该注解可以放在类上,也可以放在方法上。和@Value有相同的功能,但是@ConfigurationProperties的写法更为方便。命名上可以进行下划线转驼峰。

如果将该注解作用于方法上时,想要有效的绑定配置,那么该方法需要有@Bean注解,且所属Class需要有@Configuration注解。

@Configuration
public class DruidDataSourceConfig {
    /**
     * DataSource 配置
     * @return
     */
    @ConfigurationProperties(prefix = "spring.datasource.druid.read")
    @Bean(name = "readDruidDataSource")
    public DataSource readDruidDataSource() {
        return new DruidDataSource();
    }


    /**
     * DataSource 配置
     * @return
     */
    @ConfigurationProperties(prefix = "spring.datasource.druid.write")
    @Bean(name = "writeDruidDataSource")
    @Primary
    public DataSource writeDruidDataSource() {
        return new DruidDataSource();
    }
}

作用于类

@ConfigurationProperties(prefix = "spring.datasource")
@Component
public class DatasourcePro {

    private String url;

    private String username;

    private String password;

    // 配置文件中是driver-class-name, 转驼峰命名便可以绑定成
    private String driverClassName;

    private String type;

    public String getUrl() {
        return url;
    }

    public void setUrl(String url) {
        this.url = url;
    }

    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;
    }

    public String getDriverClassName() {
        return driverClassName;
    }

    public void setDriverClassName(String driverClassName) {
        this.driverClassName = driverClassName;
    }

    public String getType() {
        return type;
    }

    public void setType(String type) {
        this.type = type;
    }
}

 

(4)@EnableConfigurationProperties

如果一个类只配置了@ConfigurationProperties注解,而没有使用@Component注解将该类加入到IOC容器中,那么它就不能完成xxx.properties配置文件和Java Bean的数据绑定。

@ConfigurationProperties(prefix = "xiaomao")
public class MyConfigurationProperties {
    // 省略 get、set、toString方法
    private String name;
    private Integer age;
    private String gender;
}
// 注入到 IOC 容器中,交由 Spring 进行管理
@Service
// 该注解的作用是使 MyConfigurationProperties 这个类上标注的 @ConfigurationProperties 注解生效,并且会自动将这个类注入到 IOC 容器中
@EnableConfigurationProperties(MyConfigurationProperties.class)
public class HelloServiceImpl implements HelloService {
}



相关推荐

一、概述 springboot中有两种方式使用kafka时,直接使用kafka-client连接kafka服务;另一种是使用spring-kafka框架来连接kafka。 1、版本兼容 使用时要注意版

当然可以自己写redis的工具类,或者使用第三方开源jar包或代码,这里使用spring boot的集成类。 一、pom依赖 <dependency> <gro

websocket协议基于tcp的网络协议,它实现浏览器与器全双工通信。 spring boot2 +websocket 1、添加依赖 <pre clas

背景: 之前用spring boot+mybatis+oracle,现在要改成spring boot_mybatis+postgresql。 为了想让一套代码即可

共同点 都是用来表示Spring某个类是否可以接收HTTP请求。 不同点 @Controller标识一个spring类是Spring MVC c

系统异常捕获 参见:spring boot 2 全局异常处理 @ControllerAdvice(annotations = {RestController.class}) public class

从SSH(Structs/Spring/Hibernate)到SSM(SpringMVC/Spring/MyBatis),到现在一个S(Spring)就够的年代,可见Spring越来越重要了。<

@ConditionalOnMissingBean只能在@Bean注解的方法上使用。 可以给该注解传入参数例如@ConditionOnMissingBean(name = "exa

2.4版本之前 在之前,我们在yaml配置文件中,使用spring.profiles来定义不同环境的标识,比如下面这样: <pre class="language-ma

在SpringBoot框架中,我们使用最多的是Tomcat,这是SpringBoot默认的容器技术,而且是内嵌式的Tomcat。   同时,SpringBoot也支持Undertow容器,Undert