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();
}
}
}