從零開始學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萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章