Java,40周日志向学习记录(第1周)

目录

  • jar包和war包
  • SpringBoot
    • 项目的描述信息
    • 项目的依赖配置信息
    • spring boot热部署
      • devtools
      • 添加依赖
      • 配置 IDEA
    • 使用Spring Boot构建项目的前后对比
  • Maven 快照(SNAPSHOT)
    • 什么是快照?
  • 实践
    • 架构设计与准备工作
    • 概述
    • 安装聚合项目
    • PDman设计数据库表
      • PDman简介
      • MySQL
    • SpringBoot依赖
      • 处理8080端口被占用
    • 整合HikariCP
    • 使用MyBatis数据库逆向生成工具
      • 逆向生成工具的配置
      • 本地项目中的配置

jar包和war包

jar
war
pom//聚合项目

jar包
java archive
可以将这些jar包引入到你的项目中,可以直接使用这些jar包中的类和属性,这些jar包一般放在lib目录下。
服务化的概念,包括服务和接口。

war包
java web模块
以Tomcat来说,将war包放置在其\webapps\目录下,然后启动Tomcat,这个包就会自动解压,就相当于发布了。
应用程序的概念,所以可以包括页面。

SpringBoot

约定优于配置(Convention Over Configuration),也称作按约定编程,是一种软件设计范式,旨在减少软件开发人员需做决定的数量、获得简单的好处,而又不失灵活性。

本质是说,开发人员仅需规定应用中不符约定的部分。例如,如果模型中有个名为 User 的类,那么数据库中对应的表就会默认命名为 user。只有在偏离这一约定时,例如将该表命名为“user_info”,才需写有关这个名字的配置。

我们可以按照这个思路来设想,我们约定 Controller 层就是 Web 请求层可以省略 MVC 的配置;我们约定在 Service 结尾的类自动注入事务,就可以省略了 Spring 的切面事务配置。

在 Spring 体系中,Spring Boot JPA 就是约定优于配置最佳实现之一,不需要关注表结构,我们约定类名即是表名,属性名即是表的字段,String 对应 varchar,long 对应 bigint,只有需要一些特殊要求的属性,我们再单独进行配置,按照这个约定我们可以将以前的工作大大简化。

Spring Boot 体系将约定优于配置的思想展现得淋漓尽致,小到配置文件、中间件的默认配置,大到内置容器、生态中的各种 Starters 无不遵循此设计规则。Spring Boot 鼓励各软件组织方创建自己的 Starter,创建 Starter 的核心组件之一就是 autoconfigure 模块,也是 Starter 的核心功能,在启动的时候进行自动装配,属性默认化配置。

可以说正是因为 Spring Boot 简化的配置和众多的 Starters 才让 Spring Boot 变得简单、易用、快速上手,也可以说正是约定优于配置的思想彻底落地才让 Spring Boot 走向辉煌。Spring Boot 约定优于配置的思想让 Spring Boot 项目非常容易上手,让编程变得更简单,其实编程本该很简单,简单才是编程的美。

项目的描述信息

  • groupId,项目的包路径
  • artifactId,项目名称
  • version,项目版本号
  • packaging,一般有两个值:jar、war,表示使用 Maven 打包时构建成 Jar 包还是 War 包
  • name,项目名称;
  • description,项目描述。

项目的依赖配置信息

  • parent,标签内配置 Spring Boot 父级版本 spring-boot-starter-parent,Maven 支持项目的父子结构,引入父级后会默认继承父级的配置
  • dependencies,标签内配置项目所需要的依赖包,Spring Boot 体系内的依赖组件不需要填写具体版本号,spring-boot-starter-parent 维护了体系内所有依赖包的版本信息。

spring boot热部署

https://blog.csdn.net/chachapaofan/article/details/88697452

devtools

热启动就需要用到我们在一开始就引入的另外一个组件:spring-boot-devtools。它是 Spring Boot 提供的一组开发工具包,其中就包含我们需要的热部署功能,在使用这个功能之前还需要再做一些配置。

添加依赖

在 pom.xml 文件中添加 spring-boot-devtools 组件。

>
  >org.springframework.boot>
  >spring-boot-Devtools>
  >true>
>

在 plugin 中配置另外一个属性 fork,并且配置为 true。

>
    >
        >
            >org.springframework.boot>
            >spring-boot-maven-plugin>
            >
                >true>
            >
        >
>
>

以上的配置就完成了,如果你使用的是 Eclipse 集成开发环境,那么恭喜你大功告成了;如果你使用的是 IDEA 集成开发环境,那么还需要做以下配置。

配置 IDEA

选择 File | Settings | Compiler 命令,然后勾选 Build project automatically 复选框,低版本的 IDEA 请勾选 make project automatically 复选框。

Java,40周日志向学习记录(第1周)_第1张图片
使用快捷键 Ctrl + Shift + A,在输入框中输入 Registry,勾选 compile.automake.allow.when.app.running 复选框:
registry
全部配置完成后,IDEA 就支持热部署了,大家可以试着去改动一下代码就会发现 Spring Boot 会自动重新加载,再也不需要手动单击重新部署了。

为什么 IDEA 需要多配置后面这一步呢?因为 IDEA 默认不是自动编译的,需要我们手动去配置后才会自动编译,而热部署依赖于项目的自动编译功能。

该模块在完整的打包环境下运行的时候会被禁用,如果你使用 java-jar 启动应用或者用一个特定的 classloader 启动,它会认为这是一个“生产环境”。

使用Spring Boot构建项目的前后对比

我们简单做一下对比,使用 Spring Boot 之前和使用之后。

使用 Spring Boot 之前:

  • 配置 web.xml,加载 Spring 和 Spring MVC
  • 配置数据库连接、配置 Spring 事务
  • 配置加载配置文件的读取,开启注解
  • 配置日志文件
  • 配置完成之后部署 Tomcat 调试

使用 Spring Boot 之后,仅仅三步即可快速搭建起一个 Web 项目:

  • 页面配置导入到开发工具中
  • 进行代码编写
  • 运行

通过对比可以发现 Spring Boot 在开发阶段做了大量优化,非常容易快速构建一个项目。

Maven 快照(SNAPSHOT)

一个大型的软件应用通常包含多个模块,并且通常的场景是多个团队开发同一应用的不同模块。举个例子,设想一个团队开发应用的前端,项目为 app-ui(app-ui.jar:1.0),而另一个团队开发应用的后台,使用的项目是 data-service(data-service.jar:1.0)。

现在可能出现的情况是开发 data-service 的团队正在进行快节奏的 bug 修复或者项目改进,并且他们几乎每隔一天就要发布库到远程仓库。 现在如果 data-service 团队每隔一天上传一个新版本,那么将会出现下面的问题:

data-service 团队每次发布更新的代码时都要告知 app-ui 团队。
app-ui 团队需要经常地更新他们 pom.xml 文件到最新版本。
为了解决这种情况,快照的概念派上了用场。

什么是快照?

快照是一种特殊的版本,指定了某个当前的开发进度的副本。不同于常规的版本,Maven 每次构建都会在远程仓库中检查新的快照。 现在 data-service 团队会每次发布更新代码的快照到仓库中,比如说 data-service:1.0-SNAPSHOT 来替代旧的快照 jar 包。

实践

架构设计与准备工作

Java,40周日志向学习记录(第1周)_第2张图片

概述

  1. 通过Maven构建聚合工程
  2. 尝试使用PDman设计数据库表,并且同步生成到数据库中
  3. 整合SpringBoot与Mybatis
  4. 构建四种不同风格的Restful Web Service,实现增删改查操作
  5. 使用PostMan调用Restful接口

安装聚合项目

Java,40周日志向学习记录(第1周)_第3张图片
Java,40周日志向学习记录(第1周)_第4张图片
maven>foodie-dev>lifecycle>install,来安装聚合项目,Build Success表示构建成功。
每次配置完成之后都要install???

PDman设计数据库表

PDman简介

开源,有类似于git的版本管理

MySQL

MySQL默认端口号:3306
Java,40周日志向学习记录(第1周)_第5张图片

SpringBoot依赖

  1. 引入依赖 parent
>
    >org.springframework.boot>
    >spring-boot-starter-parent>
    >2.1.5.RELEASE>
    >
>
  1. 设置资源属性
>
    >UTF-8>
    >UTF-8>
    >1.8>
>
  1. 引入依赖 dependency
>
    >
        >org.springframework.boot>
        >spring-boot-starter>
        >
            >
                >org.springframework.boot>
                >spring-boot-starter-logging>
            >
        >
    >
    >
        >org.springframework.boot>
        >spring-boot-starter-web>
    >
    >
        >org.springframework.boot>
        >spring-boot-configuration-processor>
        >true>
    >
>

maven 库
https://mvnrepository.com/

处理8080端口被占用

netstat -ano|findstr “端口”
tasklist|findstr “11236”
taskkill /pid 11236 /f
Java,40周日志向学习记录(第1周)_第6张图片

整合HikariCP


https://github.com/brettwooldridge/HikariCP

  1. pom中引入数据源驱动与mybatis依赖
>
	>mysql>
	>mysql-connector-java>
	>5.1.41>
>
<!-- mybatis -->
>
    >org.mybatis.spring.boot>
    >mybatis-spring-boot-starter>
    >2.1.0>
>
  1. 在yml中配置数据源和mybatis
############################################################
#
# 配置数据源信息
#
############################################################
spring:
  datasource:                                           # 数据源的相关配置
      type: com.zaxxer.hikari.HikariDataSource          # 数据源类型:HikariCP
      driver-class-name: com.mysql.jdbc.Driver          # mysql驱动
      url: jdbc:mysql://localhost:3306/foodie-shop-dev?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true
      username: root
      password: root
    hikari:
      connection-timeout: 30000       # 等待连接池分配连接的最大时长(毫秒),超过这个时长还没可用的连接则发生SQLException, 默认:30秒
      minimum-idle: 5                 # 最小连接数
      maximum-pool-size: 20           # 最大连接数
      auto-commit: true               # 自动提交
      idle-timeout: 600000            # 连接超时的最大时长(毫秒),超时则被释放(retired),默认:10分钟
      pool-name: DateSourceHikariCP     # 连接池名字
      max-lifetime: 1800000           # 连接的生命时长(毫秒),超时而且没被使用则被释放(retired),默认:30分钟 1800000ms
      connection-test-query: SELECT 1
          
############################################################
#
# mybatis 配置
#
############################################################
mybatis:
  type-aliases-package: com.imooc.pojo          # 所有POJO类所在包路径
  mapper-locations: classpath:mapper/*.xml      # mapper映射文件
  
  1. 内置tomcat
############################################################
#
# web访问端口号  约定:8088
#
############################################################
server:
  port: 8088
  tomcat:
    uri-encoding: UTF-8
  max-http-header-size: 80KB

使用MyBatis数据库逆向生成工具

Java,40周日志向学习记录(第1周)_第7张图片

逆向生成工具的配置

注意驱动和版本号

  • com.mysql.cj.jdbc.Driver,
  • serverTimezone=UTC
  • nullCatalogMeansCurrent

另外,需要注意,不是生成方式是追加式的,resources/xxxMapper.xml的resourceMap是追加式的。建议删除后重新生成。

:mysql://localhost:3306/foodie-shop-dev?serverTimezone=UTC"
                        userId="root"
                        password="root">
	>
>
>
	>mysql>
	>mysql-connector-java>
	>8.0.19>
>

本地项目中的配置

  1. 在pom中引入通用mapper工具
<!-- 通用mapper逆向工具 -->
>
    >tk.mybatis>
    >mapper-spring-boot-starter>
    >2.1.5>
>
  1. 在yml中引入通用mapper配置
############################################################
#
# mybatis mapper 配置
#
############################################################
# 通用 Mapper 配置
mapper:
  mappers: com.imooc.my.mapper.MyMapper
  not-empty: false
  identity: MYSQL
  1. 引入MyMapper接口类
package com.imooc.my.mapper;

import tk.mybatis.mapper.common.Mapper;
import tk.mybatis.mapper.common.MySqlMapper;

/**
 * 继承自己的MyMapper
 */
public interface MyMapper> extends Mapper>, MySqlMapper> {
}

你可能感兴趣的:(Java)