<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      SpringBoot--實用開發

      SpringBoot實用開發

      熱部署

      熱部署是指在你修改項目BUG的時候對JSP或JAVA類進行了修改在不重啟WEB服務器前提下能讓修改生效。但是對配置文件的修改除外!

      導入springboot開發者工具坐標:

      <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-devtools</artifactId>
      </dependency>
      

      激活熱部署:ctrl+F9

      上面就是一次restart的過程

      • 自動啟動熱部署:

      ? 之后:ctrl+alt+shift+/ 之后選擇registry

      ?

      這樣之后idea失去焦點5秒后自動構建

      設置不參與熱部署文件

      如何禁用熱部署

      配置高級

      @ConfigurationProperties

      ConfigurationProperties可以配置第三方bean屬性

      如果不第三方屬性注入

      注入后運行:

      //Book就是被注入的類
      ConfigurableApplicationContext ctx = SpringApplication.run(DemoApplication.class,args);
      Book  book = ctx.getBean(Book.class);
      System.out.println(book);
      

      寬松綁定

      當我們用@ConfigurationProperties來綁定屬性時支持屬性名寬松綁定,@value就不行

      不論大小寫,有無下劃線,下面面這幾種格式都能和上面的屬性相匹配

      常用計量單位應用

      //在利用上面方法注入屬性時,1就代表1小時,其他分鐘,秒等類似
      @DurationUnit(ChronoUnit.HOURS)
      private Duration serverTimeOut;
      
      //大小,1代表1字節,其他和上面類似
          @DataSizeUnit(DataUnit.BYTES)
          private DataSize dataSize;
      

      數據校驗

      • 開啟數據校驗有助于系統安全性
      1. 導入校驗需要的坐標

        <dependency>
            <groupId>javax.validation</groupId>
            <artifactId>validation-api</artifactId>
        </dependency>
        
      2. 編寫

        @Component
        @Data//lombok提供的其中包括get set toString方法等,lombok還提供其他方法具體自行查看
        @ConfigurationProperties(prefix = "servers")//注入配置文件中的屬性值
        @Validated //開啟對當前bean的屬性注入校驗
        public class Book  {
        //    定制校驗規則,除了下面兩個其他如果需要的自行搜索
            @Max(value = 8888,message = "最大值不能超過8888")
            @Min(value = 202,message = "最小值不能小于202")
            private  int id;
            private  String type;
            private  String name;
            private  String description;
        }
        
      3. 使用hibernate框架提供的校驗器

        <dependency>
            <groupId>org.hibernate.validator</groupId>
            <artifactId>hibernate-validator</artifactId>
        </dependency>
        
      4. 測試

        ConfigurableApplicationContext ctx = SpringApplication.run(DemoApplication.class,args);
        Book  book = ctx.getBean(Book.class);
        System.out.println(book);
        
      5. 結果:

        image-20230823102356674

      另外如果Book類出現

      Spring Boot Configuration Annotation Processor not configured 。。但是不影響運行導入這個去掉爆紅

      <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-configuration-processor</artifactId>
          <optional>true</optional>
      </dependency>
      

      測試

      加載測試專用屬性和配置

      加載測試專用屬性

      //properties可以為測試添加臨時的屬性
      //@SpringBootTest(properties ={"test.prop=testValue1"})
      //args可以為測試用例添加臨時的命令行參數和上面可以達成一樣的效果
      @SpringBootTest(args = {"--test.prop=testvalye",""})
      class DemoApplicationTests {
      
          @Value("${test.prop}")
          private String msg;
          @Test
          void  testProperties(){
              System.out.println(msg);
          }
      
      }
      

      加載測試專用配置

      測試類中啟動web環境

      //參數:NONE-不啟動服務器 DEFINED_PORT以默認端口啟動服務器(和配置文件中配置的一樣)
      //RANDOM_PORT以隨機端口啟動服務器
      @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
      class DemoApplicationTests {
          @Test
          void  testProperties(){
          }
      }
      

      發送虛擬請求

      @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT)
      //開啟虛擬MVC調用
      @AutoConfigureMockMvc
      class DemoApplicationTests {
          @Test
          //注入虛擬mvc調用
          void  testProperties(@Autowired  MockMvc mvc) throws Exception {
              //http://localhost/books
      //        創建模擬請求
              MockHttpServletRequestBuilder builder = MockMvcRequestBuilders.get("/books");
      //        執行對應的請求
              mvc.perform(builder);
          }
      }
      

      匹配響應執行狀態

      @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT)
      //開啟虛擬MVC調用
      @AutoConfigureMockMvc
      class DemoApplicationTests {
          @Test
          //注入虛擬mvc調用
          void  testProperties(@Autowired  MockMvc mvc) throws Exception {
              //http://localhost/books
      //        創建模擬請求
              MockHttpServletRequestBuilder builder = MockMvcRequestBuilders.get("/books1");
      //        執行對應的請求,返回結果為是否成功的真實值
              ResultActions actions = mvc.perform(builder);
      
      
      //        設置預期值 與真實值進行比較,成功測試通過,失敗測試失敗
              StatusResultMatchers status = MockMvcResultMatchers.status();
      //        預計本處調用成功的:狀態200
              ResultMatcher ok = status.isOk();
      //        為本次調用結果設置一個預期值進行匹配
              actions.andExpect(ok);
          }
      }
      

      本處book1導致404,輸出結果是:

      匹配響應體

      和匹配執行狀態同理,只不過本處匹配的是return回去的結果

      @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT)
      //開啟虛擬MVC調用
      @AutoConfigureMockMvc
      class DemoApplicationTests {
          @Test
          //注入虛擬mvc調用
          void  testProperties(@Autowired  MockMvc mvc) throws Exception {
              //http://localhost/books
      //        創建模擬請求
              MockHttpServletRequestBuilder builder = MockMvcRequestBuilders.get("/books");
      //        執行對應的請求,返回結果為是否成功的真實值
              ResultActions actions = mvc.perform(builder);
      
              
              ContentResultMatchers content = MockMvcResultMatchers.content();
              //如果返回體直接返回的該對象,就是一個json格式,將本處的參數改為需要匹配的json格式就行
              ResultMatcher result = content.string("springboot");
              actions.andExpect(result);
          }
      }
      

      匹配響應頭

      @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT)
      @AutoConfigureMockMvc
      class DemoApplicationTests {
          @Test
          //注入虛擬mvc調用
          void  testProperties(@Autowired  MockMvc mvc) throws Exception {
              MockHttpServletRequestBuilder builder = MockMvcRequestBuilders.get("/books");
              ResultActions actions = mvc.perform(builder);
      
      
              HeaderResultMatchers header = MockMvcResultMatchers.header();
              //匹配響應頭的這個鍵值對
              ResultMatcher result = header.string("Content-Type","application/json");
              actions.andExpect(result);
          }
      }
      

      業務層測試事務回滾

      回滾可以實現在測試時不在數據庫留下痕跡

      @Transaction:表示事務

      Rollback 參數true表示啟用回滾

      測試用例設置隨機數據

      配置文件中:

      testcase:
        book: ${random.int}
        #限定范圍
        id: ${random.int(5,10)}
        name: ${random.value}
        uuid: ${random.uuid}
        publishTime: ${random.long}
      

      數據層解決方案一 基于關系型數據庫(sql)

      springboot默認的數據源

      例如:Hikaricp不用導入可以直接在配置文件配置:

      JDBCTemplate

      標準格式:

      配置:

      jdbc內置數據庫

      怎么用不多說

      數據層解決方案二 基于非關系型數據庫(nosql)

      市場常見的nosql解決方案

      • Redis
      • Mongo
      • ES

      Redis

      基本使用

      具體按照啟動自己看redis的筆記

      一些基本操作:

      springboot整合redis

      首先在cmd啟動redis,然后

      也可以不寫下面的配置,默認的就是localhost和6379

      直接用:

      其他方法類似不在多寫

      上面與客服端操作不等效把RedisTemplate改為StringRedisTemplate就和客戶端等效

      整合第三方技術

      緩存

      • 緩存是一種介于數據永久存儲介質和數據應用之間的數據臨時存儲介質
      • 使用緩存可以有效的減少低速讀取過程的次數(例如磁盤io),提高系統性能
      • 緩存不僅可以用于提高永久性介質的數據讀取效率,還可以通過臨時的數據存儲空間

      springboot提供了緩存技術,方便緩存使用

      1. 導入相關坐標

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-cache</artifactId>
        </dependency>
        
      2. 在啟動類加上注解

        //開啟緩存功能
        @EnableCaching
        
      3. 在需要用緩存的地方(查詢)加上

        @Override
        //設置返回值緩存到value參數名空間中的名和函數參數id相同的位置,下一次在調用且id相同就自己到緩存中拿出
        @Cacheable(value = "cacheSpace",key = "#id")
        public Book getById(Integer id) {
            return  bookDao.selectById(id);
        }
        
      • springboot除了上面的默認緩存方案外,還可以對其他緩存技術進行整合,統一接口,方便緩存技術的開發和管理,可以整合的技術包括:

      任務

      • 定時任務是企業級應用中的常見操作

        • 年度報表。。
        • 。。
      • 流行的定時任務技術

        • Quartz
        • Spring Task
      • 相關概念

      springboot整合spring tesk

      1. 在啟動類添加注解

        //開啟定時任務功能
        @EnableScheduling
        
      2. 在定時任務函數上加上注解

        //本處含義為每一秒執行一次任意分鐘、小時、天、月,不限情形
        @Scheduled(cron = "0/1 * * * * ?")
        public void print(){
            System.out.println("task");
        }
        

      如果你想也可以更改關于它的相關配置

      整合JavaMail

      • SMTP:簡單郵件傳輸協議,用于發送電子郵件的傳輸協議
      • POP3:用于接收電子郵件的標準協議
      • IMAP:互聯網消息協議,是POP3的替代協議

      步驟:

      1. 導入javamail坐標

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-mail</artifactId>
        </dependency>
        
      2. 配置相關信息

        spring:
          mail:
            #郵件供應商smtp協議,qq郵箱來發
            host: smtp.qq.com
            username: 124。。。@qq.com
        #    不是qq登錄密碼,是供應商提供的加密后密碼
            password: 。。。。
        

        獲取郵箱加密密碼:請求郵箱--設置--賬號--點擊開啟服務會獲得授權碼就是密碼

      3. 發送郵件

        @Service
        public class SentMailImpl implements SendMailService {
        
            //因為已被整合所以自動裝配就行
            @Autowired
            private JavaMailSender javaMailSender;
        
        //    發送人
            private String from = "@qq.com";
        //    接收人
            private String to ="@163.com";
        //    標題
            private String subject = "測試郵件";
        //    正文
            private String context = "正文內容";
            @Override
            public void sendMail() {
                SimpleMailMessage message = new SimpleMailMessage();
                //這樣收件人看到的的小蜜蜂發的郵件
                // message.setFrom(from+("小蜜蜂"));
                message.setFrom(from);
                message.setTo(to);
                message.setSubject(subject);
                message.setText(context);
        //        定時發送
        //        message.setSentDate();
                javaMailSender.send(message);
            }
        }
        

      ? 之后在測試類裝填調用方法

      上面是發送簡單文件,發送復雜郵件的方法:

      消息

      • 企業級應用中廣泛使用的三種異步消息傳遞技術

        • JMS
        • AMQP
        • MQTT
      • JMS

      • AMQP

      • MQTT

      監控

      posted @ 2023-09-04 13:47  云歸處、  閱讀(35)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 欧美人妻在线一区二区| 中文字幕国产精品一二区| 成人3D动漫一区二区三区| 芜湖县| 激情综合网激情五月我去也| 国产普通话刺激视频在线播放| 国产丰满乱子伦无码专区 | 国产亚洲欧美日韩在线一区| 中文字幕结果国产精品| 一区二区三区国产综合在线| 国产日产欧产系列| 性动态图无遮挡试看30秒| 成人一区二区三区激情视频 | 色综合五月伊人六月丁香| 两个人的视频www免费| 久久毛片少妇高潮| 少妇人妻av毛片在线看| 波多野结衣一区二区免费视频| 午夜福利影院不卡影院| 国产精品色内内在线观看| 欧美国产精品啪啪| 国产成人精品2021欧美日韩| 无码福利写真片视频在线播放| 浓毛老太交欧美老妇热爱乱| 99精品国产综合久久久久五月天 | 久久精品女人天堂av| 国产亚洲精品久久久久久久软件| 欧美乱妇高清无乱码免费| 一区二区三区人妻无码| 国産精品久久久久久久| 国内精品视频一区二区三区八戒 | 韩国免费a级毛片久久| 韩日午夜在线资源一区二区| 国产乱妇乱子视频在播放| 成人无码h真人在线网站| 久久精品国产免费观看频道| 偷拍专区一区二区三区| 中文字幕国产在线精品| 国产一区二区不卡在线| av天堂久久精品影音先锋| 亚洲精品一区二区美女|