1. 程式人生 > >spring boot 的基本使用和簡訊微服務的搭建

spring boot 的基本使用和簡訊微服務的搭建

1.spring boot簡介:
  1)spring boot是基於spring開發的,提供了一種快速使用spring的方式,無需xml配置檔案

  2)解決的問題:
    大量配置
    依賴問題
    重複性配置

  3)springboot思想:
    自動配置
    起步依賴:需要什麼功能,就引入需要的庫
    命令列頁面
    actuator


2.入門使用:
  1)建立一個jar工程 //使用spring建立web工程時,打包方式選擇jar,因為spring boot內建了tomcat
  2)起步依賴: //原理:依賴傳遞
    通過spring boot 啟動器,進行依賴的快速新增,如一個web工程只需要引入兩個依賴:

    <parent> 
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-parent</artifactId> //定義父啟動器
      <version>1.4.0.RELEASE</version>
    </parent>
    <dependencies>
      <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId> //匯入web啟動器
      </dependency>
    </dependencies>


  3)變更jdk版本 //預設為jdk1.6
    只需要在pom.xml中配置一個常量即可:
    <properties>
      <java.version>1.7</java.version>
    </properties>

  4)引導類:用於啟動spring boot工程
    1)只需要建立一個類Application,編寫main方法,在main方法中新增一個run方法即可,在類上添加註解:@SpringBootApplication

      @SpringBootApplication
      public class Application {
        public static void main(String[] args) {
          SpringApplication.run(Application.class, args); //第一個引數為本類的.class,第二個args對應main方法的引數
        }
      }

     2)直接執行這個main方法即可啟動spring boot工程

  5)helloWorldController類的編寫: //就是一個springmvc的Controller:
    @RestController
    public class HelloWorldController {

      @RequestMapping("/info")
      public String info(){
        return "HelloWorld";
      }
    }

  6)直接啟動引導類,即可啟動這個工程:在瀏覽器位址列輸入 http://localhost:8080/info 即可看到執行結果

  原理:引導類的main方法上的@SpringBootApplication會對工程進行預設的配置。會掃描與引導類在同一個包下的類上的註解


  7)spring boot工程預設埠為8080,修改埠的方式:
    1)在 src/main/resources 下建立 application.properties //這個檔案的名稱固定
    2)在檔案中配置埠的常量: //重新啟動工程,即可生效
      server.port=9001
    3)也可以在這個配置檔案中自定義自己需要的屬性:
      url=www.baidu.com

  8)配置檔案application.properties中的屬性值的獲取

    1)在需要獲取屬性的類中注入一個Environment物件:
      @Autowired
      private Environment env; //注意這個Environment所在的包:...env包下

    2)直接呼叫Environment的getProperty()即可
      env.getProperty("url");

    @RestController
    public class HelloWorldController {

      @Autowired
      private Environment env;

      @RequestMapping("/info")
      public String info(){
        return "HelloWorld~~"+env.getProperty("url");
      }
    }

  9)spring boot工程的熱部署:
    我們在開發中反覆修改類、頁面等資源,每次修改後都是需要重新啟動才生效,這樣每次啟動都很麻煩,浪費了大量的時間。可以在pom.xml 中新增如下配置實現spring boot工程的熱部署:

    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-devtools</artifactId> //新增這個依賴後,修改配置檔案或類中內容時,不需要重新啟動即可生效
    </dependency>

3.sprign boot 和activemq的整合:
  1)加入activemq的啟動依賴:
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-activemq</artifactId>
    </dependency>

  2)訊息生產者的編寫
    @RestController
    public class QueueController {
      @Autowired
      private JmsMessagingTemplate jmsMessagingTemplate; //注入模板

      @RequestMapping("/send")
      public void send(String text){
        jmsMessagingTemplate.convertAndSend("itcast", text); //通過模板傳送訊息,第一個引數為訊息名稱,第二個引數為訊息內容
      }
    }

  注意:也可直接傳送一個Map物件的訊息,將上面方法中的text改為需要傳送的Map物件即可

  3)訊息消費者:
    @Component
    public class Consumer {
      @JmsListener(destination="itcast") //添加註解監聽"itcast"訊息
      public void readMessage(String text){ //方法的引數即為接收到的訊息,引數型別與訊息型別對應 //如果接收的是Map,則引數要為Map型別
        System.out.println("接收到訊息:"+text);
      }
    }

  注意:上面使用的activemq使用的是spring boot 內嵌的服務。使用外部的activemq的方法:
  在application.properties中配置一個常量即可:
  spring.activemq.broker-url=tcp://192.168.25.135:61616 //常量名稱固定,ip為外部activemq的IP


4.簡訊微服務:業務輕量級,獨立實現某個功能
  1)建立工程,匯入依賴:
    2)配置jdk版本為1.7
    3)spring-boot-starter-parent //啟動器父包
    4)spring-boot-starter-web //web工程包
    5)spring-boot-starter-activemq //activemq包
    6)aliyun-java-sdk-dysmsapi //阿里大於發簡訊的包
    7)aliyun-java-sdk-core //阿里大於發簡訊的包

  2)建立引導類 //同上面的引導類
  3)建立配置檔案 application.properties
    server.port=9003 //配置埠
    spring.activemq.broker-url=tcp://192.168.25.135:61616 //配置連線activemq的ip埠
    accessKeyId=不告訴你 //配置發簡訊的id
    accessKeySecret=不告訴你 //配置發簡訊的金鑰

  4)建立發簡訊的工具類: //參考阿里大於發簡訊的工具類

    @Component //需要加入
    public class SmsUtil { //對應阿里大於中的

    @Autowired
    private Environment env; //注入Environment獲取配置檔案資訊

    public SendSmsResponse sendSms(String mobile,String template_code,String //方法中的需要的引數放在形參中動態獲取
   sign_name,String param) throws ClientException {

  5)編寫訊息監聽類 //訊息消費者
    @Component
    public class SmsListener {
      @Autowired
      private SmsUtil smsUtil;

      @JmsListener(destination="sms")
      public void sendSms(Map<String,String> map){
        try {
          SendSmsResponse response = smsUtil.sendSms(
            map.get("mobile"),
            map.get("template_code"),
            map.get("sign_name"),
            map.get("param") );
            System.out.println("Code=" + response.getCode());
            System.out.println("Message=" + response.getMessage());
            System.out.println("RequestId=" + response.getRequestId());
            System.out.println("BizId=" + response.getBizId());
        } catch (ClientException e) {
          e.printStackTrace();
        }
      }
    }