从零开始学SpringBoot2.x(09-SpringBoot中使用Java方式进行配置)

在开发过程中,配置,是必不可少的,虽然SpringBoot已经为我们简化了大量的配置,但有时候并不能满足我们的需求,所以,需要我们开发人员自行配置。

在SpringBoot中推荐使用Java配置的方式,下面我会把配置阿里的Druid连接池作为实例,与大家分享。

1、先来看看pom文件,如下:


<dependencies>
        <!-- web组件 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!-- mysql驱动 -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.47</version>
        </dependency>
        <!-- druid连接池 -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.0.9</version>
        </dependency>
        <!-- lombok,简化代码,如getter/setter -->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
    </dependencies>

pom文件中添加的依赖相信大家都不陌生,并且我也添加了相关注释,我们继续往下。

 

2、在application.yml配置文件中添加我们的数据库连接信息,如下:


spring:
  datasource:
    url: jdbc:mysql://127.0.0.1:3306/my_db?characterEncoding=utf-8&useSSL=false
    driverClassName: com.mysql.jdbc.Driver
    username: root
    password: 123456

 

3、创建我们的Druid配置类DruidConfig,如下:


@Configuration //声明该类是一个配置类
public class DruidConfig {

    // @Value该注解可以读取配置文件,把值注入到我们的变量当中
    @Value("${spring.datasource.url}")
    private String url;

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

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

    @Value("${spring.datasource.password}")
    private String password;

    @Bean //实例化一个bean,该注解会把方法的返回值注入到spring容器中,bean名称默认为方法的名称
    //@Bean("你要修改的bean名称") 我们也可以自行制定bean的名称
    public DataSource dataSource(){
        DruidDataSource dataSource = new DruidDataSource(); //Druid数据源对象
        dataSource.setUrl(url);
        dataSource.setDriverClassName(driverClassName);
        dataSource.setUsername(username);
        dataSource.setPassword(password);
        return dataSource;
    }
}

需要说明的我都写在注释里啦。

我们在return语句处打个断点(不会debug模式的小伙伴赶紧去学学吧,开发必备,真的,我读书也不多,但不会骗你!),使用Debug模式启动我们的应用,当程序停止在断点处,在IDEA的控制台找到我们的datasource对象,可以发现,我们在配置文件中设置的连接信息成功设置到该对象中,如下:

 

 

是不是很简单呢?

 

4、使用外部配置文件

如果想把数据库连接信息单独放在一个配置文件,很简单,在我们的DruidConfig类上添加个注解即可,如下:

@Configuration //声明该类是一个配置类
@PropertySource("classpath:db.properties") //指定外部配置文件
public class DruidConfig {

    // @Value该注解可以读取配置文件,把值注入到我们的变量当中
    @Value("${spring.datasource.url}")
    private String url;

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

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

    @Value("${spring.datasource.password}")
    private String password;

    @Bean //实例化一个bean,该注解会把方法的返回值注入到spring容器中,bean名称默认为方法的名称
    //@Bean("你要修改的bean名称") 我们也可以自行制定bean的名称
    public DataSource dataSource(){
        DruidDataSource dataSource = new DruidDataSource();
        dataSource.setUrl(url);
        dataSource.setDriverClassName(driverClassName);
        dataSource.setUsername(username);
        dataSource.setPassword(password);
        return dataSource;
    }
}

resources目录下创建db.properties文件,其内容如下:

spring.datasource.url=jdbc:mysql://127.0.0.1:3306/my_db?characterEncoding=utf-8&useSSL=false
spring.datasource.driverClassName=com.mysql.jdbc.Driver
spring.datasource.username=root
spring.datasource.password=123456

这样,我们同样可以读取到配置文件中的数据库连接信息。

 

5、更优雅的配置方式

以上这两种方式虽然很简单,但有时候我们的配置信息并不会仅仅只在一个类中使用,这种情况下,使用上述方式,我们的代码会大量重复,下面我们来看看SpringBoot为我们提供的更为优雅的配置方式。

我们新建一个JdbcProperties类,其内容如下:


@Data //lombok注解,省略getter/setter等方法
//声明该类是一个属性配置文件,同时指定属性在配置文件中的前缀
@ConfigurationProperties(prefix = "spring.datasource")
// 属性名要与配置文件中保持一致
public class JdbcProperties {

    private String url;

    private String driverClassName;

    private String username;

    private String password;
}

@ConfigurationProperties注解可以用于指定读取一组配置文件中的信息,注入到我们的属性当中,prefix指定我们配置信息的前缀。

在我们的DruidConfig中使用我们的属性配置文件,如下:


@Configuration //声明该类是一个配置类
//@PropertySource("classpath:db.properties") //指定外部配置文件
 //启用我们的JdbcProperties属性配置文件
@EnableConfigurationProperties(JdbcProperties.class)
public class DruidConfig {

    @Autowired
    private JdbcProperties jdbcProperties; //注入我们的属性配置文件

    @Bean //实例化一个bean,该注解会把方法的返回值注入到spring容器中,bean名称默认为方法的名称
    //@Bean("你要修改的bean名称") 我们也可以自行制定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;
    }

@EnableConfigurationProperties用于指定使用哪一个Java属性配置文件。

 

我们也可以在方法的参数中直接使用,如下:

public DataSource dataSource(JdbcProperties jdbcProperties)

还有一种更为简洁的方式:

 @Bean //实例化一个bean,该注解会把方法的返回值注入到spring容器中,bean名称默认为方法的名称
    @ConfigurationProperties(prefix = "spring.datasource")
    public DataSource dataSource(){
       return new DruidDataSource();
    }

@ConfigurationProperties注解可以直接作用于方法,但前提配置文件中的名称要与目标对象的属性名称保持一致。就我个人而言,不推荐使用这种方式,虽然可以省去不少代码,但可读性太差。

 

源码链接:

https://github.com/devilyang123/SpringBoot-Learning/tree/master/springboot-javaconfig

 

 


欢迎关注我的个人公众号“笑笑是一个码农”,第一时间获取最新文章。

您的关注,就是支持我持续写作的最大动力!

还可以免费领取前后端全站学习视频资料呦~

个人微信号,如需添加微信,请备注来源,因为妈妈从小就告诉我不要随便跟陌生人聊天!(嘿嘿~)

发布了190 篇原创文章 · 获赞 76 · 访问量 15万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章