微服务架构Spring Boot运行原理

【微服务】SpringBoot实现原理 什么是微服务? 通俗来说微服务就是把一个系统分成多个单一的功能模块,分工明确,各自负责自己相应的职责。 举个生活中例子 一个项目的实现,一开始我直接一个人承包整个项目的功能研发。数据库设计、后台逻辑实现、前端UI设计、项目的测试及维护。第二种就是安排一个人负责数据库设计,一个人负责后台逻辑实现、另一个人负责前端UI设计等等…,这种分工明确,各自负责自己的任务职责的就可以称之为“微服务”,了解了什么... 阅读详情

1、微服务:
        在了解什么是Spring Boot之前,先要理解是什么微服务,一般我们在传统的软件开发过程中所有的功能和业务处理都放在同一个项目中并打包成一个War包,放在JEE容器中(Tomcat,Jboss,WebLogic),如过项目过程出现一点问题就需要再次打包运行。所有的功能处理模块不能相对独立和调用,而微服务架构中所有的功能都有自己独立的服务和进程,每个服务都有自己的业务处理独立开发,并且可以进行分布式管理,下面用两张较图片来比较下:

                                     传统模式                                                             微服务架构
                
 
        优缺点:
            (一)传统模式:开发简单,集中式管理,都在本地没有分布式的开销和调用,缺点在于开发效率低,代码维护成本高,部署不灵活,对于高并发,稳定性并不适用,可扩展性不强。

            (二)微服务架构:每个功能模块都有独立的进程和业务处理,相互之间可以进行调用,并且每个服务可以进行独立的开发,组成一个完成的系统,拓展性强,可进行分部式管理。
           
2、什么是Spring Boot
        Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。简单的来说Spring Boot封装了Spring所需要的各种jar进行统一式管理,需要的时候调用即可。
        SpringBoot与传统的SpringMVC区别,在SpringMVC当中,当需要搭建一个SpringMVC框架的时所用的步骤是:    配置web.xml , jdbc,spring事务,加载文件及注解和日志。这些东西在项目开发过程很烦锁遇到错误,查找问题花费时间比较大,而Spring Boot就是对Spring的封装,所有的配置文件和资源都进行统一的管理,不需要再次进行写入,需要某个功能直接从pom.xml文件引用对应的资源库即可,简单高效。

3、如何搭建一个Spring Boot框架
        搭建Spring Boot有两种方式:
            一、从官网直接下载   官网地址为:https://start.spring.io/  下载后导入到eclipse当中
            二、从eclipse中加载sts插件远程下载。

        SpringBoot 2.0以下java1.7可以支持2.0以上需要java1.8以上。

        对于开发软件Eclipse,MyEclipse,intellij idea三种有什么区别:
        1、Eclipse是开发软件用的很多,在于软件本身较小,不需消耗太大的内存,运行效率较快,不好之处在于插件较少需要什么软件手动安装或者远程下载。
        2、MyEclipse是很多集中式的插件,消耗内存比较大。优点在于不需要下载很多插件。
        3、Intellij idea是目前比较流行的,但软件运行消耗太大,每个项目都是独立的窗口,项目搭建过程很慢,个人不太喜欢这种。

 本文以Eclipse为例进行演示和讲解。

首先java(8.5)和maven环境要搭建好,如何搭建可以查看其它文档资料。

新建一个项目:

Service Url 后指的就是官网地址,Name就是你的项目名称

下一步:

这里我们先选择支持web的jar包  搜索Web加载进行即可。点击完成。

打开项目会有如下目录:

src/main/java   源代码

src/main/rescoures 资源文件

src/test/java 测试类

pom.xml 配置文件

我们直接运行DemoApplication.java文件  控制台出现spring的图标就说明项目搭建成功。

接下出来我做个测试用例,新建一个类Control.java   如图所示:


接着我们运行DemoApplication.java文件,然后通过浏览访问:http://localhost:8080/hello 发现能够直接打印出来。

我们发现这并不像我们之前的项目,需要通过tomcat或者Jboss打包再运行出来,Spring Boot直接能够运行,这就是Spring Boot的强大之处。下面我们来深入了解下Spring Boot是如何完成这件事的:

我们先来查看pom.xml文件的配置:

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.1.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

这里定义一个Spring Boot的起始器,进入节点

<parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-dependencies</artifactId>
        <version>2.1.1.RELEASE</version>
        <relativePath>../../spring-boot-dependencies</relativePath>
    </parent>
    <artifactId>spring-boot-starter-parent</artifactId>
    <packaging>pom</packaging>
    <name>Spring Boot Starter Parent</name>
    <description>Parent pom providing dependency and plugin management for applications built with Maven</description>

从它的描述中我们知道 父节点的这个pom文件是为整个应用程序提供依赖和插件管理的,并且都是用Maven控制的。

           <resource>
                <filtering>true</filtering>
                <directory>${basedir}/src/main/resources</directory>
                <includes>
                    <include>**/application*.yml</include>
                    <include>**/application*.yaml</include>
                    <include>**/application*.properties</include>
                </includes>
            </resource>

向下看我可以看到系统为我们提供了三个默认的支持文件yml,yaml,properties三种类型的文件并且都是以application标准命名,且都是在src/main/resources 目录资源文件下,查看项目系统自动给我们生成了application.properties文件,文件下面都是一些打包的本相关配置。

进入以下节点

<parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-dependencies</artifactId>
        <version>2.1.1.RELEASE</version>
        <relativePath>../../spring-boot-dependencies</relativePath>
    </parent>

可以看到Spring Boot为我们指定了明确的版本号,这里就相于版本库,好处在于可以解决版本冲突。

        <activemq.version>5.15.8</activemq.version>
        <antlr2.version>2.7.7</antlr2.version>
        <appengine-sdk.version>1.9.68</appengine-sdk.version>
        <artemis.version>2.6.3</artemis.version> 

回到pom.xml文件查看

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

看到pom.xml引入了spring-boot-starter-web    jar包  这个jar包就是我们新建项目时选择web 所引入进来的,查看下这个里面包含什么内容

           <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
                <version>2.1.1.RELEASE</version>
            </dependency>

看到也是和外面的spring-boot-starter-web配置一样只不过加了个版本号,这里的作用在于为我们的jar包统一版号 也就是之前进入父节点的那个文件版本资源库。再进行spring-boot-starter-web节点

<dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-tomcat</artifactId>
      <version>2.1.1.RELEASE</version>
      <scope>compile</scope>
    </dependency>

<dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-webmvc</artifactId>
      <version>5.1.3.RELEASE</version>
      <scope>compile</scope>
    </dependency>

可以看到spring-boot-starter-web 为我们自动依赖了一个tomcat以及spring-webmvc  我们进入tomcat里面

<groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-tomcat</artifactId>
  <version>2.1.1.RELEASE</version>
  <name>Spring Boot Tomcat Starter</name>
  <description>Starter for using Tomcat as the embedded servlet container. Default
        servlet container starter used by spring-boot-starter-web</description>

描述中可以知道Tomcat作为嵌入式servlet容器的启动程序,当 spring-boot-starter-web启动的时候,tomcat就默认已经启动了。这也就是为什么我们不需要手动将项目布署到tomcat里面运行的原因。

下面我们查看下程序是如何运行的进入主程序:

@SpringBootApplication
public class DemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }

}

可以看到DemoApplication >>> main方法运行了一个run方法加载自身使用了并使用了@SpringBootApplication注解,查看@SpringBootApplication是做什么用的:

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(excludeFilters = {
        @Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),
        @Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) })
public @interface SpringBootApplication {
......}

这里我们可以看到都使用了一些注解,下面来理解下都是些什么意思:

1、@Target(ElementType.TYPE)  通过描述  /** Class, interface (including annotation type), or enum declaration */  可以知道是用于一个类,接口,枚举类型的声明,这里的SpringBootApplication是一个接口,所以需要用它声明。

2、@Retention(RetentionPolicy.RUNTIME) 查看里面内容
    RUNTIME 通过释义知道该类注释在编译的时候会记录在类文件中虚拟机运行时会保留。就可以通过反映机制得到读取它。简单的说如果使用了RetentionPolicy.RUNTIME这个参数,虚拟机会运行过程中保留该类编译后的class文件,其它类可以进行调用直到虚拟机关闭为止。

3、@Documented   简单的说如果使用了annotations作用注释就相当于和javadoc文档类似,提供一种公共的API文档。

4、@Inherited    是用于子类想拥有父类的一些注解,那么父类需要加上@Inherited注解。

5、@SpringBootConfigurationi注解 查看

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Configuration
public @interface SpringBootConfiguration {

}

当中有一个@Configuration的注解 该注解的释义很多,概括的说如果一个类使用了@Configuration作用为注解那么这个类就被定义成一个配置类,可替换xml配置文件,被注解的类内部包含有一个或多个被@Bean注解的方法,这些方法将会被AnnotationConfigApplicationContext或AnnotationConfigWebApplicationContext类进行扫描,并用于构建bean定义,初始化Spring容器。

 

6、@EnableAutoConfiguration注解,这个注解表示可以使用起始器依赖之外的一些jar包。也就是我们通常说的第三方jar包

@EnableAutoConfiguration  查看里面内容

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@AutoConfigurationPackage
@Import(AutoConfigurationImportSelector.class)
public @interface EnableAutoConfiguration {

......}

多了两个注释@AutoConfigurationPackage和@Import(AutoConfigurationImportSelector.class)  

先查看@AutoConfigurationPackage注解:

/**
 * Indicates that the package containing the annotated class should be registered with
 * {@link AutoConfigurationPackages}.
 *
 * @author Phillip Webb
 * @since 1.3.0
 * @see AutoConfigurationPackages
 */
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@Import(AutoConfigurationPackages.Registrar.class)
public @interface AutoConfigurationPackage {

}

通过释义可看出是对指示应向包含带注释类的包注册 也就是{@link AutoConfigurationPackages}这个包,进入@Import(AutoConfigurationPackages.Registrar.class)里看到

static class Registrar implements ImportBeanDefinitionRegistrar, DeterminableImports {

        @Override
        public void registerBeanDefinitions(AnnotationMetadata metadata,
                BeanDefinitionRegistry registry) {
            register(registry, new PackageImport(metadata).getPackageName());
        }

        @Override
        public Set<Object> determineImports(AnnotationMetadata metadata) {
            return Collections.singleton(new PackageImport(metadata));
        }

    }

Registrar 类有一个registerBeanDefinitions方法相当注册一个bean,我们在里设置一个断点如图

可以看到Metadata数据传入的是当前主程序的包名加上自己的类,参数new PackageImport(metadata).getPackageName()该函数返回的是包的名称com.example.demo 再进入看到

PackageImport(AnnotationMetadata metadata) {
            this.packageName = ClassUtils.getPackageName(metadata.getClassName());
 }  

进入getPackageName方法

    public static String getPackageName(String fqClassName) {
        Assert.notNull(fqClassName, "Class name must not be null");
        int lastDotIndex = fqClassName.lastIndexOf(PACKAGE_SEPARATOR);
        return (lastDotIndex != -1 ? fqClassName.substring(0, lastDotIndex) : "");
    }

该方法在这里做了个Assert,如果传入包的名称没有包含主程序包名就不进行注册,也是com.example.demo这个包名,不注册那么spring容器将会扫描不到其它类。 可以把刚刚项目里新寻的Control修改个包名,不包含com.example.demo再调试下,结果肯定扫描不到。这里就不做演示了

回到@EnableAutoConfiguration文件里

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@AutoConfigurationPackage
@Import(AutoConfigurationImportSelector.class)
public @interface EnableAutoConfiguration {
.....}

@AutoConfigurationPackage注解也就相当于根据主程序的包名扫描该系统中所有包含主程序名的所以类,并且注册放入到 spring 容器当中

 

@Import(AutoConfigurationImportSelector.class)注解 进入节点

找到loadFactoryNames

    protected Collection<String> loadFactoryNames(Class<?> source) {
        return SpringFactoriesLoader.loadFactoryNames(source,
                getClass().getClassLoader());
    }

进入loadFactoryNames----------->loadSpringFactories  可以看到系统加载了一意资源文件

public static final String FACTORIES_RESOURCE_LOCATION = "META-INF/spring.factories";

classLoader.getResources(FACTORIES_RESOURCE_LOCATION) :
ClassLoader.getSystemResources(FACTORIES_RESOURCE_LOCATION));

也就是位于org\springframework\boot\spring-boot-autoconfigure\2.1.1.RELEASE\spring-boot-autoconfigure-2.1.1.RELEASE.jar------->META-INF/spring.factories下

打开可以看到

# Initializers
org.springframework.context.ApplicationContextInitializer=\
org.springframework.boot.autoconfigure.SharedMetadataReaderFactoryContextInitializer,\
org.springframework.boot.autoconfigure.logging.ConditionEvaluationReportLoggingListener

# Application Listeners
org.springframework.context.ApplicationListener=\
org.springframework.boot.autoconfigure.BackgroundPreinitializer

# Auto Configuration Import Listeners
org.springframework.boot.autoconfigure.AutoConfigurationImportListener=\
org.springframework.boot.autoconfigure.condition.ConditionEvaluationReportAutoConfigurationImportListener
 

Spring Boot 自动帮我们加载了一些第三方jar包,包括一些初始化,监听对象,过滤器以及Configuration的jar包

 

7、@ComponentScan注释 定义扫描的路径从中找出标识了需要装配的类自动装配到spring的bean容器中 excludeFilters参数用于过滤出不用加入spring容器的类

 

以上就是对

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(excludeFilters = {
        @Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),
        @Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) })
public @interface SpringBootApplication {

.....}注解的一些释义    更详细的需要自己去查看相关文档。

通过对以上的注解,pom配置文件应该对Spring Boot运行的原理有个大概的了解。

这只是一个简单的框架没有任何集成,比如开发过程用到的Jsp,Mybatis,Bootstrap,DataSoucre,还有整合框架spring cold等等。集成方式和资源路径这里就不做介绍了,后续文章会弄个简单的Spring Boot +Spring Clod集成框架进行实例介绍。  

本文主要讲解下Spring Boot的基本运行原理。

以上知识不足之处可以在下方留言板讨论。

探索Spring Boot在Java微服务架构中的应用 随着互联网技术的飞速发展,软件系统的规模和复杂度不断增加,传统的单体架构逐渐难以满足快速迭代、高并发、可扩展性等需求。微服务架构应运而生,它将一个大型的应用拆分成多个小型、自治的服务,每个服务可以独立开发、部署和维护。Spring Boot作为一个简化Spring开发的框架,为Java微服务架构的开发提供了便捷的解决方案。 阅读详情

相关推荐

Spring Cloud微服务架构发展历程

什么是微服务 微服务的概念源于 2014 年 3 月 Martin Fowler 所写的一篇文章“Microservices”。文中内容提到:微服务架构是一种架构模式,它提倡将单一应用程序划分成一组小的服务,服务之间互相协调、互相配合,为用户提供最终价值。 每个服务运行在其独立的进程中,服务与服务间采用轻量级的通信机制互相沟通(通常是基于 HTTP 的 RESTful API)。每个服务都围绕着具...

一将终成 8595

带你了解springboot微服务架构和装配原理

Springboot 从今天开始我们就开始了离开地狱的快乐生活!!!!!!芜湖 我们的学习历程: javase:oop mysql:持久化 html+css+js+jquery+框架:视图,框架不熟练,css不好 javaweb:独立开发MVC架构的网站:原始 ssm:框架:简化了我们的开发流程 打包出来是:war:tomcat运行 Spring再简化:SpringBoot-jar:内嵌tomcat; 微服务架构! 服务越来越多:SpringCloud; SpringBo

doomwatcher的博客 1825

高效的布隆过滤器:实现、优化与应用案例

本文介绍了布隆过滤器的基本原理及其在大数据领域的应用。首先,阐述了布隆过滤器的工作机制和实现方法,随后深入分析了Guava框架中布隆过滤器的实现及其优化。通过实际案例,本文展示了布隆过滤器在数据去重和存在性判断中的优势,尽管存在一定的误判率,但其高效的内存使用使其在大数据处理场景中得到了广泛应用。最后,文章总结了布隆过滤器的实践意义,强调了其在提升系统性能中的重要作用。

曾经“等你生日那天”都遥远得像未来,如今却可欢愉的挥手说“下个十年见” 168万+

浅探spring微服务基础框架—springboot(1):快速入门

 初醒恍然间 一梦已千年 做程序员也有些日子了,有点java功底写代码几乎都是copy照搬套用,对框架的理解程度很低,知其然而不知其所以然...这样很容易产生困惑,只有‘摸清底细’才能灵活运用,正所谓学无止境,对于技术类岗位意义更为重要了...查阅资料,总结开整~~。 目录 一、认识springboot 二、飞速入门 一、认识sp...

进击的Coder菜鸟 391

Spring Boot 系列教程: 简介和配置&核心组件知识

Spring Boot 是由 Pivotal 团队提供的全新框架,其设计目的是用来简化新 Spring 应用的初始搭建以及开发过程。Spring Boot 基于 Spring Framework 和其最知名的成员之一——Spring MVC 来构建。该项目围绕着微服务架构和云原生计算的需求,利用自动配置来简化配置,从而使开发人员能够快速地上手编写 applications。

AI天才研究院 1807

Spring Cloud + Docker 构建微服务架构下的电商平台后台系统

作者:禅与计算机程序设计艺术 1.简介 随着互联网业务的发展,电商、O2O、零售等领域也日益走向了前所未有的高速发展。其中电商平台作为最具代表性的互联网应用之一,自诞生伊始就引起了网络游戏行业和移动互联网开发者极大的关注。而在最近几年,云计算的发展对电商平台的运行模式也产生了深远影响。 Spring C

AI天才研究院 2409

微服务基础技能 SpringBoot详解!

微服务基础技能 SpringBoot详解!一片大文章从入门到实战不来看看吗?

SYJ的博客 4466

Spring Boot 4 + JDK 25 微服务事务实战:Seata多模式(AT/TCC/Saga/XA)+Spring JDBC 选型指南与落地避坑

TCC模式是“补偿事务”的核心实现,核心优势是“灵活度高”(支持自定义提交/回滚逻辑),无需依赖数据库事务,本质是“两阶段提交+手动补偿”,分为三个步骤(Try-Confirm-Cancel):Try(尝试):预留资源,执行业务逻辑的前置操作,不提交事务,仅验证并预留所需资源(如库存扣减前先锁定库存,支付前先冻结余额)。Confirm(确认):所有分支Try成功后,执行确认操作,提交业务逻辑,释放预留资源(如确认扣减库存,确认支付余额)。

2601_94871597的博客 1033

微服务入门:SpringBoot

微服务入门:SpringBoot

qq_59463944的博客 5187

Spring Boot项目创建与运行实操指南

Spring Boot启动类是应用的入口,它通常包含了main方法,用于运行SpringApplication.run()。启动类的主要组件包括:main方法:程序的执行入口,调用的静态run方法。类:负责初始化Spring应用上下文。run方法:运行Spring Boot应用,并返回一个已经配置好的Spring实例。Apache Dubbo是一个高性能的Java RPC框架,主要用于构建分布式应用。

weixin_42163404的博客 1143

详细介绍pytorch重要的API

Tensor 是 PyTorch 中最基本的数据结构,提供了多种创建和操作张量的函数。Autograd 提供了自动求导功能,可以跟踪 Tensor 上的操作并计算梯度。损失函数用于衡量模型预测值与真实值之间的差异,提供了多种损失函数。是构建神经网络的基础类,提供了定义网络层和前向传播的方法。提供了 GPU 计算的支持,包括设备管理、内存管理等。提供了一些常用的函数式操作,如激活函数、损失函数等。提供了常用的数据集、模型架构和图像转换工具。提供了数据加载和预处理的工具,包括。

hello! 1223

Spring Cloud是怎么运行的?

导读 在之前的文章中给大家介绍了Spring Boot的基本运行原理(链接),收到了很多读者朋友们关于目前比较流行的微服务框架Spring Cloud的问题反馈。因此,在这篇文章中小码哥打算和大家一起通过梳理下Spring Cloud的运行原理来相对全面的了解下Spring Cloud。 随着微服务架构在越来越多的公司得到实践和应用,基于Spring Cloud的这一套微服务生态框架体系,也在这个...

无敌码农 1741

泄露测试仪CTS的Sentinel I28使用

本文介绍:泄露测试仪CTS的Sentinel I28使用

qq_34047402的博客 2206

HotswapAgent深度解析:Java运行时类热交换架构设计与实战指南

Java开发者在日常开发中常常面临一个技术痛点:修改代码后需要重启应用才能看到效果,这不仅打断了开发流程,还浪费了大量时间在等待应用启动上。HotswapAgent作为一款开源的Java运行时类热交换工具,通过字节码增强和运行时优化技术,实现了无需重启应用即可实时更新代码的能力,极大地提升了开发效率和调试体验。本文将深入剖析HotswapAgent的核心架构、实现原理,并提供完整的实战指南。 #

gitblog_00250的博客 295

vivado运行时报错 license文件更新操作

vivado使用:SYNTHESIS->Run Synthesis 时报错 [Common 17-345] A valid license was not found for feature ‘Synthesis’ and/or device ‘xc7vx485t’. Please run the Vivado License Manager for assistance in determiningwhich features and devices are licensed for your sy

qq_44692266的博客 2万+

给STM32 LWIP做一次‘性能体检’:手把手教你用Wireshark和iperf诊断网络瓶颈

本文详细介绍了如何使用Wireshark和iperf工具对STM32 LWIP网络性能进行全面诊断,帮助开发者精准定位网络瓶颈问题。通过搭建测试环境、集成iperf测试框架、深度报文分析和LWIP配置优化,实现从9KB/s到80MB/s的性能飞跃,特别适用于解决TCP发送速率和卡死问题。

weixin_29631169的博客 289

Java大厂面试核心:Spring Boot、微服务与JVM深度解析

Java技术栈在互联网大厂面试中占据重要地位,尤其是Spring Boot框架原理、微服务架构设计和JVM运行时机制这三大核心维度。Spring Boot通过自动配置和Starter模块实现了快速应用开发,其底层原理涉及条件注解和模块化加载机制。微服务架构则强调领域驱动设计(DDD)和分布式事务处理,如TCC和消息最终一致性方案。JVM作为Java应用的运行基础,其内存模型和GC优化直接影响系统性能。掌握这些技术不仅有助于应对大厂面试,更能提升实际工程能力,适用于电商、金融等高并发场景。

weixin_29890919的博客 344

如何打开本地网络的防火墙端口(Windows版)解决ConnectionRefusedError: [WinError 10061] 由于目标计算机积极拒绝,无法连接。问题

ConnectionRefusedError: [WinError 10061] 由于目标计算机积极拒绝,无法连接。 最开始在遇到这个报错的时候十分不解,后来经过思考,有可能是服务器端口占用,或者并没有放行。因此搜查问题的关键是要先去排查问题。 在搜索栏输入控制面板 选择防火墙 选择开关 保证这些选项是开着的 选择高级设置 新建规则 创建协议端口 选择端口 允许连接 点击下一步 创建规则后点击下一步(后命名) 选择任意端口ALL即可 问题排查完毕!socket创建网络通信时,有读者

weixin_46900108的博客 9万+

互联网大厂Java求职面试奇遇记:Spring Boot、Redis、Kafka与JVM微服务架构核心技术点全解析

清晨,某互联网大厂面试间。严肃的面试官王工手持简历,对面坐着一位自称“精通Java”的求职者——谢飞机。他穿着格子衬衫,背着双肩包,嘴角挂着自信的微笑。窗外传来电商大促的保障战鼓声,而这场面试,注定不会平静。

2602_95996092的博客 145

ABAP Module Pool 编程入门:把 Table Control 用透,在 Dynpro 里做出可编辑的列表界面

摘要:Table Control是SAP GUI中用于对话式事务的多行数据交互控件,具备滚动、选择、修改等功能。它通过CXTAB_CONTROL/CXTAB_COLUMN结构实现动态控制,需在PBO/PAI中配合LOOP循环处理数据流。开发时需注意LINES、TOP_LINE等关键字段设置,并采用并行循环简化编码。典型应用包括订单行维护、主数据管理等场景,支持多选删除、列排序等业务需求。(150字)

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 344

PyTorch视觉项目实战:从数据加载到模型部署

PyTorch视觉项目实战:从数据加载到模型部署 ,人工智能,计算机视觉,大模型,AI,随着深度学习在计算机视觉领域的飞速发展,PyTorch 凭借其简洁的代码风格、动态计算图特性以及强大的社区支持,成为众多开发者和研究人员的首选框架。从数据加载、模型构建与训练,到最终的模型部署,PyTorch 提供了一套完整且灵活的解决方案。本文将通过实际项目案例,详细阐述基于 PyTorch 的视觉项目全流程,结合丰富的代码示例和概念解析,帮助读者掌握从项目起步到落地的关键技术。

不踩坑,不知道坑有多深;不总结,踩过的坑白踩。 4万+

互联网大厂Java求职面试:基于Java SE与Spring Boot的技术探讨

本文通过一场互联网大厂的JavaSE与Spring Boot面试,带大家深入了解核心技术点与业务场景的结合。

Cdasdas的博客 78

【系统架构设计师-2026上半年真题】案例分析-参考答案及详解(回忆版)

架构评估与设计:通过入侵检测系统的案例分析,阐述质量属性(性能/可用性/安全性/可修改性)的匹配方法,推荐管道-过滤器风格处理实时数据流,并设计8个核心构件实现数据采集到告警的全流程处理。 高并发优化方案: 分析悲观锁(排他锁/共享锁)与乐观锁的特性差异,提出乐观锁通过版本号/CAS实现,悲观锁适用于强一致性场景。 给出Redis优化三手段:分布式锁控制临界资源、Lua脚本保证原子操作、热点数据多级缓存,结合消息队列削峰填谷。 分层架构实践: 智

数据知道的博客 1688

如何快速掌握Spring Boot微服务架构:Staffjoy完整实战教学案例指南

你是否想学习微服务架构却苦于找不到合适的实战项目?Staffjoy教学版为你提供了一个完美的学习平台!这个基于Spring Boot和Kubernetes的微服务教学案例项目,将带你从零开始构建一个完整的企业排班SaaS应用。通过这个项目,你可以全面掌握云原生架构的设计与实现,快速提升微服务开发技能。 ## 项目概览与核心价值 🎯 Staffjoy是一个源于硅谷创业公司的真实项目,最初由Y

gitblog_00477的博客 1052

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

【Java】Spring Boot 与 Spring Cloud 整合:微服务架构入门实战

对于具备 Java 基础和 Spring Boot 初步经验的开发者而言,从单体应用转向微服务架构是技术进阶的重要方向。Spring Boot 简化了单体应用的开发,而 Spring Cloud 则为微服务架构提供了完整的生态支持,二者的完美整合是构建稳定、高效微服务系统的基础。本文将从概念入手,逐步拆解二者的角色关系,并通过实战案例带你上手微服务整合开发。

lbbxmx111的博客 1489

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

下一篇: 初始 Spring Cloud
MiKuJack
博客等级 码龄11年 6粉丝 7原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值