Spring boot面試題整理
1、什麼是springboot
用來簡化spring應用的初始搭建以及開發過程 使用特定的方式來進行配置(properties或yml檔案)
建立獨立的spring引用程式 main方法執行
嵌入的Tomcat 無需部署war檔案
簡化maven配置
自動配置spring新增對應功能starter自動化配置
答:spring boot來簡化spring應用開發,約定大於配置,去繁從簡,just run就能建立一個獨立的,產品級別的應用
2、Spring Boot有哪些優點?
答:-快速建立獨立執行的spring專案與主流框架整合
-使用嵌入式的servlet容器,應用無需打包成war包
-starters自動依賴與版本控制
-大量的自動配置,簡化開發,也可修改預設值
-準生產環境的執行應用監控
-與雲端計算的天然整合
3、如何重新載入Spring Boot上的更改,而無需重新啟動伺服器?
這可以使用DEV工具來實現。通過這種依賴關係,您可以節省任何更改,嵌入式tomcat將重新啟動。
Spring Boot有一個開發工具(DevTools)模組,它有助於提高開發人員的生產力。Java開發人員面臨的一個主要挑戰是將檔案更改自動部署到伺服器並自動重啟伺服器。
開發人員可以重新載入Spring Boot上的更改,而無需重新啟動伺服器。這將消除每次手動部署更改的需要。Spring Boot在釋出它的第一個版本時沒有這個功能。
這是開發人員最需要的功能。DevTools模組完全滿足開發人員的需求。該模組將在生產環境中被禁用。它還提供H2資料庫控制檯以更好地測試應用程式。
org.springframework.boot
spring-boot-devtools
true
4、Spring Boot中的監視器是什麼?
Spring boot actuator是spring啟動框架中的重要功能之一。Spring boot監視器可幫助您訪問生產環境中正在執行的應用程式的當前狀態。
有幾個指標必須在生產環境中進行檢查和監控。即使一些外部應用程式可能正在使用這些服務來向相關人員觸發警報訊息。監視器模組公開了一組可直接作為HTTP URL訪問的REST端點來檢查狀態。
5、什麼是YAML?
YAML是一種人類可讀的資料序列化語言。它通常用於配置檔案。
與屬性檔案相比,如果我們想要在配置檔案中新增複雜的屬性,YAML檔案就更加結構化,而且更少混淆。可以看出YAML具有分層配置資料。
6、如何整合Spring Boot和ActiveMQ?
對於整合Spring Boot和ActiveMQ,我們使用spring-boot-starter-activemq依賴關係。 它只需要很少的配置,並且不需要樣板程式碼。
7、springboot常用的starter有哪些
spring-boot-starter-web 嵌入tomcat和web開發需要servlet與jsp支援
spring-boot-starter-data-jpa 資料庫支援
spring-boot-starter-data-redis redis資料庫支援
spring-boot-starter-data-solr solr支援
mybatis-spring-boot-starter 第三方的mybatis整合starter
8、springboot自動配置的原理
在spring程式main方法中 新增@SpringBootApplication或者@EnableAutoConfiguration
會自動去maven中讀取每個starter中的spring.factories檔案 該檔案裡配置了所有需要被建立spring容器中的bean
9、springboot讀取配置檔案的方式
springboot預設讀取配置檔案為application.properties或者是application.yml
10、springboot整合mybatis的過程
新增mybatis的starter maven依賴
org.mybatis.spring.boot
mybatis-spring-boot-starter
1.2.0
在mybatis的介面中 新增@Mapper註解
在application.yml配置資料來源資訊
---------------------
作者:蕭~X
原文:https://blog.csdn.net/xgr512/article/details/82698474
1.常見的starter會包幾個方面的內容。分別是什麼。
常見的starter會包括下面四個方面的內容
自動配置檔案,根據classpath是否存在指定的類來決定是否要執行該功能的自動配置。
spring.factories,非常重要,指導Spring Boot找到指定的自動配置檔案。
endpoint:可以理解為一個admin,包含對服務的描述、介面、互動(業務資訊的查詢)。
health indicator:該starter提供的服務的健康指標。
兩個需要注意的點:
1. @ConditionalOnMissingBean的作用是:只有對應的bean在系統中都沒有被建立,它修飾的初始化程式碼塊才會執行,【使用者自己手動建立的bean優先】。
2. Spring Boot Starter找到自動配置檔案(xxxxAutoConfiguration之類的檔案)的方式有兩種:spring.factories:由Spring Boot觸發探測classpath目錄下的類,進行自動配置;
@EnableXxxxx:有時需要由starter的使用者觸發*查詢自動配置檔案的過程
2.總結Spring Boot Starter的工作原理
Spring Boot Starter的工作原理如下:
1. Spring Boot 在啟動時掃描專案所依賴的JAR包,尋找包含spring.factories檔案的JAR
2. 根據spring.factories配置載入AutoConfigure類
3. 根據 @Conditional註解的條件,進行自動配置並將Bean注入Spring Context
3.談談你對Spring Boot的認識。
spring Boot是一個開源框架,它可用於建立可執行的Spring應用程式,採用了習慣優於配置的方法。此框架的神奇之處在於@EnableAutoConfiguration註解,此註釋自動載入應用程式所需的所有Bean——這依賴於Spring Boot在類路徑中的查詢。
1. @Enable*註釋 @Enable*註釋並不是新發明的註釋,早在Spring 3框架就引入了這些註釋,用這些註釋替代XML配置檔案。 很多Spring開發者都知道@EnableTransactionManagement註釋,它能夠宣告事務管理;@EnableWebMvc註釋,它能啟用Spring MVC;以及@EnableScheduling註釋,它可以初始化一個排程器。
2. 屬性對映 下面看MongoProperties類,它是一個Spring Boot屬性對映的例子: @ConfigurationProperties(prefix = "spring.data.mongodb") public class MongoProperties { private String host; private int port = DBPort.PORT; private String uri = "mongodb://localhost/test"; private String database; // ... getters/ setters omitted } @ConfigurationProperties註釋將POJO關聯到指定字首的每一個屬性。例如,spring.data.mongodb.port屬性將對映到這個類的埠屬性。 強烈建議Spring Boot開發者使用這種方式來刪除與配置屬性相關的瓶頸程式碼。
[email protected]註釋 Spring Boot的強大之處在於使用了Spring 4框架的新特性:@Conditional註釋,此註釋使得只有在特定條件滿足時才啟用一些配置。 在Spring Boot的org.springframework.boot.autoconfigure.condition包中說明了使用@Conditional註釋能給我們帶來什麼,下面對這些註釋做一個概述: @ConditionalOnBean @ConditionalOnClass @ConditionalOnExpression @ConditionalOnMissingBean @ConditionalOnMissingClass @ConditionalOnNotWebApplication @ConditionalOnResource @ConditionalOnWebApplication
4.應用程式上下文初始化器 spring.factories還提供了第二種可能性,即定義應用程式的初始化。這使得我們可以在應用程式載入前操縱Spring的應用程式上下文ApplicationContext。 特別是,可以在上下文建立監聽器,使用ConfigurableApplicationContext類的addApplicationListener()方法。 AutoConfigurationReportLoggingInitializer監聽到系統事件時,比如上下文重新整理或應用程式啟動故障之類的事件,Spring Boot可以執行一些工作。這有助於我們以除錯模式啟動應用程式時建立自動配置的報告。 要以除錯模式啟動應用程式,可以使用-Ddebug標識,或者在application.properties檔案這新增屬性debug= true。
4.自定義springboot-starter注意事項
1. springboot預設scan的包名是其main類所在的包名。如果引入的starter包名不一樣,需要自己新增scan。 @ComponentScan(basePackages = {"com.xixicat.demo","com.xixicat.sms"})
2. 對於starter中有feign的,需要額外指定 @EnableFeignClients(basePackages = {"com.xixicat.sms"})
3. 對於exclude一些autoConfig @EnableAutoConfiguration(exclude ={MetricFilterAutoConfiguration.class})
原文:https://yq.aliyun.com/ziliao/316498
問題一 Spring Boot、Spring MVC 和 Spring 有什麼區別?
SpringFrame
SpringFramework 最重要的特徵是依賴注入。所有 SpringModules 不是依賴注入就是 IOC 控制反轉。
當我們恰當的使用 DI 或者是 IOC 的時候,我們可以開發鬆耦合應用。鬆耦合應用的單元測試可以很容易的進行。
SpringMVC
Spring MVC 提供了一種分離式的方法來開發 Web 應用。通過運用像 DispatcherServelet,MoudlAndView 和 ViewResolver 等一些簡單的概念,開發 Web 應用將會變的非常簡單。
SpringBoot
Spring 和 SpringMVC 的問題在於需要配置大量的引數。
<bean
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix">
<value>/WEB-INF/views/</value>
</property>
<property name="suffix">
<value>.jsp</value>
</property>
</bean>
<mvc:resources mapping="/webjars/**" location="/webjars/"/>
Spring Boot 通過一個自動配置和啟動的項來目解決這個問題。為了更快的構建產品就緒應用程式,Spring Boot 提供了一些非功能性特徵。
問題二 什麼是自動配置?
Spring 和 SpringMVC 的問題在於需要配置大量的引數。
<bean
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix">
<value>/WEB-INF/views/</value>
</property>
<property name="suffix">
<value>.jsp</value>
</property>
</bean>
<mvc:resources mapping="/webjars/**" location="/webjars/"/>
我們能否帶來更多的智慧?當一個 MVC JAR 新增到應用程式中的時候,我們能否自動配置一些 beans?
Spring 檢視(CLASSPATH 上可用的框架)已存在的應用程式的配置。在此基礎上,Spring Boot 提供了配置應用程式和框架所需要的基本配置。這就是自動配置。
問題三 什麼是 Spring Boot Stater ?
啟動器是一套方便的依賴沒描述符,它可以放在自己的程式中。你可以一站式的獲取你所需要的 Spring 和相關技術,而不需要依賴描述符的通過示例程式碼搜尋和複製黏貼的負載。
例如,如果你想使用 Sping 和 JPA 訪問資料庫,只需要你的專案包含 spring-boot-starter-data-jpa 依賴項,你就可以完美進行。
問題四 你能否舉一個例子來解釋更多 Staters 的內容?
讓我們來思考一個 Stater 的例子 -Spring Boot Stater Web。
如果你想開發一個 web 應用程式或者是公開 REST 服務的應用程式。Spring Boot Start Web 是首選。讓我們使用 Spring Initializr 建立一個 Spring Boot Start Web 的快速專案。
Spring Boot Start Web 的依賴項
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
下面的截圖是新增進我們應用程式的不同的依賴項,依賴項可以被分為
Spring - core,beans,context,aop
Web MVC - (Spring MVC)
Jackson - for JSON Binding
Validation - Hibernate,Validation API
Enbedded Servlet Container - Tomcat
Logging - logback,slf4j
任何經典的 Web 應用程式都會使用所有這些依賴項。Spring Boot Starter Web 預先打包了這些依賴項。
作為一個開發者,我不需要再擔心這些依賴項和它們的相容版本。
問題五 Spring Boot 還提供了其它的哪些 Starter Project Options?
Spring Boot 也提供了其它的啟動器專案包括,包括用於開發特定型別應用程式的典型依賴項。
spring-boot-starter-web-services - SOAP Web Services
spring-boot-starter-web - Web 和 RESTful 應用程式
spring-boot-starter-test - 單元測試和整合測試
spring-boot-starter-jdbc - 傳統的 JDBC
spring-boot-starter-hateoas - 為服務新增 HATEOAS 功能
spring-boot-starter-security - 使用 SpringSecurity 進行身份驗證和授權
spring-boot-starter-data-jpa - 帶有 Hibeernate 的 Spring Data JPA
spring-boot-starter-data-rest - 使用 Spring Data REST 公佈簡單的 REST 服務
問題六 Spring 是如何快速建立產品就緒應用程式的?
Spring Boot 致力於快速產品就緒應用程式。為此,它提供了一些譬如快取記憶體,日誌記錄,監控和嵌入式伺服器等開箱即用的非功能性特徵。
spring-boot-starter-actuator - 使用一些如監控和跟蹤應用的高階功能
spring-boot-starter-undertow, spring-boot-starter-jetty, spring-boot-starter-tomcat - 選擇您的特定嵌入式 Servlet 容器
spring-boot-starter-logging - 使用 logback 進行日誌記錄
spring-boot-starter-cache - 啟用 Spring Framework 的快取支援
###Spring2 和 Spring5 所需要的最低 Java 版本是什麼?
Spring Boot 2.0 需要 Java8 或者更新的版本。Java6 和 Java7 已經不再支援。
推薦閱讀:
https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-2.0.0-M1-Release-Notes
問題七 建立一個 Spring Boot Project 的最簡單的方法是什麼?
Spring Initializr是啟動 Spring Boot Projects 的一個很好的工具。
-
就像上圖中所展示的一樣,我們需要做一下幾步:
-
登入 Spring Initializr,按照以下方式進行選擇:
-
選擇 com.in28minutes.springboot 為組
-
選擇 studet-services 為元件
-
選擇下面的依賴項
-
Web
-
Actuator
-
DevTools
-
點選生 GenerateProject
-
將專案匯入 Eclipse。檔案 - 匯入 - 現有的 Maven 專案
問題八 Spring Initializr 是建立 Spring Boot Projects 的唯一方法嗎?
不是的。
Spring Initiatlizr 讓建立 Spring Boot 專案變的很容易,但是,你也可以通過設定一個 maven 專案並新增正確的依賴項來開始一個專案。
在我們的 Spring 課程中,我們使用兩種方法來建立專案。
第一種方法是 start.spring.io 。
另外一種方法是在專案的標題為“Basic Web Application”處進行手動設定。
手動設定一個 maven 專案
這裡有幾個重要的步驟:
-
在 Eclipse 中,使用檔案 - 新建 Maven 專案來建立一個新專案
-
新增依賴項。
-
新增 maven 外掛。
-
新增 Spring Boot 應用程式類。
到這裡,準備工作已經做好!
問題九 為什麼我們需要 spring-boot-maven-plugin?
spring-boot-maven-plugin 提供了一些像 jar 一樣打包或者執行應用程式的命令。
-
spring-boot:run 執行你的 SpringBooty 應用程式。
-
spring-boot:repackage 重新打包你的 jar 包或者是 war 包使其可執行
-
spring-boot:start 和 spring-boot:stop 管理 Spring Boot 應用程式的生命週期(也可以說是為了整合測試)。
-
spring-boot:build-info 生成執行器可以使用的構造資訊。
問題十 如何使用 SpringBoot 自動重灌我的應用程式?
使用 Spring Boot 開發工具。
把 Spring Boot 開發工具新增進入你的專案是簡單的。
把下面的依賴項新增至你的 Spring Boot Project pom.xml 中
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
</dependency>
重啟應用程式,然後就可以了。
同樣的,如果你想自動裝載頁面,有可以看看 FiveReload
-
http://www.logicbig.com/tutorials/spring-framework/spring-boot/boot-live-reload/.
在我測試的時候,發現了 LiveReload 漏洞,如果你測試時也發現了,請一定要告訴我們。
問題十一 什麼是嵌入式伺服器?我們為什麼要使用嵌入式伺服器呢?
思考一下在你的虛擬機器上部署應用程式需要些什麼。
第一步: 安裝 Java
第二部: 安裝 Web 或者是應用程式的伺服器(Tomat/Wbesphere/Weblogic 等等)
第三部: 部署應用程式 war 包
如果我們想簡化這些步驟,應該如何做呢?
讓我們來思考如何使伺服器成為應用程式的一部分?
你只需要一個安裝了 Java 的虛擬機器,就可以直接在上面部署應用程式了,
是不是很爽?
這個想法是嵌入式伺服器的起源。
當我們建立一個可以部署的應用程式的時候,我們將會把伺服器(例如,tomcat)嵌入到可部署的伺服器中。
例如,對於一個 Spring Boot 應用程式來說,你可以生成一個包含 Embedded Tomcat 的應用程式 jar。你就可以想執行正常 Java 應用程式一樣來執行 web 應用程式了。
嵌入式伺服器就是我們的可執行單元包含伺服器的二進位制檔案(例如,tomcat.jar)。
問題十二 如何在 Spring Boot 中新增通用的 JS 程式碼?
在原始檔夾下,建立一個名為 static 的資料夾。然後,你可以把你的靜態的內容放在這裡面。
例如,myapp.js 的路徑是 resources\static\js\myapp.js
你可以參考它在 jsp 中的使用方法
<csript src="/js/myapp.js"></script>
錯誤:HAL browser gives me unauthorized error - Full authenticaition is required to access this resource.
該如何來修復這個錯誤呢?
{
"timestamp": 1488656019562,
"status": 401,
"error": "Unauthorized",
"message": "Full authentication is required to access this resource.",
"path": "/beans"
}
兩種方法:
方法 1:關閉安全驗證
application.properties
management.security.enabled:FALSE
方法二:在日誌中搜索密碼並傳遞至請求標頭中
問題十三 什麼是 Spring Date?
來自://projects.spring.io/spring- data/
Spring Data 的使命是在保證底層資料儲存特殊性的前提下,為資料訪問提供一個熟悉的,一致性的,基於 Spring 的程式設計模型。這使得使用資料訪問技術,關係資料庫和非關係資料庫,map-reduce 框架以及基於雲的資料服務變得很容易。
為了讓它更簡單一些,Spring Data 提供了不受底層資料來源限制的 Abstractions 介面。
下面來舉一個例子
interface TodoRepository extends CrudRepository<Todo, Long> {
你可以定義一簡單的庫,用來插入,更新,刪除和檢索代辦事項,而不需要編寫大量的程式碼。
問題十四 什麼是 Spring Data REST?
Spring Data TEST 可以用來發布關於 Spring 資料庫的 HATEOAS RESTful 資源。
下面是一個使用 JPA 的例子
@RepositoryRestResource(collectionResourceRel = "todos", path = "todos")
public interface TodoRepository
extends PagingAndSortingRepository<Todo, Long> {
不需要寫太多程式碼,我們可以釋出關於 Spring 資料庫的 RESTful API。
下面展示的是一些關於 TEST 伺服器的例子
POST
-
URL:http://localhost:8080/todos
-
Use Header:Content-Type:Type:application/json
-
Request Content
程式碼如下
{
"user": "Jill",
"desc": "Learn Hibernate",
"done": false
}
響應內容
{
"user": "Jill",
"desc": "Learn Hibernate",
"done": false,
"_links": {
"self": {
"href": "http://localhost:8080/todos/1"
},
"todo": {
"href": "http://localhost:8080/todos/1"
}
}
}
響應包含新建立資源的 href。
問題十五 path=”users”, collectionResourceRel=”users” 如何與 Spring Data Rest 一起使用?
@RepositoryRestResource(collectionResourceRel = "users", path = "users")
public interface UserRestRepository extends
PagingAndSortingRepository<User, Long>
-
path- 這個資源要匯出的路徑段。
-
collectionResourceRel- 生成指向集合資源的連結時使用的 rel 值。在生成 HATEOAS 連結時使用。
問題十六 當 Spring Boot 應用程式作為 Java 應用程式執行時,後臺會發生什麼?
如果你使用 Eclipse IDE,Eclipse maven 外掛確保依賴項或者類檔案的改變一經新增,就會被編譯並在目標檔案中準備好!在這之後,就和其它的 Java 應用程式一樣了。
當你啟動 java 應用程式的時候,spring boot 自動配置檔案就會魔法般的啟用了。
-
當 Spring Boot 應用程式檢測到你正在開發一個 web 應用程式的時候,它就會啟動 tomcat。
問題十七 我們能否在 spring-boot-starter-web 中用 jetty 代替 tomcat?
在 spring-boot-starter-web 移除現有的依賴項,並把下面這些新增進去。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jetty</artifactId>
</dependency>
問題十八 如何使用 Spring Boot 生成一個 WAR 檔案?
推薦閱讀:
-
https://spring.io/guides/gs/convert-jar-to-war/
下面有 spring 說明文件直接的連結地址:
-
https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#build-tool-plugins-maven-packaging
問題十九 如何使用 Spring Boot 部署到不同的伺服器?
你需要做下面兩個步驟:
-
在一個專案中生成一個 war 檔案。
-
將它部署到你最喜歡的伺服器(websphere 或者 Weblogic 或者 Tomcat and so on)。
第一步:這本入門指南應該有所幫助:
https://spring.io/guides/gs/convert-jar-to-war/
第二步:取決於你的伺服器。
問題二十 RequestMapping 和 GetMapping 的不同之處在哪裡?
-
RequestMapping 具有類屬性的,可以進行 GET,POST,PUT 或者其它的註釋中具有的請求方法。
-
GetMapping 是 GET 請求方法中的一個特例。它只是 ResquestMapping 的一個延伸,目的是為了提高清晰度。
問題二十一 為什麼我們不建議在實際的應用程式中使用 Spring Data Rest?
我們認為 Spring Data Rest 很適合快速原型製造!在大型應用程式中使用需要謹慎。
通過 Spring Data REST 你可以把你的資料實體作為 RESTful 服務直接釋出。
當你設計 RESTful 伺服器的時候,最佳實踐表明,你的介面應該考慮到兩件重要的事情:
-
你的模型範圍。
-
你的客戶。
通過 With Spring Data REST,你不需要再考慮這兩個方面,只需要作為 TEST 服務釋出實體。
這就是為什麼我們建議使用 Spring Data Rest 在快速原型構造上面,或者作為專案的初始解決方法。對於完整演變專案來說,這並不是一個好的注意。
問題二十二 在 Spring Initializer 中,如何改變一個專案的包名字?
好訊息是你可以定製它。點選連結“轉到完整版本”。你可以配置你想要修改的包名稱!
問題二十三 可以配置 application.propertierde 的完整的屬性列表在哪裡可以找到?
這裡是完整的指南:
-
https://docs.spring.io/spring-boot/docs/current/reference/html/common-application-properties.html
問題二十四 JPA 和 Hibernate 有哪些區別?
簡而言之
-
JPA 是一個規範或者介面
-
Hibernate 是 JPA 的一個實現
當我們使用 JPA 的時候,我們使用 javax.persistence 包中的註釋和介面時,不需要使用 hibernate 的匯入包。
我們建議使用 JPA 註釋,因為哦我們沒有將其繫結到 Hibernate 作為實現。後來(我知道 - 小於百分之一的機率),我們可以使用另一種 JPA 實現。
問題二十五 業務邊界應該從哪一層開始?
我們建議在服務層管理義務。商業業務邏輯在商業層或者服務層,與此同時,你想要執行的業務管理也在該層。
問題二十六 使用 Spring Boot 啟動連線到記憶體資料庫 H2 的 JPA 應用程式需要哪些依賴項?
在 Spring Boot 專案中,當你確保下面的依賴項都在類路里面的時候,你可以載入 H2 控制檯。
-
web 啟動器
-
h2
-
jpa 資料啟動器
其它的依賴項在下面:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>runtime</scope>
</dependency>
需要注意的一些地方:
-
一個內部資料記憶體只在應用程式執行期間存在。這是學習框架的有效方式。
-
這不是你希望的真是世界應用程式的方式。
-
在問題“如何連線一個外部資料庫?”中,我們解釋瞭如何連線一個你所選擇的資料庫。
問題二十七 如何不通過任何配置來選擇 Hibernate 作為 JPA 的預設實現?
因為 Spring Boot 是自動配置的。
下面是我們新增的依賴項
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
spring-boot-stater-data-jpa 對於 Hibernate 和 JPA 有過渡依賴性。
當 Spring Boot 在類路徑中檢測到 Hibernate 中,將會自動配置它為預設的 JPA 實現。
問題二十八 指定的資料庫連線資訊在哪裡?它是如何知道自動連線至 H2 的?
這就是 Spring Boot 自動配置的魔力。
來自:https://docs.spring.io/spring-boot/docs/current/reference/html/using-boot-auto-configuration.html
Spring Boot auto-configuration 試圖自動配置你已經新增的基於 jar 依賴項的 Spring 應用程式。比如說,如果 HSQLDBis 存在你的類路徑中,並且,資料庫連線 bean 還沒有手動配置,那麼我們可以自動配置一個記憶體資料庫。
進一步的閱讀:
http://www.springboottutorial.com/spring-boot-auto-configuration
問題二十九 我們如何連線一個像 MSSQL 或者 orcale 一樣的外部資料庫?
讓我們以 MySQL 為例來思考這個問題:
第一步 - 把 mysql 聯結器的依賴項新增至 pom.xml
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
第二步 - 從 pom.xml 中移除 H2 的依賴項
或者至少把它作為測試的範圍。
<!--
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>test</scope>
</dependency>
-->
第三步 - 安裝你的 MySQL 資料庫
更多的來看看這裡 -https://github.com/in28minutes/jpa-with-hibernate#installing-and-setting-up-mysql
第四步 - 配置你的 MySQL 資料庫連線
配置 application.properties
spring.jpa.hibernate.ddl-auto=none
spring.datasource.url=jdbc:mysql://localhost:3306/todo_example
spring.datasource.username=todouser
spring.datasource.password=YOUR_PASSWORD
第五步 - 重新啟動,你就準備好了!
就是這麼簡單!
問題三十 Spring Boot 配置的預設 H2 資料庫的名字是上面?為什麼預設的資料庫名字是 testdb?
在 application.properties 裡面,列出了所有的預設值
-
https://docs.spring.io/spring-boot/docs/current/reference/html/common-application-properties.html
找到下面的屬性
spring.datasource.name=testdb # Name of the datasource.
如果你使用了 H2 內部儲存資料庫,它裡面確定了 Spring Boot 用來安裝你的 H2 資料庫的名字。
問題三十一 如果 H2 不在類路徑裡面,會出現上面情況?
將會報下面的錯誤
Cannot determine embedded database driver class for database type NONE
把 H2 新增至 pom.xml 中,然後重啟你的伺服器
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>runtime</scope>
</dependency>
問題三十二 你能否舉一個以 ReadOnly 為事務管理的例子?
-
當你從資料庫讀取內容的時候,你想把事物中的使用者描述或者是其它描述設定為只讀模式,以便於 Hebernate 不需要再次檢查實體的變化。這是非常高效的。
問題三十三 釋出 Spring Boot 使用者應用程式自定義配置的最好方法是什麼?
@Value 的問題在於,您可以通過應用程式分配你配置值。更好的操作是採取集中的方法。
你可以使用 @ConfigurationProperties 定義一個配置元件。
@Component
@ConfigurationProperties("basic")
public class BasicConfiguration {
private boolean value;
private String message;
private int number;
你可以在 application.properties 中配置引數。
basic.value: true
basic.message: Dynamic Message
basic.number: 100
問題三十四 配置檔案的需求是什麼?
企業應用程式的開發是複雜的,你需要混合的環境:
-
Dev
-
QA
-
Stage
-
Production
在每個環境中,你想要不同的應用程式配置。
配置檔案有助於在不同的環境中進行不同的應用程式配置。
Spring 和 Spring Boot 提供了你可以制定的功能。
-
不同配置檔案中,不同環境的配置是什麼?
-
為一個制定的環境設定活動的配置檔案。
Spring Boot 將會根據特定環境中設定的活動配置檔案來選擇應用程式的配置。
問題三十五 如何使用配置檔案通過 Spring Boot 配置特定環境的配置?
配置檔案不是設別環境的關鍵。
在下面的例子中,我們將會用到兩個配置檔案
-
dev
-
prod
預設的應用程式配置在 application.properties 中。讓我們來看下面的例子:
application.properties
basic.value= true
basic.message= Dynamic Message
basic.number= 100
我們想要為 dev 檔案自定義 application.properties 屬性。我們需要建立一個名為 application-dev.properties 的檔案,並且重寫我們想要自定義的屬性。
application-dev.properties
basic.message: Dynamic Message in DEV
一旦你特定配置了配置檔案,你需要在環境中設定一個活動的配置檔案。
有多種方法可以做到這一點:
-
在 VM 引數中使用 Dspring.profiles.active=prod
-
在 application.properties 中使用 spring.profiles.active=prod