日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 前端技术 > javascript >内容正文

javascript

springboot数据源不正确_Spring MVC 到 Spring Boot 的简化之路

發(fā)布時(shí)間:2023/12/10 javascript 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 springboot数据源不正确_Spring MVC 到 Spring Boot 的简化之路 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Spring全家桶筆記:Spring+Spring Boot+Spring Cloud+Spring MVC?shimo.im

01 背景

從Servlet技術(shù)到Spring和Spring MVC,開(kāi)發(fā)Web應(yīng)用變得越來(lái)越簡(jiǎn)捷。但是Spring和Spring MVC的眾多配置有時(shí)卻讓人望而卻步,相信有過(guò)Spring MVC開(kāi)發(fā)經(jīng)驗(yàn)的朋友能深刻體會(huì)到這一痛苦。因?yàn)榧词故情_(kāi)發(fā)一個(gè)Hello-World的Web應(yīng)用,都需要我們?cè)趐om文件中導(dǎo)入各種依賴(lài),編寫(xiě)web.xml、spring.xml、springmvc.xml配置文件等。特別是需要導(dǎo)入大量的jar包依賴(lài)時(shí),我們需要在網(wǎng)上查找各種jar包資源,各個(gè)jar間可能存在著各種依賴(lài)關(guān)系,這時(shí)候又得下載其依賴(lài)的jar包,有時(shí)候jar包間還存在著嚴(yán)格的版本要求,,所以當(dāng)我們只是想開(kāi)發(fā)一個(gè)Hello-World的超簡(jiǎn)單的Web應(yīng)用時(shí),卻把極大部分的時(shí)間在花在了編寫(xiě)配置文件和導(dǎo)入jar包依賴(lài)上,極大地影響了我們的開(kāi)發(fā)效率。所以為了簡(jiǎn)化Spring繁雜的配置,Spring Boot應(yīng)運(yùn)而生。正如Spring Boot的名稱(chēng)一樣,一鍵啟動(dòng),Spring Boot提供了自動(dòng)配置功能,為我們提供了開(kāi)箱即用的功能,使我們將重心放在業(yè)務(wù)邏輯的開(kāi)發(fā)上。那么Spring Boot又是怎么簡(jiǎn)化Spring MVC的呢?Spring Boot和Spring、Spring MVC間又是怎樣的關(guān)系呢?Spring Boot又有什么新特點(diǎn)呢?接下來(lái),讓我們走進(jìn)Spring MVC 到Spring Boot的簡(jiǎn)化之路,或許你就能找到這些答案。

02 Spring vs Spring MVC vs Spring Boot

  • Spring Boot和Spring、Spring MVC不是競(jìng)爭(zhēng)關(guān)系,Spring Boot使我們更加容易使用Spring和Spring MVC

2.1 Spring FrameWork

  • Spring FrameWork解決的核心問(wèn)題是什么 Spring框架的最重要特性是依賴(lài)注入,所有的Spring模塊的核心都是依賴(lài)注入(DI)或控制反轉(zhuǎn)(IOC)。為什么很重要呢,因?yàn)楫?dāng)我們使用DI或IOC時(shí),我們可以使應(yīng)用得到解耦。我們來(lái)看一個(gè)簡(jiǎn)單的例子:

沒(méi)有依賴(lài)注入的例子:

@RestController public class WelcomeController {private WelcomeService service = new WelcomeService();@RequestMapping("/welcome")public String welcome() {return service.retrieveWelcomeMessage();} } WelcomeService service = new WelcomeService(); 意味著WelcomeController類(lèi)與WelcomeService類(lèi)緊密結(jié)合在一起,耦合度高。

使用依賴(lài)注入的例子:

@Component public class WelcomeService {//Bla Bla Bla }@RestController public class WelcomeController {@Autowiredprivate WelcomeService service;@RequestMapping("/welcome")public String welcome() {return service.retrieveWelcomeMessage();} }依賴(lài)注入使世界看起來(lái)更簡(jiǎn)單,我們讓Spring 框架做了辛勤的工作: @Component:我們告訴Spring框架-嘿,這是一個(gè)你需要管理的bean @Autowired:我們告訴Spring框架-嘿,找到這個(gè)特定類(lèi)型的正確匹配并自動(dòng)裝入它

2.2 Spring 還能解決什么問(wèn)題

(1) 重復(fù)代碼

Spring框架停止了依賴(lài)注入(DI)嗎?沒(méi)有,它在依賴(lài)注入(DI)的核心概念上開(kāi)發(fā)了許多Spring模塊:

  • Spring JDBC
  • Spring MVC
  • Spring AOP
  • Spring ORM
  • Spring Test
  • ...
    考慮一下Spring JDBC,這些模塊帶來(lái)了新功能嗎?并沒(méi)有,我們完全可以使用Java代碼完成這些工作。那么,它們給我們帶來(lái)了什么?它們帶來(lái)了簡(jiǎn)單的抽象,這些簡(jiǎn)單抽象的目的是:
  • 減少樣板代碼/減少重復(fù)
  • 促進(jìn)解耦/增加單元可測(cè)性 例如:與傳統(tǒng)的JDBC相比,我們使用Spring JDBC需要編寫(xiě)的代碼減少了許多。

(2)與其他框架良好的集成
Spring框架并不嘗試去解決已經(jīng)解決了的問(wèn)題,它所做的一切就是提供與提供出色解決方案的框架的完美集成。

  • Hibernate
  • IBatis
  • JUnit
  • ...

2.3 Spring MVC

  • Spring MVC框架解決的核心問(wèn)題是什么 Spring MVC框架提供了開(kāi)發(fā)Web應(yīng)用的分離方式。通過(guò)DispatcherServlet、ModelAndView、View Resolver等簡(jiǎn)單概念,是Web應(yīng)用開(kāi)發(fā)變得更加簡(jiǎn)單。

2.4 為什么需要Spring Boot

基于Spring的應(yīng)用程序有很多配置。當(dāng)我們使用Spring MVC時(shí),我們需要配置組件掃描,調(diào)度器servlet,視圖解析器等:

視圖解析器配置:<beanclass="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/"/>前端調(diào)度器的典型配置:<servlet><servlet-name>dispatcher</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><init-param><param-name>contextConfigLocation</param-name><param-value>/WEB-INF/todo-servlet.xml</param-value></init-param><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>dispatcher</servlet-name><url-pattern>/</url-pattern></servlet-mapping>當(dāng)我們使用Hibernate / JPA時(shí),我們需要配置一個(gè)數(shù)據(jù)源,一個(gè)實(shí)體管理器工廠(chǎng),一個(gè)事務(wù)管理器以及許多其他事物:<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"destroy-method="close"><property name="driverClass" value="${db.driver}" /><property name="jdbcUrl" value="${db.url}" /><property name="user" value="${db.username}" /><property name="password" value="${db.password}" /></bean><jdbc:initialize-database data-source="dataSource"><jdbc:script location="classpath:config/schema.sql" /><jdbc:script location="classpath:config/data.sql" /></jdbc:initialize-database><beanclass="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"id="entityManagerFactory"><property name="persistenceUnitName" value="hsql_pu" /><property name="dataSource" ref="dataSource" /></bean><bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager"><property name="entityManagerFactory" ref="entityManagerFactory" /><property name="dataSource" ref="dataSource" /></bean><tx:annotation-driven transaction-manager="transactionManager"/>


2.5 Spring Boot解決的問(wèn)題

(1) Spring Boot 自動(dòng)配置
Spring引入了新的思維過(guò)程:我們可以變得更加智能些嗎?當(dāng)一個(gè)spring mvc jar包被添加到應(yīng)用程序時(shí),我們是否可以自動(dòng)配置一些bean?

  • 當(dāng)Hibernate jar包在類(lèi)路徑時(shí),自動(dòng)配置數(shù)據(jù)源怎樣?
  • 當(dāng)Spring MVC jar包在類(lèi)路徑時(shí),自動(dòng)配置Dispatcher Servlet怎樣?
  • Spring Boot查看ClASSPATH上對(duì)于本應(yīng)用程序需要編寫(xiě)配置的框架,基于這些,Spring Boot提供了這些框架的基本配置-這就是自動(dòng)配置。

(2)Spring Boot Starter Projects
假設(shè)我們想開(kāi)發(fā)一個(gè)Web應(yīng)用程序。首先,我們需要確定我們想要使用的框架,使用哪個(gè)版本的框架以及如何將它們連接在一起。所有Web應(yīng)用程序都有類(lèi)似的需求 下面列出的是我們?cè)赟pring MVC中使用的一些依賴(lài)關(guān)系。這些包括Spring MVC,Jackson Databind(用于數(shù)據(jù)綁定),Hibernate-Validator(用于使用Java驗(yàn)證API的服務(wù)器端驗(yàn)證)和Log4j(用于日志記錄)。在創(chuàng)建時(shí),我們必須選擇所有這些框架的兼容版本:

<dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>4.2.2.RELEASE</version> </dependency><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.5.3</version> </dependency><dependency><groupId>org.hibernate</groupId><artifactId>hibernate-validator</artifactId><version>5.0.2.Final</version> </dependency><dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>1.2.17</version> </dependency>
  • 什么是Starter

Starter是一套方便的依賴(lài)描述符,可以包含在應(yīng)用程序中。 你可以獲得所需的所有Spring及相關(guān)技術(shù)的一站式服務(wù),而無(wú)需搜索示例代碼并復(fù)制依賴(lài)描述符的粘貼負(fù)載。 例如,如果你想開(kāi)始使用Spring和JPA來(lái)訪(fǎng)問(wèn)數(shù)據(jù)庫(kù),只需在你的項(xiàng)目中包含spring-boot-starter-data-jpa依賴(lài)項(xiàng)就好。

我們來(lái)看Starter的一個(gè)示例 - Spring-Boot-Starter-Web

Spring-Boot-Starter-Web依賴(lài): <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId> </dependency>

以下屏幕截圖顯示了添加到我們的應(yīng)用程序中的不同依賴(lài)關(guān)系:

任何典型的Web應(yīng)用程序都會(huì)使用所有這些依賴(lài)項(xiàng).Spring Boot Starter Web預(yù)先打包了這些。作為開(kāi)發(fā)人員,我們不需要擔(dān)心這些依賴(lài)關(guān)系或兼容版本。

(3) Spring Boot Starter項(xiàng)目選項(xiàng)

正如Spring Boot Starter Web一樣,Starter項(xiàng)目幫助我們快速入門(mén)開(kāi)發(fā)特定類(lèi)型的應(yīng)用程序:

  • spring-boot-starter-web-services - SOAP Web服務(wù)
  • spring-boot-starter-web - Web和RESTful應(yīng)用程序
  • spring-boot-starter-test - 單元測(cè)試和集成測(cè)試
  • spring-boot-starter-data-jpa - 帶有Hibernate的Spring Data JPA
  • spring-boot-starter-cache - 啟用Spring Framework的緩存支持
  • ...

03 什么是Spring Boot 自動(dòng)配置

前面已經(jīng)初步介紹過(guò),在這里詳細(xì)介紹一下。
當(dāng)我們啟動(dòng)Spring Boot應(yīng)用程序時(shí),我們可以在日志中看到一些重要的消息。

Spring-Boot-Starter-Web依賴(lài): <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId> </dependency>

上面的日志語(yǔ)句顯示了Spring Boot Auto Configuration的行為。
一當(dāng)我們?cè)趹?yīng)用中添加了Spring Boot Starter Web依賴(lài),Spring Boot AutoConfiguration就會(huì)發(fā)現(xiàn)Spring MVC在類(lèi)路徑下,它會(huì)自動(dòng)配置dispatcherServlet,一個(gè)默認(rèn)的錯(cuò)誤頁(yè)面和webjars。
如果你添加了Spring Boot DataJPA Starter依賴(lài),Spring Boot AutoConfiguration會(huì)自動(dòng)配置數(shù)據(jù)源(datasource)和實(shí)體管理器(Entity Manager)

3.1 Spring Boot Auto Configuration在哪里實(shí)現(xiàn)

所有的自動(dòng)配置邏輯都在spring-boot-autoconfigure.jar中實(shí)現(xiàn)。mvc、data和其他框架的所有自動(dòng)配置邏輯都存在與一個(gè)jar包中。

spring-boot-autoconfigure.jar中重要的文件是/META-INF/spring.factories,該文件;列出了在EnableAutoConfiguration key下啟動(dòng)的所有自動(dòng)配置類(lèi)。下面列出一些重要的配置類(lèi):

org.springframework.boot.autoconfigure.EnableAutoConfiguration= org.springframework.boot.autoconfigure.aop.AopAutoConfiguration, org.springframework.boot.autoconfigure.MessageSourceAutoConfiguration, org.springframework.boot.autoconfigure.PropertyPlaceholderAutoConfiguration, org.springframework.boot.autoconfigure.jackson.JacksonAutoConfiguration, org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration, org.springframework.boot.autoconfigure.jdbc.JdbcTemplateAutoConfiguration, org.springframework.boot.autoconfigure.jdbc.JndiDataSourceAutoConfiguration, org.springframework.boot.autoconfigure.jdbc.XADataSourceAutoConfiguration, org.springframework.boot.autoconfigure.jdbc.DataSourceTransactionManagerAutoConfiguration, org.springframework.boot.autoconfigure.security.SecurityAutoConfiguration, org.springframework.boot.autoconfigure.security.SecurityFilterAutoConfiguration, org.springframework.boot.autoconfigure.web.DispatcherServletAutoConfiguration, org.springframework.boot.autoconfigure.web.EmbeddedServletContainerAutoConfiguration, org.springframework.boot.autoconfigure.web.ErrorMvcAutoConfiguration,

3.2 查看自動(dòng)配置

打開(kāi)調(diào)試日志
在application.properties打開(kāi)調(diào)試日志:

logging.level.org.springframework: DEBUG

當(dāng)啟動(dòng)程序時(shí),會(huì)打印自動(dòng)配置日志信息

04 總結(jié)

Spring Boot的出現(xiàn)本身就是為了減低Web開(kāi)發(fā)的門(mén)檻,使開(kāi)發(fā)人員能夠?qū)W⒂跇I(yè)務(wù)開(kāi)發(fā),而不需浪費(fèi)時(shí)間在業(yè)務(wù)開(kāi)發(fā)之外,至此Spring MVC到Spring Boot的簡(jiǎn)化之路到此結(jié)束。
原文鏈接:https://juejin.im/post/5aa22d1f51882555677e2492

總結(jié)

以上是生活随笔為你收集整理的springboot数据源不正确_Spring MVC 到 Spring Boot 的简化之路的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。