溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

什么是SpringBoot

發(fā)布時間:2020-07-25 12:29:12 來源:網(wǎng)絡(luò) 閱讀:474 作者:Java萌新 欄目:編程語言

隨著動態(tài)語言的流行(Ruby,Groovy,Scala,Node.js),Java的開發(fā)顯得格外的笨重;繁多的配置,低下的開發(fā)效率,復(fù)雜的部署流程以及第三方技術(shù)集成難度大.

在上述環(huán)境 下,Spring Boot應(yīng)運(yùn)而生.它使用"習(xí)慣優(yōu)于配置"(項(xiàng)目中存在大量的配置,此外還內(nèi)置一個習(xí)慣性的配置,讓你無須手段進(jìn)行配置)的理念讓你的項(xiàng)目快速運(yùn)行起來.

使用Spring Boot很容易創(chuàng)建一個獨(dú)立運(yùn)行(運(yùn)行jar,內(nèi)嵌Servlet容器),準(zhǔn)生產(chǎn)級別的基于Spring框架的項(xiàng)目,使用Spring Boot你可以不用或者只需要很少的Spring配置.

Spring Boot的優(yōu)缺點(diǎn)

優(yōu)點(diǎn) :

(1) 快速構(gòu)建項(xiàng)目;

(2) 對主流開發(fā)框架的無配置集成;

(3) 項(xiàng)目可獨(dú)立運(yùn)行,無須外部依賴 Servlet容器;

(4) 提供運(yùn)行時的應(yīng)用監(jiān)控;

(5) 極大地提高了開發(fā),部署效率;

(6) 與云計(jì)算的天然集成.

缺點(diǎn) :

(1) 書籍文檔少且不夠深入;

(2) 如果你不認(rèn)同Spring框架,這也許是它的缺點(diǎn),但建議你一定要使用Spring框架.

快速入門

設(shè)置Spring boot的parent

<parent>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-parent</artifactId>

<version>1.5.2.RELEASE</version>

</parent>

說明 : Spring Boot的項(xiàng)目必須要將parent設(shè)置為Spring boot的parent, 該parent包含了大量的默認(rèn)的配置,大大簡化了我們的開發(fā).

導(dǎo)入Spring Boot的web支持

<dependency>

<groupId>org.springframework.book</groupId>

<artifactId>spring-boot-starter-web</artifactId>

</dependency>

添加Spring Boot的插件

<plugin>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-maven-plugin</artifactId>

</plugin>

編寫第一個Spring Boot的應(yīng)用

@Controller

@SpringBootApplication

@Configuration

public class HelloApplication {

@RequestMapping("hello")

@ResponseBody

public String hello() {

return "hello world!";

}

public static void main(String[] args) {

SpringApplication.run(HelloApplication.class, args);

}

}

代碼說明 :

1 : @SpringBootApplication : Spring Boot項(xiàng)目的核心注解, 主要目的是開啟自動配置;

2 : @Configuration : 這是一個配置Spring的配置類;

3 : @Controller : 標(biāo)明這是一個SpringMVC的Controller控制器;

4 : main方法 : 在main方法中啟動一個應(yīng)用,既 : 這個應(yīng)用的入口;

啟動應(yīng)用

在Spring Boot項(xiàng)目中,啟動的方式有兩種,一種是直接run Java Application另外一種是通過Spring Boot的Maven插件運(yùn)行.

Spring Boot的核心

入口類和@SpringBootApplication

Spring Boot的項(xiàng)目一般都會有*Application的入口類,入口類中會有main方法,這是一個標(biāo)準(zhǔn)的Java應(yīng)用程序的入口方法.

@SpringBootApplication注解是Spring Boot的核心注解,它其實(shí)是一個組合注解;

@Target(ElementType.TYPE)

@Retention(RetentionPolicy.RUNTIME)

@Documented

@Inherited

@SpringBootConfiguration

@EnableAutoConfiguration

@ConmpnentScan(excludeFilters = {

@Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),

@Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class)

})

public @interface SpringBootApplication {}

該注解主要組合了以下注解 :

1 : @SpringBootConfiguration : 這是Spring Boot項(xiàng)目的配置注解,這也是一個組合注解 :

@Target(ElementType.TYPE)

@Retention(RetentionPolicy.RUNTIME)

@Documented

@Configuration

public @interface SpringBootConfiguration{}

在Spring Boot項(xiàng)目中推薦使用@SpringBootConfiguration替代@Configuration

2 : @EnableAutoConfiguration : 啟用自動配置,該注解會使Spring Boot根據(jù)項(xiàng)目中依賴的jar包自動配置項(xiàng)目的配置項(xiàng) :

a) 如 : 我們添加了Spring-boot-starter-web的依賴,項(xiàng)目中也就會引入SpringMVC的依賴,Spring Boot就會自動配置tomcat和SpringMVC

spring-boot-starter-web : 1.5.2.RELEASE[compile]

spring-boot-starter : 1.5.2.RELEASE[compile]

spring-boot-starter-tomcat : 1.5.2.RELEASE[compile]

tomcat-embed-core : 8.5.11[compile]

tomcat-embed-el : 8.5.11[compile]

tomcat-embed-websocked : 8.5.11[compile]

tomcat-embed-core : 8.5.11(omitted for conflict with 8.5.11)[compile]

hibernate-vaildator : 5.3.4.Final[compile]

jackson-databind : 2.8.7[compile]

spring-web : 4.3.7.RELEASE(omitted for confilct with 4.3.7.RELEASE)[compile]

spring-webmvc : 4.3.7.RELEASE(omitted for confilct with 4.3.7.RELEASE)[compile]

3 : @ComponentScan : 默認(rèn)掃描@SpringBootApplication所在類的同級目錄以及它的子目錄.

關(guān)閉自動配置

Spring Boot會根據(jù)項(xiàng)目中的jar包依賴,自動做出配置,Spring Boot支持的自動配置(非常多);

比如 : 我們不想自動配置Redis,想手動配置.

@SpringBootApplication(exclude = {RedisAutoConfiguration.class})

public class HelloApplication {

}

如果不想看到banner,可以將其關(guān)閉 :

public static void main(Stirng[] args) {

SpringApplication app = new SpringApplication(HelloApplication.class, args);

app.setBannerMode(Banner.Mode.OFF); //關(guān)閉banner

app.run-正在西部數(shù)碼(www.west.cn)進(jìn)行交易(args);

}

Spring Boot項(xiàng)目使用一個全局的配置文件application.properties或者是application.yml,在resources目錄下或者類路徑下的/config下,一般我們放到resources下。

1、 修改tomcat的端口為8088(server.port=8088)

2、 修改進(jìn)入DispatcherServlet的規(guī)則為:.html(server.servlet.path=.html)

Xml配置文件

Spring Boot提倡零配置,既無xml配置,但是在實(shí)際項(xiàng)目中,可能有一些特殊要求你 必須使用 xml配置,這時我們可以通過Spring提供的@ImportResource來加載xml配置,

例如 :

@ImportResource({"classpath:some-context.xml","classpath:another-context.xml"})

日志

Spring Boot對各種日志框架都支持,通過配置修改默認(rèn)的日志的配置 :

#設(shè)置日志級別

logging.level.org.springframework=DEBUG

格式 :

logging.level.*= # log levels serverity. For instance 'logging.level.org.springframework=DEBUG'

Spring Boot的自動配置的原理

Spring Boot在進(jìn)行SpringApplication對象實(shí)例化時會加載META-INF/spring.factories文件,將該配置文件中的配置載入到Spring容器.

進(jìn)入規(guī)則為 /

如果進(jìn)入SpringMVC的規(guī)則為/時,Spring Boot的默認(rèn)靜態(tài)資源的路徑為:

spring.resources.static-locations=classpath:/META-INF/resources/,classpath:/resources/,classpath:/static/,classpath:/public/

進(jìn)入規(guī)則為*.xxx 或者 不指定靜態(tài)文件路徑時

將靜態(tài)資源放置到webapp下的static目錄中即可通過地址訪問:

自定義SpringMVC的配置

有些時候我們需要自已配置SpringMVC而不是采用默認(rèn),比如說增加一個攔截器,這個時候就得通過繼承WebMvcConfigurerAdapter然后重寫父類中的方法進(jìn)行擴(kuò)展。

在Spring Boot中推薦使用@Transaction注解來申明事務(wù).

首先需要導(dǎo)入依賴 :

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-jdbc</artifactId>

</dependency>

當(dāng)引入jdbc依賴之后,Spring Boot會自動默認(rèn)分別注入DataSourceTransactionManager或JpaTransactionManager,所以我們不需要任何額外配置就可以用@Transactional

注解進(jìn)行事務(wù)使用.

例如 :

在service中添加@Transactional注解 :

發(fā)布到獨(dú)立的tomcat中運(yùn)行

在開發(fā)階段我們推薦使用內(nèi)嵌的tomcat進(jìn)行開發(fā),因?yàn)檫@樣會方便很多,但是到生成環(huán)境,我們在獨(dú)立的tomcat容器中運(yùn)行,因?yàn)槲覀冃枰獙omcat做額外的優(yōu)化,這時我們

需要將工程打成war包進(jìn)行發(fā)布到外部的tomcat里面.

工程的打包方式為war

<parent>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-parent</artifactId>

<version>1.5.2.RELEASE</version>

<parent>

<groupId>com.taotao.cart</groupId>

<artifactId>taotao-cart-springboot</artifactId>

<version>1.0.0-SNAPSHOT</versio>

<packageing>war</packageing>

將spring-boot-starter-tomcat的范圍設(shè)置為provided

設(shè)置為provided是打包時會將該包排除,因?yàn)橐诺姜?dú)立的tomcat中運(yùn)行,是不需要的.

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-tomcat</artifactId>

<scope>provided</scope>

</dependency>

修改代碼,設(shè)置啟動配置

需要集成SpringBootServletInitializer,然后重寫configure,將Spring Boot的入口類設(shè)置進(jìn)去.

需要啟動類繼承需要集成SpringBootServletInitializer

@Configuration

@PropertySource(value = {"classpath:jdbc.properties", "classpath:env.properties", "classpath:httpclient.properties"})

@ComponentScan(basePackages = "con.taotao")

@ImportResource(value = "classpath:dubbo/dubbo-consumer.xml") // dubbo的配置文件,將dubbo整合到spring容器中

@SpringBootApplication

public class TaobaoApplication extends SpringBootServletInitializer {

@Override

protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {

// 設(shè)置啟動類,用于獨(dú)立tomcat運(yùn)行的入口

return builder.sources(TaotaoApplication.class);

}

}

maven命令 : clean package // 把項(xiàng)目打包成war包.

把打包成war的項(xiàng)目放到tomcat的webapps的ROOT里面,并解壓.

在配置Mybatis時使用java配置

@Configuration

@AutoConfiureAfter(MyBatisConfig.class) // 保證在MyBatisConfig實(shí)例化之后再實(shí)例化該類

public class MapperScannerConfig {

// mapper接口的掃描器

@Bean

public MapperScannerConfigurer mapperScannerConfigurer() {

MapperScannerConfigurer mapperScannerConfigurer = new MapperScannerConfigurer();

mapperScannerConfigurer.setBasePackage("com.taotao.cart.mapper");

return mapperScannerConfigurer;

}

}

全局捕獲異常

  1. 新建一個Class,這里取名為GlobalDefaultExceptionHandler;

  2. 在class上添加注解,@ControllerAdvice;

  3. 在class中添加一個方法;

  4. 在方法上添加@ExceptionHandler攔截相應(yīng)的異常信息;

  5. 如果返回的是View -- 方法的返回值是ModelAndView;

  6. 如果返回的是String或者是Json數(shù)據(jù),那么需要在方法上添加@ResponseBody注解
向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI