SpringBoot(配置檔案)
1. @PropertySource
@PropertySource:載入指定的配置檔案【properties】
先前我們通過@ConfifigurationProperties載入全域性配置檔案中的值到javabean中,但是我們在具體使用的時候不會把所用的配置都儲存在全域性配置檔案中的,可能會將不同的配置儲存在不同的配置檔案中,那麼這時我們就需要@PropertySource註解為指定的javabean類載入指定的配置檔案
例如:
package com.wangxing.springboot.bean;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.PropertySource;
import org.springframework.stereotype.Component;
@Component
@ConfigurationProperties(prefix = "person")
@PropertySource(value = {"classpath:person.properties"})
public class PersonBean {
private int perid;
private String pername;
private int perage;
private String peraddress;
public int getPerid() {
return perid;
}
public void setPerid(int perid) {
this.perid = perid;
}
public String getPername() {
return pername;
}
public void setPername(String pername) {
this.pername = pername;
}
public int getPerage() {
return perage;
}
public void setPerage(int perage) {
this.perage = perage;
}
public String getPeraddress() {
return peraddress;
}
public void setPeraddress(String peraddress) {
this.peraddress = peraddress;
}
}
person.properties
person.perid=1002
person.pername=lisi
person.perage=24
person.peraddress=北京
package com.wangxing.springboot.controller;
import com.wangxing.springboot.bean.PersonBean;
import com.wangxing.springboot.bean.StudentBean;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
public class TestController {
@Autowired
private PersonBean personBean;
@RequestMapping(value = "/perinfo")
@ResponseBody
public String getPersonInfo(){
String perinfo=personBean.getPerid()+"\t"+
personBean.getPername()+"\t"+
personBean.getPerage()+"\t"+
personBean.getPeraddress();
return perinfo;
}
}
2. @ImportResource
@ImportResource:匯入基於XML的Spring的配置檔案,讓配置檔案裡面的內容生效;
package com.wangxing.springboot.bean;
public class UserBean {
private int userid;
private String username;
private int userage;
private String useraddress;
public int getUserid() {
return userid;
}
public void setUserid(int userid) {
this.userid = userid;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public int getUserage() {
return userage;
}
public void setUserage(int userage) {
this.userage = userage;
}
public String getUseraddress() {
return useraddress;
}
public void setUseraddress(String useraddress) {
this.useraddress = useraddress;
}
}
package com.wangxing.springboot.controller;
import com.wangxing.springboot.bean.UserBean;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class TestController implements Controller {
private UserBean userBean;
public UserBean getUserBean() {
return userBean;
}
public void setUserBean(UserBean userBean) {
this.userBean = userBean;
}
@Override
public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
String userinfo=userBean.getUserid()+"\t"+
userBean.getUsername()+"\t"+
userBean.getUserage()+"\t"+
userBean.getUseraddress();
System.out.println("userinfo=="+userinfo);
return null;
}
}
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="userBean" class="com.wangxing.springboot.bean.UserBean">
<property name="userid" value="1004"></property>
<property name="username" value="lisi"></property>
<property name="userage" value="24"></property>
<property name="useraddress" value="beijing"></property>
</bean>
<bean name="/test" class="com.wangxing.springboot.controller.TestController">
<property name="userBean" ref="userBean"></property>
</bean>
</beans>
Spring Boot裡面沒有Spring的配置檔案,我們自己編寫的配置檔案,也不能自動識別;
想讓Spring的配置檔案生效,載入進來;@ImportResource標註在一個主類上.
3. @Bean
@Bean新增在方法上,告訴springIOC容器建立javabean類物件
方法的返回值就是所要建立javabean類物件法的名稱就是javabean類物件的名稱
<bean id="物件的名稱" class="所要建立javabean類物件"></bean>
注意:@Bean必須出現在配置類中【@Configuration標註的java類】
例如:
package com.wangxing.springboot.bean;
public class HelloService {
public void getHelloServiceInfo(){
System.out.println("HelloService類的測試方法");
}
}
package com.wangxing.springboot.configuration;
import com.wangxing.springboot.bean.HelloService;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
//@Configuration註解標註某一個類為配置類
//代替基於XML的Spring配置檔案
@Configuration
public class MyAppConfig {
//@Bean新增在方法上,告訴springIOC容器建立javabean類物件
//方法的返回值就是所要建立javabean類物件
//方法的名稱就是javabean類物件的名稱
//<bean id="物件的名稱" class="所要建立javabean類物件"></bean>
@Bean
public HelloService getHelloService(){
return new HelloService();
}
}
package com.wangxing.springboot.controller;
import com.wangxing.springboot.bean.HelloService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
public class TestController {
@Autowired
private HelloService helloService;
@RequestMapping(value = "testinfo")
@ResponseBody
public String testinfo(){
helloService.getHelloServiceInfo();
return "測試@Bean";
}
}
package com.wangxing.springboot.springbootdemo7;
import com.wangxing.springboot.configuration.MyAppConfig;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Import;
@SpringBootApplication
@ComponentScan(basePackages = "com.wangxing.springboot.controller")
@Import(MyAppConfig.class)
public class Springbootdemo7Application {
public static void main(String[] args) {
SpringApplication.run(Springbootdemo7Application.class, args);
}
}
配置檔案【application.properties】中的佔位符
1、隨機數
${random.value}、${random.int}、${random.long}
${random.int(10)}、${random.int[1024,65536]}
例如:
package com.wangxing.springboot.bean;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.PropertySource;
import org.springframework.stereotype.Component;
@Component
@ConfigurationProperties(prefix = "student")
public class StudentBean {
private int stuid;
private String stuname;
private int stuage;
private String stuaddress;
public int getStuid() {
return stuid;
}
public void setStuid(int stuid) {
this.stuid = stuid;
}
public String getStuname() {
return stuname;
}
public void setStuname(String stuname) {
this.stuname = stuname;
}
public int getStuage() {
return stuage;
}
public void setStuage(int stuage) {
this.stuage = stuage;
}
public String getStuaddress() {
return stuaddress;
}
public void setStuaddress(String stuaddress) {
this.stuaddress = stuaddress;
}
}
application.properties
student.stuid=${random.int}
student.stuname=zhangsan
student.stuage=${random.int[1024,65536]}
student.stuaddress=${student.stuname}_地址
package com.wangxing.springboot.controller;
import com.wangxing.springboot.bean.StudentBean;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
public class TestController {
@Autowired
private StudentBean studentBean;
@RequestMapping(value = "/test")
@ResponseBody
public String testStudent(){
System.out.println(studentBean.getStuid());
System.out.println(studentBean.getStuname());
System.out.println(studentBean.getStuage());
System.out.println(studentBean.getStuaddress());
return "";
}
}
Profiles
1. Profifile檔案就是用來配置在不同環境下的配置資料。
2. 因為在不同的環境下配置檔案中配置的執行環境的資料是不同的,所以我們就需要靈活的在不同的執行環境下切換成對應的執行環境的資料,此時我們將不同的執行環境資料,配置到不同的配置檔案中,通過在主配置檔案application.properties中的spring.profiles.active屬性完成切換。
測試.properties配置
application-dev.properties【開發環境配置】
server.port=8080
application-prod.properties【生產環境配置】
server.port=9090
application.properties 【主配置】
spring.profiles.active=prod 【指定使用生產環境配置】
http://localhost:9090/testInfo
或者
spring.profiles.active=dev 【指定使用開發環境配置】
http://localhost:8080/testInfo
測試.yml配置
application-devyml.yml【開發環境配置】
server:
port: 8080
application-prodyml.yml【生產環境配置】
server:
port: 9090
application.yml 【主配置】
spring:
profiles:
active: prodyml 【指定使用生產環境配置】
http://localhost:9090/testInfo
或者
spring:
profiles:
active: devyml 【指定使用開發環境配置】
http://localhost:8080/testInfo
上面是通過在1.主配置檔案中切換執行環境配置
還可以通過配置2.執行環境引數配置檢視視窗來指定具體使用哪一個執行環境
“–spring.profiles.active=dev“
還可以通過3.命令列執行jar的時候指定具體使用哪一個執行環境
java -jar testspringboot002-0.0.1-SNAPSHOT.jar --spring.profiles.active=dev;
還可以通過4.配置虛擬機器引數指定具體使用哪一個執行環境;
“-Dspring.profiles.active=dev”
注意:執行環境配置檔案的名稱 application-{profiles}.properties/yml
主配置檔案載入位置
spring boot 啟動會掃描以下位置的application.properties或者 application.yml檔案作為Spring boot的預設配置檔案
– 專案根目錄/config/
– 專案根目錄/
– resource/config/
– resource:/
以上是按照優先順序從高到低的順序,所有位置的檔案都會被載入,高優先順序配置內容會覆蓋低優先順序配置內容。
SpringBoot會從這四個位置全部載入主配置檔案;互補配置
我們也可以通過配置spring.config.location來改變預設配置
專案打包好以後,我們可以使用命令列引數的形式,啟動專案的時候來指定配置檔案的新位置;指定配置檔案和預設載入的這些配置檔案共同起作用形成互補配置;
java -jar testspringboot02-0.0.1-SNAPSHOT.jar --spring.confifig.location=F:/application.properties
外部配置載入順序
Spring Boot 支援多種外部配置方式
1. 命令列引數
2. 來自java:comp/env的JNDI屬性
3. Java系統屬性(System.getProperties())
4. 作業系統環境變數
5. RandomValuePropertySource配置的random.*屬性值
6. jar包外部的application-{profile}.properties或application.yml(帶spring.profile)配置檔案
7. jar包內部的application-{profile}.properties或application.yml(帶spring.profile)配置檔案
8. jar包外部的application.properties或application.yml(不帶spring.profile)配置檔案
9. jar包內部的application.properties或application.yml(不帶spring.profile)配置檔案
優先載入帶profifile,再來載入不帶profifile,由jar包外向jar包內進行尋找
10. @Configuration註解類上的@PropertySource
11. 通過SpringApplication.setDefaultProperties指定的預設屬性
相關文章
- Springboot配置檔案Spring Boot
- 【SpringBoot】配置檔案Spring Boot
- 【SpringBoot】YAML 配置檔案Spring BootYAML
- SpringBoot-配置檔案Spring Boot
- 3 springboot配置檔案Spring Boot
- SpringBoot專案配置檔案加密Spring Boot加密
- Springboot載入配置檔案Spring Boot
- springboot上傳檔案配置Spring Boot
- springboot讀取配置檔案Spring Boot
- SpringBoot之logback配置檔案Spring Boot
- [SpringBoot] 配置檔案 與常用方法Spring Boot
- SpringBoot配置檔案佔位符Spring Boot
- application.yml檔案配置springboot專案APPSpring Boot
- SpringBoot專案配置檔案佔位符Spring Boot
- SpringBoot基礎學習(二) SpringBoot全域性配置檔案及配置檔案屬性值注入Spring Boot
- [springboot]配置檔案載入順序Spring Boot
- springboot如何使用自定義配置檔案Spring Boot
- SpringBoot讀取自定義配置檔案Spring Boot
- springboot yml 配置檔案注入Map,ListSpring Boot
- SpringBoot專案中獲取配置檔案的配置資訊Spring Boot
- SpringBoot配置檔案敏感資訊加密方案Spring Boot加密
- SpringBoot配置檔案讀取過程分析Spring Boot
- Springboot 載入配置檔案原始碼分析Spring Boot原始碼
- SpringBoot是如何載入配置檔案的?Spring Boot
- SpringBoot 配置檔案給實體注入值Spring Boot
- SpringBoot2配置檔案application.yamlSpring BootAPPYAML
- SpringBoot專案配置檔案中密碼的加密Spring Boot密碼加密
- SpringBoot 如何解析配置檔案中的list?Spring Boot
- SpringBoot載入配置檔案(@PropertySource@importSource@Value)Spring BootImport
- 【springboot讀取配置檔案】@ConfigurationProperties、@PropertySource和@ValueSpring Boot
- jackson學習之九:springboot整合(配置檔案)Spring Boot
- SpringBoot原始碼解析-配置檔案的載入Spring Boot原始碼
- SpringBoot 如何讓yml,properties配置檔案有提示Spring Boot
- springboot基於properties檔案型別安全配置Spring Boot型別
- SpringBoot載入子模組配置檔案的方法Spring Boot
- springboot讀取自定義配置檔案節點Spring Boot
- springboot使用logback記錄日誌,配置檔案Spring Boot
- springboot擴充套件配置檔案自動載入Spring Boot套件