在開發過程中,配置,是必不可少的,雖然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
歡迎關注我的個人公衆號“笑笑是一個碼農”,第一時間獲取最新文章。
您的關注,就是支持我持續寫作的最大動力!
還可以免費領取前後端全站學習視頻資料呦~
個人微信號,如需添加微信,請備註來源,因爲媽媽從小就告訴我不要隨便跟陌生人聊天!(嘿嘿~)