JAVA框架项目实战:系统公告设计及实现

更新时间:2023-05-31 09:15:17 阅读: 评论:0

JAVA框架项⽬实战:系统公告设计及实现项⽬实战:系统公告设计及实现
本期涉及内容:、
1.需求及业务设计
项⽬(公告系统)
1.需求(为⾏政⼈员发布公告,通知提供遍历)
2.原型设计(系统做完以后是什么样⼦的,先做⼀个设计稿)
3.表的设计(公告内容中包含哪些字段)
4.技术分层架构(分⽽治之-将复杂问题简单化)
5.技术栈的设计(数据库端技术,服务端技术,客服端技术)
⽬的:以项⽬为驱动,讲解技术的应⽤。
SpringBoot技术
1.是什么?(基于spring技术实现的⼀个脚⼿架)
2.基于此脚⼿架要做什么?(快速构建项⽬开发环境)
3.为什么使⽤springboot搭建环境?(提供了开箱即⽤的特性-依赖,⾃动配置…)
4.2 ⽬录结构
4.2.1)src/main/ java (java业务代码)
香茅草
4.2.2)src/main/resources(项⽬配置⽂件,静态资源)
4.2.3)src/test/java(单元测试代码)
4.2.4)pom. xm1(服务端依赖, maven插件配置)
4.3 项⽬的启动
4.3.1 启动类(@SpringBootTest)
4.3.2 启动过程(了解启动过程)
FAQ?
1. 我们写的类所在包与启动类所在包要建⽴什么关系?
2. 启动类在启动时我如何知道加载了哪些类?    (-XX:+TraceClassLoading)
HikariCP连接池
1.池化思想(空间换时间,实现对象复⽤,进⾏减少对象创建销毁带来的系统开销)
1.1 整数池(Integer[)
1.2 字符串(char[])
1.3 线程池(ThreadPoolExecutor)
1.4 对象池(Spring中的bean池)
1.5 …
世界上什么最大2.Java中连接池规范(DataSource)
2.1 为什么要创建连接池?(连接的创建和销毁⾮常耗时-TCP/IP-3次握⼿,4次挥⼿)
2.2 java中连接池的规范?(javax. sql. DataSource)
2.3 java中连接池的江湖?(c3p0, dbcp, druid, hikariCP,. . . )
2.4 连接池设计思考?(数据存储结构,算法,线程安全,参数设计,…)
3.Java中的连接池规范实现-HikariCP
蛇开头的四字成语3.1 特点:⽇本⼈->设计⼩⽽精,性能⾼,稳定
3.2 SpringBoot 默认优先加载?(添加了spring-jdbc依赖会⾃动配置hikaricp)
3.3 连接池的测试应⽤?
3.3.1 添加依赖?(mysql驱动,spring-jdbc依赖)
3.3.2 连接数据库的配置(url,urname,password)
3.3.3 构建单元测试类及⽅法对连接池进⾏单元测试?(获取连接)
3.3.4 连接获取原理分析?(@Test->DataSource->HikariDataSource->HikariPool->.)
业务描述
系统公告是⽅便公司⾏政管理⼈员向公司全员或部分指定⼈员发送通知公告的模块。如开会通知、放假通知及其它信息。使⽤户可以很⽅便的了解公司动向。
1.2系统原型设计
公告列表页⾯,如图所⽰:
公告编辑页⾯,如图所⽰:
1.3数据库及表设计
基于系统公告业务,现对公告表进⾏设计,sql 脚本如下:
drop databa if exists db_notice;
create databa if not exists db_notice default character t utf8;u db_notice
drop table if exists sys_ notice;
create table sys_ notice (
id            int(4) auto_ increment    comment'ID',
title          varchar(50)not null comment'标题 ',
type char(1)not null comment'类型(1通知 2公告),
content        varchar(500) default null  comment'公告内容',
status        char(1) default '0'        comment'状态(0正常1关闭)',
createdUr    varchar(64) default''      comment'创建者' ,
createTime      datetime                  comment'创建时间',
modifiedUr    varchar(64) default''    comment'更新者',
modifiedTime    datetime                  comment'更新时间',
remark          varchar( 255)            comment'备注',
primary key (id)
) engine=innodb auto_increment=1 comment = '通知公告表';
1.4技术架构分层设计
系统分层设计是⼀种设计思想(分⽽治之),是让每层对象都有⼀个独⽴职责,再让多层对象协同(耦合)完成⼀个完整的功能。这样做可以更好提⾼系统可扩展性,但同时也会增加系统整体运维的难度。
其中,在上图中的箭头表⽰⼀种直接依赖关系,开放接⼝层可以依赖于 Web 层,也可以直接依赖于 Service 层,其它依此类推(具体每层要实现的逻辑可⾃⾏查阅阿⾥巴巴开发⼿册)。
1.5技术栈中技术选型设计
2.SpringBoot 技术
2.1 简介
JAVAEE 应⽤体系中繁重的配置、低下的开发效率、⾼难度的三⽅集成,复杂的部署流程等等⼀直被开发⼈员所诟病。
Spring 这样的轻量级的资源整合框架,在实现其相对⽐较多的资源整合时,依旧需要⼤量的⼿动依赖管理,复杂的 XML 配置(还经常没有提⽰)。
现在的软件⽣态应⽤也已经形成⼀定的规模,系统架构正在从单体架构,分布式架构, 跨越到微服务架构。随着整个架构体系的变化,企业对技术的要求也在变化,现在的企业更注重技术的开箱即⽤,更注重技术在⽣态圈中的深度融合,更注重轻量级的运维。由此由此spring boot 诞⽣。
Spring Boot 是 Java 软件开发框架(很多⼈现在把它理解为⼀个脚⼿架),其设计⽬的是⽤来简化 Spring 项⽬的初始搭建以及开发过程。该框架使⽤了特定的注解⽅式来进⾏配置,从⽽使开发⼈员不再需要⼤量的 xml 配置。不再需要⼤量的⼿动依赖管理。Spring Boot 基于快速构建理念,通过约定⼤于配置,开箱即⽤的⽅式,希望能够在蓬勃发展的快速应⽤开发领域成为其领导者。
2.2 关键特性
SpringBoot 其核⼼特性包含如下⼏个⽅⾯:
起步依赖(Starter Dependency)
⾃动配置(Auto Configuration)
健康检查(Actator)-监控
嵌⼊式服务(Tomcat,Jetty)等
2.3 ⼯程创建及启动
SpringBoot ⼯程中由 SpringBootApplication 注解描述的类为启动⼊⼝类,例如:
;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class Application {//Application.class
public static void main(String[] args){//Main Thread
SpringApplication.run(Application.class,args);
}
}
运⾏启动类检测输出结果,了解其启动过程,如图所⽰:
其中,项⽬在启动时要做哪些基础操作。
1. 基于线程调⽤i/o 从磁盘读取类,将其加载到内存,此时会基于类创建字节码对象(其类型为 Class 类型)
2. 基于 Class 对象( 字节码对象) 读取类的配置信息( 例如类上有什么注解- 例如@Component,属性上有什么注解… )
3. 基于类的配置进⾏相应的配置存储 ( 交给 spring 管理的类的配置 )- Map<String,BeanDefinition>
4. 基 于 类 的 配 置 借 助 BeanFactory 创 建 类 的 实 例 ( 对象 ), 多 个 对 象 存 储 到Map<String,Object>
3HikariCP 连接池应⽤
池化思想是我们项⽬开发过程中的⼀种⾮常重要的思想,如整数池,字符串池,对象池、连接池、线程池等都是池化思想⼀种应⽤,都是通过复⽤对象,以减少因创建和释放对象所带来的资源消耗,进⽽来提升系统性能。
例如 Integer 对象的内部池应⽤,代码如下:
java.pool;
public class TestInteger01 {
public static void main(String[] args){
//演⽰整数池(-128 ~ 127)大直升机
Integer n1=100;//Integer.valueOf(100) 编译时优化
Integer n2=100;
//对整数⽽⾔为什么不将所有整数都放到池中,⽽只是存储了⼀部分数据呢?
//池设计的⽬的是?以空间换时间,这块空间中应该存储⼀些常⽤的整数数据
Integer n3=200;
Integer n4=200;// 池中没有则 new Integer(200)
System.out.println(n1==n2);//true,池存储着-128~+127
System.out.println(n3==n4);//fal
//所有的池设计都会⽤到⼀种设计
}
}
项⽬开发过程中应⽤程序与数据库交互时,“获得连接”或“释放连接”是⾮常消耗系统资源的两个过程,频繁地进⾏数据库连接的建⽴和关闭会极⼤影响系统的性能,若多线程并发量很⼤,这样耗时的数据库连接就可能让系统变得卡顿。因为 TCP 连接的创建开⽀⼗分昂贵,并且数据库所能承载的 TCP 并发连接数也有限制,针对这种场景,数据库连接池应运⽽⽣。如图-1 所⽰:
Java 官⽅,为了在应⽤程序中更好的应⽤连接池技术,定义了⼀套数据源规范,例如javax.sql.DataSource 接⼝,基于这个接⼝,很多团队或个⼈创建了不同的连接池对象。然后我们的应⽤程序中通过耦合与 DataSource 接⼝,便可以⽅便的切换不同⼚商的连接池。Java 项⽬中通过连接池获取连接的⼀个基本过程,如图-2 所⽰:
在图-2 中,⽤户通过 DataSource 对象的 getConnection()⽅法,获取⼀个连接。假如池中有连接,则直接将连接返回给⽤户。假如池中没有连接,则会调⽤ Dirver(驱动, 由数据库⼚商进⾏实现)对象的 connect ⽅法从数据库获取,拿到连接以后,可以将连接在池中放⼀份,然后将连接返回给调⽤⽅。连接需求⽅再次需要连接时,可以从池中获取, ⽤完以后再还给池对象。
数据库连接池的江湖。
数据库连接池在 Java 数据库相关中间件产品群中,应该算是底层最基础的⼀类产品, 作为企业应⽤开发必不可少的组件,⽆数天才们为我们贡献了⼀个⼜⼀个的优秀产品,它们有的随时代发展,功成⾝退,有的则还在不断迭代,⽼⽽弥坚,更有新⽣代产品,或性能⽆敌,或功能全⾯。⽬前市场上常见的连接池有 DBCP、C3P0,DRUID,HikariCP 等。
数据库连接池的原理分析。
在系统初始化的时候,在内存中开辟⼀⽚空间,将⼀定数量的数据库连接作为对象存储在对象池⾥,并对外提供数据库连接的获取和归还⽅法。⽤户访问数据库时,并不是建⽴⼀个新的连接,⽽是从数据库连接池中取出⼀个已有的空闲连接对象;使⽤完毕归还后的连接也不会马上关闭,⽽是由数据库连接池统⼀管理回收,为下⼀次借⽤做好准备。如果由于⾼并发请求导致数据库连接池中的连接被借⽤完毕,其他线程就会等待,直到有连接被归还。整个过程中,连接并不会关闭,⽽是源源不断地循
环使⽤,有借有还。数据库连接池还可以通过设置其参数来控制连接池中的初始连接数、连接的上下限数,以及每个连接的最⼤使⽤次数、最⼤空闲时间等,也可以通过其⾃⾝的管理机制来监视数据库连接的数量、使⽤情况等。
数据库连接池的构成分析。
数据库连接池以连接池的管理为核⼼,主要⽀持连接池的建⽴和释放这两⼤核⼼功能。“⿇雀虽⼩,五脏俱全”,数据库连接池还可以⽀持其他⾮常实⽤的功能。⼀款商⽤的数据库连接池、⼀款能够被开发者⼴泛使⽤的数据库连接池、⼀款能够在开源社区持续活跃发展的数据库连接池还必须再⽀持⼀些实⽤的功能,如并发(锁性能优化乃⾄⽆锁)、连接数控制(不同的系统对连接数有不同的需求)、监控(⼀些⾃⾝管理机制来监视连接的数量及使⽤情况等)、外部配置(各种主流数据库连接池官⽅⽂档最核⼼的部分)、资源重⽤(数据库连接池的核⼼思想)、检测及容灾(⾯对⼀些⽹络、时间等问题的⾃愈)、多库多服务(如不同的数据库、不同的⽤户名和密码、分库分表等情况)、事务处理(对数据库的操作符合 ALL- ALL-NOTHING 原则)、定时任务(如空闲检查、最⼩连接数控制)、缓存(如 PSCache 等避免对 SQL 重复解析)、异常处理(对 JDBC 访问的异常统⼀处理)、组件维护(如连接状态、JDBC 封装的维护)等。
3.2数据初始化
第⼀步:登录 mysql。
银行存款mysql –uroot –proot
第⼆步:设置控制台编码⽅式。
t names utf8;
第三步:执⾏ notice.sql ⽂件(切记不要打开⽂件复制到 mysql 客户端运⾏)。
source d:/notice.sql
3.3快速⼊门实践
连接池产品 HikariCP 拥有强劲的性能和稳定性,再加上它⾃⾝⼩巧的⾝形,在当前的“云时代、微服务”的背景下,HakariCP 得到了越来越多的⼈青睐。HiKariCP 号称是⽬
前世界上最快的连接池,有江湖⼀哥的称号。
3.3.1添加依赖
添加依赖,其 pom ⽂件关键元素如下:
<!--链接 mysql 时使⽤的 mysql 驱动-->
<dependency>
赚钱其实很简单<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<!--当添加 data-jdbc 依赖时会⾃动下载 HikariCp 依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jdbc</artifactId>
</dependency>
打开Settings -> Plugins ->下载插件
启动快捷键 Alt+inrt
选择ok
酸辣老鸭汤
冬瓜的热量可以选择需要增加的依赖
3.3.2基本参数配置

本文发布于:2023-05-31 09:15:17,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/82/819340.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:连接   数据库   系统
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图