方式一: @Component 和 @ConfigurationProperties(prefix = " ")组合的方式

使用方法如下演示

1.application.yml文件中添加需要配置的属性,注意缩进

Myyml:
  username: cs
  password: 123456
  url: jdbc:mysql://localhost:3306/test
  driver: com.mysql.jdbc.Driver

2.新建一个类,@Component注解表明是组件,可被自动发现,@ConfigurationProperties注解之前是location属性表明配置文件位置,prefix表示读取的配置信息的前缀,但新版本中废除了location属性(网上说是1.5.2之后),故只写前缀,默认读取application.yml中数据。重点!!一定要在这个类中写getter和setter,否则配置中的属性值无法自动注入

@Component
@ConfigurationProperties(prefix = "Myyml")
public class User{
    //数据库连接相关
    private String url;
    private String driver;
    private String username;
    private String password;
 
    public String getUrl() {
        return url;
    }
 
    public void setUrl(String url) {
        this.url = url;
    }
 
    public String getDriver() {
        return driver;
    }
 
    public void setDriver(String driver) {
        this.driver = driver;
    }
 
    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;
    }
}

3.其他的类中执行自动注入,获取属性来使用

//自动注入   
@Autowired
private User user;
//方法体内获取属性值
String url=user.getUrl();
System.out.print(url);

方式二:@ConfigurationProperties 和 @EnableConfigurationProperties的组合方式

使用方法如下演示

一.创建一个属性读取类:JdbcProperties

/**
 * 属性读取类
 *  prefix: 为application.properties文件中的前缀 
 */
@ConfigurationProperties(prefix = "jdbc")  //读取配置文件,声明一个类是读取配置类
public class JdbcProperties {
    private String driverClassName;  //配置文件中的属性名称
    private String url;
    private String username;
    private String password;
   
    //get、set方法
}
  • 在类上通过@ConfigurationProperties注解声明当前类为属性读取类
  • prefix="jdbc"读取属性文件中,前缀为jdbc的值。
  • 在类上定义各个属性,名称必须与属性文件中jdbc.后面部分一致,并且必须具有getter和setter方法
  • SpringBoot默认会读取文件名为application.properties的资源文件,所以配置文件名必须为application.properties

二.创建另一个类JdbcConfiguration使用这个属性

1.第一种使用方式,@Autowired注入

//通过@EnableConfigurationProperties(JdbcProperties.class)来声明要使用JdbcProperties这个类的对象
 @Configuration //声明一个类为Java配置类,相当于一个xml文件
@EnableConfigurationProperties(JdbcProperties.class)  //启用属性读取类
public class JdbcConfiguration {
    @Autowired
    private JdbcProperties jdbcProperties;  //注入读取类

    @Bean        //把方法返回值注入到spring容器
    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;
    }
}

2.第二种使用方式,构造函数注入

@Configuration
@EnableConfigurationProperties(JdbcProperties.class)
public class JdbcConfiguration {

    private JdbcProperties jdbcProperties;

    public JdbcConfiguration(JdbcProperties jdbcProperties){
        this.jdbcProperties = jdbcProperties;
    }

    @Bean
    public DataSource dataSource() {
        // 略
    }

}

3.第三种使用方式,@Bean方法的参数注入

@Configuration
@EnableConfigurationProperties(JdbcProperties.class)
public class JdbcConfiguration {

    @Bean
    public DataSource dataSource(JdbcProperties jdbcProperties) {
        // ...
    }
}
在实际开发过程中,以上三种使用配置属性任选一种即可,根据自己的实际需求来选择。

方式三:@Value的方式

使用方法如下演示

1.通过@value来注入对应的值,直接在字段上添加@value 获取application.properties文件中的值,然后可以把这个DemoConfig 注入到其他类中使用例如controller或者service中。

@Configuration
public class DemoConfig {
    
    @Value("${jdbc.driver}")
    private String driver;
    
    @Value("${jdbc.url}")
    private String url;
    
    @Value("${jdbc.username}")
    private String username;
    
    @Value("${jdbc.password}")
    private String password;

    public DemoConfig() {
        System.out.println(password);
    }

    public String getDriver() {
        return driver;
    }

    public void setDriver(String driver) {
        this.driver = driver;
    }

    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;
    }
}
@Controller
public class HomeController {    
    @Autowired
    private DemoConfig demoConfig;
    
    @RequestMapping("/")
    public String index() {
    }
}

2.或者直接在controller等类中使用

@Controller
public class HomeController {

    @Value("${jdbc.url}")
    private String url ;
    
    @RequestMapping("/")
    public String index() {
    }

}
文章目录