SpringBoot读取配置文件

读取自定义配置

可以读取主配置文件中的数据,也可以读取自定义配置文件中的属性

Java方式的属性注入

  • PS : 创建一个jdbc.properties文件
    • jdbc.driverClassName=com.mysql.jdbc.Driver
      jdbc.url=jdbc:mysql://127.0.0.1:3306/test
      jdbc.username=root
      jdbc.password=root
  • 然后编写代码如下,用一个类来装属性 :
    • @Configuration
      @PropertySource("classpath:jdbc.properties",encoding="UTF-8")
      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.setUrl(url);
                    dataSource.setDriverClassName(driverClassName);
                    dataSource.setUsername(username);
                   dataSource.setPassword(password);
                   return dataSource;
           }
      }
  • 解读为:
    • @Configuration :声明我们 JdbcConfig 是一个配置类
      @PropertySource :指定属性文件的路径是: classpath:jdbc.properties
      通过 @Value 为属性注入值
      通过@Bean将 dataSource() 方法声明为一个注册Bean的方法,Spring会自动调用该方法,将方法的
      返回值加入Spring容器中。
      然后我们就可以在任意位置通过 @Autowired 注入DataSource了。

  需要注意的就是:这种方式只能读取properties文件,不能读取yml文件

SpringBoot的属性注入

  • 上面的通过@Value方式注入属性的方式不够强大,只能注入基本类型值

  • SpringBoot提供了一种新的注入方式,支持基本上数据类型和复杂数据类型的注入

想要读取这样的自定义属性,我们定义一个Student对象来装属性, 提供相应属性和get,set

  • 我们创建一个类用来作为属性注入的目标 :
  • @ConfigurationProperties(prefix = "jdbc")
    public class JdbcProperties {
         private String url;
         private String driverClassName;
         private String username;
         private String password;
         // ... 略
         // getters 和 setters
    }
  • @ConfigurationProperties(prefix = "jdbc") : 声明当前类为属性读取类
  • 这里值得注意的就是,这种方式没有指定要读取的配置文件,SpringBoot默认读取application.properties,所有需要将配置文件名改一下
  • 其次就是配置文件中的属性名不一定得和类中的字段名一致,支持驼峰、下划线、中划线,
  • 支持对象引导,比如:user.friend.name:代表的是user对象中的friend属性中的name属性,显然friend也是对象。@value注解就难以完成这样的注入方式。

要使用这些属性的时候:

  @Configuration
  @EnableConfigurationProperties(JdbcProperties.class)
  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;
    }
  }

然后你可以通过以下方式注入JdbcProperties:

  @Autowired注入
  @Autowired
  private JdbcProperties prop;

构造函数注入

  private JdbcProperties prop;
  public JdbcConfig(Jdbcproperties prop){
  this.prop = prop;

声明有@Bean的方法参数注入

  @Bean
  public Datasource dataSource(JdbcProperties prop){
  // ...

我们这里采用的是第三种,直接在方法参数中注入

更优雅的注入

  • 如果一段属性只有一个Bean需要使用,我们无需将其注入到一个类(JdbcProperties)中。而是直
    接在需要的地方声明即可,如下 : 

  • @Configuration
    public class JdbcConfig {
        @Bean
        // 声明要注入的属性前缀,SpringBoot会自动把相关属性通过set方法注入到DataSource中
        @ConfigurationProperties(prefix = "jdbc")
        public DataSource dataSource() {
            DruidDataSource dataSource = new DruidDataSource();
            return dataSource;
        }
    }
  • 直接把 @ConfigurationProperties(prefix = "jdbc") 声明在需要使用的 @Bean 的方法上,然后
    SpringBoot就会自动调用这个Bean(此处是DataSource)的set方法,然后完成注入。使用的前提是:
    该类必须有对应属性的set方法!

 

 

转载于:https://www.cnblogs.com/msi-chen/p/10959700.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值