Spring Boot是快速搭建Spring工程的腳手架,簡化配置與依賴關係(約定大於配置),讓咱們把精力集中在業務部分java
建立一個Hello World的Web工程mysql
直接Next -> 填寫工程座標 -> 建立web
父工程管理jar包,沒有業務代碼,子工程須要jar包時不用寫版本號spring
<!-- 父工程 --> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.1.5.RELEASE</version> </parent> <!-- 設置JDK版本 --> <properties> <java.version>1.8</java.version> </properties> <!-- 添加依賴 --> <dependencies> <!-- 場景啓動器 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> </dependencies>
注意Application要放在根目錄下,由於會去Application的同級目錄去掃描,注意左邊有層級結構sql
@SpringBootApplication public class Application { public static void main(String[] args) { //SpringBoot啓動 SpringApplication.run(Application.class,args); } }
@RestController public class HelloController { //請求映射 @RequestMapping(value = "hello",method = RequestMethod.GET) public String hello(){ return "Hello Worlddddd"; } }
啓動SpringBoot應用瀏覽器
打開瀏覽器測試成功app
總結maven
咱們來看看@SpringBootApplication這個組合註釋,底層還包括兩個註解spring-boot
@SpringBootConfiguration:SpringBoot的配置類,標註在類上表示該類是個配置類測試
它底層又有@Configuration:Spring的註解,放在配置類上
@EnableAutoConfiguration:開啓自動配置,之前須要配置的東西,SpringBoot幫咱們自動配置
它底層有@AutoConfigurationPackage:自動配置包
@Import(.AutoConfigurationImportSelector.class):導入組件的選擇器,會給容器導入很是多的自動配置類(xxxAutoConfiguration),並配置好對應的組件
有了自動配置類就免去了手動編寫配置注入組件了,其實現由SpringFactoriesLoader.loadFactoryNames(EnableAutoConfiguration.class,classLoader)完成
總結:SpringBoot啓動時從類路徑下META_INF/spring.factories獲取EnableAutoConfiguration指定的值,將這些值做爲自動配置類導入到容器中,自動配置類就生效,幫咱們進行自動配置工做
名字是固定以application開頭的
用來修改SpringBoot默認配置
jdbc: driverclassName: com.mysql.jdbc.Driver url: jdbc:mysql://localhost:3306/test?serverTimezone=UTC username: root password: howl
<!-- 註解解析器 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configuration-processor</artifactId> <optional>true</optional> </dependency>
/* * @ConfigurationProperties把配置文件的屬性注入該類中 */ @Component @ConfigurationProperties(prefix = "jdbc") public class JDBC { private String driverclassName; private String url; private String username; private String password; //各類Getters和Setters }
經常使用註解
//將配置文件的屬性注入到該對象中,只有這個註解是生效的,須要配合@EnableConfigurationProperties註解,或加入@Component註解 @ConfigurationProperties(prefix = "jdbc") //屬性注入 @value //使對應的配置文件生效加入到Bean容器 @EnableConfigurationProperties(JDBCProperties.class) //聲明一個類爲配置類,代替xml文件,通常配合@Bean註解 @Configuration //聲明在方法上,將返回值加入Bean容器,代替<bean>標籤 @Bean //------------推薦使用上面來指定配置文件,在主目錄下創一個config包------------- //指定外部屬性文件,這時還沒生效,須要配合下面的註解 @PropertySource(value = {"classpath:other.properties"}) //加載多個配置文件,放在主程序類上 @ImportResourcec(locations = {"classpath:other.yml"})
@ConfigurationProperties和@value區別
@ConfigurationProperties | @value | |
---|---|---|
功能 | 批量注入配置 | 單個指定 |
鬆散綁定 | 支持 | 不支持 |
SpEL | 不支持 | 支持 |
JSR303數據校驗 | 支持 | 不支持 |
複雜數據類型 | 支持 | 不支持 |
在不一樣環境下須要使用不一樣的配置文件,這裏就能夠用Profile
默認是application.yml /properties裏的配置
咱們在resources下創建兩個配置文件
兩者用上面的JDBC配置文件,不一樣於username,一個爲root,一個爲Howl
激活測試
# 在application.yml主配置文件中添加下面配置 spring: profiles: active: dev
Controller代碼
//請求映射 @RequestMapping(value = "hello",method = RequestMethod.GET) public String hello(){ return jdbc.getUsername(); }
未激活dev前,username爲root
激活dev後爲,username爲Howl