目錄
一、引言
1.1 初始化配置
1.2 整合第三方框架
1.3 后期維護
1.4 部署工程
1.5 敏捷式開發
二、SpringBoot介紹
spring boot
2.1 搭建一個spring boot工程
2.2 使用idea創建項目
2.3 在線創建姿勢
2.4 項目的目錄結構
2.5 項目的運行方式
2.6 yml文件格式
2.7 多環境配置
2.8 配置類的使用
2.9 靜態資源處理
一、引言
1.1 初始化配置
為了使用SSM框架去開發,準備SSM框架的模板配置。
1.2 整合第三方框架
為了Spring整合第三方框架,單獨的去編寫xml文件。
1.3 后期維護
后期SSM項目后期xml文件特別多,維護xml文件的成本是很高的
1.4 部署工程
SSM工程部署也是很麻煩,依賴第三方的容器
1.5 敏捷式開發
基于Java的SSM開發方式是很笨重,而現在的python,php,NodeJS的敏捷式開發已經蓋過Java一頭
二、SpringBoot介紹
SpringBoot是由Pivotal團隊研發的,SpringBoot并不是一門新技術,只是將之前常用的Spring,SpringMVC,data-jpa等常用的框架封裝到了一起,幫助你隱藏這些框架的整合細節,實現敏捷開發。
SpringBoot就是一個工具集。
SpringBoot特點:
SpringBoot項目不需要模板化的配置。
SpringBoot中整合第三方框架時,只需要導入相應的starter依賴包,就自動整合了。
SpringBoot默認只有一個.properties的配置文件,不推薦使用xml,后期會采用.java的文件去編寫配置信息。
SpringBoot工程在部署時,采用的是jar包的方式,內部自動依賴Tomcat容器,提供了多環境的配置。
后期要學習的微服務框架SpringCloud需要建立在SpringBoot的基礎上。
?
三、spring boot
使用的版本是: 2.6.8, 暫不要使用spring boot3.x版本.
官方文檔: Spring Boot
spring boot的整個文檔:
Spring Boot Reference Documentation
3.1 搭建一個spring boot工程
必須會這種.
-
新建一個java se的maven工程.
-
spring boot的依賴.
<!-- 注意,這個標簽是parent, 表示當前的父工程 -->
<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.6.8</version>
</parent>
-
引入一個組件, spring boot starter web.
<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency>
</dependencies>
-
創建一個啟動類.
/*** @author 聽憶*/
@SpringBootApplication // 表示我是一個啟動類.
public class MyApplication {// 通過main啟動當前的spring boot工程.public static void main(String[] args) {SpringApplication.run(MyApplication.class, args);}
}
-
編寫一個控制器的方法
原則: 之前怎么寫這里還是怎么寫,一點變化都沒有.
/*** @author 聽憶*/
@RestController
public class UserController {@GetMapping("/hello")public String hello(){return "你好啊,spring boot";}
}
?
3.2 使用idea創建項目
3.3 在線創建姿勢
通過start.spring.io或者start.aliyun.com,可以在網頁端進行項目的創建,然后下載創建的壓縮包解壓之后,導入到idea當中即可;
注意事項:
-
如果start.spring.io無法訪問,「在idea當中」, 則可以嘗試去修改idea的配置為:
start.aliyun.com
, 然后按照后續流程進行創建項目. -
目前版本號是: 2.6.8
3.4 項目的目錄結構
咱們手動創建的項目, 這個結構就是一個標準的javaSE工程,沒有配置文件.如果用這種方式,我們會手動去創建這些個目錄. –> 之后會使用這種方式.
采用idea內置的方式創建,給我們生成了:
resouce
static
templates
applicaton.properties –> 文件名稱不能修改.
3.5 項目的運行方式
開發階段,一般情況我們都使用idea直接運行.
測試/上線 –> 打包
使用maven,必須得安裝上打包插件.
<!-- 打包插件, 將當前的工程,打包成xxx.jar包。必須得有此插件。 -->
<build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><configuration><excludes><exclude><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></exclude></excludes></configuration></plugin></plugins>
</build>
注意事項:
如果你這個報紅, 但是咱們如果不打包的話,則直接將它刪除掉.打包必須得下載成功.
如果實在下載不了,拷貝一個,放到自己maven本地倉庫.
==特別重要的注解:==
@SpringBootApplication就是一個組合注解: ? - ?@SpringBootConfiguration就是@Configuration注解,代表啟動類就是一個配置類。 - ?@EnableAutoConfiguration幫你實現自動裝配的,SpringBoot工程啟動時,運行一個SpringFactoriesLoader的類,加載META-INF/spring.factories配置類(已經開啟的),通過SpringFactoriesLoader中的load方法,以for循環的方式,一個一個加載。- 好處:無需編寫大量的整合配置信息,只需要按照SpringBoot提供好了約定去整合即可。- 壞處:如果說你導入了一個starter依賴,那么你就需要填寫他必要的配置信息。- 手動關閉自動裝配指定內容:@SpringBootApplication(exclude = QuartzAutoConfiguration.class) - ?@ComponentScan就相當于<context:component-scan basePackage=“包名” />,幫助掃描注解的。
復合注解。
實現包掃描, 自動裝配。
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited // 四個元注解
------------------------------
@SpringBootConfiguration // sprnig自動裝配
@EnableAutoConfiguration // 啟動spring 自動裝配
// 包掃描配置
@ComponentScan(excludeFilters = { @Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),@Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) })
public @interface SpringBootApplication {}@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
-------------------------------------------
@AutoConfigurationPackage
@Import(AutoConfigurationImportSelector.class)
public @interface EnableAutoConfiguration {}
自動裝配. xxxAutoConfiguration, --> 自動裝配的類. xxxProperties --> 在配置文件當中,要覆蓋的屬性.
以spring mvc為例,查看一下自動裝配和我們自定義配置如何做的.
每一個組件都會有: xxxAutoConfiguration, 必須要有的.相當于一個規范.
@Configuration(proxyBeanMethods = false)
@Import(EnableWebMvcConfiguration.class)
// 開啟配置
@EnableConfigurationProperties({ WebMvcProperties.class, WebProperties.class })
@Order(0)
public static class WebMvcAutoConfigurationAdapter implements WebMvcConfigurer, ServletContextAware {
通過觀察發現了: 有兩個xxxProperties的文件.這個文件就是: 我們可以在配置文件當中: application.properties文件進行屬性覆蓋的文件.也就是說, 在xxxProperties文件當中,全部都是默認的配置項.如果我們想更改這些個默認的配置,則只需要, 直接通過: 前綴.屬性名稱=值 進行覆蓋即可;
@ConfigurationProperties(prefix = "spring.mvc") // 定義一個, 在application.properties文件當中,進行配置的前綴.
// 通過前綴.屬性名稱 = 值,覆蓋當前這個配置類的相關屬性.
public class WebMvcProperties {
}
spring.mvc.view.prefix=/pages/xx # 在配置文件當中,覆蓋view.prefix
spring.mvc.view.suffix=.jsp # 在配置文件當中, 覆蓋view.suffix?
==xxxAutoConfiguration.java==
==xxxProperties.java==
對于這些類的加載.它是有條件的,當符合裝配條件,則spring boot才會去加載.并且進行自動裝配.如果不符合條件,則不加載.使用起來更加靈活.
類似于:
ConditionalOnMissingBean
@ConditionalOnSingleCandidate(RedisConnectionFactory.class)
@ConditionalOnClass(RedisOperations.class)
3.6 yml文件格式
一般情況下,我們都寫: application.yml這種姿勢的,但是實際也可以寫: application.yaml格式.更推薦: yml文件格式的.
也可以配置一些數據或者集合
# 表示配置一個數組或者集合.注意:
# -空格 值
# tingyi.student
tingyi:student:- 張三- 李四- 王五
集合或者數組的表示方式.
如果同時使用application.properties文件,和application.yml文件,則生效的是 :applicaton.properties文件.
3.7 多環境配置
實際工作當中有三個環境:
開發環境,就是我們程序員自己的開發環境.
測試環境, 測試的同學們,使用的一種環境,可能跟這個開發環境還一樣.
生產環境, 對外給用戶用的環境.「線上環境」
生產需要, 從開發環境的數據庫.要切換到測試環境的數據,怎么來做方便一些.你不能直接修改配置配置. 此時就需要我們在開發階段就將這個多環境配置好.這樣我們打包之后,就可以在運行的時候,方便的切換各種各樣的環境;
測試, 修改端口號:
開發環境: 9000
application-dev.yml
測試環境: 9001
application-test.yml
生產環境: 9002
application-prod.yml
加載的配置文件
application.yml, 在這個文件當中咱們可以指定一個環境.
多環境配置的寫法總結:
配置環境這樣寫:
application-{環境名稱}.yml
主配置文件當中對環境進行激活
spring:profiles:active: 環境名稱在部署工程時,通過 java -jar jar文件 --spring.profiles.active=環境
3.8 配置類的使用
使用:
必須將類標記一注解: @Component, 將這個類對象放到容器當中.
添加配置類注解: @ConfigurationProperties(prfix=’要寫在配置文件當中的前綴’)
必須得有getter/setter方法,方可配置.
用途:
在配置文件當中對我們的配置類的屬性進行賦值了.也就是配置好了.
那么在其它類當中可以隨意使用, 使用的時候,通過注解的姿勢來獲取配置在配置文件當中的配置類的屬性的值;
@Value(‘前綴.配置類的屬性名稱‘)
如果不寫配置類的,可以直接在配置文件當中進行字段相關配置也是可以的.
# 沒有配置類,我們直接可以這樣配置.
tingyi:name: 聽憶sex: 男address: 呀呼
tingyi并沒有類與之相對應,只是我們手動搞了一個前綴,使用起來感覺跟咱們有配置的方式一毛一樣.結果也是一樣的.但是這樣寫的話,并不好.不方便維護,且前綴可以隨意的更改的.因為有配置類的方式前綴已經約定好了.不能隨意的更改.
用法.一毛一樣,沒有啥區別;
3.9 靜態資源處理
public static class Resources {
?private static final String[] CLASSPATH_RESOURCE_LOCATIONS = { "classpath:/META-INF/resources/","classpath:/resources/", "classpath:/static/", "classpath:/public/" };
?/*** Locations of static resources. Defaults to classpath:[/META-INF/resources/,* /resources/, /static/, /public/].*/private String[] staticLocations = CLASSPATH_RESOURCE_LOCATIONS;
以上四個目錄都可以配置靜態資源.咱們可以放到任意一個靜態資源目錄.
訪問的時候,不要訪問靜態資源的目錄名稱.
如果要修改的,不建議修改.