SpringBoot学习(2)-常见配置方式

默认配置原理

  • springboot的默认配置方式和我们之前玩的配置方式不太一样,没有任何的xml。那么如果自己要新增配置该怎么办?
常用的java配置
  • @Configuration:声明一个类作为配置类,代替xml文件
  • @Bean:声明在方法上,将方法的返回值加入Bean容器,代替标签
  • @Value:属性注入
  • @PropertySource:指定外部属性文件。
第一种常见java配置,这里使用jdbc来演示
  • 引入依赖
<dependency>
    <groupId>com.github.drtranggroupId>
    <artifactId>druid-spring-boot2-starterartifactId>
    <version>1.1.10version>
dependency>
  • 添加jdbc.properties
jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://127.0.0.1:3306/ry
jdbc.username=root
jdbc.password=root
  • 创建JdbcConfiguration类:
@Configuration
@PropertySource("classpath:jdbc.properties")
public class JdbcConfiguration {


    @Value("${jdbc:url}")
    private String url;

    @Value("${jdbc.driverClassName}")
    private String driverClassName;


    @Value("${jdbc.username}")
    private String username;

    @Value("${jdbc.password}")
    private 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:声明JdbcConfiguration是一个配置类。
  • @PropertySource:指定属性文件的路径是:classpath:jdbc.properties
  • 通过@Value为属性注入值。
  • 通过@Bean将 dataSource()方法声明为一个注册Bean的方法,Spring会自动调用该方法,将方法的返回值加入Spring容器中。相当于以前的bean标签

然后就可以在任意位置通过@Autowired注入DataSource了!

这里我们在之前写的Controller里面测试,这里可以看到已经成功注入,交给Spring管理

SpringBoot学习(2)-常见配置方式_第1张图片

SpringBoot的属性注入

在上面的案例中,我们实验了java配置方式。不过属性注入使用的是@Value注解。这种方式虽然可行,但是不够强大,因为它只能注入基本类型值。

在SpringBoot中,提供了一种新的属性注入方式,支持各种java基本数据类型及复杂类型的注入。

  • 新建JdbcProperties,用来进行属性注入
    SpringBoot学习(2)-常见配置方式_第2张图片

  • 改造之前的jdbc配置类

  • 在JdbcConfiguration中使用这个属性:

  • 通过@EnableConfigurationProperties(JdbcProperties.class)来声明要使用JdbcProperties这个类的对象

  • 然后你可以通过以下方式在JdbcConfiguration类中注入JdbcProperties:

//@Configuration
@Component
//@PropertySource("classpath:jdbc.properties")
@EnableConfigurationProperties(JdbcProperties.class)
public class JdbcConfiguration {

    @Autowired
    private JdbcProperties jdbcProperties;

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


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



}

  • 在类上通过@ConfigurationProperties注解声明当前类为属性读取类
  • prefix="jdbc"读取属性文件中,前缀为jdbc的值。
  • 在类上定义各个属性,名称必须与属性文件中jdbc.后面部分一致,并且必须具有getter和setter方法
  • 需要注意的是,这里我们并没有指定属性文件的地址,SpringBoot默认会读取文件名为application.properties的资源文件,添加application.yml(一样的,更符合读写)
    SpringBoot学习(2)-常见配置方式_第3张图片
jdbc:
  url: com.mysql.jdbc.Driver
  driverClassName: jdbc:mysql:127.0.0.1:3606/ry
  username: root
  password: root

启动访问之前的方法,已经可以看到配置信息已经注入该对象当中
SpringBoot学习(2)-常见配置方式_第4张图片

  • 这里有个小问题,但不影响启动,上面的jdbcProperties在注入的时候显示报红Could not autowire. No beans of ‘JdbcProperties’ type found,但启动的时候依然是可以注入使用,
  • 这时我们可以在类上加上一个注解 @Component,标识为交给Spring容器管理,这时就不会报红提示了
    SpringBoot学习(2)-常见配置方式_第5张图片

你可能感兴趣的:(SpringBoot,java,java,spring)