所需E币: 0
时间: 2023-11-22 15:26
大小: 3.92KB
如何使用SpringBoot开发一款关于双11商品服务的系统?今天就给大家说道说道,希望对大家的学习有所帮助!1.什么是SpringBoot?Spring的诞⽣是为了简化Java程序的开发的,⽽SpringBoot的诞⽣是为了简化Spring程序开发的。SpringBoot是由Pivotal团队提供的基于Spring的框架,该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。SpringBoot集成了绝大部分目前流行的开发框架,就像Maven集成了所有的JAR包一样,SpringBoot集成了几乎所有的框架,使得开发者能快速搭建Spring项目。2.SpringBoot的优点快速集成框架,SpringBoot提供了启动添加依赖的功能,⽤于秒级集成各种框架。内置运⾏容器,⽆需配置Tomcat等Web容器,直接运⾏和部署程序。快速部署项⽬,⽆需外部容器即可启动并运⾏项⽬。可以完全抛弃繁琐的XML,使⽤注解和配置的⽅式进⾏开发。⽀持更多的监控的指标,可以更好的了解项⽬的运⾏情况后端配置1.1创建Springboot工程打开idea->file->new->project选择springInitializer进行配置,java版本选择8,点击next-internal应用代码 -controllers控制器模块 -admin后端控制器 -front前端控制器 -listenredis监听器 -models模型模块 -service服务模块 -product_serive商品服务 -wechat_menu_serive微信公众号菜单服务 ......-conf公共配置 -config.ymlyml配置文件 -config.go配置解析,转化成对应的结构体 -middleware中间件 -AuthCheck.go jwt接口权限校验-cors.go跨域处理......-pkg程序应用包 -app -base -casbin -jwt -qrcode -wechat .....-routere路由-logs日志存放-runtime资源目录首先,我仔细分析了需求,并且根据业务逻辑设计了合适的接口。对于多表关联查询,我使用了MyBatis的注解来编写SQL语句,并通过@One和@Many等注解来实现结果集的映射。对于数据分页,我使用了MyBatis-Plus提供的Page对象,并结合相关方法来实现数据分页查询。2.上课中的优秀项目在课堂上,我完成了一个优秀的项目,主要是学生实体类的增删改查功能。通过这个项目,我巩固了对SpringBoot框架的理解和掌握。具体实现如下://初始化rediserr:=cache.InitRedis(cache.DefaultRedisClient,&redis.Options{Addr: global.CONFIG.Redis.Host,Password: global.CONFIG.Redis.Password,IdleTimeout:global.CONFIG.Redis.IdleTimeout,},nil)iferr!=nil{iferr!=nil{global.LOG.Error("InitRediserror",err,"client",cache.DefaultRedisClient)panic(err)}panic(err)}//初始化mysqlerr=db.InitMysqlClient(db.DefaultClient,global.CONFIG.Database.User,global.CONFIG.Database.Password,global.CONFIG.Database.Host,global.CONFIG.Database.Name)iferr!=nil{global.LOG.Error("InitMysqlClienterror",err,"client",db.DefaultClient)panic(err)}global.Db=db.GetMysqlClient(db.DefaultClient).DB开发步骤SpringBoot开发起来特别简单,分为如下几步:创建新模块,选择Spring初始化,并配置模块相关基础信息选择当前模块需要使用的技术集开发控制器类运行自动生成的Application类知道了SpringBoot的开发步骤后,接下来我们进行具体的操作shutdown.NewHook().Close(//关闭httpserverfunc(){ctx,cancel:=context.WithTimeout(context.Background(),time.Second*10)defercancel()iferr:=server.Shutdown(ctx);err!=nil{logging.Error("httpservershutdownerr",err)}},func(){//关闭kafkaproducer(特别是异步生产者,强制关闭会导致丢消息)iferr:=mq.GetKafkaSyncProducer(mq.DefaultKafkaSyncProducer).Close();err!=nil{logging.Error("kafkashutdownerr",err)}},func(){//关闭mysqliferr:=db.CloseMysqlClient(db.DefaultClient);err!=nil{logging.Error("mysqlshutdownerr",err)}},func(){//关闭redisiferr:=cache.GetRedisClient(cache.DefaultRedisClient).Close();err!=nil{logging.Error("redisshutdownerr",err)}},)//也可以自己实现优雅关闭//signals:=make(chanos.Signal,0)//signal.Notify(signals,syscall.SIGHUP,syscall.SIGINT,syscall.SIGTERM,syscall.SIGQUIT)//s:=<-signals//global.LOG.Warn("shopreceivesystemsignal:",s)//ctx,cancel:=context.WithTimeout(context.Background(),3*time.Second)//defercancel()//err:=server.Shutdown(ctx)//iferr!=nil{//global.LOG.Error("httpservererror",err)//}//mq.GetKafkaSyncProducer(mq.DefaultKafkaSyncProducer).Close()选择SpringInitializr,用来创建SpringBoot工程以前我们选择的是Maven,今天选择SpringInitializr来快速构建SpringBoot工程。而在ModuleSDK这一项选择我们安装的JDK版本。typeStoreProductstruct{Image string `json:"image"valid:"Required;"`SliderImage string `json:"slider_image"valid:"Required;"`StoreName string `json:"store_name"valid:"Required;"`StoreInfo string `json:"store_info"valid:"Required;"`Keyword string `json:"keyword"valid:"Required;"`CateId int `json:"cate_id"valid:"Required;"`ProductCate *StoreCategory`json:"product_cate"gorm:"foreignKey:CateId;association_autoupdate:false;association_autocreate:false"`Price float64 `json:"price"valid:"Required;"`VipPrice float64 `json:"vip_price"valid:"Required;"`OtPrice float64 `json:"ot_price"valid:"Required;"`Postage float64 `json:"postage"valid:"Required;"`UnitName string `json:"unit_name"valid:"Required;"`Sort int16 `json:"sort"valid:"Required;"`Sales int `json:"sales"valid:"Required;"`Stock int `json:"stock"valid:"Required;"`IsShow *int8 `json:"is_show"valid:"Required;"`IsHot *int8 `json:"is_hot"valid:"Required;"`IsBenefit *int8 `json:"is_benefit"valid:"Required;"`IsBest *int8 `json:"is_best"valid:"Required;"`IsNew *int8 `json:"is_new"valid:"Required;"`Description string `json:"description"valid:"Required;"`IsPostage *int8 `json:"is_postage"valid:"Required;"`GiveIntegralint `json:"give_integral"valid:"Required;"`Cost float64 `json:"cost"valid:"Required;"`IsGood *int8 `json:"is_good"valid:"Required;"`Ficti int `json:"ficti"valid:"Required;"`Browse int `json:"browse"valid:"Required;"`IsSub *int8 `json:"is_sub"valid:"Required;"`TempId int64 `json:"temp_id"valid:"Required;"`SpecType int8 `json:"spec_type"valid:"Required;"`IsIntegral *int8 `json:"isIntegral"valid:"Required;"`Integral int32 `json:"integral"valid:"Required;"`BaseModel}//定义商品消息结构typeProductMsgstruct{Operationstring`json:"operation"`*StoreProduct}切换web服务器现在我们启动工程使用的是tomcat服务器,那能不能不使用tomcat而使用jetty服务器,jetty在我们maven高级时讲maven私服使用的服务器。而要切换web服务器就需要将默认的tomcat服务器给排除掉,怎么排除呢?使用exclusion标签func(e*StoreProductController)Post(c*gin.Context){var(dto dto2.StoreProductappG=app.Gin{C:c})httpCode,errCode:=app.BindAndValid(c,&dto)iferrCode!=constant.SUCCESS{appG.Response(httpCode,errCode,nil)return}productService:=product_service.Product{Dto:dto,}model,err:=productService.AddOrSaveProduct()iferr!=nil{appG.Response(http.StatusInternalServerError,constant.FAIL_ADD_DATA,nil)return}//发消息队列deferfunc(){operation:=product.OperationCreateifdto.Id>0{operation=product.OperationUpdate}productMsg:=models.ProductMsg{operation,&model,}msg,_:=json.Marshal(productMsg)p,o,e:=mq.GetKafkaSyncProducer(mq.DefaultKafkaSyncProducer).Send(&sarama.ProducerMessage{Topic:product.Topic,Key: mq.KafkaMsgValueStrEncoder(strconv.FormatInt(dto.Id,10)),Value:mq.KafkaMsgValueEncoder(msg),},)ife!=nil{global.LOG.Error("sendproductmsgerror",e,"partition:",p,"offset:",o,"id:",dto.Id)}}()appG.Response(http.StatusOK,constant.SUCCESS,nil)}