首页 文章 精选 留言 我的

精选列表

搜索[SpringBoot],共4255篇文章
优秀的个人博客,低调大师

即将到来的金三银四,这10道springboot常见面试题你需要了解下

1.什么是Spring Boot? 多年来,随着新功能的增加,spring变得越来越复杂。只需访问https://spring.io/projects页面,我们就会看到可以在我们的应用程序中使用的所有Spring项目的不同功能。 如果必须启动一个新的Spring项目,我们必须添加构建路径或添加Maven依赖关系,配置应用程序服务器,添加spring配置。 因此,开始一个新的spring项目需要很多努力,因为我们现在必须从头开始做所有事情。 Spring Boot是解决这个问题的方法。Spring Boot已经建立在现有spring框架之上。使用spring启动,我们避免了之前我们必须做的所有样板代码和配置。 因此,Spring Boot可以帮助我们以最少的工作量,更加健壮地使用现有的Spring功能。 2.Spring Boot有哪些优点? · 减少开发,测试时间和努力。 · 使用JavaConfig有助于避免使用XML。 · 避免大量的Maven导入和各种版本冲突。 · 提供意见发展方法。 · 通过提供默认值快速开始开发。 · 没有单独的Web服务器需要。这意味着你不再需要启动Tomcat,Glassfish或其他任何东西。 · 更少的配置 因为没有web.xml文件。只需添加用@ Configuration注释的类,然后添加用@Bean注释的方法,Spring将自动加载对象并像以前 一样对其进行管理。您甚至可以将@Autowired添加到bean方法中,以使Spring自动装入需要的依赖关系中。 · 基于环境的配置 使用这些属性,您可以将您正在使用的环境传递到应用程序:-Dspring.profiles.active = {enviornment}。在加载主应用程序属性文件后,Spring将在(application{environment} .properties)中加载后续的应用程序属性文件。 3.什么是JavaConfig? Spring JavaConfig是Spring社区的产品,它提供了配置Spring IoC容器的纯Java方法。因此它有助于避免使用XML配置。使用JavaConfig的优点在于: 面向对象的配置。由于配置被定义为JavaConfig中的类,因此用户可以充分利用Java中的面向对象功能。一个配置类可以继承另一个,重写它的@Bean方法等。 减少或消除XML配置。基于依赖注入原则的外化配置的好处已被证明。但是,许多开发人员不希望在XML和Java之间来回切换。 JavaConfig为开发人员提供了一种纯Java方法来配置与XML配置概念相似的Spring容器。 从技术角度来讲,只使用JavaConfig配置类来配置容器是可行的,但实际上很多人认为将JavaConfig与XML混合匹配是理想的。 类型安全和重构友好。JavaConfig提供了一种类型安全的方法来配置Spring容器。由于Java 5.0对泛型的支持,现在可以按类型而不是按名称检索bean,不需要任何强制转换或基于字符串的查找。 4.如何重新加载Spring Boot上的更改,而无需重新启动服务器? 这可以使用DEV工具来实现。通过这种依赖关系,您可以节省任何更改,嵌入式tomcat将重新启动。 Spring Boot有一个开发工具(DevTools)模块,它有助于提高开发人员的生产力。Java开发人员面临的一个主要挑战是将文件更改自动部署到服务器并自动重启服务器。 开发人员可以重新加载Spring Boot上的更改,而无需重新启动服务器。这将消除每次手动部署更改的需要。Spring Boot在发布它的第一个版本时没有这个功能。 这是开发人员最需要的功能。DevTools模块完全满足开发人员的需求。该模块将在生产环境中被禁用。它还提供H2数据库控制台以更好地测试应用程序。 5.Spring Boot中的监视器是什么? Spring boot actuator是spring启动框架中的重要功能之一。Spring boot监视器可帮助您访问生产环境中正在运行的应用程序的当前状态。 有几个指标必须在生产环境中进行检查和监控。即使一些外部应用程序可能正在使用这些服务来向相关人员触发警报消息。监视器模块公开了一组可直接作为HTTP URL访问的REST端点来检查状态。 6.如何在Spring Boot中禁用Actuator端点安全性? 默认情况下,所有敏感的HTTP端点都是安全的,只有具有ACTUATOR角色的用户才能访问它们。 安全性是使用标准的HttpServletRequest.isUserInRole方法实施的。 我们可以使用management.security.enabled = false 来禁用安全性。只有在执行机构端点在防火墙后访问时,才建议禁用安全性。 如何在自定义端口上运行Spring Boot应用程序? 为了在自定义端口上运行Spring Boot应用程序,您可以在application.properties中指定端口。 server.port = 8090 7.什么是YAML? YAML是一种人类可读的数据序列化语言。它通常用于配置文件。 与属性文件相比,如果我们想要在配置文件中添加复杂的属性,YAML文件就更加结构化,而且更少混淆。可以看出YAML具有分层配置数据。 8.如何实现Spring Boot应用程序的安全性? 为了实现Spring Boot的安全性,我们使用 spring-boot-starter-security依赖项,并且必须添加安全配置。它只需要很少的代码。配置类将必须扩展WebSecurityConfigurerAdapter并覆盖其方法。 9.如何集成Spring Boot和ActiveMQ? 对于集成Spring Boot和ActiveMQ,我们使用spring-boot-starter-activemq 依赖关系。 它只需要很少的配置,并且不需要样板代码。 10.如何使用Spring Boot实现分页和排序? 使用Spring Boot实现分页非常简单。使用Spring Data-JPA可以实现将可分页的org.springframework.data.domain.Pageable传递给存储库方法。

优秀的个人博客,低调大师

java B2B2C Springboot电子商务平台源码-SSO单点登录之OAuth2.0登录认证

之前写了很多关于spring cloud的文章,今天我们对OAuth2.0的整合方式做一下笔记,首先我从网上找了一些关于OAuth2.0的一些基础知识点,帮助大家回顾一下知识点: 一、oauth中的角色 client:调用资源服务器API的应用 Oauth 2.0 Provider:包括Authorization Server和Resource Server (1)Authorization Server:认证服务器,进行认证和授权 (2)Resource Server:资源服务器,保护受保护的资源 user:资源的拥有者 二、下面详细介绍一下Oauth 2.0 Provider Authorization Server: (1)AuthorizationEndpoint:进行授权的服务,Default URL: /oauth/authorize (2)TokenEndpoint:获取token的服务,Default URL: /oauth/token Resource Server: OAuth2AuthenticationProcessingFilter:给带有访问令牌的请求加载认证 三、下面再来详细介绍一下Authorization Server: 一般情况下,创建两个配置类,一个继承AuthorizationServerConfigurerAdapter,一个继承WebSecurityConfigurerAdapter,再去复写里面的方法。 主要出现的两种注解: 1、@EnableAuthorizationServer:声明一个认证服务器,当用此注解后,应用启动后将自动生成几个Endpoint:(注:其实实现一个认证服务器就是这么简单,加一个注解就搞定,当然真正用到生产环境还是要进行一些配置和复写工作的。) /oauth/authorize:验证 /oauth/token:获取token /oauth/confirm_access:用户授权 /oauth/error:认证失败 /oauth/check_token:资源服务器用来校验token /oauth/token_key:如果jwt模式则可以用此来从认证服务器获取公钥 以上这些endpoint都在源码里的endpoint包里面。 2、@Beans:需要实现AuthorizationServerConfigurer AuthorizationServerConfigurer包含三种配置: ClientDetailsServiceConfigurer:client客户端的信息配置,client信息包括:clientId、secret、scope、authorizedGrantTypes、authorities (1)scope:表示权限范围,可选项,用户授权页面时进行选择 (2)authorizedGrantTypes:有四种授权方式 Authorization Code:用验证获取code,再用code去获取token(用的最多的方式,也是最安全的方式) Implicit: 隐式授权模式 Client Credentials (用來取得 App Access Token) Resource Owner Password Credentials (3)authorities:授予client的权限 这里的具体实现有多种,in-memory、JdbcClientDetailsService、jwt等。 AuthorizationServerSecurityConfigurer:声明安全约束,哪些允许访问,哪些不允许访问 AuthorizationServerEndpointsConfigurer:声明授权和token的端点以及token的服务的一些配置信息,比如采用什么存储方式、token的有效期等 client的信息的读取:在ClientDetailsServiceConfigurer类里面进行配置,可以有in-memory、jdbc等多种读取方式。 jdbc需要调用JdbcClientDetailsService类,此类需要传入相应的DataSource. 下面再介绍一下如何管理token: AuthorizationServerTokenServices接口:声明必要的关于token的操作 (1)当token创建后,保存起来,以便之后的接受访问令牌的资源可以引用它。 (2)访问令牌用来加载认证 接口的实现也有多种,DefaultTokenServices是其默认实现,他使用了默认的InMemoryTokenStore,不会持久化token; token存储方式共有三种分别是: (1)InMemoryTokenStore:存放内存中,不会持久化 (2)JdbcTokenStore:存放数据库中 (3)Jwt: json web token 授权类型: 可以通过AuthorizationServerEndpointsConfigurer来进行配置,默认情况下,支持除了密码外的所有授权类型。相关授权类型的一些类: (1)authenticationManager:直接注入一个AuthenticationManager,自动开启密码授权类型 (2)userDetailsService:如果注入UserDetailsService,那么将会启动刷新token授权类型,会判断用户是否还是存活的 (3)authorizationCodeServices:AuthorizationCodeServices的实例,auth code 授权类型的服务 (4)implicitGrantService:imlpicit grant (5)tokenGranter: endpoint的URL的配置: (1)AuthorizationServerEndpointsConfigurer的pathMapping()方法,有两个参数,第一个是默认的URL路径,第二个是自定义的路径 (2)WebSecurityConfigurer的实例,可以配置哪些路径不需要保护,哪些需要保护。默认全都保护。 自定义UI: (1)有时候,我们可能需要自定义的登录页面和认证页面。登陆页面的话,只需要创建一个login为前缀名的网页即可,在代码里,设置为允许访问,这样,系统会自动执行你的登陆页。此登陆页的action要注意一下,必须是跳转到认证的地址。 (2)另外一个是授权页,让你勾选选项的页面。此页面可以参考源码里的实现,自己生成一个controller的类,再创建一个对应的web页面即可实现自定义的功能。 下面梳理一下授权获取token流程: (1)端口号换成你自己的认证服务器的端口号,client_id也换成你自己的,response_type类型为code。 localhost:8080/uaa/oauth/authorize?client_id=client&response_type=code&redirect_uri=http://www.baidu.com (2)这时候你将获得一个code值:http:www.baidu.com/?code=G0C20Z (3)使用此code值来获取最终的token: curl -X POST -H “Cant-Type: application/x-www-form-urlencoded” -d ‘grant_type=authorization_code&code=G0C20Z&redirect_uri=http://www.baidu.com’ “http:client:secret@localhost:8080/uaa/oauth/token” 返回值: {“access_token”:“b251b453-cc08-4520-9dd0-9aedf58e6ca3”,“token_type”:“bearer”,“expires_in”:2591324,“scope”:“app”} (4)用此token值来调用资源服务器内容(如果资源服务器和认证服务器在同一个应用中,那么资源服务器会自己解析token值,如果不在,那么你要自己去做处理) curl -H “Authorization: Bearer b251b453-cc08-4520-9dd0-9aedf58e6ca3” “localhost:8081/service2(此处换上你自己的url)” 四、Resource Server:保护资源,需要令牌才能访问在配置类上加上注解@EnableResourceServer即启动。使用ResourceServerConfigurer进行配置: (1)tokenServices:ResourceServerTokenServices的实例,声明了token的服务 (2)resourceId:资源Id,由auth Server验证。 (3)其它一些扩展点,比如可以从请求中提取token的tokenExtractor (4)一些自定义的资源保护配置,通过HttpSecurity来设置 使用token的方式也有两种: (1)Bearer Token(https传输方式保证传输过程的安全):主流 (2)Mac(http+sign) 如何访问资源服务器中的API? 如果资源服务器和授权服务器在同一个应用程序中,并且您使用DefaultTokenServices,那么您不必太考虑这一点,因为它实现所有必要的接口,因此它是自动一致的。如果您的资源服务器是一个单独的应用程序,那么您必须确保您匹配授权服务器的功能,并提供知道如何正确解码令牌的ResourceServerTokenServices。与授权服务器一样,您可以经常使用DefaultTokenServices,并且选项大多通过TokenStore(后端存储或本地编码)表示。 (1)在校验request中的token时,使用RemoteTokenServices去调用AuthServer中的/auth/check_token。 (2)共享数据库,使用Jdbc存储和校验token,避免再去访问AuthServer。 (3)使用JWT签名的方式,资源服务器自己直接进行校验,不借助任何中间媒介。 五、oauth client 在客户端获取到token之后,想去调用下游服务API时,为了能将token进行传递,可以使用RestTemplate.然后使用restTemplate进行调用Api。 注: scopes和authorities的区别: scopes是client权限,至少授予一个scope的权限,否则报错。 authorities是用户权限。 以上是我从网上找到的一篇写的不错的博客,希望可以帮助大家快速了解OAuth2.0,下一篇文章我们正式介绍OAuth2.0在当前框架中的使用。 java B2B2C 仿淘宝电子商城系统

优秀的个人博客,低调大师

java B2B2C 源码 多级分销Springboot多租户电子商城系统-springcloud项目redis分布式锁

在springcloud项目开发中redis分布式锁使用主要有两个场景 需要JAVA Spring Cloud大型企业分布式微服务云构建的B2B2C电子商务平台源码请加企鹅求求 :二一四七七七五六三三 1.订单重复提交或支付提交等,防止刷单2.对某个业务进行锁定,例如:当用户同一时间,进行对账户充值和提现操作,那么这里需要根据用户ID对账户进行锁定,只有一个完成了才可以进行第二个。开发实现方式1.pom.xml中引入jar包,最好引入到基础模块中,其他模块通用 <!-- redis--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> 创建redis操作类RedisGlobalLock(自定义)redis提供RedisTemplate方法redis提供三个方法:(1)lock 获取锁并锁定 本方法是立即获取锁状态,如果获取成功并锁定,如果获取失败(2)tryLock 尝试获取锁并锁定 本方式是在指定时间尝试获取锁(3)unlock 释放锁 当业务处理完毕必须释放锁重点:lock和tryLock区别:lock是实时获取,tryLock是尝试在一段时间内一直在获取 @Service public class RedisGlobalLock { private static Log log = LogFactory.getLog(RedisGlobalLock.class); private static final String TYPE_NAME = RedisGlobalLock.class.getTypeName(); /** 默认30ms尝试一次 */ private final static long LOCK_TRY_INTERVAL = 30L; /** 默认尝试20s */ private final static long LOCK_TRY_TIMEOUT = 20 * 1000L; /** 单个业务持有锁的时间30s,防止死锁 */ private final static long LOCK_EXPIRE = 30 * 1000L; @Autowired private RedisTemplate<String, Object> redisTemplate; /** * 获取锁 * @param key 锁Key * @return 是否获取锁 */ public boolean lock(String key) { return getLock(key, 0, LOCK_EXPIRE, TimeUnit.MILLISECONDS); } /** * 获取锁 * @param key 锁Key * @param expire 有效期 * @param expireUnit 有效期时间单位 * @return 是否获取锁 */ public boolean lock(String key, long expire, TimeUnit expireUnit) { return getLock(key, 0, expire, expireUnit); } /** * 尝试获取锁 * @param key 锁Key * @return 是否获取锁 */ public boolean tryLock(String key) { return tryLock(key, LOCK_TRY_TIMEOUT, TimeUnit.MILLISECONDS); } /** * 尝试获取锁 * @param key 锁Key * @param timeout 等待超时时间 * @param unit 等待超时时间单位 * @return 是否获取锁 */ public boolean tryLock(String key, long timeout, TimeUnit unit) { // 超时时间转成毫秒 timeout = TimeUnit.MILLISECONDS.convert(timeout, unit); return getLock(key,timeout, LOCK_EXPIRE, TimeUnit.MILLISECONDS); } /** * 尝试获取锁 * @param key 锁Key * @param timeout 等待超时时间 * @param timeoutUnit 等待超时时间单位 * @param expire 有效期 * @param expireUnit 有效期时间单位 * @return */ public boolean tryLock(String key, long timeout, TimeUnit timeoutUnit, long expire, TimeUnit expireUnit) { // 超时时间转成毫秒 timeout = TimeUnit.MILLISECONDS.convert(timeout, timeoutUnit); return getLock(key,timeout, expire, expireUnit); } /** * 释放锁 * @param key 锁Key */ public void unlock(String key) { key = getPrefix(TYPE_NAME) + key; Long oldExpireTime = (Long) redisTemplate.opsForValue().get(key); if(null != oldExpireTime && oldExpireTime >= System.currentTimeMillis()) { // 大于过期时间,则删除key redisTemplate.delete(key); } } /** * 获取锁 * @param key 锁键值 * @param timeout 超时时间 * @param time 全局锁生命周期 * @param unit 时间单位 * @return 是否获取到锁 */ private boolean getLock(String key, long timeout, long time, TimeUnit unit) { key = getPrefix(TYPE_NAME) + key; try { long startTimeMillis = System.currentTimeMillis(); do { long newValue = System.currentTimeMillis() + TimeUnit.MILLISECONDS.convert(time, unit); Boolean isOk = redisTemplate.opsForValue().setIfAbsent(key, newValue); if(isOk) { // 获得锁 redisTemplate.expire(key, time, unit); return true; } // 获取过期时间 Long oldExpireTime = (Long) redisTemplate.opsForValue().get(key); if(null == oldExpireTime) { oldExpireTime = 0L; } if(oldExpireTime >= System.currentTimeMillis()) { // 不小于系统时间并且过了超时时间,则不获取锁 if((System.currentTimeMillis() - startTimeMillis) > timeout) { return false; } // 休眠 Thread.sleep(LOCK_TRY_INTERVAL); } // 新的过期时间 long newExpireTime = System.currentTimeMillis() + TimeUnit.MILLISECONDS.convert(time, unit); Long currentExpireTime = (Long) redisTemplate.opsForValue().getAndSet(key, newExpireTime); if(null == currentExpireTime) { currentExpireTime = 0L; } if(currentExpireTime.equals(oldExpireTime)) { // 获取到锁 redisTemplate.expire(key, time, unit); return true; } } while (true); } catch (Exception e) { return false; } } /** * 获取缓存标识前缀 * @param typeName 类名 * @return 前缀 */ protected final String getPrefix(String typeName) { return typeName; } } 在业务逻辑层引入redis操作类 @Resource private RedisGlobalLock redisGlobalLock; // 1、获取分布式锁防止重复调用 ===================================================== String key = PayDistributePrefix.PAY_MEMBER_ACCOUNT + memberId; if(redisGlobalLock.lock(key)) { try{ System.out.println("--处理业务---"); }catch (Exception e){ throw e; }finally { // 4、释放分布式锁 ================================================================ redisGlobalLock.unlock(key); } }else{ // 如果没有获取锁 Ensure.that(true).isTrue("17000706"); } 所有锁业务必须释放锁,防止死锁 Java B2B2C多用户商城 springcloud架构

优秀的个人博客,低调大师

SpringCloud+SpringBoot b2b2c 分布式微服务商城电商之手机端首页模块设计分析

近期我参与了公司电子商务平台中“首页”模块设计, 电商平台首页功能大概分为几个区域,如下: 一、导航区域: 左上角定位入口 搜索功能入口 消息通知入口 商品分类入口 二、广告区域: Banner滚动广告,通过后台发布,可以连接:商品、外部H5连接、店铺、开店、其他活动等 三、二级频道模块区域: 平台设置了:特惠商品区、品质生活、9块9、校园专区、套餐体验、一县一特、生活神器、健康养生、女神诱惑、海哇吃货、萌娃专区、水果摊、服饰服装、酒店行业、海哇品茶、大清仓、便宜好货、旅游。 功能截图如下: 四、短视频、直播带货、VR全景、精选等区域: 短视频带货区域:平台提供短视频带货模式,创作者发布视频并从平台选择需要代理的商品,消费者浏览视频并消费后带给商家流量,创作者获取分润分成 VR全景区:通过定位,平台将本地城市附近入驻的商家以VR全景模式展示给用户,提供用户线上体验并消费 精选区:平台将优质商品推荐到精选区域供用户选择消费 直播带货区:用户开通直播服务后,平台提供直播带货模式,主播进行直播并从平台选择需要代理的商品,通过浏览视频带给商家流量,主播将获取利润分成 功能截图如下: 平台、技术、架构、设计思想 1. 涉及平台 平台管理、商家端(PC端、手机端)、买家平台(H5/公众号商城、小程序商城、APP端(IOS/Android)、微服务平台(业务服务)、系统服务(SpringCloud相关:Eureka、Config、Gateway) 2. 核心架构 Spring Cloud、Spring Boot、Mybatis、Redis、RabbitMQ、 3. 前端框架 VUE、Uniapp、Bootstrap/H5/CSS3、IOS、Android、小程序 4. 核心思想 分布式、微服务、云架构、模块化、原子化、热插拔 5. 开发模式 前后端分离、微服务开发、持续集成、集群部署、前后端分离、支持阿里Docker 以上是我的一点总结,希望能够帮助到更多的朋友了解分布式微服务电子商务平台首页模块设计! 看完如果对你有帮助,感谢点赞支持!

优秀的个人博客,低调大师

SpringCloud+SpringBoot b2b2c 分布式微服务商城电商之直播带货模块设计分析

近期我参与了公司电子商务平台中“海播”模块设计,其中包括直播、短视频带货两个模块,下面介绍一下直播带货模块: 业务流程如下 第一步:商家以“商家入驻”模式入驻电子商务平台后,对自己的店铺进行装修、发布商品等操作(具体会在后面商家详情里面进行讲解)。 第二步:商家对商品设置分销,商家在发布商品的时候,设置商品分销比例,如:一个杯子标价为120元,其中拿出20元进行分销设计,其中14元钱设置为一级分销,剩下的6元钱设置为二级分销。 第三步:如果用户在平台上进行直播带货,首先要开通直播服务,如:上传真实资料,购买主播服务(不是所有人都可以进行免费直播)。 第四步:主播提交资料后,后台进行严格审核后方可直播。 第五步: 成为主播后,主播可以打开主播端,可直接进行直播,如:创建直播间、分享直播间、创建预播、可以去平台选择自己要带的货(商品),数据统计等。 平台、技术、架构、设计思想 1. 涉及平台 平台管理、商家端(PC端、手机端)、买家平台(H5/公众号商城、小程序商城、APP端(IOS/Android)、微服务平台(业务服务)、系统服务(SpringCloud相关:Eureka、Config、Gateway) 2. 核心架构 Spring Cloud、Spring Boot、Mybatis、Redis、RabbitMQ、 3. 前端框架 VUE、Uniapp、Bootstrap/H5/CSS3、IOS、Android、小程序 4. 核心思想 分布式、微服务、云架构、模块化、原子化、热插拔 5. 开发模式 前后端分离、微服务开发、持续集成、集群部署、前后端分离、支持阿里Docker 创建直播间介绍 进入主播端,点击“创建直播”,进入创建直播界面,添加直播间封面、直播标题、添加宝贝(商品),如下图: 前端直播列表(C端观看) 后台管理截图 以上是我的一点总结,希望能够帮助到更多的朋友了解分布式微服务电子商务平台直播带货设计! 看完如果对你有帮助,感谢点赞支持!

优秀的个人博客,低调大师

SpringCloud+SpringBoot b2b2c 分布式微服务商城电商之短视频带货模块设计分析

近期我参与了公司电子商务平台中“海播”模块设计,其中包括直播、短视频带货两个模块,下面介绍一下短视频带货模块: 业务模式如下 商家以“商家入驻”模式入驻电子商务平台后,对自己的店铺进行装修、发布商品等操作(具体会在后面商家详情里面进行讲解) 商家在发布商品的时候,设置商品分销比例,如:一个杯子标价为120元,其中拿出20元进行分销设计,其中14元钱设置为一级分销,剩下的6元钱设置为二级分销 通过短视频带货的普通用户,可以去平台选择自己要带的货(商品),通过商家设置的分销模式进行赚钱。 普通用户可以进行短视频带货(具体短视频的发布等操作后面会详细介绍到) 平台、技术、架构、设计思想 1. 涉及平台 平台管理、商家端(PC端、手机端)、买家平台(H5/公众号商城、小程序商城、APP端(IOS/Android)、微服务平台(业务服务)、系统服务(SpringCloud相关:Eureka、Config、Gateway) 2. 核心架构 Spring Cloud、Spring Boot、Mybatis、Redis、RabbitMQ、 3. 前端框架 VUE、Uniapp、Bootstrap/H5/CSS3、IOS、Android、小程序 4. 核心思想 分布式、微服务、云架构、模块化、原子化、热插拔 5. 开发模式 前后端分离、微服务开发、持续集成、集群部署、前后端分离、支持阿里Docker 后端功能截图 消费端功能截图 以上是我的一点总结,希望能够帮助到更多的朋友了解分布式微服务电子商务平台短视频带货设计! 看完如果对你有帮助,感谢点赞支持!

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册