中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

springboot的配置方式有哪些

發布時間:2020-10-26 14:44:57 來源:億速云 閱讀:166 作者:Leah 欄目:開發技術

springboot的配置方式有哪些?相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。

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

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

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

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

@PropertySource :指定外部屬性文件

后面以Druid連接池配置為例,數據庫名稱為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會自動調用該方法,將方法的返回值加入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注解聲明當前類為屬性讀取類,在類上定義各個屬性,名稱必須與屬性文件中 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;
	}
}

構造函數注入

作為

//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的方法參數注入(本例使用)

//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)的問題,但似乎就更加麻煩了

方式三(推薦使用)

事實上,如果一段屬性只有一個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構造方法,如下追蹤

springboot的配置方式有哪些
springboot的配置方式有哪些
springboot的配置方式有哪些
springboot的配置方式有哪些

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

springboot的配置方式有哪些

發現鍵是文件藍色部分,值是綠色部分,往回看不難發現它將這些獲取的類都生成了實例,注入到IOC容器中。

打開 DataSourceProperties 發現這不是方式二嗎?

springboot的配置方式有哪些

點進DataSourceProperties.class

springboot的配置方式有哪些

總結:當我們添加依賴后,執行啟動類時自動加載DataSourceAutoConfiguration,讀取DataSourceProperties類,根據默認的前綴spring.datasource在application.xml中讀取信息

看完上述內容,你們掌握springboot的配置方式有哪些的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

花莲县| 霍州市| 青岛市| 阳曲县| 海伦市| 黄浦区| 囊谦县| 宣恩县| 观塘区| 大田县| 张掖市| 荔浦县| 安龙县| 法库县| 云霄县| 志丹县| 柏乡县| 海林市| 凤阳县| 神农架林区| 昭平县| 平武县| 雷州市| 天门市| 建德市| 神池县| 贞丰县| 繁昌县| 裕民县| 商水县| 岑溪市| 高碑店市| 普定县| 齐河县| 沙雅县| 双流县| 富锦市| 平顶山市| 吴桥县| 拜泉县| 丽水市|