第二章 第二個spring-boot程式

来源:http://www.cnblogs.com/java-zhao/archive/2016/03/30/5336369.html
-Advertisement-
Play Games

上一節的代碼是spring-boot的入門程式,也是官方文檔上的一個程式。這一節會引入spring-boot官方文檔推薦的方式來開發代碼,並引入我們在spring開發中service層等的調用。 1、代碼結構如下 2、pom.xml 1 <?xml version="1.0" encoding="U ...


上一節的代碼是spring-boot的入門程式,也是官方文檔上的一個程式。這一節會引入spring-boot官方文檔推薦的方式來開發代碼,並引入我們在spring開發中service層等的調用。

1、代碼結構如下

2、pom.xml

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 3     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
 4 
 5     <modelVersion>4.0.0</modelVersion>
 6 
 7     <groupId>com.xxx</groupId>
 8     <artifactId>myboot</artifactId>
 9     <version>1.0-SNAPSHOT</version>
10 
11     <properties>
12         <java.version>1.8</java.version><!-- 官方推薦 -->
13     </properties>
14     <!-- 引入spring-boot-starter-parent做parent是最好的方式, 
15          但是有時我們可能要引入我們自己的parent,此時解決方式有兩種: 
16          1)我們自己的parent的pom.xml的parent設為spring-boot-starter-parent(沒有做過驗證,但是感覺可行) 
17          2)使用springboot文檔中的方式:見spring-boot-1.2.5-reference.pdf的第13頁 
18     -->
19     <parent> 
20         <groupId>org.springframework.boot</groupId> 
21         <artifactId>spring-boot-starter-parent</artifactId> 
22         <version>1.2.5.RELEASE</version> 
23     </parent>
24 
25     <!-- <dependencyManagement>
26         <dependencies>
27             <dependency>
28                 Import dependency management from Spring Boot
29                 <groupId>org.springframework.boot</groupId>
30                 <artifactId>spring-boot-dependencies</artifactId>
31                 <version>1.2.5.RELEASE</version>
32                 <type>pom</type>
33                 <scope>import</scope>
34             </dependency>
35         </dependencies>
36     </dependencyManagement> -->
37 
38     <!-- 引入實際依賴 -->
39     <dependencies>
40         <dependency>
41             <groupId>org.springframework.boot</groupId>
42             <artifactId>spring-boot-starter-web</artifactId>
43         </dependency>
44     </dependencies>
45 
46     <build>
47         <plugins>
48             <!-- 用於將應用打成可直接運行的jar(該jar就是用於生產環境中的jar) 值得註意的是,如果沒有引用spring-boot-starter-parent做parent, 
49                 且採用了上述的第二種方式,這裡也要做出相應的改動 -->
50             <plugin>
51                 <groupId>org.springframework.boot</groupId>
52                 <artifactId>spring-boot-maven-plugin</artifactId>
53             </plugin>
54         </plugins>
55     </build>
56 </project>
View Code

說明:pom.xml文件與上一節的完全一樣。

 

3、Application.java

 1 package com.xxx.firstboot;
 2 
 3 import org.springframework.boot.SpringApplication;
 4 import org.springframework.boot.autoconfigure.SpringBootApplication;
 5 
 6 /**
 7  * @EnableAutoConfiguration:spring boot的註解,一般只用於主類,
 8  * 是無xml配置啟動的關鍵部分,明確指定了掃描包的路徑為其修飾的主類的包(這也就是為什麼主類要放在根包路徑下的原因)
 9  * 
10  * @ComponentScan 進行包的掃描,掃描路徑由@EnableAutoConfiguration指定了
11  * 
12  * 主類要位於根包路徑下,方便之後的掃描(We generally recommend that you locate your main application class in a root package above other classes.)
13  */
14 @SpringBootApplication        //same as @Configuration+@EnableAutoConfiguration+@ComponentScan
15 public class Application {
16     /**
17      * spring boot的入口,在整個子項目在內,
18      * 只能有一個main方法,否則spring boot啟動不起來
19      */
20     public static void main(String[] args) {
21         SpringApplication.run(Application.class, args);
22     }
23 
24 }
View Code

註意:

  • 主類要位於根包路徑下(例如,com.xxx.firstboot),這是推薦做法,方便掃描
  • 每一個jar(即每一個子項目)都要有一個主方法,用於啟動該jar(也就是一個微服務)
  • 在主類上添加註解@SpringBootApplication,該註解相當於添加瞭如下三個註解
    • @Configuration:該註解指明該類由spring容器管理
    • @EnableAutoConfiguration:該註解是無xml配置啟動的關鍵部分
    • @ComponentScan:該註解指定掃描包(如果主類不是位於根路徑下,這裡需要指定掃描路徑),類似於spring的包掃描註解

 

4、application.properties

1 #user info
2 user.id=1
3 user.username=zhaojigang
4 user.password=123
View Code

註意:

  • application.properties文件是spring-boot的預設文件,一般各種配置(包括:數據源配置,httpclient配置等)都配在這裡就好

 

5、User.java

 1 package com.xxx.firstboot.domain;
 2 
 3 import org.springframework.boot.context.properties.ConfigurationProperties;
 4 import org.springframework.stereotype.Component;
 5 
 6 /**
 7  * @ConfigurationProperties(prefix="user")
 8  * 自動讀取application.properties(是spring-boot預設查找的文件)文件中的user.*的屬性
 9  * 在沒有使用@ConfigurationProperties的情況下,可以使用@Value("${user.id}")來一個個指定屬性的值
10  * 
11  * 註意:如果要使用@ConfigurationProperties和@Value,需要將該bean添加@Component,
12  * 因為在後邊的對該類的使用中,需要直接將該類使用@Autowire註解註入,這樣這些屬性的自動註入才起作用,
13  * 具體使用查看"UserService"
14  */
15 @Component
16 @ConfigurationProperties(prefix="user")
17 public class User {
18     
19     //@Value("${user.id}")
20     private int id;
21     
22     //@Value("wangna")
23     private String username;
24     
25     private String password;
26 
27     public int getId() {
28         return id;
29     }
30 
31     public void setId(int id) {
32         this.id = id;
33     }
34 
35     public String getUsername() {
36         return username;
37     }
38 
39     public void setUsername(String username) {
40         this.username = username;
41     }
42 
43     public String getPassword() {
44         return password;
45     }
46 
47     public void setPassword(String password) {
48         this.password = password;
49     }
50 
51 }
View Code

註意:

  • 該類就是一個普通的model,在ssm框架中我們並沒有將這樣的model歸給spring容器去管理,在這裡使用@Component註解將其交由spring容器去處理,這樣在之後的使用中,就可以直接將該model註入到其使用類中。
  • 在該類上添加了@ConfigurationProperties(prefix="user")註解,這樣的意思就是可以自動掃描application.properties文件相關首碼的配置,並根據名稱配置到該類的每一個屬性上去
  • 也可以在屬性上使用@Value註解單獨復值,當然前提是沒有配置@ConfigurationProperties,如果配置了,@Value註解失效

 

6、UserService.java

 1 package com.xxx.firstboot.service;
 2 
 3 import org.springframework.beans.factory.annotation.Autowired;
 4 import org.springframework.stereotype.Service;
 5 
 6 import com.xxx.firstboot.domain.User;
 7 
 8 @Service
 9 public class UserService {
10     
11     @Autowired
12     private User user;
13     
14     public User getUser(){
15         return user;
16     }
17 
18 }
View Code

註意:

  • 這裡直接註入了User,這和類正是上邊的那個model

 

7、UserController.java

 1 package com.xxx.firstboot.web;
 2 
 3 import org.springframework.beans.factory.annotation.Autowired;
 4 import org.springframework.web.bind.annotation.RequestMapping;
 5 import org.springframework.web.bind.annotation.RestController;
 6 
 7 import com.xxx.firstboot.domain.User;
 8 import com.xxx.firstboot.service.UserService;
 9 /**
10  * @RestController:spring mvc的註解,
11  * 相當於@Controller與@ResponseBody的合體,可以直接返回json
12  */
13 @RestController
14 @RequestMapping("/user")
15 public class UserController {
16 
17     @Autowired
18     private UserService userService;
19 
20     @RequestMapping("/getUser")
21     public User getUser() {
22         return userService.getUser();
23     }
24 
25 }
View Code

 

說明:

  • 這個類其實就是開發中,開發一個spring-boot程式的最基本最常用的方式。(在微服務應用中,用到類似於"Java企業應用開發實踐"系列中的父子模塊開發,之後再說)
  • 相對於ssm而言,spring-boot的讀取屬性文件的方式也相當容易,讀取屬性文件常用的三種方式
    • 使用FileUtil去讀:見第一章 屬性文件操作工具類
    • 使用如上的註解實現(最推薦的方式)
    • 使用Environment這個類來獲取就行(這個可能寫錯類名了)

對於spring-boot而言,其本身有很多集成的jar包(見下邊),我們可以根據自己的需求引入相應的jar,但是暫無與mybatis集成的jar。

spring-boot相關的依賴包(可以根據需求自己引入):


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 最近在學習PKI,順便接觸了一些加密演算法。對RSA著重研究了一下,自己也寫了一個簡單的實現RSA演算法的Demo,包括公、私鑰生成,加解密的實現。雖然比較簡單,但是也大概囊括了RSA加解密的核心思想與流程。這裡寫下來與大家分享一下。 RSA概述: RSA是目前最有影響力的公鑰加密演算法,它能夠抵抗到目前 ...
  • 文/JC_Huang(簡書作者)原文鏈接:http://www.jianshu.com/p/f4d7827821f1著作權歸作者所有,轉載請聯繫作者獲得授權,並標註“簡書作者”。 產品分析 首先我們來看一下市場上關於消息的實現是怎麼樣的。 簡書 簡書的消息系統主要分了兩種 簡信 提醒 簡信簡信的性質 ...
  • 使用Nginx代理多台伺服器實行負載的時候,如何查看某一個請求被轉發到哪台伺服器上呢? 加上如下紅色配置: 重啟Nginx,重新訪問,在瀏覽器中F12查看request的Headers信息,可以看到當前伺服器的IP ...
  • 問題 昨天看到一篇博文,文中談到一道 Java 面試題: 給定一字元串,若該字元串中間包含 "*",則刪除該 "*";若該字元串首字元或尾字元為 "*",則保留該 "*"。 舉幾個例子(箭頭左邊為輸入,箭頭右邊為輸出): * --> * ** --> ** **** --> ** *ab**de** ...
  • 本文章向碼農們介紹PHP使用fopen與file_get_contents讀取文件實例分享及這兩個函數的區別,需要的碼農可以參考一下。 php中讀取文件可以使用fopen和file_get_contents這兩個函數,二者之間沒有本質區別,只是前者讀取文件的php代碼相比後者要複雜一點。本文章通過實 ...
  • 我一直在不斷的提示大家:FP就是Monadic Programming,是一種特殊的編程風格。在我們熟悉的資料庫編程領域能不能實現FP風格呢?我們先設計一些示範例子來分析一下慣用的資料庫編程過程: 我這裡模擬了一個培訓學校內的一些業務。上面設計的是一些基本函數,可以分別對學員、導師、座位進行查詢和更 ...
  • 27.Java中垃圾回收的目的及回收的時機 垃圾回收的目的是識別並且丟棄不再使用的對象來釋放和重用資源. 如果對象的引用被置為null,垃圾收集器不會立即釋放對象占用的記憶體. 什麼時候進行垃圾回收,主要取決於JVM.可以參考 http://www.cnblogs.com/lrh-xl/p/52924 ...
  • 本課程針對零基礎的學生,或者學習編程很久,但是從來沒有動手作出一個東西的學生。 尚學堂老師精心設計項目開發流程,讓你在60分鐘內,從安裝java開發環境,使用eclipse開發環境,一直到開發出一個 撞球小游戲。 讓你驀然發現,學習編程是件多麼有意思的事情。 教程下載地址:http://www.bj ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...