SpringBoot 開局篇

SpringBoot

SpringBoot 是什麼

 SpringBoot 是為了簡化配置文件開發的一種解決方案
 SpringBoot 遵從 規範大於配置
 SpringBoot 內置傳統 Spring 能夠整合的所有框架的配置文件,所以項目可以獨立運行,無需依賴外部的 Servlet 容器

SpringBoot 能幹什麼

 內置了框架的配置文件,在進行框架整合的時候不需要寫 或者 寫很少的配置就能完成一個框架的整合功能
 備註:SpringBOot 中的所有框架的配置文件都是通過 Java 程式碼來編寫的

SpringBoot 開發模式的寫法

###

SpringBoot 如何實現自動配置(源碼分析)

疑問:在 SpringBoot 啟動的同時是否將 SpringBoot 內置的上百個框架都給配置了呢?

 在 SpringBoot 啟動的時候,他會去讀取一個清單文件,清單文件中表明了所有的自動配置類
 然後通過自動配置類中的 條件註解 進行判斷當前配置是否 使能,若 使能,則配置,否則不配置;
 使能的條件則是通過 條件註解 去判斷

SpringBoot 的全局配置

 全局參數使用場景:
 1、整合資料庫,配置資料庫鏈接的四要素
 2、整合 Redis,主機,埠,密碼
 3、整合 SpringMVC, 前端傳遞參數的格式
 4、服務埠 .....

全局配置在創建項目時便默認在 resources 目錄下 application.properties

eg:

 # 給 SpringBoot 項目取個名字
 spring.application.name=lgl
 ​
 # 給服務設置埠
 server.port=9999
 ​
 # 設置 banner 的路徑
 spring.banner.location=classpath:banner.txt
 ​
 # 設置 banner 圖片
     # 圖片地址
 spring.banner.image.location=classpath:banner.jpg
     # 圖片 寬 高
 spring.banner.image.height=76
 spring.banner.image.width=76
     # 圖片邊幅
 spring.banner.image.margin=2
 # 圖片反轉
 spring.banner.image.invert=true
 ​
 # 給指定包設置日誌級別
 logging.level.org.itword.study=info
 ​
 # 設置 SpringMVC 相關參數
 spring.mvc.date-format=yyyy-MM-dd HH:mm:ss.SSS
 ​
 # Elasticsearch
 spring.data.elasticsearch.cluster-name=elasticsearch
 # Comma-separated list of cluster node addresses. If not specified, starts a client node.
 spring.data.elasticsearch.cluster-nodes=
 # Additional properties used to configure the client.
 spring.data.elasticsearch.properties.*=
 # Enable Elasticsearch repositories.
 spring.data.elasticsearch.repositories.enabled=true

SpringBoot 中的 Starter POM 問題

Starter POM 是啥?

在 SpringBoot 中為了簡化開發配置,需要導入使用場景,導入後就能夠導入該場景下的所有包,以此實現自動配置

SpringBoot 的使用場景有哪些?

image-20220329232742561

image-20220329232754850

image-20220329232801300

 

SpringBoot 中常規的 MVC 配置

攔截器配置

  • 攔截器類

     @Component
     public class AuthenticationInterceptor implements HandlerInterceptor {
     ​
         private final Logger logger = LoggerFactory.getLogger(AuthenticationInterceptor.class);
         /**
          * 用來攔截
          * @param request
          * @param response
          * @param handler
          * @return false 表示攔截,true 表示不攔截
          * @throws Exception
          */
         @Override
         public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
             logger.info("----------------------接收請求,開始攔截----------------------");
             return true;
        }
     ​
     }

     

  • 添加攔截器

     @Configuration
     public class WebMvcConfig extends WebMvcConfigurationSupport {
     ​
         @Autowired
         private AuthenticationInterceptor interceptor;
     ​
         /**
          * 添加攔截器
          * @param registry
          */
         @Override
         protected void addInterceptors(InterceptorRegistry registry) {
             registry.addInterceptor(interceptor);
             super.addInterceptors(registry);
        }
     }

     

過濾器配置

消息轉換器配置

  1. 第一種方式

     @Configuration
     @ComponentScan(basePackages = "org.itword.study")
     public class AppConfig {
     ​
         /**
          * 配置 SpringMVC 消息轉換器
          * 若配置類中沒有配置該條件則使用場景內的默認配置;若配置類中存在該實體配置 bean ,則讀取自定義配置 bean,場景內的默認 bean 就不生效
          * @return
          */
         @Bean
         public FastJsonHttpMessageConverter fastJsonHttpMessageConverter(){
             FastJsonHttpMessageConverter fastJson = new FastJsonHttpMessageConverter();
             fastJson.setDefaultCharset(Charset.forName("UTF-8"));
             return fastJson;
        }
     ​
         /**
          * 如果返回的是字元串,則使用該消息轉換器來配置
          * @return
          */
         @Bean
         public StringHttpMessageConverter stringHttpMessageConverter (){
             StringHttpMessageConverter stringJson = new StringHttpMessageConverter(Charset.defaultCharset());
             return stringJson;
        }
     ​
     }

     

  2. 第二種方式

     @Configuration
     public class WebMvcConfig extends WebMvcConfigurationSupport {
     ​
         @Override
         protected void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
             FastJsonHttpMessageConverter fastJsonHttpMessageConverter = new FastJsonHttpMessageConverter();
             fastJsonHttpMessageConverter.setDefaultCharset(Charset.forName("ISO-8859-1"));
     ​
             StringHttpMessageConverter stringMessageConverter = new StringHttpMessageConverter();
             stringMessageConverter.setDefaultCharset(Charset.forName("ISO-8859-1"));
     ​
             converters.add(fastJsonHttpMessageConverter);
             converters.add(stringMessageConverter);
     ​
             super.configureMessageConverters(converters);
        }
     }

     

     

  3.