SpringBoot-常見問題(一)


參考:

https://www.cnblogs.com/nihaorz/p/10528121.html

https://www.cnblogs.com/tanwei81/p/6814022.html

 

 

 

目錄:

常見注解

常見依賴

 

 

SpringBoot之常用注解

在spring boot中,摒棄了spring以往項目中大量繁瑣的配置,遵循約定大於配置的原則,通過自身默認配置,極大的降低了項目搭建的復雜度。同樣在spring boot中,大量注解的使用,使得代碼看起來更加簡潔,提高開發的效率。這些注解不光包括spring boot自有,也有一些是繼承自spring的。

        本文中將spring boot項目中常用的一些核心注解歸類總結,並結合實際使用的角度來解釋其作用。

• 項目配置注解

1、@SpringBootApplication 注解

查看源碼可發現,@SpringBootApplication是一個復合注解,包含了@SpringBootConfiguration,@EnableAutoConfiguration,@ComponentScan這三個注解。

這三個注解的作用分別為:

  • @SpringBootConfiguration:標注當前類是配置類,這個注解繼承自@Configuration。並會將當前類內聲明的一個或多個以@Bean注解標記的方法的實例納入到srping容器中,並且實例名就是方法名。

  • @EnableAutoConfiguration:是自動配置的注解,這個注解會根據我們添加的組件jar來完成一些默認配置,我們做微服時會添加spring-boot-starter-web這個組件jar的pom依賴,這樣配置會默認配置springmvc 和tomcat。

  • @ComponentScan:掃描當前包及其子包下被@Component,@Controller,@Service,@Repository注解標記的類並納入到spring容器中進行管理。等價於<context:component-scan>的xml配置文件中的配置項。

大多數情況下,這3個注解會被同時使用,基於最佳實踐,這三個注解就被做了包裝,成為了@SpringBootApplication注解。

2、@ServletComponentScan:Servlet、Filter、Listener 可以直接通過 @WebServlet、@WebFilter、@WebListener 注解自動注冊,這樣通過注解servlet ,攔截器,監聽器的功能而無需其他配置,所以這次相中使用到了filter的實現,用到了這個注解。

3、@MapperScan:spring-boot支持mybatis組件的一個注解,通過此注解指定mybatis接口類的路徑,即可完成對mybatis接口的掃描。

它和@mapper注解是一樣的作用,不同的地方是掃描入口不一樣。@mapper需要加在每一個mapper接口類上面。所以大多數情況下,都是在規划好工程目錄之后,通過@MapperScan注解配置路徑完成mapper接口的注入。

添加mybatis相應組建依賴之后。就可以使用該注解。

進一步查看mybatis-spring-boot-starter包,可以找到這里已經將mybatis做了包裝。

這也是spring的一個理念,不重復造輪子,整合優秀的資源進入spring的體系中。

 

4、資源導入注解:@ImportResource @Import @PropertySource 這三個注解都是用來導入自定義的一些配置文件。

@ImportResource(locations={}) 導入其他xml配置文件,需要標准在主配置類上。

導入property的配置文件 @PropertySource指定文件路徑,這個相當於使用spring的<importresource/>標簽來完成配置項的引入。

@import注解是一個可以將普通類導入到spring容器中做管理

• controller 層

1、@Controller 表明這個類是一個控制器類,和@RequestMapping來配合使用攔截請求,如果不在method中注明請求的方式,默認是攔截get和post請求。這樣請求會完成后轉向一個視圖解析器。但是在大多微服務搭建的時候,前后端會做分離。所以請求后端只關注數據處理,后端返回json數據的話,需要配合@ResponseBody注解來完成。

這樣一個只需要返回數據的接口就需要3個注解來完成,大多情況我們都是需要返回數據。也是基於最佳實踐,所以將這三個注解進一步整合。

@RestController 是@Controller 和@ResponseBody的結合,一個類被加上@RestController 注解,數據接口中就不再需要添加@ResponseBody。更加簡潔。

同樣的情況,@RequestMapping(value="",method= RequestMethod.GET ),我們都需要明確請求方式。這樣的寫法又會顯得比較繁瑣,於是乎就有了如下的幾個注解。

 

普通風格 Rest風格

@RequestMapping(value=“”,method = RequestMethod.GET)

@GetMapping(value =“”)

@RequestMapping(value=“”,method = RequestMethod.POST)

@PostMapping(value =“”)

@RequestMapping(value=“”,method = RequestMethod.PUT)

@PutMapping(value =“”)

@RequestMapping(value=“”,method = RequestMethod.DELETE)

@DeleteMapping(value =“”)

這幾個注解是 @RequestMapping(value="",method= RequestMethod.xxx )的最佳實踐。為了代碼的更加簡潔。

2、@CrossOrigin:@CrossOrigin(origins = "", maxAge = 1000) 這個注解主要是為了解決跨域訪問的問題。這個注解可以為整個controller配置啟用跨域,也可以在方法級別啟用。

我們在項目中使用這個注解是為了解決微服在做定時任務調度編排的時候,會訪問不同的spider節點而出現跨域問題。

3、@Autowired:這是個最熟悉的注解,是spring的自動裝配,這個個注解可以用到構造器,變量域,方法,注解類型上。當我們需要從bean 工廠中獲取一個bean時,Spring會自動為我們裝配該bean中標記為@Autowired的元素。

4、@EnablCaching@EnableCaching: 這個注解是spring framework中的注解驅動的緩存管理功能。自spring版本3.1起加入了該注解。其作用相當於spring配置文件中的cache manager標簽。

5、@PathVariable:路徑變量注解,@RequestMapping中用{}來定義url部分的變量名,如:

同樣可以支持變量名加正則表達式的方式,變量名:[正則表達式]。

• servcie層注解

1、@Service:這個注解用來標記業務層的組件,我們會將業務邏輯處理的類都會加上這個注解交給spring容器。事務的切面也會配置在這一層。當讓 這個注解不是一定要用。有個泛指組件的注解,當我們不能確定具體作用的時候 可以用泛指組件的注解托付給spring容器。 

2、@Resource:@Resource和@Autowired一樣都可以用來裝配bean,都可以標注字段上,或者方法上。 @resource注解不是spring提供的,是屬於J2EE規范的注解。

兩個之前的區別就是匹配方式上有點不同,@Resource默認按照名稱方式進行bean匹配,@Autowired默認按照類型方式進行bean匹配。

• 持久層注解

1、@Repository:@Repository注解類作為DAO對象,管理操作數據庫的對象。

總得來看,@Component, @Service, @Controller, @Repository是spring注解,注解后可以被spring框架所掃描並注入到spring容器來進行管理

@Component是通用注解,其他三個注解是這個注解的拓展,並且具有了特定的功能。

通過這些注解的分層管理,就能將請求處理,義務邏輯處理,數據庫操作處理分離出來,為代碼解耦,也方便了以后項目的維護和開發。

所以我們在正常開發中,如果能用@Service, @Controller, @Repository其中一個標注這個類的定位的時候,就不要用@Component來標注。

2、@Transactional: 通過這個注解可以聲明事務,可以添加在類上或者方法上。

在spring boot中 不用再單獨配置事務管理,一般情況是我們會在servcie層添加了事務注解,即可開啟事務。要注意的是,事務的開啟只能在public 方法上。並且主要事務切面的回滾條件。正常我們配置rollbackfor exception時 ,如果在方法里捕獲了異常就會導致事務切面配置的失效。

• 其他相關注解

  • @ControllerAdvice 和 @RestControllerAdvice:通常和@ExceptionHandler、@InitBinder、@ModelAttribute一起配合使用。

  • @ControllerAdvice 和 @ExceptionHandler 配合完成統一異常攔截處理。

  • @RestControllerAdvice 是 @ControllerAdvice 和 @ResponseBody的合集,可以將異常以json的格式返回數據。

如下面對數據異常返回的統一處理。

這里是對平時用到的一些注解做了歸納,及應用說明。還有其他更深的知識還需要在后續的用中繼續學習。

via:https://mp.weixin.qq.com/s/eE9bLX5invvMjGePprO2Ew

 

 

 

[springBoot系列]--springBoot注解大全

一、注解(annotations)列表
@SpringBootApplication:包含了@ComponentScan、@Configuration和@EnableAutoConfiguration注解。其中@ComponentScan讓spring Boot掃描到Configuration類並把它加入到程序上下文。

@Configuration 等同於spring的XML配置文件;使用Java代碼可以檢查類型安全。

@EnableAutoConfiguration 自動配置。

@ComponentScan 組件掃描,可自動發現和裝配一些Bean。

@Component可配合CommandLineRunner使用,在程序啟動后執行一些基礎任務。

@RestController注解是@Controller和@ResponseBody的合集,表示這是個控制器bean,並且是將函數的返回值直 接填入HTTP響應體中,是REST風格的控制器。

@Autowired自動導入。

@PathVariable獲取參數。

@JsonBackReference解決嵌套外鏈問題。

@RepositoryRestResourcepublic配合spring-boot-starter-data-rest使用。

二、注解(annotations)詳解

@SpringBootApplication:申明讓spring boot自動給程序進行必要的配置,這個配置等同於:@Configuration ,@EnableAutoConfiguration 和 @ComponentScan 三個配置。

復制代碼
package com.example.myproject; 
import org.springframework.boot.SpringApplication; 
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication // same as @Configuration @EnableAutoConfiguration @ComponentScan 
public class Application { 
public static void main(String[] args) { 
SpringApplication.run(Application.class, args); 
} 
}
復制代碼

 

@ResponseBody:表示該方法的返回結果直接寫入HTTP response body中,一般在異步獲取數據時使用,用於構建RESTful的api。在使用@RequestMapping后,返回值通常解析為跳轉路徑,加上@responsebody后返回結果不會被解析為跳轉路徑,而是直接寫入HTTP response body中。比如異步獲取json數據,加上@responsebody后,會直接返回json數據。該注解一般會配合@RequestMapping一起使用。示例代碼:

@RequestMapping(“/test”) 
@ResponseBody 
public String test(){ 
return”ok”; 
}

 

@Controller:用於定義控制器類,在spring 項目中由控制器負責將用戶發來的URL請求轉發到對應的服務接口(service層),一般這個注解在類中,通常方法需要配合注解@RequestMapping。示例代碼:

復制代碼
@Controller 
@RequestMapping(“/demoInfo”) 
publicclass DemoController { 
@Autowired 
private DemoInfoService demoInfoService;

@RequestMapping("/hello")
public String hello(Map<String,Object> map){
   System.out.println("DemoController.hello()");
   map.put("hello","from TemplateController.helloHtml");
   //會使用hello.html或者hello.ftl模板進行渲染顯示.
   return"/hello";
}
}
復制代碼

 

@RestController:用於標注控制層組件(如struts中的action),@ResponseBody和@Controller的合集。示例代碼:

復制代碼
package com.kfit.demo.web;

import org.springframework.web.bind.annotation.RequestMapping; 
import org.springframework.web.bind.annotation.RestController;


@RestController 
@RequestMapping(“/demoInfo2”) 
publicclass DemoController2 {

@RequestMapping("/test")
public String test(){
   return"ok";
}
}
復制代碼

 

@RequestMapping:提供路由信息,負責URL到Controller中的具體函數的映射。

@EnableAutoConfiguration:Spring Boot自動配置(auto-configuration):嘗試根據你添加的jar依賴自動配置你的Spring應用。例如,如果你的classpath下存在HSQLDB,並且你沒有手動配置任何數據庫連接beans,那么我們將自動配置一個內存型(in-memory)數據庫”。你可以將@EnableAutoConfiguration或者@SpringBootApplication注解添加到一個@Configuration類上來選擇自動配置。如果發現應用了你不想要的特定自動配置類,你可以使用@EnableAutoConfiguration注解的排除屬性來禁用它們。

@ComponentScan:表示將該類自動發現掃描組件。個人理解相當於,如果掃描到有@Component、@Controller、@Service等這些注解的類,並注冊為Bean,可以自動收集所有的Spring組件,包括@Configuration類。我們經常使用@ComponentScan注解搜索beans,並結合@Autowired注解導入。可以自動收集所有的Spring組件,包括@Configuration類。我們經常使用@ComponentScan注解搜索beans,並結合@Autowired注解導入。如果沒有配置的話,Spring Boot會掃描啟動類所在包下以及子包下的使用了@Service,@Repository等注解的類。

@Configuration:相當於傳統的xml配置文件,如果有些第三方庫需要用到xml文件,建議仍然通過@Configuration類作為項目的配置主類——可以使用@ImportResource注解加載xml配置文件。

@Import:用來導入其他配置類。

@ImportResource:用來加載xml配置文件。

@Autowired:自動導入依賴的bean

@Service:一般用於修飾service層的組件

@Repository:使用@Repository注解可以確保DAO或者repositories提供異常轉譯,這個注解修飾的DAO或者repositories類會被ComponetScan發現並配置,同時也不需要為它們提供XML配置項。

@Bean:用@Bean標注方法等價於XML中配置的bean。

@Value:注入Spring boot application.properties配置的屬性的值。示例代碼:

@Value(value = “#{message}”) 
private String message;

 

@Inject:等價於默認的@Autowired,只是沒有required屬性;

@Component:泛指組件,當組件不好歸類的時候,我們可以使用這個注解進行標注。

@Bean:相當於XML中的,放在方法的上面,而不是類,意思是產生一個bean,並交給spring管理。

@AutoWired:自動導入依賴的bean。byType方式。把配置好的Bean拿來用,完成屬性、方法的組裝,它可以對類成員變量、方法及構造函數進行標注,完成自動裝配的工作。當加上(required=false)時,就算找不到bean也不報錯。

@Qualifier:當有多個同一類型的Bean時,可以用@Qualifier(“name”)來指定。與@Autowired配合使用。@Qualifier限定描述符除了能根據名字進行注入,但能進行更細粒度的控制如何選擇候選者,具體使用方式如下:

@Autowired 
@Qualifier(value = “demoInfoService”) 
private DemoInfoService demoInfoService;

 

@Resource(name=”name”,type=”type”):沒有括號內內容的話,默認byName。與@Autowired干類似的事。

三、JPA注解

@Entity:@Table(name=”“):表明這是一個實體類。一般用於jpa這兩個注解一般一塊使用,但是如果表名和實體類名相同的話,@Table可以省略

@MappedSuperClass:用在確定是父類的entity上。父類的屬性子類可以繼承。

@NoRepositoryBean:一般用作父類的repository,有這個注解,spring不會去實例化該repository。

@Column:如果字段名與列名相同,則可以省略。

@Id:表示該屬性為主鍵。

@GeneratedValue(strategy = GenerationType.SEQUENCE,generator = “repair_seq”):表示主鍵生成策略是sequence(可以為Auto、IDENTITY、native等,Auto表示可在多個數據庫間切換),指定sequence的名字是repair_seq。

@SequenceGeneretor(name = “repair_seq”, sequenceName = “seq_repair”, allocationSize = 1):name為sequence的名稱,以便使用,sequenceName為數據庫的sequence名稱,兩個名稱可以一致。

@Transient:表示該屬性並非一個到數據庫表的字段的映射,ORM框架將忽略該屬性。如果一個屬性並非數據庫表的字段映射,就務必將其標示為@Transient,否則,ORM框架默認其注解為@Basic。@Basic(fetch=FetchType.LAZY):標記可以指定實體屬性的加載方式

@JsonIgnore:作用是json序列化時將Java bean中的一些屬性忽略掉,序列化和反序列化都受影響。

@JoinColumn(name=”loginId”):一對一:本表中指向另一個表的外鍵。一對多:另一個表指向本表的外鍵。

@OneToOne、@OneToMany、@ManyToOne:對應hibernate配置文件中的一對一,一對多,多對一。

四、springMVC相關注解

@RequestMapping:@RequestMapping(“/path”)表示該控制器處理所有“/path”的UR L請求。RequestMapping是一個用來處理請求地址映射的注解,可用於類或方法上。
用於類上,表示類中的所有響應請求的方法都是以該地址作為父路徑。該注解有六個屬性:
params:指定request中必須包含某些參數值是,才讓該方法處理。
headers:指定request中必須包含某些指定的header值,才能讓該方法處理請求。
value:指定請求的實際地址,指定的地址可以是URI Template 模式
method:指定請求的method類型, GET、POST、PUT、DELETE等
consumes:指定處理請求的提交內容類型(Content-Type),如application/json,text/html;
produces:指定返回的內容類型,僅當request請求頭中的(Accept)類型中包含該指定類型才返回

@RequestParam:用在方法的參數前面。
@RequestParam
String a =request.getParameter(“a”)。

@PathVariable:路徑變量。如

RequestMapping(“user/get/mac/{macAddress}”) 
public String getByMacAddress(@PathVariable String macAddress){ 
//do something; 
} 

參數與大括號里的名字一樣要相同。

 

五、全局異常處理

@ControllerAdvice:包含@Component。可以被掃描到。統一處理異常。

@ExceptionHandler(Exception.class):用在方法上面表示遇到這個異常就執行以下方法。

 

 

 

springboot常用Starter介紹

1.starter的依賴,這里以pom.xml中的spring-boot-starter為例,通過ctrl+鼠標點擊可以查看start中具體的依賴

 

 

 

 

 

 2官網

https://docs.spring.io/spring-boot/docs/2.3.3.BUILD-SNAPSHOT/reference/html/using-spring-boot.html#using-boot-starter

 

 

3常用的starter

spring-boot-starter-activemq

spring-boot-starter-aop

spring-boot-starter-data-redis

spring-boot-starter-freemarker

spring-boot-starter-thymeleaf

spring-boot-starter-webflux

 

4常見的starter

spring-boot-starter
這是Spring Boot的核心啟動器,包含了自動配置、日志和YAML。

spring-boot-starter-amqp
通過spring-rabbit來支持AMQP協議(Advanced Message Queuing Protocol. 。

spring-boot-starter-aop
支持面向方面的編程即AOP,包括spring-aop和AspectJ。

spring-boot-starter-artemis
通過Apache Artemis支持JMS的API(Java Message Service API. 。

spring-boot-starter-batch
支持Spring Batch,包括HSQLDB數據庫。

spring-boot-starter-cache
支持Spring的Cache抽象。

spring-boot-starter-cloud-connectors
支持Spring Cloud Connectors,簡化了在像Cloud Foundry或Heroku這樣的雲平台上連接服務。

spring-boot-starter-data-elasticsearch
支持ElasticSearch搜索和分析引擎,包括spring-data-elasticsearch。

spring-boot-starter-data-gemfire
支持GemFire分布式數據存儲,包括spring-data-gemfire。

spring-boot-starter-data-jpa
支持JPA(Java Persistence API. ,包括spring-data-jpa、spring-orm、Hibernate。

spring-boot-starter-data-mongodb
支持MongoDB數據,包括spring-data-mongodb。

spring-boot-starter-data-rest
通過spring-data-rest-webmvc,支持通過REST暴露Spring Data數據倉庫。

spring-boot-starter-data-solr
支持Apache Solr搜索平台,包括spring-data-solr。

spring-boot-starter-freemarker
支持FreeMarker模板引擎。

spring-boot-starter-groovy-templates
支持Groovy模板引擎。

spring-boot-starter-hateoas
通過spring-hateoas支持基於HATEOAS的RESTful Web服務。

spring-boot-starter-hornetq
通過HornetQ支持JMS。

spring-boot-starter-integration
支持通用的spring-integration模塊。

spring-boot-starter-jdbc
支持JDBC數據庫。

spring-boot-starter-jersey
支持Jersey RESTful Web服務框架。

spring-boot-starter-jta-atomikos
通過Atomikos支持JTA分布式事務處理。

spring-boot-starter-jta-bitronix
通過Bitronix支持JTA分布式事務處理。

spring-boot-starter-mail
支持javax.mail模塊。

spring-boot-starter-mobile
支持spring-mobile。

spring-boot-starter-mustache
支持Mustache模板引擎。

spring-boot-starter-redis
支持Redis鍵值存儲數據庫,包括spring-redis。

spring-boot-starter-security
支持spring-security。

spring-boot-starter-social-facebook
支持spring-social-facebook

spring-boot-starter-social-linkedin
支持pring-social-linkedin

spring-boot-starter-social-twitter
支持pring-social-twitter

spring-boot-starter-test
支持常規的測試依賴,包括JUnit、Hamcrest、Mockito以及spring-test模塊。

spring-boot-starter-thymeleaf
支持Thymeleaf模板引擎,包括與Spring的集成。

spring-boot-starter-velocity
支持Velocity模板引擎。

spring-boot-starter-web
S支持全棧式Web開發,包括Tomcat和spring-webmvc。

spring-boot-starter-websocket
支持WebSocket開發。

spring-boot-starter-ws
支持Spring Web Services。
Spring Boot應用啟動器面向生產環境的還有2種,具體如下:

spring-boot-starter-actuator
增加了面向產品上線相關的功能,比如測量和監控。

spring-boot-starter-remote-shell
增加了遠程ssh shell的支持。
最后,Spring Boot應用啟動器還有一些替換技術的啟動器,具體如下:

spring-boot-starter-jetty
引入了Jetty HTTP引擎(用於替換Tomcat. 。

spring-boot-starter-log4j
支持Log4J日志框架。

spring-boot-starter-logging
引入了Spring Boot默認的日志框架Logback。

spring-boot-starter-tomcat
引入了Spring Boot默認的HTTP引擎Tomcat。

spring-boot-starter-undertow
引入了Undertow HTTP引擎(用於替換Tomcat.

 

 

 

 

SpringBoot企業常用的starter

 

SpringBoot企業常用的starter

Editor:SimpleWu

SpringBoot簡介#

Spring Boot是由Pivotal團隊提供的全新框架,其設計目的是用來簡化新Spring應用的初始搭建以及開發過程。該框架使用了特定的方式來進行配置,從而使開發人員不再需要定義樣板化的配置。通過這種方式,Boot致力於在蓬勃發展的快速應用開發領域(rapid application development)成為領導者。

Spring Boot讓我們的Spring應用變的更輕量化。比如:你可以僅僅依靠一個Java類來運行一個Spring引用。你也可以打包你的應用為jar並通過使用java -jar來運行你的Spring Web應用。

Spring Boot的主要優點:

  1. 為所有Spring開發者更快的入門
  2. 開箱即用,提供各種默認配置來簡化項目配置
  3. 內嵌式容器簡化Web項目
  4. 沒有冗余代碼生成和XML配置的要求

在下面的代碼中只要有一定基礎會發現這寫代碼實例非常簡單對於開發者來說幾乎是“零配置”。

SpringBoot運行#

開發工具:jdk8,IDEA,STS,eclipse(需要安裝STS插件)這些都支持快速啟動SpringBoot工程。我這里就不快速啟動了,使用maven工程。學習任何一項技術首先就要精通HelloWord,那我們來跑個初體驗。

首先只用maven我們創建的maven工程直接以jar包的形式創建就行了,首先我們來引入SpringBoot的依賴

首先我們需要依賴SpringBoot父工程,這是每個項目中必須要有的。

Copy
<!--引入SpringBoot父依賴--> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.0.5.RELEASE</version> <relativePath/> </parent> <!--編碼與JAVA版本--> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <java.version>1.8</java.version> </properties> 

我們啟動WEB模塊當然必須要引入WEB模塊的依賴

Copy
<dependencies> <!--引入SpringBoot-WEB模塊--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> </dependencies> 

我們需要編寫一個SpringBoot啟動類,SpringbootFirstExperienceApplication.java

Copy
@SpringBootApplication public class SpringbootFirstExperienceApplication { public static void main(String[] args) { SpringApplication.run(SpringbootFirstExperienceApplication.class, args); } } 

到了這里我們直接把他當成SpringMVC來使用就行了,不過這里默認是不支持JSP官方推薦使用模板引擎,后面會寫到整合JSP。這里我就不寫Controller了。

@SpringBootApplication:之前用戶使用的是3個注解注解他們的main類。分別是@Configuration,@EnableAutoConfiguration,@ComponentScan。由於這些注解一般都是一起使用,spring boot提供了一個統一的注解@SpringBootApplication。

注意事項:我們使用這個注解在不指定掃描路徑的情況下,SpringBoot只能掃描到和SpringbootFirstExperienceApplication同包或子包的Bean;

SpringBoot目錄結構#

在src/main/resources中我們可以有幾個文件夾:

templates:用來存儲模板引擎的,Thymeleaf,FreeMarker,Velocity等都是不錯的選擇。

static:存儲一些靜態資源,css,js等

public:在默認SpringBoot工程中是不生成這個文件夾的,但是在自動配置中我們可以有這個文件夾用來存放公共的資源(html等)

application.properties:這個文件名字是固定的,SpringBoot啟動會默認加載這些配置在這里面可以配置端口號,訪問路徑,數據庫連接信息等等。這個文件非常重要,當然官方中推出了一個yml格式這是非常強大的數據格式。

整合JdbcTemplate#

引入依賴:

Copy
	<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.5.2.RELEASE</version> </parent> <dependencies> <!--引入WEB模塊--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!--引入JDBC模塊--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> </dependency> <!--引入數據庫驅動--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies> 

配置application.properties,雖然說是“零配置”但是這些必要的肯定要指定,否則它怎么知道連那個數據庫?

Copy
spring.datasource.url=jdbc:mysql://localhost:3306/mybatis
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.jdbc.Driver

使用方式:

Copy
@Service public class EmployeeService { @Autowired private JdbcTemplate jdbcTemplate; public boolean saveEmp(String name,String email,String gender){ String sql = "insert into tal_employee values(null,?,?,?)"; int result = jdbcTemplate.update(sql, name,email,gender); System.out.println("result : " + result); return result > 0 ? true:false; } } 
Copy
@RestController public class EmployeeController { @Autowired private EmployeeService employeeService; @RequestMapping("/save") public String insert(String name,String email,String gender){ boolean result = employeeService.saveEmp(name, email, gender); if(result){ return "success"; } return "error"; } } 

這里我們直接返回一個文本格式。

@RestController#

在上面的代碼中我們使用到這個注解修改我們的Controller類而是不使用@Controller這個注解,其實中包含了@Controller,同時包含@ResponseBody既然修飾在類上面那么就是表示這個類中所有的方法都是@ResponseBody所以在這里我們返回字符串在前台我們會以文本格式展示,如果是對象那么它會自動轉換成json格式返回。

整合JSP#

在創建整合JSP的時候指定要選WAR,一定要選WAR。

引入依賴:

Copy
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.5.2.RELEASE</version> </parent> <dependencies> <!-- SpringBoot WEB組件 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- 整合JSP依賴 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> </dependency> <dependency> <groupId>org.apache.tomcat.embed</groupId> <artifactId>tomcat-embed-jasper</artifactId> </dependency> </dependencies> 

然后我們只需要配置試圖解析器路徑就可以了。

Copy
#配置試圖解析器前綴
spring.mvc.view.prefix=/WEB-INF/views/
#配置試圖解析器后綴
spring.mvc.view.suffix=.jsp

整合JPA#

同樣的整合JPA我們只需要啟動我們SpringBoot已經集成好的模塊即可。

添加依賴:

Copy
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.5.2.RELEASE</version> </parent> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!--啟動JPA組件--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency> </dependencies> 

啟動JPA組件后直接配置數據庫連接信息就可以使用JPA功能。

Application.properties

Copy
spring.datasource.url=jdbc:mysql://localhost:3306/mybatis
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.jdbc.Driver

實體類:Employee.java

Copy
@Table(name="tal_employee") @Entity public class Employee implements Serializable{ @Id @GeneratedValue(strategy = GenerationType.AUTO) private Integer id; @Column(name="last_Name") private String lastName; private String email; private String gender; //get set 省略 } 

EmployeeDao接口:

Copy
public interface EmployeeDao extends JpaRepository<Employee, Integer>{ } 

EmployeeController.java:

Copy
@Controller public class EmployeeController { @Autowired private EmployeeDao employeeDao; @ResponseBody @RequestMapping("/emps") public List<Employee> getEmployees(){ List<Employee> employees = employeeDao.findAll(); System.out.println(employees); return employees; } } 

整合MyBatis#

引入依賴:

Copy
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.5.2.RELEASE</version> </parent> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!--引入對JDBC的支持--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> </dependency> <!--引入對logging的支持--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-logging</artifactId> </dependency> <!-- SpringBoot MyBatis啟動器 --> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>1.2.2</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency> </dependencies> 

配置application.properties

Copy
spring.datasource.url=jdbc:mysql://localhost:3306/mybatis
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
##############datasource classpath 數據連接池地址##############
#spring.datasource.type=com.alibaba.druid.pool.DruidDataSource

#指定我們的mapper.xml位置
mybatis.mapper-locations=classpath:com/simple/springboot/mybatis/dao/mapper/*.xml
#entity.class 指定我們實體類所在包位置
mybatis.type-aliases-package=com.simple.springboot.mybatis.entity

當然這里還有很多屬性如果想要使用可以參考官方文檔。到了這里其他就不寫了,把他當作SSM使用就ok。

注意事項:在我們的Dao層接口中一定要在類上加上注解@Mapper否則無法掃描到。

AOP功能使用#

在我們SpringBoot中使用AOP非常簡單。

Copy
package com.simple.springboot.aop; import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.After; import org.aspectj.lang.annotation.AfterThrowing; import org.aspectj.lang.annotation.Around; import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Before; import org.aspectj.lang.annotation.Pointcut; import org.springframework.stereotype.Component; @Aspect @Component public class SpringBootAspect { /** * 定義一個切入點 * @author:SimpleWu * @Date:2018年10月12日 */ @Pointcut(value="execution(* com.simple.springboot.util.*.*(..))") public void aop(){} /** * 定義一個前置通知 * @author:SimpleWu * @Date:2018年10月12日 */ @Before("aop()") public void aopBefore(){ System.out.println("前置通知 SpringBootAspect....aopBefore"); } /** * 定義一個后置通知 * @author:SimpleWu * @Date:2018年10月12日 */ @After("aop()") public void aopAfter(){ System.out.println("后置通知 SpringBootAspect....aopAfter"); } /** * 處理未處理的JAVA異常 * @author:SimpleWu * @Date:2018年10月12日 */ @AfterThrowing(pointcut="aop()",throwing="e") public void exception(Exception e){ System.out.println("異常通知 SpringBootAspect...exception .." + e); } /** * 環繞通知 * @author:SimpleWu * @throws Throwable * @Date:2018年10月12日 */ @Around("aop()") public void around(ProceedingJoinPoint invocation) throws Throwable{ System.out.println("SpringBootAspect..環繞通知 Before"); invocation.proceed(); System.out.println("SpringBootAspect..環繞通知 After"); } } 

任務調度#

SpringBoot已經集成好一個調度功能。

Copy
@Component public class ScheduledTasks { private static final SimpleDateFormat dateFormat = new SimpleDateFormat("HH:mm:ss"); /** * 任務調度,每隔5秒執行一次 * @author:SimpleWu * @Date:2018年10月12日 */ @Scheduled(fixedRate = 1000) public void reportCurrentTime() { System.out.println("現在時間:" + dateFormat.format(new Date())); } } 

然后啟動的時候我們必須要在主函數類上加上注解:@EnableScheduling(翻譯過來就是開啟調度)

Copy
/** * SpringBoot使用任務調度 * @EnableScheduling標注程序開啟任務調度 * @author :SimpleWu * @Date:2018年10月12日 */ @SpringBootApplication @EnableScheduling public class App { public static void main(String[] args) { SpringApplication.run(App.class, args); } } 

整合RabbitMq#

安裝RabbitMq
由於RabbitMQ依賴Erlang, 所以需要先安裝Erlang。

Copy
sudo yum install -y make gcc gcc-c++ m4 openssl openssl-devel ncurses-devel unixODBC unixODBC-devel java java-devel
sudo yum install epel-release
sudo yum install erlang
sudo yum install socat

下載RabbitMQ,並且安裝

Copy
sudo wget http://www.rabbitmq.com/releases/rabbitmq-server/v3.6.15/rabbitmq-server-3.6.15-1.el7.noarch.rpm
sudo yum install rabbitmq-server-3.6.15-1.el7.noarch.rpm

進入cd /etc/rabbitmq/ 創建vim rabbitmq.config

Copy
[{rabbit, [{loopback_users, []}]}].

這里的意思是開放使用,rabbitmq默認創建的用戶guest,密碼也是guest,這個用戶默認只能是本機訪問,localhost或者127.0.0.1,從外部訪問需要添加上面的配置。如果沒有找到清除日志

Copy
rm rabbit\@rabbit@localhost-sasl.log

最好還是直接sudo rabbitmqctl set_user_tags root administrator ,給root用戶賦值管理員權限
RabbitMQ,基本操作

Copy
# 添加開機啟動RabbitMQ服務 systemctl enable rabbitmq-server.service # 查看服務狀態 systemctl status rabbitmq-server.service # 啟動服務 systemctl start rabbitmq-server.service # 停止服務 systemctl stop rabbitmq-server.service # 查看當前所有用戶 rabbitmqctl list_users # 查看默認guest用戶的權限 rabbitmqctl list_user_permissions guest # 由於RabbitMQ默認的賬號用戶名和密碼都是guest。為了安全起見, 先刪掉默認用戶 rabbitmqctl delete_user guest # 添加新用戶 rabbitmqctl add_user username password # 設置用戶tag rabbitmqctl set_user_tags username administrator # 賦予用戶默認vhost的全部操作權限 rabbitmqctl set_permissions -p / username ".*" ".*" ".*" # 查看用戶的權限 rabbitmqctl list_user_permissions username 

如果只從命令行操作RabbitMQ,多少有點不方便。幸好RabbitMQ自帶了web管理界面,只需要啟動插件便可以使用。

Copy
rabbitmq-plugins enable rabbitmq_management

訪問: http://服務器IP:15672
整合RabbitMq
導入Maven依賴

Copy
<!--SpringBoot2.x--> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.1.4.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <!--設置JAVA版本--> <properties> <java.version>1.8</java.version> </properties> <!--引入依賴--> <dependencies> <!--啟動RabbitmQ--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-amqp</artifactId> </dependency> <!--啟動WEB--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!--啟動TEST--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies> 

設置application.properties配置文件

Copy
spring.application.name=springboot-rabbitmq
#RabbitMq所在服務器IP
spring.rabbitmq.host=192.168.197.133
#連接端口號
spring.rabbitmq.port=5672
#用戶名
spring.rabbitmq.username=root
#用戶密碼
spring.rabbitmq.password=123456
# 開啟發送確認
spring.rabbitmq.publisher-confirms=true
# 開啟發送失敗退回
spring.rabbitmq.publisher-returns=true
spring.rabbitmq.virtual-host=/

創建RabbitMq隊列初始化類,初始化隊列

Copy
/** * @author SimpleWu * @Date 2019-05-17 * 該類初始化隊列 */ @Configuration public class RabbitMqInitialization { /** * 創建隊列 隊列名字為SayQueue * @return */ @Bean public Queue SayQueue() { return new Queue("SayQueue"); } } 

創建生產者

Copy
/** * @author SimpleWu * @Date 2019-05-17 * 生產者 */ @Component public class SayProducer { @Autowired private RabbitTemplate rabbitTemplate; public void send(String name){ String sendMsg = "hello: " + name + " " + new Date(); //指定隊列 this.rabbitTemplate.convertAndSend("SayQueue", sendMsg); } } 

創建消費者
@RabbitListener:當監聽到隊列 SayQueue 中有消息時則會進行接收並處理
@RabbitHandler :標注在類上面表示當有收到消息的時候,就交給 @RabbitHandler 的方法處理,具體使用哪個方法處理,根據 MessageConverter 轉換后的參數類型

Copy
/** * @author SimpleWu * @Date 2019-05-17 * 消費者 * queues 指定監聽的隊列 */ @Component @RabbitListener(queues = "SayQueue") public class SayConsumer { @RabbitHandler public void process(String hello) { System.out.println("SayConsumer : " + hello); } } 

創建接口進行測試

Copy
@RestController public class SayController { @Autowired private SayProducer sayProducer; @RequestMapping("/send/{name}") public String send(@PathVariable String name){ sayProducer.send(name); return "Send Succcess SimpleWu"; } } 

啟動類就用IDEA默認生成的就好了。
http://10.192.132.22:8080/send/First 發送請求
消費者接受消息:SayConsumer : hello: First Tue May 07 17:57:02 CST 2019
注:在傳輸對象時一定要序列化

整合郵件發送#

導入依賴

Copy
<!--啟動郵箱發送依賴--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-mail</artifactId> </dependency> 

配置Properties文件

Copy
#根據類型配置
spring.mail.host=smtp.qq.com
spring.mail.port=465
spring.mail.username=450255266@qq.com
#對於qq郵箱而言 密碼指的就是發送方的授權碼
spring.mail.password=看不見我-0-
spring.mail.protocol=smtp
spring.mail.properties.mail.smtp.auth=true
spring.mail.properties.mail.smtp.ssl.enable=true
spring.mail.default-encoding=UTF-8
#是否用啟用加密傳送的協議驗證項
#注意:在spring.mail.password處的值是需要在郵箱設置里面生成的授權碼,這個不是真實的密碼。

spring.mail.host 需要根據不同的郵箱類型配置不同的服務器地址
發送郵箱

Copy
/** * @author SimpleWu * @data 2019=05-17 * 發送郵件 */ @Component public class EmailService { @Autowired private JavaMailSender javaMailSender; public void sendSimpleMail(){ MimeMessage message = null; try { message = javaMailSender.createMimeMessage(); MimeMessageHelper helper = new MimeMessageHelper(message, true); helper.setFrom("450255266@qq.com"); helper.setTo("450255266@qq.com"); helper.setSubject("標題:發送Html內容"); StringBuffer context = new StringBuffer(); context.append("<p style='color:red'>"); context.append("Hello SpringBoot Email Start SimpleWu!!"); context.append("</p>"); helper.setText(context.toString(),true);//設置true發送html郵件 //帶附件 //FileSystemResource fileSystemResource=new FileSystemResource(new File("D:\2019-05-07.pdf")); //helper.addAttachment("郵箱附件",fileSystemResource); javaMailSender.send(message); } catch (MessagingException e) { e.printStackTrace(); } } } 

注:最好使用異步接口發送郵件,並且發送郵件的服務器為單獨部署。

 

 

 

 

 

Spring Boot常用的maven依賴

 <!--繼承springboot父項目,依賴會自動匹配版本號-->
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.7.RELEASE</version>
    </parent>
 
    <dependencies>
 
        <!--引入springboot的web支持,幫你封裝好了很多個依賴-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
 
        <!--springboot中集成jsp,下面三個 注意scope屬性影響打war包-->
        <dependency>
            <groupId>jstl</groupId>
            <artifactId>jstl</artifactId>
            <version>1.2</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.tomcat.embed</groupId>
            <artifactId>tomcat-embed-jasper</artifactId>
            <scope>provided</scope>
        </dependency>
 
        <!--springboot整合mybatis,阿里的數據源,mysql或者Oracle-->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>1.3.1</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.1.12</version>
        </dependency>
        <dependency>
            <groupId>com.oracle</groupId>
            <artifactId>ojdbc6</artifactId>
            <version>6.0</version>
        </dependency>
        <!--<dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>-->
 
        <!-- fastjson格式轉換 -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.15</version>
        </dependency>
 
        <!--引入springboot測試依賴-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
 
        <!--引入lombok-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.8</version>
            <scope>provided</scope>
        </dependency>
 
        <!--引入devtools全局熱部署,謹慎使用,和redis反序列化有緩存沖突,反序列化時報錯-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <optional>true</optional>
        </dependency>
 
        <!--引入jedis-->
        <dependency>
            <groupId>redis.clients</groupId>
            <artifactId>jedis</artifactId>
            <version>2.9.0</version>
        </dependency>
        <!-- 引入一個工具包 -->
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
            <version>3.4</version>
        </dependency>
 
    </dependencies>
 
 
    <build>
        <!--引入jsp運行插件-->
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <fork>true</fork>
                    <!-- spring-boot:run 中文亂碼解決 -->
                    <jvmArguments>-Dfile.encoding=UTF-8</jvmArguments>
                    <!--指定入口類,打包的時候用-->
                    <mainClass>com.baizhi.Application</mainClass>
                </configuration>
            </plugin>
        </plugins>
    </build>

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM