tag 标签: SpringBoot2

相关资源
  • 所需E币: 0
    时间: 2024-3-22 11:17
    大小: 2.63KB
    上传者: 开心就很好了
    SpringBoot一直是开发者比较青睐的一款轻量级框架,他不仅继承了Spring框架原有的优秀特性,而且还通过简化配置来进一步简化了Spring应用的整个搭建和开发过程。现在很多Java系的软件开发都是基于SpringBoot的,这就要求开发人员都要掌握基于SpringBoot的开发。由于SpringBoot体系非常庞大,导致很多人并不能完全掌握如何使用,尤其是涉及分布式相关的开发时,如何和其他框架整合更是让很多程序员无从下手。在此,我给大家整理了几个优质SpringBoot开源项目给大家参考,希望能够帮助到正在学习SpringBoot的小伙伴!小伙伴简历中不知道写什么项目的或者项目没有亮点的,我只能帮你们到这了!随着技术框架的不断更新,一些公司摒弃了原先的技术框架模式。而springboot慢慢取代了原有的ssm框架开发。为什么选择springboot呢?配置简单不需要编写太多的xml;基于spring构建,容易上手;独立运行不依赖于容器;内置服务器tomcat不需要打war包;提供maven极简配置;对于各种框架有很好的集成;为SpringCloud微服务奠定基础,使微服务构建变得简单;下面让我们使用idea一起搭建完整版的SpringBoot项目:首先,确定项目结构现在后端开发都是基于springboot的web项目,web项目一般都是使用MVC的模式,所以这里也采用类似的模式。在项目maven结构组成上,采用父子项目,也就是一个主项目下有多个子module,分为下面几个,p-admin   p-web--》负责项目启动   p-facade --》控制层,写controller   p-service--》服务层,具体的业务处理   p-dao--》持久化层,负责和数据库打交道   p-common--》公共层,util类\入参、出参等   p-api--》提供给第三方的接口大体的项目结构给出来了,下面看子项目间的依赖关系哈,  p-web依赖于p-service、p-common  p-service依赖于p-dao、p-common  p-api依赖于p-common其他的依赖第三方的库暂时不看,下面再说。接下来就可以进行实际操作创建项目了。接着,创建项目创建父项目(p-admin)这里使用maven的父子项目结构,父项目是这样创建的,在idea中file-->new-->project出现下面的界面,直接next就好一、mallmall项目是一套电商系统,包括前台商城系统及后台管理系统,基于SpringBoot+MyBatis实现。前台商城系统包含首页门户、商品推荐、商品搜索、商品展示、购物车、订单流程、会员中心、客户服务、帮助中心等模块。后台管理系统包含商品管理、订单管理、会员管理、促销管理、运营管理、内容管理、统计报表、财务管理、权限管理、设置等模块。二、Cloud-Platform(微服务的)Cloud-Platform是国内首个基于SpringCloud微服务化开发平台,具有统一授权、认证后台管理系统,其中包含具备用户管理、资源权限管理、网关API管理等多个模块,支持多业务系统并行开发,可以作为后端服务的开发脚手架。代码简洁,架构清晰,适合学习和直接项目中使用。核心技术采用SpringBoot2.1.2以及SpringCloud(Greenwich.RELEASE)相关核心组件,采用Nacos注册和配置中心,集成流量卫兵Sentinel,前端采用vue-element-admin组件。三、微人事微人事是一个前后端分离的人力资源管理系统,项目采用SpringBoot+Vue开发,项目加入常见的企业级应用所涉及到的技术点,例如Redis、RabbitMQ等。后端技术栈:SpringBoot、SpringSecurity、MyBatis、MySQL、Redis、RabbitMQ、SpringCache、WebSocket前端技术栈Vue、ElementUI、axios、vue-router、Vuex、WebSocket、vue-cli4四、web-flashweb-flash是一个基于SpringBoot和Vue.js的web系统,包含了基于element搭建的后台管理系统和基于vux搭建的手机端h5站点web-flash具备后台管理类系统的通用的基础功能,而且提供了基于ideaintellij的的代码生成插件,可以一键生成前后端页面。核心框架:SpringBoot数据库层:Springdatajpa数据库连接池:Druid缓存:Ehcache前端:基于Vue.js的Element(后端)和vux(手机端)工作流:activiti
  • 所需E币: 0
    时间: 2024-3-22 14:24
    大小: 1.99KB
    Spring能做什么Spring具有哪些能力呢?这点在Spring的官网上有比较详情的描述,我们可以在Spring的项目里看到Spring的生态涵盖了web开发、数据访问、安全控制、分布式、消息服务、移动开发、批处理等等SpringBoot优点SpringBoot的优点我可以在https://spring.io/projects/spring-boot这里看到,下面我把优点复制过来了如下:●Createstand-aloneSpringapplications○创建独立Spring应用●EmbedTomcat,JettyorUndertowdirectly(noneedtodeployWARfiles)○内嵌web服务器●Provideopinionated‘starter’dependenciestosimplifyyourbuildconfiguration○自动starter依赖,简化构建配置●AutomaticallyconfigureSpringand3rdpartylibrarieswheneverpossible○自动配置Spring以及第三方功能●Provideproduction-readyfeaturessuchasmetrics,healthchecks,andexternalizedconfiguration○提供生产级别的监控、健康检查及外部化配置●AbsolutelynocodegenerationandnorequirementforXMLconfiguration○无代码生成、无需编写XMLSpringBoot是整合Spring技术栈的一站式框架SpringBoot是简化Spring技术栈的快速开发脚手架在SpringBoot项目中,正常来说是不存在XML配置,这是因为SpringBoot不推荐使用XML,注意,排不支持,SpringBoot推荐开发者使用Java配置来搭建框架,SpringBoot中,大量的自动化配置都是通过Java配置来实现的,这一套实现方案,我们也可以自己做,即自己也可以使用纯Java来搭建一个SSM环境,即在项目中,不存在任何XML配置,包括web.xml。下面我们开始代码实战:创建maven工程引入依赖<parent>    <groupId>org.springframework.boot</groupId>    <artifactId>spring-boot-starter-parent</artifactId>    <version>2.3.4.RELEASE</version>  </parent>  <dependencies>    <dependency>      <groupId>org.springframework.boot</groupId>      <artifactId>spring-boot-starter-web</artifactId>    </dependency>  </dependencies>创建主程序/** *主程序类 *@SpringBootApplication:这是一个SpringBoot应用 */@SpringBootApplicationpublicclassMainApplication{  publicstaticvoidmain(String[]args){    SpringApplication.run(MainApplication.class,args);  }}启动类,启动就可以了packagecom.urthink.upfs.springbootdemo; importorg.springframework.boot.SpringApplication;importorg.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplicationpublicclassSpringBootDemoApplication{   publicstaticvoidmain(String[]args){    SpringApplication.run(SpringBootDemoApplication.class,args);  } }我们将这个依赖拷贝到我们自己的项目pom文件里,粘贴后的pom文件如下<?xmlversion="1.0"encoding="UTF-8"?><projectxmlns="http://maven.apache.org/POM/4.0.0"     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0http://maven.apache.org/xsd/maven-4.0.0.xsd">  <modelVersion>4.0.0</modelVersion>  <groupId>com.atguigu</groupId>  <artifactId>boot-01-helloworld</artifactId>  <version>1.0-SNAPSHOT</version>  <parent>    <groupId>org.springframework.boot</groupId>    <artifactId>spring-boot-starter-parent</artifactId>    <version>2.3.4.RELEASE</version>  </parent><dependencies>    <dependency>      <groupId>org.springframework.boot</groupId>      <artifactId>spring-boot-starter-web</artifactId>    </dependency>  </dependencies></project>
  • 所需E币: 0
    时间: 2023-12-18 10:38
    大小: 3.46KB
    上传者: 开心就很好了
    今天给大家讲讲关于SpringBoot2仿B站的一个项目,大家都知道,如今短视频成为了风口中的风口,但市场上极度缺乏视频业务开发的相关技术人才。本文将结合SpringCloud微服务架构+Springboot+JDK+Maven+VUE等技术,实现B站核心功能(视频流、弹幕流)+百万量级的高性能优化,从而帮助大家提升前端加后端技术水平,掌握架构设计思维及丰富解决方案。实现步骤使用Vue3提供的Provide/Inject组合,通过provide在App.vue中提供当前语言环境localeLanguage,代码片段如下所示://App.vue  <scriptsetuplang="ts">  importzhCnfrom'element-plus/lib/locale/lang/zh-cn'  importenfrom'element-plus/lib/locale/lang/en'  import{ref,provide}from'vue'  //显示引入provide    constlocale=ref(zhCn)  constlocaleLanguage=ref('')  functionchangeLang(language:any){   locale.value=language   localeLanguage.value=language.name  }    //提供当前语言环境localeLanguage  provide('localeLanguage',localeLanguage)    </script>然后再通过inject将其注入到home页面,将获取到的localeLanguage传入自定义的t函数中,代码片段如下所示://home/index.vue  <scriptsetuplang="ts">  import{useRoute}from'vue-router'  import{inject}from'vue' //显示引入inject  import{t}from'../../utils/internationalization'    //通过inject将localeLanguage注入,作为t函数的参数  constlocaleLanguage:string=inject('localeLanguage')||''  constroute=useRoute()  console.log(route.params)  constvalue1=''  </script>    <template>   <div>{{t(localeLanguage).home}}---{{t(localeLanguage).mine}}</div>   <el-date-pickerv-model="value1"type="date"placeholder="Pickaday"></el-date-picker>  </template>封装一个openStore(),使用indexedDB.open()方法返回一个IDBRequest对象,接着将这个对象上的三个事件分别放置进入:onsuccess、onerror、onupgradeneeded。onsuccess表示打开数据库成功的事件。onerror表示打开数据库失败的事件。onupgradeneeded是数据库升级事件,如果版本号更新,并且大于之前的版本号则进行数据库升级,该事件回调里面,会创建我们所需要的对象仓库,类似于关系型数据库中的表的概念。exportdefaultclassDB{ privatedbName:string//数据库名称 constructor(dbName:string){  this.dbName=dbName } //打开数据库 publicopenStore(storeName:string,keyPath:string,indexs?:Array<string>){  constrequest=window.indexedDB.open(this.dbName,2)  request.onsuccess=(event)=>{   console.log('数据库打开成功')   console.log(event)  }  request.onerror=(event)=>{   console.log('数据库打开失败')   console.log(event)  }  request.onupgradeneeded=(event)=>{   console.log('数据库升级成功')   const{result}:any=event.target   conststore=result.createObjectStore(storeName,{autoIncrement:true,keyPath})   if(indexs&&indexs.length>0){    indexs.map((v:string)=>{     store.createIndex(v,v,{unique:true})    })   }   store.transaction.oncomplete=(event:any)=>{    console.log('创建对象仓库成功')   }   console.log(event)  } }}Promise包装异步事务为了更好的获取indexedD事务中的返回结果,我们使用promise来包装一下上一小节indexedDB.ts中定义的几个方法:openStore、updateItem、deleteItem、getList、getItem。下面代码片段为getList() //查询所有数据 getList(storeName:string){  conststore=this.db.transaction(storeName).objectStore(storeName)  constrequest=store.getAll()  returnnewPromise((resolve,reject)=>{   request.onsuccess=(event:any)=>{    console.log('查询所有数据成功')    console.log(event.target.result)    resolve(event.target.result)   }   request.onerror=(event:any)=>{    console.log('查询所有数据失败')    console.log(event)    reject(event)   }  }) }使用@include指令来引入定义好的样式函数,该函数的三个参数可以根据传入的值来对flex布局进行自定义,默认值为:column、center、right,在footerCommon.scss中我们重新自定义了该样式函数,分别传入row、space-between、flex-start,代码片段如下://footerCommon.scss.common-footer{  border-top:1pxsolidrgb(235,235,235); .footer{  @includemain-wrapper;  @includelayout(row,space-between,flex-start);  padding:20px0;  li{   @includelayout;   h4{    font-weight:bold;   }   a{    margin-bottom:10px;    color:rgb(72,72,72);    text-decoration:none;    &:hover{     text-decoration:underline;    }   }  } }}getter类似与Vue中的computed计算属性,它的返回值会根据它的依赖被缓存起来,且只有当它的依赖值发生了改变才会被重新计算getters里可以处理一些array、object的查询、过滤、遍历、重构或者做一些字符拼接的操作,方便直接生成一些可以直接使用的数据。如下代码片段展示了如何在getter中进行过滤查询:exportconststore=createStore({   state:{   todos:[  //定义一个对象数组   {   id:1,   done:true   },   {   id:2,   done:false   }   ]   }   getters:{   doneTodosCount(){ //查询已完成的个数   returnstore.state.todos.filter(todo=>todo.done).length //返回值:1   }   }  })通过环境变量区分server.js中的一些代码片段,因为有些代码需要运行在开发环境,而有些代码需要运行在生产环境。本小节在server.js中一共对3个地方进行了环境区分,代码片段如下//server.jsif(!isProd){ //1.读取index.html template=fs.readFileSync(  path.resolve(__dirname,'index.html'),  'utf-8' ) //2.应用ViteHTML转换。这将会注入ViteHMR客户端, //  同时也会从Vite插件应用HTML转换。 //  例如:@vitejs/plugin-react-refresh中的globalpreambles template=awaitvite.transformIndexHtml(url,template) //3.加载服务器入口。vite.ssrLoadModule将自动转换 //  你的ESM源码使之可以在Node.js中运行!无需打包 //  并提供类似HMR的根据情况随时失效。 render=(awaitvite.ssrLoadModule('/src/entry-server.ts')).render}else{ //1.读取index.html template=fs.readFileSync(  path.resolve(__dirname,'dist/client/index.html'),  'utf-8' ) //3.加载服务器入口 render=require('./dist/server/entry-server.ts').render}