SpringBoot属性注入及yml配置

SpringBoot使用Java配置应用


为什么需要它:
之前配置Bean在xml中,现在没有任何的xml,如果需要配置一个Bean,就需要属性注入

1. 需要的注解:

  1. @Configuration => 代替xml文件
  2. @Bean => 将返回值注入容器
  3. @Value => 属性注入
  4. @propertySource => 指定外部属性文件

2. 操作步骤:

  1. 闲杂工作(例如配置数据时创建数据库,导入数据库的坐标)
  2. 创建配置文件xxx.properties
  3. 创建配置类
  4. 在需要的地方注入使用

3. 代码实现:

假设配置数据库。

  1. 创建配置文件jdbc.properties
jdbc.driver=com.mysql.jdbc.Driver
jdbc.driverClassName=jdbc:mysql://localhost:8080/test
jdbc.username=root
jdbc.password=root
  1. 创建配置类
@Configuration // 表明是一个配置类
@PropertySource("classpath:jdbc.properties") // 加载文件
public class JdbcConfig {

    @Value("${jdbc.url}")
    String url;
    @Value("${jdbc.driverClassName}")
    String driverClassName;
    @Value("${jdbc.username}")
    String username;
    @Value("${jdbc.password}")
    String password;

    @Bean	// 返回注入
    public DataSource dataSource(){
        DruidDataSource dataSource = new DruidDataSource();
        dataSource.setDriverClassName(driverClassName);
        dataSource.setUrl(url);
        dataSource.setUsername(username);
        dataSource.setPassword(password);
        return dataSource;
    }

}
  1. 注入使用Autowired即可

SpringBoot的属性注入


1. 问题:

当需要注入的属性里面有一个对象怎么办。
上面的java配置方式就无法满足条件,此时需要SpringBoot的配置

1. 限制:

使用SpringBoot的属性注入,属性文件的名称必须是application.properties或者application.yml

2. 使用步骤:

  1. 配置好application.properties/application.yml
  2. 被引用的类上添加@ConfigurationProperties注解(就是问题中的那个属性为对象的情况)
  3. 在要注入属性的类上添加@EnableConfigurationProperties注解和@Configuration注解
  4. 注入使用

3. 代码实现:

  1. 添加配置文件属性:

    • 如果是properties文件:和上面一样
    • 如果是yml,使用下面的写法
    # 需要遵守的规则,jdbc可以理解成一个对象,下面都是它的属性。
    # 对象和属性要保证两个空格的间距。 key和value中间有一个空格
    jdbc:
      driver: com.mysql.jdbc.Driver
      driverClassName: jdbc:mysql://localhost:8080/test
      username: root
      password: root
    
  2. 被引用类添加注解,注入属性

@ConfigurationProperties(prefix = "jdbc") //这个前缀就是properties的点之前的字符串,yml的那个对象
public class JdbcProperties {

    private String url;
    private String driverClassName;
    private String username;
    private String password;

    public String getUrl() {
        return url;
    }

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

    public String getDriverClassName() {
        return driverClassName;
    }

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

    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;
    }
}
  1. 在要注入属性的类上添加@EnableConfigurationProperties注解和@Configuration注解
@Configuration // 标注自己是配置类
@EnableConfigurationProperties(JdbcProperties.class) // 声明要使用jdbcProperties这个类的对象
public class JdbcConfig {
	@Bean
	public DataSource dataSource(JdbcProperties jdbc) { // 在这里直接使用即可
		DruidDataSource dataSource = new DruidDataSource();
		dataSource.setUrl(jdbc.getUrl());
		dataSource.setDriverClassName(jdbc.getDriverClassName());
		dataSource.setUsername(jdbc.getUsername());
		dataSource.setPassword(jdbc.getPassword());
		return dataSource;
	}
}

4. 此注入方式支持松散绑定

松散绑定:
不严格要求属性文件中的属性名与成员变量名一致。支持驼峰,中划线,下划线等等转换,甚至支持对象
引导。比如:user.friend.name:代表的是user对象中的friend属性中的name属性,显然friend也是对
象。@value注解就难以完成这样的注入方式。

5. 优化

第二步和第三步较为麻烦。没有必要通过一个类先注入了属性,再把这个类注入给另一个类的对象。
可以直接将属性注入给类的对象属性。

@Configuration
public class JdbcConfig {
	@Bean
	// 声明要注入的属性前缀,Spring Boot会自动把相关属性通过set方法注入到DataSource中
	@ConfigurationProperties(prefix = "jdbc") // 仍然会去找前缀问jdbc的属性,然后注入给DataSource,只要定义的名字满足松散绑定即可。
	public DataSource dataSource() {
		return new DruidDataSource();
	}
}

PS:前提条件是该类有setter方法。


多个yml文件的配置


1. 多个配置文件的条件:

  1. 文件名称必须是application-xxx.yml
  2. 必须要在application-xxx.yml中激活配置
  3. 如果properties和yml同时存在,两类文件都有效
  4. 两个文件发生冲突配置,以properties为主

2. 激活方式

spring:
  profiles:
    active: xxx1, xxx2
# 这个xxx1,xxx2是-后面的名字
# 比如application-jdbc.yml xxx就是jdbc

自动装配原理


没学明白,看源码一脸懵逼
META-INF\spring.fatories文件定义了很多自动配置类,可以根据启动器自动配置组件

想要修改自动配置的组件的默认参数

  1. 找spring-boot-autoConfigure-xxx.RELEASE.jar
  2. 找到框架所在的包
  3. 可以看到xxxProperties,在里面寻找配置项
  4. 去application配置文件修改
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值