欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

詳解springboot的多種配置方式

 更新時間:2020年10月23日 12:27:37   作者:豬豬の陳さん  
這篇文章主要介紹了springboot的多種配置方式,本文通過示例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下

java配置主要靠java類和一些注解,比較常用的注解有:

@Configuration :聲明一個類作為配置類,代替xml文件

@Bean :聲明在方法上,將方法的返回值加入Bean容器,代替 標(biāo)簽

@Value :基本類型或String屬性注入

@PropertySource :指定外部屬性文件

后面以Druid連接池配置為例,數(shù)據(jù)庫名稱為springboot_test

方式一

<!--pom.xml -->
<dependency> 
 <groupId>com.alibaba</groupId> 		  	
 <artifactId>druid</artifactId> 
 <version>1.1.6</version> 
</dependency>
<dependency>
 <groupId>mysql</groupId>
 <artifactId>mysql-connector-java</artifactId>
 <scope>runtime</scope>
</dependency>
# src/resources/jdbc.properties
jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://127.0.0.1:3306/bos
jdbc.username=root
jdbc.password=123456
//src\main\java\com\itheima\config\DruidConfig.java
@Configuration
@PropertySource("classpath:jdbc.properties")
public class DruidConfig {
	@Value("${jdbc.url}")
	String url;
	@Value("${jdbc.driverClassName}")
	String driverClassName;
	@Value("${jdbc.username}")
	String username;
	@Value("${jdbc.password}")
	String password;

	@Bean
	public DataSource dataSource() {
		DruidDataSource dataSource = new DruidDataSource();
		dataSource.setDriverClassName(driverClassName);
		dataSource.setUrl(url);
		dataSource.setUsername(username);
		dataSource.setPassword(password);
		return dataSource;
	}
}

解讀:

@Configuration :聲明我們 DruidConfig是一個配置類

@PropertySource :指定屬性文件的路徑是: classpath:jdbc.properties

@Value 為屬性注入值(只能是基本類型或String)

@Bean將 dataSource() 方法聲明為一個注冊Bean的方法,Spring會自動調(diào)用該方法,將方法的返回值加入Spring容器中。

方式二

<!--pom.xml -->
<dependency>
  <groupId>com.alibaba</groupId>
  <artifactId>druid</artifactId>
  <version>1.1.6</version>
</dependency>
<dependency>
  <groupId>mysql</groupId>
  <artifactId>mysql-connector-java</artifactId>
  <scope>runtime</scope>
</dependency>
<!-- ============不添加在IDEA 會報紅,但并不影響功能 ================= -->
<dependency>
  <groupId> org.springframework.boot </groupId>
  <artifactId>spring-boot-configuration-processor</artifactId>
  <optional>true</optional>
</dependency>
<!--============================================================== -->
# src/resources/application.properties
jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://127.0.0.1:3306/bos
jdbc.username=root
jdbc.password=123456
//src\main\java\com\itheima\config\DruidConfig.java
@ConfigurationProperties(prefix = "jdbc")
public class DruidProperties {
	private String url;
	private String driverClassName;
	private String username;
	private String password;

	public String getUrl() {
		return url;
	}

	public void setUrl(String url) {
		this.url = url;
	}

	public String getDriverClassName() {
		return driverClassName;
	}

	public void setDriverClassName(String driverClassName) {
		this.driverClassName = driverClassName;
	}

	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;
	}
}
//src\main\java\com\itheima\config\DruidConfig.java
@Configuration
@EnableConfigurationProperties(DruidProperties.class)
public class DruidConfig {
	@Bean
	public DataSource dataSource(DruidProperties dp) {
		DruidDataSource dataSource = new DruidDataSource();
		dataSource.setDriverClassName(dp.getDriverClassName());
		dataSource.setUrl(dp.getUrl());
		dataSource.setUsername(dp.getUsername());
		dataSource.setPassword(dp.getPassword());
		return dataSource;
	}
}

解讀:

@ConfifigurationProperties注解聲明當(dāng)前類為屬性讀取類,在類上定義各個屬性,名稱必須與屬性文件中 jdbc. 后面部分一致。

@EnableConfigurationProperties()聲明要使用的屬性讀取類,使用該類有三種注入方式

@Autowired注入

//src\main\java\com\itheima\config\DruidConfig.java
@Configuration
@EnableConfigurationProperties(DruidProperties.class)
public class DruidConfig {
 @Autowired
 private DruidProperties dp;
	@Bean
	public DataSource dataSource() {
		DruidDataSource dataSource = new DruidDataSource();
		//setter
		return dataSource;
	}
}

構(gòu)造函數(shù)注入

作為

//src\main\java\com\itheima\config\DruidConfig.java
@Configuration
@EnableConfigurationProperties(DruidProperties.class)
public class DruidConfig {
 	private DruidProperties dp; 
 public DruidConfig(DruidProperties dp){ this.dp = dp; }
	@Bean
	public DataSource dataSource() {
		DruidDataSource dataSource = new DruidDataSource();
		//setter
		return dataSource;
	}
}

@Bean的方法參數(shù)注入(本例使用)

//src\main\java\com\itheima\config\DruidConfig.java
@Configuration
@EnableConfigurationPerProperties(DruidProperties.class)
public class DruidConfig {
	@Bean
	public DataSource dataSource(DruidProperties dp) {
		DruidDataSource dataSource = new DruidDataSource();
		//setter
		return dataSource;
	}
}

方式二通過屬性讀取類解決了@Value不能讀取對象屬性(如user.friend.name)的問題,但似乎就更加麻煩了

方式三(推薦使用)

事實(shí)上,如果一段屬性只有一個Bean需要使用,我們無需將其注入到一個類。

<!--pom.xml -->
<dependency>
  <groupId>com.alibaba</groupId>
  <artifactId>druid</artifactId>
  <version>1.1.6</version>
</dependency>
<dependency>
  <groupId>mysql</groupId>
  <artifactId>mysql-connector-java</artifactId>
  <scope>runtime</scope>
</dependency>
<!-- ============不添加在IDEA 會報紅,但并不影響功能 ================= -->
<dependency>
  <groupId> org.springframework.boot </groupId>
  <artifactId>spring-boot-configuration-processor</artifactId>
  <optional>true</optional>
</dependency>
<!--============================================================== -->
# src/resources/application.properties
jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://127.0.0.1:3306/bos
jdbc.username=root
jdbc.password=123456
@Configuration
public class DruidConfig {
	@Bean
	@ConfigurationProperties(prefix = "jdbc")
	public DataSource dataSource() {
		return new DruidDataSource();
	}
}

方式四

<!--pom.xml -->
<dependency> 
 <groupId>com.alibaba</groupId> 		  	
 <artifactId>druid</artifactId> 
 <version>1.1.6</version> 
</dependency>
<dependency>
 <groupId>mysql</groupId>
 <artifactId>mysql-connector-java</artifactId>
 <scope>runtime</scope>
</dependency>
# src/resources/application.properties
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.driverClassName=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/bos
spring.datasource.username=root
spring.datasource.password=123456

思考:為什么這種方式不需要配置類可以讀取配置信息?

啟動類跑main方法時候,查看SpringApplication構(gòu)造方法,如下追蹤

在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

容易發(fā)現(xiàn),它是從 META-INF/spring.factories 中獲取類名信息,存儲在一鍵多值的Map中,打開spring.factories,debug對比

在這里插入圖片描述

發(fā)現(xiàn)鍵是文件藍(lán)色部分,值是綠色部分,往回看不難發(fā)現(xiàn)它將這些獲取的類都生成了實(shí)例,注入到IOC容器中。

打開 DataSourceProperties 發(fā)現(xiàn)這不是方式二嗎?

在這里插入圖片描述

點(diǎn)進(jìn)DataSourceProperties.class

在這里插入圖片描述

總結(jié):當(dāng)我們添加依賴后,執(zhí)行啟動類時自動加載DataSourceAutoConfiguration,讀取DataSourceProperties類,根據(jù)默認(rèn)的前綴spring.datasource在application.xml中讀取信息

到此這篇關(guān)于springboot的多種配置方式的文章就介紹到這了,更多相關(guān)springboot配置方式內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論