這里簡單總結下各個組件常用依賴 基於SpringBoot2.2.10.RELEASE 可能因為版本不同有所區別,實際使用時自由發揮
一.數據庫相關
1.mysql驅動
<!--Mysql依賴包--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope> </dependency>
2.mybatis
<!-- mybatis --> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> </dependency>
3.druid數據源驅動
<!-- druid數據源驅動 --> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid-spring-boot-starter</artifactId> <version>1.1.24</version> </dependency>
二.SpringBoot相關
1.必備的父依賴
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.2.10.RELEASE</version> </parent>
2.一般web開發需要
<!--Spring boot Web容器--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency>
3.單元測試junit
<!--Spring boot 測試--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency>
4.spring-data-jpa
<!--Spring boot 核心--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency>
5.security安全框架
<!--Spring boot 安全框架--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency>
6.spring boot緩存
<!-- spring boot 緩存 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-cache</artifactId> </dependency>
7.spring boot集成redis
<!--Spring boot Redis--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency>
8.spring boot集成redis所需的common-pool2
<!--spring boot 集成redis所需common-pool2--> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-pool2</artifactId> <version>2.5.0</version> </dependency>
9.springboot集成thymeleaf模板引擎
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency>
10.springboot websocket
<!-- Spring boot websocket --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-websocket</artifactId> </dependency>
11.AOP
<!--AOP--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-aop</artifactId> </dependency>
相應切面類實現例子:
@Aspect @Component public class ServiceLogAspect { public static final Logger log = LoggerFactory.getLogger(ServiceLogAspect.class); /** * AOP通知: * 1. 前置通知:在方法調用之前執行 * 2. 后置通知:在方法正常調用之后執行 * 3. 環繞通知:在方法調用之前和之后,都分別可以執行的通知 * 4. 異常通知:如果在方法調用過程中發生異常,則通知 * 5. 最終通知:在方法調用之后執行 */ /** * 切面表達式: * execution 代表所要執行的表達式主體 * 第一處 * 代表方法返回類型 *代表所有類型 * 第二處 包名代表aop監控的類所在的包 * 第三處 .. 代表該包以及其子包下的所有類方法 * 第四處 * 代表類名,*代表所有類 * 第五處 *(..) *代表類中的方法名,(..)表示方法中的任何參數 * * @param joinPoint * @return * @throws Throwable */ @Around("execution(* com.xuxu.service.impl..*.*(..))") public Object recordTimeLog(ProceedingJoinPoint joinPoint) throws Throwable { log.info("====== 開始執行 {}.{} ======", joinPoint.getTarget().getClass(), joinPoint.getSignature().getName()); // 記錄開始時間 long begin = System.currentTimeMillis(); // 執行目標 service Object result = joinPoint.proceed(); // 記錄結束時間 long end = System.currentTimeMillis(); long takeTime = end - begin; if (takeTime > 3000) { log.error("====== 執行結束,耗時:{} 毫秒 ======", takeTime); } else if (takeTime > 2000) { log.warn("====== 執行結束,耗時:{} 毫秒 ======", takeTime); } else { log.info("====== 執行結束,耗時:{} 毫秒 ======", takeTime); } return result; } }
三.常用第三方工具
1.commons
<!-- apache 工具類 --> <dependency> <groupId>commons-codec</groupId> <artifactId>commons-codec</artifactId> <version>1.11</version> </dependency> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-lang3</artifactId> <version>3.4</version> </dependency> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-io</artifactId> <version>1.3.2</version> </dependency>
2.lombok
<!--lombok插件--> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency>
3.slf4j日志門面+logback實現
<!--slf4j日志門面:可以通過適配器讓老的日志框架實現對slf4j的支持,也可以在不改動原有日志框架的基礎上通過橋接升級為別的日志框架--> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.7.30</version> </dependency> <!--logback日志--> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> <version>1.2.3</version> </dependency>
4.離線IP地址定位庫
<dependency> <groupId>org.lionsoul</groupId> <artifactId>ip2region</artifactId> <version>1.7.2</version> </dependency>
5.數據傳輸對象(DTO)
<!--mapStruct依賴--> <dependency> <groupId>org.mapstruct</groupId> <artifactId>mapstruct</artifactId> <version>${mapstruct.version}</version> </dependency> <dependency> <groupId>org.mapstruct</groupId> <artifactId>mapstruct-processor</artifactId> <version>${mapstruct.version}</version> <scope>provided</scope> </dependency> <dependency> <groupId>javax.inject</groupId> <artifactId>javax.inject</artifactId> <version>1</version> </dependency>
6.fastjson
<!-- fastjson --> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.70</version> </dependency>
7.java圖形驗證碼
<!-- Java圖形驗證碼 --> <dependency> <groupId>com.github.whvcse</groupId> <artifactId>easy-captcha</artifactId> <version>1.6.2</version> </dependency>
8.解析客戶端操作系統,瀏覽器信息
<!-- 解析客戶端操作系統、瀏覽器信息 --> <dependency> <groupId>nl.basjes.parse.useragent</groupId> <artifactId>yauaa</artifactId> <version>5.23</version> </dependency>
9.JWT(token驗證)
<!-- jwt --> <dependency> <groupId>io.jsonwebtoken</groupId> <artifactId>jjwt-api</artifactId> <version>0.11.1</version> </dependency> <dependency> <groupId>io.jsonwebtoken</groupId> <artifactId>jjwt-impl</artifactId> <version>0.11.1</version> </dependency> <dependency> <groupId>io.jsonwebtoken</groupId> <artifactId>jjwt-jackson</artifactId> <version>0.11.1</version> </dependency>
10.定時任務Quartz
<!-- SpringBoot 整合 Quartz 定時任務 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-quartz</artifactId> <version>2.3.5.RELEASE</version> </dependency>
四.輔助類工具
1.swagger-ui接口文檔
<!-- Swagger UI 相關 --> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger2</artifactId> <version>2.9.2</version> <exclusions> <exclusion> <groupId>io.swagger</groupId> <artifactId>swagger-annotations</artifactId> </exclusion> <exclusion> <groupId>io.swagger</groupId> <artifactId>swagger-models</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger-ui</artifactId> <version>2.9.2</version> </dependency> <dependency> <groupId>io.swagger</groupId> <artifactId>swagger-annotations</artifactId> <version>1.5.21</version> </dependency> <dependency> <groupId>io.swagger</groupId> <artifactId>swagger-models</artifactId> <version>1.5.21</version> </dependency>
需要配置config配置文件:
@Configuration @EnableSwagger2 public class SwaggerConfig { // http://localhost:8080/swagger-ui.html 原路徑 // http://localhost:8080/doc.html 原路徑 // 配置swagger2核心配置 docket @Bean public Docket createRestApi() { return new Docket(DocumentationType.SWAGGER_2) // 指定api類型為swagger2 .apiInfo(apiInfo()) // 用於定義api文檔匯總信息 .select() .apis(RequestHandlerSelectors .basePackage("com.xuxu.controller")) // 指定controller包 .paths(PathSelectors.any()) // 所有controller .build(); } private ApiInfo apiInfo() { return new ApiInfoBuilder() .title("swagger-api") // 文檔頁標題 .contact(new Contact("xuxu", "https://www.xuxu.com", "abc@xuxu.com")) // 聯系人信息 .description("xuxu提供的api文檔") // 詳細信息 .version("1.0.1") // 文檔版本號 .termsOfServiceUrl("https://www.xuxu.com") // 網站地址 .build(); } }
實體類和接口上使用注解的列子:
@ApiModel(value = "用戶業務對象",description = "從客戶端傳入用戶信息數據") @Data public class UserBO { @ApiModelProperty(value = "用戶名",name="username",example = "xuxu",required = true,dataType ="String") private String username; @ApiModelProperty(value = "密碼",name="password",example = "12345",required = true) private String password; @ApiModelProperty(value = "確認密碼",name="confirmPassword",example = "12345",required = true) private String confirmPassword; }
@Api(value = "用戶接口",tags = {"用於用戶注冊相關接口"}) @RestController public class UserController { @Autowired private UserService userService; @ApiOperation(value = "查詢用戶名是否存在",notes = "查詢用戶名是否存在",httpMethod = "GET") @GetMapping("/queryUsernameExist/{username}") public IMOOCJSONResult queryUsernameExist(@PathVariable("username") String username){ if(StringUtils.isBlank(username)){ return IMOOCJSONResult.errorMsg("用戶名為空"); } boolean result = userService.queryUsernameExist(username); if(result){ return IMOOCJSONResult.errorMsg("用戶名已存在"); } return IMOOCJSONResult.ok(); } @ApiOperation(value = "用戶注冊",notes = "用戶注冊",httpMethod = "POST") @PostMapping("/register") public IMOOCJSONResult register(@RequestBody UserBO userBO){ String username =userBO.getUsername(); String password = userBO.getPassword(); String comfirmPwd = userBO.getConfirmPassword(); if(StringUtils.isBlank(username) ||StringUtils.isBlank(password) ||StringUtils.isBlank(comfirmPwd)){ return IMOOCJSONResult.errorMsg("參數不能為空"); } Users user = userService.register(userBO); return IMOOCJSONResult.ok(user); } }
參考鏈接:https://blog.csdn.net/baiyan3212/article/details/104426735/
slf4j