SpringBoot 是一個快速開發的框架,能夠快速的整合第三方框架,簡化XML配置,全部採用註解形式,內置Tomcat容器,幫助開發者能夠實現快速開發,SpringBoot的Web組件 默認集成的是SpringMVC框架。
SpringMVC是控制層。
1.4、SpringBoot和SpringCloud區別
SpringBoot 是一個快速開發的框架,能夠快速的整合第三方框架,簡化XML配置,全部採用註解形式,內置Tomcat容器,幫助開發者能夠實現快速開發,SpringBoot的Web組件 默認集成的是SpringMVC框架。
SpringMVC是控制層。
SpringCloud依賴與SpringBoot組件,使用SpringMVC編寫Http協議接口,同時SpringCloud是一套完整的微服務解決框架。
org.springframework.boot spring-boot-starter-parent 2.0.0.RELEASE org.springframework.boot spring-boot-starter-web spring-boot-starter-parent作用在pom.xml中引入spring-boot-start-parent,spring官方的解釋叫什麼stater poms,它可以提供dependency management,也就是說依賴管理,引入以後在申明其它dependency的時候就不需要version了,後面可以看到。
spring-boot-starter-web作用
springweb 核心組件
spring-boot-maven-plugin作用
如果我們要直接Main啓動spring,那麼以下plugin必須要添加,否則是無法啓動的。如果使用maven 的spring-boot:run的話是不需要此配置的。(我在測試的時候,如果不配置下面的plugin也是直接在Main中運行的。)
@RestController
在上加上RestController 表示修飾該Controller所有的方法返回JSON格式,直接可以編寫Restful接口
@EnableAutoConfiguration
註解:作用在於讓 Spring Boot 根據應用所聲明的依賴來對 Spring 框架進行自動配置
這個註解告訴Spring Boot根據添加的jar依賴猜測你想如何配置Spring。由於spring-boot-starter-web添加了Tomcat和Spring MVC,所以auto-configuration將假定你正在開發一個web應用並相應地對Spring進行設置。
public class HelloController {
@RequestMapping("/hello")
public String index() {
return “Hello World”;
}
public static void main(String[] args) {
SpringApplication.run(HelloController.class, args);
}
}
2.7、SpringBoot啓動方式1
Springboot默認端口號爲8080
@RestController
@EnableAutoConfiguration
public class HelloController {
@RequestMapping("/hello")
public String index() {
return “Hello World”;
}
public static void main(String[] args) {
SpringApplication.run(HelloController.class, args);
}
}
2.8、SpringBoot啓動方式2
@ComponentScan(basePackages = “com.itmayiedu.controller”)—控制器掃包範圍
@ComponentScan(basePackages = “com.itmayiedu.controller”)
@EnableAutoConfiguration
public class App {
public static void main(String[] args) {
SpringApplication.run(App.class, args);
}
}
2.9、SpringBoot啓動方式3
@SpringBootApplication
@SpringBootApplication 被 @Configuration、@EnableAutoConfiguration、@ComponentScan 註解所修飾,換言之 Springboot 提供了統一的註解來替代以上三個註解
掃包範圍:在啓動類上加上@SpringBootApplication註解,當前包下或者子包下所有的類都可以掃到。
這是自己做demo寫的pom裏面的東西,當用到什麼的時候添加什麼
<?xml version="1.0" encoding="UTF-8"?>
4.0.0
<groupId>com.example</groupId>
<artifactId>demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>demo</name>
<description>Demo project for Spring Boot</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.3.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
<exclusions>
<!--排除自帶的logback依賴-->
<!-- <exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>-->
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<!--排除自帶的logback依賴-->
<!-- <exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>-->
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</dependency>
<!-- SpringBoot 外部tomcat支持 -->
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!-- springboot-log4j -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j</artifactId>
<version>1.3.8.RELEASE</version>
</dependency>
<!--定義aop的依賴-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
<!-- ##lombok插件-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<!--mabatis依賴-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.1.1</version>
</dependency>
<!-- mysql 依賴 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!-- springboot 整合 pagehelper -->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>1.2.5</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
這是一些常用的配置
server.port=8077
spring.mvc.view.prefix=/WEB-INF/jsp/
spring.mvc.view.suffix=.jsp
name=itmayiedu
spring.profiles.active=prd
#打印那個包底下的sql
logging.level.com.example.mapper=debug
###datasource
spring.datasource.url=jdbc:mysql://localhost:3306/test
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
seUnicoding=true
characterEncoding=utf-8
###這是整合pagehelper所需要的一些參數
logging.level.com.example.demo.dao=DEBUG
pagehelper.helperDialect=mysql
pagehelper.reasonable=true
pagehelper.supportMethodsArguments=true
pagehelper.params=count=countSql
pagehelper.page-size-zero=true
這是我自己的截圖springboot的啓動
這是aop去處理一下日誌
這是利用aop去處理分頁
對應的
這是全局捕獲異常的一個例子
這個是開啓事務的例子
https://www.2cto.com/kf/201609/550158.html
SpringBootServletInitializer這個關鍵字是爲了外部tomcat運行項目
性能優化
組件自動掃描帶來的問題
默認情況下,我們會使用 @SpringBootApplication 註解來自動獲取應用的配置信息,但這樣也會給應用帶來一些副作用。使用這個註解後,會觸發自動配置( auto-configuration )和 組件掃描 ( component scanning ),這跟使用 @Configuration、@EnableAutoConfiguration 和 @ComponentScan 三個註解的作用是一樣的。這樣做給開發帶來方便的同時,也會有三方面的影響:
1、會導致項目啓動時間變長。當啓動一個大的應用程序,或將做大量的集成測試啓動應用程序時,影響會特別明顯。
2、會加載一些不需要的多餘的實例(beans)。
3、會增加 CPU 消耗。
針對以上三個情況,我們可以移除 @SpringBootApplication 和 @ComponentScan 兩個註解來禁用組件自動掃描,然後在我們需要的 bean 上進行顯式配置:
//// 移除 @SpringBootApplication and @ComponentScan, 用 @EnableAutoConfiguration 來替代
//@SpringBootApplication
@Configuration
@EnableAutoConfiguration
public class App01 {
public static void main(String[] args) {
SpringApplication.run(App01.class, args);
}
}
以@SpringBootApplication 啓動時間8.56秒
將Servlet容器變成Undertow
默認情況下,Spring Boot 使用 Tomcat 來作爲內嵌的 Servlet 容器
可以將 Web 服務器切換到 Undertow 來提高應用性能。Undertow 是一個採用 Java 開發的靈活的高性能 Web 服務器,提供包括阻塞和基於 NIO 的非堵塞機制。Undertow 是紅帽公司的開源產品,是 Wildfly 默認的 Web 服務器。首先,從依賴信息裏移除 Tomcat 配置:
org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-starter-tomcat 然後添加 Undertow: org.springframework.boot spring-boot-starter-undertow SpringBoot JVM參數調優這個根據服務器的內存大小,來設置堆參數。
-Xms :設置Java堆棧的初始化大小
-Xmx :設置最大的java堆大小
實例參數-XX:+PrintGCDetails -Xmx32M -Xms1M
本地項目調優
外部運行調優
java -server -Xms32m -Xmx32m -jar springboot_v2.jar
服務器名稱
第一次運行
第二次運行
第三次運行
平均值
Tomcat
4773
5194
5334.7
5100
Undertow
6666
6373
6451
6496
作者:qq375891390
來源:CSDN
原文:https://blog.csdn.net/qq375891390/article/details/81666954
版權聲明:本文爲博主原創文章,轉載請附上博文鏈接!