SpringBoot最新教程IDEA版【狂神說Java系列】


Spring Boot入門

1.spring boot是配置好的spring集成框架,約定大於配置

 

2.微服務:把service拆出來獨立運行在各個機器上。看下面這兩篇論文

 

3.從官網下模板創建spring boot項目

https://start.spring.io/里找generate項目,下載zip包,用Idea以maven形式導入

 

4.通過Idea的Spring Initializer創建

 

以上二種方式,要自己選依賴的組件

 

pom開頭parent標簽指定父依賴是spring-boot-starter-parent,負責版本管理與打包

web主要依賴包是spring-boot-starter-web 

熱部署是spring-boot-starter-devtools

 

4.項目架構

1.java下的程序主入口:

2.resource下的application.properties

3.resource下的static目錄

4.resource下的templates目錄

 

5.springboot的主類用SpringBootApplication注解裝配,他會去掃描同級目錄下的包注解

 

6.配置文件修改

server.port=8081 #改端口號,每一個springboot服務一個端口

 

7.導出的jar包用java jar包路徑運行即可

 

8.resource目錄下可以放banner.txt放啟動字符

 

9.自動配置原理:

看pom文件,點入父標簽,進入可以看到spring-boot-dependencies依賴

 

SpringApplication run方法啟動程序 

 

注解:@SpringBootApplication

  1. @SprintBootConfiguration
    1. @Configuration
    2. @Component
  2. @EnableConfiguration
    1. AutoConfigurationPackage  

總結下來,就是會找sprint-boot-autoconfigure包里的/META-INF/spring.factories文件,當引入某個starter時相應的配置生效

 

10.主類:

SpringApplication類注解初始化項目,SpringApplication的run方法拿這些配置來跑

 

11.yaml配置文件

格式:

key: value

server:
    port: 8081
    path: /hello

yaml比properties先進的地方在於語法支持的多,甚至可以存儲對象

雙引號不轉義,單引號轉義

 

存對象

properties:

student.name="a"

yaml:

studnet:
    name: "a"

行內寫法:

student: {name: "a", age: 12}

 

 數組:

行內寫法:

studnet: 【{},{}】

 多行寫法:

pets:
    - cat
    - dog

 

yaml 對空格的要求十分高,一定要對齊

 

 12.yaml配置注入:

 通過ConfigurationProperties注解指定prefix來引入配置

@ConfigurationProperties(prefix = "person")

 

13.Property文件注入

@PropertySource(value = "classpath:person.properties")
@Component //注冊bean
public class Person {
    //直接使用@value
    @Value("${person.name}") //從配置文件中取值
    private String name;
    @Value("#{11*2}")  //#{SPEL} Spring表達式
    private Integer age;
    @Value("true")  // 字面量
    private Boolean happy;
    
    。。。。。。  
}

 

14.JSR303校驗

@Validated注解表明要校驗

可以接着使用其中定義的其他格式規范注解,比如@Email

 

 15.多config文件

可以在jar里用命令行參數spring.config.location指定config文件位置。默認是項目根目錄下config,項目根目錄, 資源根目錄下config,資源根目錄

用spring.profiles.acitve=test指定配置文件后綴

 

yml多文檔模塊:

---分割模塊

spring:

  profiles: dev

指定模塊名

 

 16.自動查看配置

注解@EnableConfigurationProperties指定配置類

@EnableConfigurationProperties({HttpProperties.class}) 

相應的@ConfigurationProperties注解就指定yaml和properties文件里的配置名稱

@ConfigurationProperties(
    prefix = "spring.http"
) //從配置文件中獲取指定的值和bean的屬性進行綁定
public class HttpProperties {

 

@ConditionalOnWebApplication,@ConditionalOnClass,@ConditionalOnProperty等注解指定條件滿足配置成立

 

精髓:

1)、SpringBoot啟動會加載大量的自動配置類

2)、我們看我們需要的功能有沒有在SpringBoot默認寫好的自動配置類當中;

3)、我們再來看這個自動配置類中到底配置了哪些組件;(只要我們要用的組件存在在其中,我們就不需要再手動配置了)

4)、給容器中自動配置類添加組件的時候,會從properties類中獲取某些屬性。我們只需要在配置文件中指定這些屬性的值即可;

xxxxAutoConfigurartion:自動配置類;給容器中添加組件

xxxxProperties:封裝配置文件中相關屬性;

 

  debug=true 屬性指定是否打開debug

 

 所有配置可以從SpringBoot官方文檔這里拿

 

Spring Boot Web開發

 17.導入靜態資源

 webjars:以maven的形式引入jquery,放到jar包的META-INF/resources/webjars下

resources目錄 ,static,public,根目錄,也可以放資源,一般來說public的是外邊可以通過地址直接訪問的,不用走controller接口層

 或者指定spring.mvc.static-path-pattern(用逗號分隔),以上全部失效

 

18.首頁定制:

根據property或者index.html文件放在相應資源目錄下

 

 19.模板引擎

SpringBoot不支持jsp,使用模板引擎生成前端文件

可以用freemarker或者thymeleaf

 根據Thymeleaf的prperties配置類,可以知道文件以html結尾,放在templates文件夾里

 

20.Thymeleaf語法

html標簽頭加命名空間約束

<html lang="en" xmlns:th="http://www.thymeleaf.org">

語法分以下幾部分:

  1. 取值
    1. [[${}]]行內取值
  2. 常量
  3. 運算符
  4. 條件表達式:th:if
  5. 循環表達式:th:each
  6. th命名空間下的標簽

    th標簽可以替換html里的任意元素

 

21.拓展SpringMVC的配置

寫一個類用@Config注解標注,並實現WebMvcConfigurer接口。要完全替換則再加一個@EnableWebMvc注解。

 可以通過@Bean注解,把這個類里的關於SpringMVC的配置發送出去

 

22.前端怎么寫

  1. 模板:別人寫好的自己改
  2. 框架:不用改,自己裝配傳參拼接(組件)
    1. 柵格系統
    2. 導航欄
    3. 側邊欄
    4. 表單

 

23.網站怎么么寫:

  1. 頁面長什么樣
  2. 數據設計
  3. 前端自動運行(獨立化工程)
  4. 數據接口如何對接
  5. 前后端聯調測試

 

24.准備工作:

  1. 有一套自己熟悉的后台模板(x-admin)
  2. 前端通過框架,組合出來一個網站頁面
    1. index
    2. about
    3. blog
    4. post
    5. user
    6. 404
  3. 部署網站

 

25.整合JDBC

1.引入jdbc和mysql驅動

2.resourcs下在application.yml 里配置數據庫信息

spring:
  datasource:
    username: root
    password: 123456
    #?serverTimezone=UTC解決時區的報錯
    url: jdbc:mysql://localhost:3306/mybatis?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8
    driver-class-name: com.mysql.jdbc.Driver

3.DataSource可以通過@Autowired自動引入了

屬性配置可以去點擊進去類DataSourceProperties看

默認使用Hikari數據源連接池

Connection可以通過datasource getConnection獲取

隨后可以做commit,close等操作

 

26.jdbc template crud

1.自動引入JdbcTemplate

2.execute執行sql語句,query和queryForList等方法查詢,call調用存儲過程/函數,update和batchUpdate等方法更新

 

27.指定數據源

spring.datasource.type指定數據源,要是全限定名

 

28.整合Druid

加入了日志監控功能的數據庫連接池

1.maven導入依賴

2.配置文件指定數據庫連接池類名

3.配置插件,包括監控,性能慢查詢等

    #配置監控統計攔截的filters,stat:監控統計、log4j:日志記錄、wall:防御sql注入
    #如果允許時報錯  java.lang.ClassNotFoundException: org.apache.log4j.Priority
    #則導入 log4j 依賴即可,Maven 地址: https://mvnrepository.com/artifact/log4j/log4j
    filters: stat,wall,log4j
    maxPoolPreparedStatementPerConnectionSize: 20
    useGlobalDataSourceStat: true
    connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=500

4.引用了log4j插件,就要導入這個依賴

5.自己添加一個@Configuration注解修飾的Druid配置類,把DruidDataSource注入到spring。要綁定配置文件的全局配置,使用@ConfigurationProperties注解,prefix指定為spring.datasoure

6.配置Druid的監控web頁面,可以通過spring boot注冊一個servlet(ServletRegistrationBean),配置登陸的用戶名/密碼等

7.配置FilterRegistrationBean來設置監控哪些東西

 

29.整合Mybatis

1.引入mybatis-spring-boot整合包

2.配置數據源

3.使用@Mapper注解定義mapper接口

4.添加sql xml

5.配置文件里配置mapper和實體類路徑

 #指定myBatis的核心配置文件與Mapper映射文件
mybatis.mapper-locations=classpath:mybatis/mapper/*.xml
# 注意:對應實體類的路徑
mybatis.type-aliases-package=com.kuang.mybatis.pojo

6.自動裝配拿到mapper

 

@Mapper注解,怎么被掃描到,mapper xml放的位置配置,可以總結下

 

30. 異步任務

@EnableAsync,開啟異步

@Async注解,表明方法異步執行。spring自動給方法開線程執行

 

31.郵件任務

1.引入郵件依賴

2.去autoconfig里找配置前綴,去proerty里找具體配置

3.@Autowired注入JavaMailSenderImpl,調用其方法設置並發送

 

32.定時執行任務

1.TaskExecutor

2.TaskScheduler

3.@EnableScheduling,開啟定時任務注解;@Scheduled,表示什么時候執行

4.Cron表達式,使用在線表達式生成器 

 

33.Swagger

 API框架,開發階段瀏覽API接口,可自動生成API文檔,RestFul風格,可以直接運行在線測試,

1.引入依賴,有兩個,swagger2和swagger-ui

2.集成swagger。添加config類,@Configuration,@EnableSwagger2。訪問swagger-ui.html

3.配置swagger。config類里添加@Bean Docket,配置Docket類。ApiInfo類配置信息

4.配置掃描接口。Docket select方法決定掃描哪些接口。使用api().build()來選擇,可以使用RequestHandlerSelectors,用其basePackage指定掃描基准包;path方法設置指定路徑,

5.配置開關 。enable方法決定是否開啟。可以通過Profiles和Environment獲取配置文件的環境變量

6.給api分組。通過groupName方法

7.實體類配置(Model)。 只要接口用到了實體類,實體類就會被掃描到。進一步的注釋,@ApiModel指定實體類,@ApiModelProperty給字段添加,這種注解還有很多

 

34.員工管理系統

1.引入模版html頁面,放入templates文件夾

2. css和js,img放入static文件夾

3.添加首頁路由映射,除了直接用@controller,還可以在WebMvcConfigure的子類里,實現addViewController方法,用ViewControllerRegistry.addViewController方法添加

4.spring.thymeleaf.cache=false,禁用緩存;其他地方搞的模版,url路徑等配置要用thymeleaf接管

5.server.servlet.context-path=/kunag,設置項目虛擬目錄,給url路徑加一層,本地是項目上一級多了一個文件夾

6.頁面國際化:

  1.resources目錄下建立一個i18n目錄

  2.建立login.properties和login_zh_CN.properties文件。自動創建一個login文件夾,可在Resource Bundle下配置,給每一個key設置不同的版本

  3.給spring.message.basename指定為i18n.login,指定位置文件

  4.在模板文件里,用#{key}取值

  5.可以重寫LocaleResolver,解析語言配置,返回Locale類。默認的語言配置,讀取Accept-Language

  6.在WebMvcCofigure子類里,用@Bean注入這個LocaleResolver子類

7.除了重定向,可以用setViewName給url做映射來改url

8.登陸攔截器。實現HandlerInterceptor,在WebMvcConfigure的addInterceptors里添加攔截器

9.頁面組件分類后,調用他們的時候可以給他們傳參數,決定不同數據下的表現。代碼要基於數據改變,而不是直接搞dom

10. 有錯誤的話,templates下新建一個error文件夾,相應錯誤碼的html文件放進去即可

 

35.dubbo+zookeeper

RPC架構

架構為生產者/消費者模式

生產者向注冊中心注冊自己。消費者通過注冊中心找到生產者,調用生產者方法

1.生產者先引入duooo+zookeeper依賴

    <!-- Dubbo Spring Boot Starter -->
    <dependency>
        <groupId>org.apache.dubbo</groupId>
        <artifactId>dubbo-spring-boot-starter</artifactId>
        <version>2.7.3</version>
    </dependency> 
<!-- https://mvnrepository.com/artifact/com.github.sgroschupf/zkclient -->
<dependency>
    <groupId>com.github.sgroschupf</groupId>
    <artifactId>zkclient</artifactId>
    <version>0.1</version>
</dependency>
        <!-- 引入zookeeper -->
        <dependency>
            <groupId>org.apache.curator</groupId>
            <artifactId>curator-framework</artifactId>
            <version>2.12.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.curator</groupId>
            <artifactId>curator-recipes</artifactId>
            <version>2.12.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.zookeeper</groupId>
            <artifactId>zookeeper</artifactId>
            <version>3.4.14</version>
            <!--排除這個slf4j-log4j12-->
            <exclusions>
                <exclusion>
                    <groupId>org.slf4j</groupId>
                    <artifactId>slf4j-log4j12</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

2.配置dubbo+zookeeper

#當前應用名字
dubbo.application.name=provider-server
#注冊中心地址
dubbo.registry.address=zookeeper://127.0.0.1:2181
#掃描指定包下服務
dubbo.scan.base-packages=com.kuang.provider.service

3.用@Service注冊服務到dubbo,用@Component注解注冊到Spring

4.可以在duboo-admin里發現這個服務

 

消費者配置,先引入一樣的依賴

配置應用名字與注冊中心

#當前應用名字
dubbo.application.name=consumer-server
#注冊中心地址
dubbo.registry.address=zookeeper://127.0.0.1:218

使用@Reference注解,可以用pom坐標,也可以在本地建立一個一模一樣路徑的接口,然后調用RPC接口

 

36.未來

 微服務架構,要有四個業務

1.API網管,服務路由

2.HTTP/RPC通信,同步/異步調用

3.服務注冊,發現,治理,高可用

4.服務熔斷,異常處理

 

有二代技術

第零點五代,Dubbo+zookeeper,無法實現全部方案

第一個代,SpringClound,由此各個公司推出了不同技術,比如SpringCloud NetFlix,SpringCloud Alibaba

第二代,Service Mesh技術,k8s,Istio,

 

這些業務,解決的是網絡不可靠情況下的穩定性

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

y

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM