C# 图书管理系统源码(三层架构,含数据库)
【实例简介】
1、首先保证计算机上已经成功安装SQL Server 2005。
2、将数据库文件附加到数据库中。
3、如果当前计算机装有多个SQL Server 2005实例,请在BookManageSystem目录下打开app.config程序文件,将程序数据库连接字符串localhost改为localhost\你的数据库实例名。如果仅有一个实例,就不用修改了。
4、编译运行即可。
管理员账户和密码:admin admin
读者账户和密码:user user
文件:590m.com/f/25127180-488083780-127562(访问密码:551685)
【实例截图】
以下内容无关:
-------------------------------------------分割线---------------------------------------------
方法日志打印
最近开发遇到的一个问题是关于日志打印。日志非常重要,通过查看日志,我们可以快速排查问题。
我们项目的整个系统内网关处做了拦截,能够看到前端传过来的日志,但是内部服务间调用,服务间的入参与出参看不到;还有,一些重要的方法如果要看到入参和出参,只能一个个去写log方法。
这种重复的工作非常适合使用切面来写一些小工具。下面是我写的小工具,下面方法几乎是搬运一位老哥写的博客,老哥的博客找不见了,sorry。
定义注释类
/**
@Description 打印参数
@Author lkb
@CreateDate: 2021/3/25
/
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
public @interface MethodLog {
}
AOP 打印输入输出参数
/*@Description
@Author lkb
@CreateDate: 2021/3/25
*/
@Aspect
@Component
@Slf4j
public class MethodLogAspect {@Pointcut("@annotation(com…annotion.MethodLog)")
public void pointCut(){}@Around(value = “pointCut()”)
public Object around(ProceedingJoinPoint joinPoint) throws Throwable{
try{
MethodSignature signature = (MethodSignature) joinPoint.getSignature();
Method method = signature.getMethod();
MethodLog annotation = method.getAnnotation(MethodLog.class);
if (Objects.isNull(annotation)){
try {
return joinPoint.proceed();
} catch (Throwable throwable) {
log.error(“method proceed fail. e = {}”, throwable.getMessage(), throwable);
throw throwable;
}
}else{
String methodName = method.getDeclaringClass().getSimpleName() + “.” + method.getName();
log.info("methodName: "+methodName);
Object[] args = joinPoint.getArgs();
log.info("param: " + JsonUtil.toJSON(args));Instant start = Instant.now();log.info("method start. methodName = {}", methodName);Object result = null;try {// 这里的result记得returnresult = joinPoint.proceed();} catch (Throwable throwable) {log.error("method proceed fail. e = {}", throwable.getMessage(), throwable);throw throwable;}log.info("method end. methodName = {}, cost = {}", methodName, ChronoUnit.MILLIS.between(start, Instant.now()));return result;}}catch (Exception e){log.error("MethodLogAspect around fail. e= {}", e.getMessage(), e);throw e;}
}
}
任务切片
遇到的第二个问题是,
在一个调用中,需要多次调用外部系统的服务,本来应该使用MQ去解耦,但是因为多方面原因只能维持现状(我们服务多次调用外部系统的服务)。这样导致整个请求特别慢,上线多台设备的时候可能需要十几二十秒。
与其他两个系统的交互互不影响,相互独立。因此,我想到使用任务切片的方式来加快执行速度。
下面是我写的任务切片小工具。
DTO
/**
@Description
@Author lkb
@CreateDate: 2021/3/26
*/
@Data
public class AsynTaskDTO<T, R> {public T param;
public Function<T, R> function;
public R resultData;
public Boolean result;
public String key;
public AsynTaskDTO(Function<T,R> function, T param){
this.function = function;
this.param = param;
this.result = false;
this.key = String.valueOf(param.hashCode());
}
}
任务切片实现类
/**
@Description
@Author lkb
@CreateDate: 2021/3/26
*/
@Slf4j
@Getter
public class AsynTaskUtil {private static final ForkJoinPool ASYNC_IO_POOL = new ForkJoinPool((Runtime.getRuntime().availableProcessors() << 1) + 1);
private List taskDTOS;
public AsynTaskUtil(List taskDTOS){
this.taskDTOS = taskDTOS;
}public boolean doTask(){
CompletableFuture[] futures = taskDTOS.stream().map(task -> CompletableFuture.runAsync(() -> {
try{
task.setResultData(task.getFunction().apply(task.getParam()));
task.setResult(true);
}catch (Exception e){
log.error(“AsynTaskUtil doTask fail. e = {}” + e.getMessage(), e);
task.setResult(false);
}
}, ASYNC_IO_POOL)).toArray(CompletableFuture[]::new);CompletableFuture.allOf(futures).join();boolean f = taskDTOS.stream().anyMatch(t -> Objects.equals(false, t.getResult()));return !f;
}
}
C# 图书管理系统源码(三层架构,含数据库)相关推荐
- 基于java,swing图书管理系统源码下载(含数据库脚本) 附下载
资源简介 1.执行数据库脚本文件 生成数据库 2. 修改 ibraryManager\src\com\wsy\dao\DAO.java 文件中的 数据库密码为你本机 3. 运行该程序后,输入 账号: ...
- . NET C# WPF图书管理系统源码 .net C# WPF图书管理系统源码
. NET C# WPF图书管理系统源码 .net C# WPF图书管理系统源码 自己开发,纯源码 主要技术:C#.基于wpf开发.sql server数据库的增删改查. 源码特点:代码完整规范,采用 ...
- java毕业设计图书管理系统源码+lw文档+mybatis+系统+mysql数据库+调试
java毕业设计图书管理系统源码+lw文档+mybatis+系统+mysql数据库+调试 java毕业设计图书管理系统源码+lw文档+mybatis+系统+mysql数据库+调试 本源码技术栈: 项目 ...
- java计算机毕业设计vue图书管理系统源码+mysql数据库+系统+lw文档+部署
java计算机毕业设计vue图书管理系统源码+mysql数据库+系统+lw文档+部署 java计算机毕业设计vue图书管理系统源码+mysql数据库+系统+lw文档+部署 本源码技术栈: 项目架构:B ...
- java计算机毕业设计Vue和mysql智能图书管理系统源码+mysql数据库+系统+lw文档+部署
java计算机毕业设计Vue和mysql智能图书管理系统源码+mysql数据库+系统+lw文档+部署 java计算机毕业设计Vue和mysql智能图书管理系统源码+mysql数据库+系统+lw文档+部 ...
- java计算机毕业设计vue图书管理系统源码+数据库+系统+lw文档
java计算机毕业设计vue图书管理系统源码+数据库+系统+lw文档 java计算机毕业设计vue图书管理系统源码+数据库+系统+lw文档 本源码技术栈: 项目架构:B/S架构 开发语言:Java语言 ...
- jsp+servlet+mysql实现的图书管理系统源码
此篇给大家推荐的是jsp+servlet+mysql实现的图书管理系统源码: 随着社会信息量的与日俱增,作为信息存储的主要媒体之一的图书,数量,规模比以往任何时候都大的多 不论个人还是图书管理部门都需 ...
- java图书管理系统源码
java图书管理系统源码 系统主要功能 读者:登录注册,借阅还书,查询书籍,查看当前借阅信息以及历史借阅信息,查看.查询读者借阅榜以及借阅书籍借阅榜,问题反馈以及查询反馈结果等功能. 管理员:对图书. ...
- javaweb JAVA JSP图书管理图书系统 图书管理系统实现简单的图书管理系统源码
javaweb JAVA JSP图书管理图书系统 图书管理系统实现简单的图书管理系统源码 protected void doGet(HttpServletRequest req, HttpServle ...
- C# winform基于sql的图书管理系统源码
C# winform基于sql的图书管理系统源码(源码+数据库文件 id=650020304641&
最新文章
- 【Python】pymysql基础:数据库操作
- 7、CSS 属性选择器
- 【知识小课堂】4 之 索引
- ReactNative-触摸事件
- atftp 在SUSE Linux中的源代码安装配置方法
- SQL数据库挂起 SQL数据库附加报错 SQL数据库824错误修复
- 你值得掌握的 Git分支等 常用命令 (持续更新中)
- windows文件读取 xxe_java xxe漏洞
- 关于STL的一些笔记
- 2020年最好用的手机是哪一款_2020,哪款5G手机最值得入手?
- Unity3D之UGUI基础10:画布的三种模式
- java 十六进制数的转换
- Java多线程高并发编程中点点理解
- Python 装逼手机号码方法 低配版 map方法解析
- 真正免费u盘数据恢复软件|易我数据恢复免费版
- justinmind夜话:程序员眼中的原型设计视频教程之书到用时方恨少
- [翻译]CryEngine3中ClothShader详解
- tpshop——安装使用
- 小米电视5和5pro区别
- 3D打印机T3升级corexy 制作过程(一)
热门文章
- 活动报名管理系统 php源码,活动报名系统微预约源码,万能表单8.1.21版
- vim代码对齐命令_vim自动对齐
- vba移动文件_你想要的爬虫、VBA系列教程这里都有!
- 利用matlab进行Vissim二次开发,史上最详细
- mysql性能优化总结详解:MySQL数据库从原理到高性能实战
- SQL必知必会 课后题答案
- json map 转换 android,map和json之间的转换
- C语言函数调用的方式求两个数的大小
- 完全免费绝地求生吃鸡罗技宏
- java8 64位安装_Java8安装步骤-win10-64位系统