SpringBoot-属性注入

单独放到一个类当中

jdbc.properties 名称改为 application.properties 内容还是和之前的内容一样的

jdbc.driverClassName=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/springboot?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8&useSSL=false
jdbc.username=root
jdbc.password=root

创建一个类,名为 JDBCPropertis,把所有属性添加到类当中,在类上添加相关注解

/**
 * @author BNTang
 */
@Data
@ConfigurationProperties(prefix = "jdbc")
public class JDBCProperties {

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

}

然后在我们之前定义好的 JdbcConfig 中直接使用

/**
 * @author BNTang
 */
@Configuration
@EnableConfigurationProperties(JDBCProperties.class)
public class JdbcConfig {

    @Bean
    public DataSource dataSource(JDBCProperties jdbcProperties) {
        DruidDataSource dataSource = new DruidDataSource();
        dataSource.setDriverClassName(jdbcProperties.getDriverClassName());
        dataSource.setUrl(jdbcProperties.getUrl());
        dataSource.setUsername(jdbcProperties.getUsername());
        dataSource.setPassword(jdbcProperties.getPassword());
        return dataSource;
    }
}

启动项目访问控制器即可,测试方式和之前文章中的一样。

也可以使用属性注入的方式, 也可以使用构造方法的形式

属性注入的方式

/**
 * @author BNTang
 */
@Configuration
@EnableConfigurationProperties(JDBCProperties.class)
public class JdbcConfig {

    @Autowired
    private JDBCProperties jdbcProperties;

    @Bean
    public DataSource dataSource() {
        DruidDataSource dataSource = new DruidDataSource();
        dataSource.setDriverClassName(this.jdbcProperties.getDriverClassName());
        dataSource.setUrl(this.jdbcProperties.getUrl());
        dataSource.setUsername(this.jdbcProperties.getUsername());
        dataSource.setPassword(this.jdbcProperties.getPassword());
        return dataSource;
    }
}

构造方法的方式

/**
 * @author BNTang
 */
@Configuration
@EnableConfigurationProperties(JDBCProperties.class)
public class JdbcConfig {

    private final JDBCProperties jdbcProperties;

    public JdbcConfig(JDBCProperties jdbcProperties) {
        this.jdbcProperties = jdbcProperties;
    }

    @Bean
    public DataSource dataSource() {
        DruidDataSource dataSource = new DruidDataSource();
        dataSource.setDriverClassName(this.jdbcProperties.getDriverClassName());
        dataSource.setUrl(this.jdbcProperties.getUrl());
        dataSource.setUsername(this.jdbcProperties.getUsername());
        dataSource.setPassword(this.jdbcProperties.getPassword());
        return dataSource;
    }
}

直接注入

直接在方法上添加注解

注解名称 作用
@ConfigurationProperties 声明要注入的属性前缀,SpringBoot 会自动把相关属性通过 set 方法进行注入

如下就会通过 set 方法将相关的属性进行注入到 DataSource 中,如下所示:

/**
 * @author BNTang
 */
@Configuration
public class JdbcConfig {

    @Bean
    @ConfigurationProperties(prefix = "jdbc")
    public DataSource dataSource() {
        return new DruidDataSource();
    }
}

属性文件使用 yaml 文件格式

配置文件除了使用 application.properties 类型, 还可以是后缀名为: .yml.yaml 类型的,也会自动的加载,YAML 是一种简洁的非标记语言, 是以数据为中心, 使用空白缩进, 分行组织数据, 从而使得表示更加简洁易读。

示例如下所示,改造之前的 application.propertiesapplication.yml 内容如下所示:

jdbc:
  driverClassName: com.mysql.cj.jdbc.Driver
  url: jdbc:mysql://localhost:3306/springboot?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8&useSSL=false
  username: root
  password: root
  user:
    name: BNTang
    age: 10
    language:
      - Java
      - React

JDBCProperties 内容如下所示:

/**
 * @author BNTang
 */
@Data
public class JDBCProperties {

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

    class User {
        String name;
        String age;
        List<String> language;
    }

}

注意事项:如果有两个配置文件一个 .properties 和一个 .yml,会取两个文件的并集, 如果有相同的名称, 会以 properties 为主。

posted @ 2020-11-09 20:08  BNTang  阅读(195)  评论(0编辑  收藏  举报