Spring Boot 是微服務(wù)中最好的 Java 框架. 我們建議你能夠成為一名 Spring Boot 的專家。 問(wèn)題一 Spring Boot、Spring MVC 和 Spring 有什么區(qū)別? SpringFrame
當(dāng)我們恰當(dāng)?shù)氖褂?DI 或者是 IOC 的時(shí)候,我們可以開發(fā)松耦合應(yīng)用。松耦合應(yīng)用的單元測(cè)試可以很容易的進(jìn)行。 SpringMVC
SpringBootSpring 和 SpringMVC 的問(wèn)題在于需要配置大量的參數(shù)。
Spring Boot 通過(guò)一個(gè)自動(dòng)配置和啟動(dòng)的項(xiàng)來(lái)目解決這個(gè)問(wèn)題。為了更快的構(gòu)建產(chǎn)品就緒應(yīng)用程序,Spring Boot 提供了一些非功能性特征。 問(wèn)題二 什么是自動(dòng)配置? Spring 和 SpringMVC 的問(wèn)題在于需要配置大量的參數(shù)。
我們能否帶來(lái)更多的智能?當(dāng)一個(gè) MVC JAR 添加到應(yīng)用程序中的時(shí)候,我們能否自動(dòng)配置一些 beans?
問(wèn)題三 什么是 Spring Boot Stater ?
例如,如果你想使用 Sping 和 JPA 訪問(wèn)數(shù)據(jù)庫(kù),只需要你的項(xiàng)目包含 spring-boot-starter-data-jpa 依賴項(xiàng),你就可以完美進(jìn)行。 問(wèn)題四 你能否舉一個(gè)例子來(lái)解釋更多 Staters 的內(nèi)容? 讓我們來(lái)思考一個(gè) Stater 的例子 -Spring Boot Stater Web。 如果你想開發(fā)一個(gè) web 應(yīng)用程序或者是公開 REST 服務(wù)的應(yīng)用程序。Spring Boot Start Web 是首選。讓我們使用 Spring Initializr 創(chuàng)建一個(gè) Spring Boot Start Web 的快速項(xiàng)目。 Spring Boot Start Web 的依賴項(xiàng)
下面的截圖是添加進(jìn)我們應(yīng)用程序的不同的依賴項(xiàng) 依賴項(xiàng)可以被分為 Spring - core,beans,context,aop Web MVC - (Spring MVC) Jackson - for JSON Binding Validation - Hibernate,Validation API Enbedded Servlet Container - Tomcat Logging - logback,slf4j 任何經(jīng)典的 Web 應(yīng)用程序都會(huì)使用所有這些依賴項(xiàng)。Spring Boot Starter Web 預(yù)先打包了這些依賴項(xiàng)。
問(wèn)題五 Spring Boot 還提供了其它的哪些 Starter Project Options? Spring Boot 也提供了其它的啟動(dòng)器項(xiàng)目包括,包括用于開發(fā)特定類型應(yīng)用程序的典型依賴項(xiàng)。 spring-boot-starter-web-services - SOAP Web Services spring-boot-starter-web - Web 和 RESTful 應(yīng)用程序 spring-boot-starter-test - 單元測(cè)試和集成測(cè)試 spring-boot-starter-jdbc - 傳統(tǒng)的 JDBC spring-boot-starter-hateoas - 為服務(wù)添加 HATEOAS 功能 spring-boot-starter-security - 使用 SpringSecurity 進(jìn)行身份驗(yàn)證和授權(quán) spring-boot-starter-data-jpa - 帶有 Hibeernate 的 Spring Data JPA spring-boot-starter-data-rest - 使用 Spring Data REST 公布簡(jiǎn)單的 REST 服務(wù) 問(wèn)題六 Spring 是如何快速創(chuàng)建產(chǎn)品就緒應(yīng)用程序的? Spring Boot 致力于快速產(chǎn)品就緒應(yīng)用程序。為此,它提供了一些譬如高速緩存,日志記錄,監(jiān)控和嵌入式服務(wù)器等開箱即用的非功能性特征。 spring-boot-starter-actuator - 使用一些如監(jiān)控和跟蹤應(yīng)用的高級(jí)功能 spring-boot-starter-undertow, spring-boot-starter-jetty, spring-boot-starter-tomcat - 選擇您的特定嵌入式 Servlet 容器 spring-boot-starter-logging - 使用 logback 進(jìn)行日志記錄 spring-boot-starter-cache - 啟用 Spring Framework 的緩存支持 ###Spring2 和 Spring5 所需要的最低 Java 版本是什么? Spring Boot 2.0 需要 Java8 或者更新的版本。Java6 和 Java7 已經(jīng)不再支持。 推薦閱讀: https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-2.0.0-M1-Release-Notes 問(wèn)題七 創(chuàng)建一個(gè) Spring Boot Project 的最簡(jiǎn)單的方法是什么? Spring Initializr是啟動(dòng) Spring Boot Projects 的一個(gè)很好的工具。
問(wèn)題八 Spring Initializr 是創(chuàng)建 Spring Boot Projects 的唯一方法嗎? 不是的。 Spring Initiatlizr 讓創(chuàng)建 Spring Boot 項(xiàng)目變的很容易,但是,你也可以通過(guò)設(shè)置一個(gè) maven 項(xiàng)目并添加正確的依賴項(xiàng)來(lái)開始一個(gè)項(xiàng)目。 在我們的 Spring 課程中,我們使用兩種方法來(lái)創(chuàng)建項(xiàng)目。 第一種方法是 start. 。 手動(dòng)設(shè)置一個(gè) maven 項(xiàng)目 這里有幾個(gè)重要的步驟:
到這里,準(zhǔn)備工作已經(jīng)做好! 問(wèn)題九 為什么我們需要 spring-boot-maven-plugin? spring-boot-maven-plugin 提供了一些像 jar 一樣打包或者運(yùn)行應(yīng)用程序的命令。
問(wèn)題十 如何使用 SpringBoot 自動(dòng)重裝我的應(yīng)用程序? 使用 Spring Boot 開發(fā)工具。 把 Spring Boot 開發(fā)工具添加進(jìn)入你的項(xiàng)目是簡(jiǎn)單的。 把下面的依賴項(xiàng)添加至你的 Spring Boot Project pom.xml 中
重啟應(yīng)用程序,然后就可以了。 同樣的,如果你想自動(dòng)裝載頁(yè)面,有可以看看 FiveReload
在我測(cè)試的時(shí)候,發(fā)現(xiàn)了 LiveReload 漏洞,如果你測(cè)試時(shí)也發(fā)現(xiàn)了,請(qǐng)一定要告訴我們。 問(wèn)題十一 什么是嵌入式服務(wù)器?我們?yōu)槭裁匆褂们度胧椒?wù)器呢? 思考一下在你的虛擬機(jī)上部署應(yīng)用程序需要些什么。 第一步: 安裝 Java 第二部: 安裝 Web 或者是應(yīng)用程序的服務(wù)器(Tomat/Wbesphere/Weblogic 等等) 第三部: 部署應(yīng)用程序 war 包 如果我們想簡(jiǎn)化這些步驟,應(yīng)該如何做呢? 讓我們來(lái)思考如何使服務(wù)器成為應(yīng)用程序的一部分?
這個(gè)想法是嵌入式服務(wù)器的起源。 當(dāng)我們創(chuàng)建一個(gè)可以部署的應(yīng)用程序的時(shí)候,我們將會(huì)把服務(wù)器(例如,tomcat)嵌入到可部署的服務(wù)器中。
嵌入式服務(wù)器就是我們的可執(zhí)行單元包含服務(wù)器的二進(jìn)制文件(例如,tomcat.jar)。 問(wèn)題十二 如何在 Spring Boot 中添加通用的 JS 代碼? 在源文件夾下,創(chuàng)建一個(gè)名為 static 的文件夾。然后,你可以把你的靜態(tài)的內(nèi)容放在這里面。 例如,myapp.js 的路徑是 resources\static\js\myapp.js 你可以參考它在 jsp 中的使用方法
錯(cuò)誤:HAL browser gives me unauthorized error - Full authenticaition is required to access this resource. 該如何來(lái)修復(fù)這個(gè)錯(cuò)誤呢? { 'timestamp': 1488656019562, 'status': 401, 'error': 'Unauthorized', 'message': 'Full authentication is required to access this resource.', 'path': '/beans'} 兩種方法: 方法 1:關(guān)閉安全驗(yàn)證application.properties management.security.enabled:FALSE 方法二:在日志中搜索密碼并傳遞至請(qǐng)求標(biāo)頭中問(wèn)題十三 什么是 Spring Date? 來(lái)自://projects./spring- data/
為了讓它更簡(jiǎn)單一些,Spring Data 提供了不受底層數(shù)據(jù)源限制的 Abstractions 接口。 下面來(lái)舉一個(gè)例子 interface TodoRepository extends CrudRepository 你可以定義一簡(jiǎn)單的庫(kù),用來(lái)插入,更新,刪除和檢索代辦事項(xiàng),而不需要編寫大量的代碼。 問(wèn)題十四 什么是 Spring Data REST? Spring Data TEST 可以用來(lái)發(fā)布關(guān)于 Spring 數(shù)據(jù)庫(kù)的 HATEOAS RESTful 資源。 下面是一個(gè)使用 JPA 的例子 @RepositoryRestResource(collectionResourceRel = 'todos', path = 'todos')public interface TodoRepository extends PagingAndSortingRepository 不需要寫太多代碼,我們可以發(fā)布關(guān)于 Spring 數(shù)據(jù)庫(kù)的 RESTful API。 下面展示的是一些關(guān)于 TEST 服務(wù)器的例子 POST
代碼如下 { 'user': 'Jill', 'desc': 'Learn Hibernate', 'done': false} 響應(yīng)內(nèi)容 { 'user': 'Jill', 'desc': 'Learn Hibernate', 'done': false, '_links': {'self': { 'href': 'http://localhost:8080/todos/1'},'todo': { 'href': 'http://localhost:8080/todos/1'} }} 響應(yīng)包含新創(chuàng)建資源的 href。 問(wèn)題十五 path=”users”, collectionResourceRel=”users” 如何與 Spring Data Rest 一起使用? @RepositoryRestResource(collectionResourceRel = 'users', path = 'users')public interface UserRestRepository extendsPagingAndSortingRepository
問(wèn)題十六 當(dāng) Spring Boot 應(yīng)用程序作為 Java 應(yīng)用程序運(yùn)行時(shí),后臺(tái)會(huì)發(fā)生什么? 如果你使用 Eclipse IDE,Eclipse maven 插件確保依賴項(xiàng)或者類文件的改變一經(jīng)添加,就會(huì)被編譯并在目標(biāo)文件中準(zhǔn)備好!在這之后,就和其它的 Java 應(yīng)用程序一樣了。 當(dāng)你啟動(dòng) java 應(yīng)用程序的時(shí)候,spring boot 自動(dòng)配置文件就會(huì)魔法般的啟用了。
問(wèn)題十七 我們能否在 spring-boot-starter-web 中用 jetty 代替 tomcat? 在 spring-boot-starter-web 移除現(xiàn)有的依賴項(xiàng),并把下面這些添加進(jìn)去。
問(wèn)題十八 如何使用 Spring Boot 生成一個(gè) WAR 文件? 推薦閱讀:
下面有 spring 說(shuō)明文檔直接的鏈接地址:
問(wèn)題十九 如何使用 Spring Boot 部署到不同的服務(wù)器? 你需要做下面兩個(gè)步驟:
第一步:這本入門指南應(yīng)該有所幫助: 第二步:取決于你的服務(wù)器。 問(wèn)題二十 RequestMapping 和 GetMapping 的不同之處在哪里?
問(wèn)題二十一 為什么我們不建議在實(shí)際的應(yīng)用程序中使用 Spring Data Rest? 我們認(rèn)為 Spring Data Rest 很適合快速原型制造!在大型應(yīng)用程序中使用需要謹(jǐn)慎。 通過(guò) Spring Data REST 你可以把你的數(shù)據(jù)實(shí)體作為 RESTful 服務(wù)直接發(fā)布。 當(dāng)你設(shè)計(jì) RESTful 服務(wù)器的時(shí)候,最佳實(shí)踐表明,你的接口應(yīng)該考慮到兩件重要的事情:
通過(guò) With Spring Data REST,你不需要再考慮這兩個(gè)方面,只需要作為 TEST 服務(wù)發(fā)布實(shí)體。 這就是為什么我們建議使用 Spring Data Rest 在快速原型構(gòu)造上面,或者作為項(xiàng)目的初始解決方法。對(duì)于完整演變項(xiàng)目來(lái)說(shuō),這并不是一個(gè)好的注意。 問(wèn)題二十二 在 Spring Initializer 中,如何改變一個(gè)項(xiàng)目的包名字? 好消息是你可以定制它。點(diǎn)擊鏈接“轉(zhuǎn)到完整版本”。你可以配置你想要修改的包名稱! 問(wèn)題二十三 可以配置 application.propertierde 的完整的屬性列表在哪里可以找到? 這里是完整的指南:
問(wèn)題二十四 JPA 和 Hibernate 有哪些區(qū)別? 簡(jiǎn)而言之
當(dāng)我們使用 JPA 的時(shí)候,我們使用 javax.persistence 包中的注釋和接口時(shí),不需要使用 hibernate 的導(dǎo)入包。 我們建議使用 JPA 注釋,因?yàn)榕段覀儧]有將其綁定到 Hibernate 作為實(shí)現(xiàn)。后來(lái)(我知道 - 小于百分之一的幾率),我們可以使用另一種 JPA 實(shí)現(xiàn)。 問(wèn)題二十五 業(yè)務(wù)邊界應(yīng)該從哪一層開始? 我們建議在服務(wù)層管理義務(wù)。商業(yè)業(yè)務(wù)邏輯在商業(yè)層或者服務(wù)層,與此同時(shí),你想要執(zhí)行的業(yè)務(wù)管理也在該層。 問(wèn)題二十六 使用 Spring Boot 啟動(dòng)連接到內(nèi)存數(shù)據(jù)庫(kù) H2 的 JPA 應(yīng)用程序需要哪些依賴項(xiàng)? 在 Spring Boot 項(xiàng)目中,當(dāng)你確保下面的依賴項(xiàng)都在類路里面的時(shí)候,你可以加載 H2 控制臺(tái)。
其它的依賴項(xiàng)在下面:
需要注意的一些地方:
問(wèn)題二十七 如何不通過(guò)任何配置來(lái)選擇 Hibernate 作為 JPA 的默認(rèn)實(shí)現(xiàn)? 因?yàn)?Spring Boot 是自動(dòng)配置的。 下面是我們添加的依賴項(xiàng)
spring-boot-stater-data-jpa 對(duì)于 Hibernate 和 JPA 有過(guò)渡依賴性。 當(dāng) Spring Boot 在類路徑中檢測(cè)到 Hibernate 中,將會(huì)自動(dòng)配置它為默認(rèn)的 JPA 實(shí)現(xiàn)。 問(wèn)題二十八 指定的數(shù)據(jù)庫(kù)連接信息在哪里?它是如何知道自動(dòng)連接至 H2 的? 這就是 Spring Boot 自動(dòng)配置的魔力。 來(lái)自:https://docs./spring-boot/docs/current/reference/html/using-boot-auto-configuration.html Spring Boot auto-configuration 試圖自動(dòng)配置你已經(jīng)添加的基于 jar 依賴項(xiàng)的 Spring 應(yīng)用程序。比如說(shuō),如果 HSQLDBis 存在你的類路徑中,并且,數(shù)據(jù)庫(kù)連接 bean 還沒有手動(dòng)配置,那么我們可以自動(dòng)配置一個(gè)內(nèi)存數(shù)據(jù)庫(kù)。 進(jìn)一步的閱讀: http://www./spring-boot-auto-configuration 問(wèn)題二十九 我們?nèi)绾芜B接一個(gè)像 MSSQL 或者 orcale 一樣的外部數(shù)據(jù)庫(kù)? 讓我們以 MySQL 為例來(lái)思考這個(gè)問(wèn)題: 第一步 - 把 mysql 連接器的依賴項(xiàng)添加至 pom.xml
第二步 - 從 pom.xml 中移除 H2 的依賴項(xiàng)或者至少把它作為測(cè)試的范圍。 第三步 - 安裝你的 MySQL 數(shù)據(jù)庫(kù)更多的來(lái)看看這里 -https://github.com/in28minutes/jpa-with-hibernate#installing-and-setting-up-mysql 第四步 - 配置你的 MySQL 數(shù)據(jù)庫(kù)連接配置 application.properties spring.jpa.hibernate.ddl-auto=nonespring.datasource.url=jdbc:mysql://localhost:3306/todo_examplespring.datasource.username=todouserspring.datasource.password=YOUR_PASSWORD 第五步 - 重新啟動(dòng),你就準(zhǔn)備好了!就是這么簡(jiǎn)單! 問(wèn)題三十 Spring Boot 配置的默認(rèn) H2 數(shù)據(jù)庫(kù)的名字是上面?為什么默認(rèn)的數(shù)據(jù)庫(kù)名字是 testdb? 在 application.properties 里面,列出了所有的默認(rèn)值
找到下面的屬性 spring.datasource.name=testdb # Name of the datasource. 如果你使用了 H2 內(nèi)部存儲(chǔ)數(shù)據(jù)庫(kù),它里面確定了 Spring Boot 用來(lái)安裝你的 H2 數(shù)據(jù)庫(kù)的名字。 問(wèn)題三十一 如果 H2 不在類路徑里面,會(huì)出現(xiàn)上面情況? 將會(huì)報(bào)下面的錯(cuò)誤 Cannot determine embedded database driver class for database type NONE 把 H2 添加至 pom.xml 中,然后重啟你的服務(wù)器
問(wèn)題三十二 你能否舉一個(gè)以 ReadOnly 為事務(wù)管理的例子?
問(wèn)題三十三 發(fā)布 Spring Boot 用戶應(yīng)用程序自定義配置的最好方法是什么? @Value 的問(wèn)題在于,您可以通過(guò)應(yīng)用程序分配你配置值。更好的操作是采取集中的方法。 @Component@ConfigurationProperties('basic')public class BasicConfiguration { private boolean value; private String message; private int number; 你可以在 application.properties 中配置參數(shù)。 basic.value: truebasic.message: Dynamic Messagebasic.number: 100 問(wèn)題三十四 配置文件的需求是什么? 企業(yè)應(yīng)用程序的開發(fā)是復(fù)雜的,你需要混合的環(huán)境:
在每個(gè)環(huán)境中,你想要不同的應(yīng)用程序配置。
Spring 和 Spring Boot 提供了你可以制定的功能。
Spring Boot 將會(huì)根據(jù)特定環(huán)境中設(shè)置的活動(dòng)配置文件來(lái)選擇應(yīng)用程序的配置。
問(wèn)題三十五 如何使用配置文件通過(guò) Spring Boot 配置特定環(huán)境的配置? 配置文件不是設(shè)別環(huán)境的關(guān)鍵。 在下面的例子中,我們將會(huì)用到兩個(gè)配置文件
缺省的應(yīng)用程序配置在 application.properties 中。讓我們來(lái)看下面的例子: application.properties basic.value= truebasic.message= Dynamic Messagebasic.number= 100 我們想要為 dev 文件自定義 application.properties 屬性。我們需要?jiǎng)?chuàng)建一個(gè)名為 application-dev.properties 的文件,并且重寫我們想要自定義的屬性。 application-dev.properties basic.message: Dynamic Message in DEV 一旦你特定配置了配置文件,你需要在環(huán)境中設(shè)定一個(gè)活動(dòng)的配置文件。 有多種方法可以做到這一點(diǎn):
文章來(lái)源: http://www./article/1522809264295 【程序員面試】是IT求職神器,提供海量C++、JAVA、前端等職業(yè)筆試題庫(kù),在線進(jìn)行一線互聯(lián)網(wǎng)名企筆試面試模擬考試練習(xí),天天刷題,和牛人一起討論經(jīng)典試題,全面提升你的編程能力,海量高薪職位信息等著你!永遠(yuǎn)為下個(gè)月離職做好準(zhǔn)備!年薪百萬(wàn)的碼農(nóng)都已關(guān)注!
|
|
來(lái)自: 笑吧傻瓜 > 《springboot》