Spring Cloud教程– Spring Cloud Config Server简介

问题

SpringBoot在通过属性或YAML文件外部化配置属性方面提供了很大的灵活性。 我们还可以使用特定于配置文件的配置文件(例如application.propertiesapplication-dev.propertiesapplication-prod.properties等)分别为每个环境(dev,qa,prod等)配置属性。但是一旦应用程序启动,我们就无法在运行时更新属性。 如果更改属性,则需要重新启动应用程序以使用更新的配置属性。

另外,在大量基于MicroService的应用程序的上下文中,我们希望能够从一个集中的位置配置和管理所有MicroServices的配置属性。

我们可以使用Spring Cloud Config Server ( http://cloud.spring.io/spring-cloud-static/Dalston.SR2/#_spring_cloud_config )集中所有应用程序配置,并使用应用程序中的Spring Cloud Config Client模块来使用配置配置服务器中的属性。 我们还可以在运行时更新配置属性,而无需重新启动应用程序。

即使您不打算将应用程序部署在任何云平台(例如AWS,Pivotal CloudFoundry等)中,许多Spring Cloud模块也可以在SpringBoot应用程序中使用。

Spring Cloud Config服务器

Spring Cloud Config Server只是具有配置的配置属性源的SpringBoot应用程序。 配置源可以是git存储库, svn存储库或Consul服务( https://www.consul.io/ )。

在本文中,我们将使用git存储库作为配置属性源。

Git配置库

创建一个git存储库来存储属性文件。 我已经在GitHub中创建了一个仓库config-repo ,即https://github.com/sivaprasadreddy/config-repo.git 。

假设我们将开发两个SpringBoot应用程序catalog-serviceorder-service 。 让我们分别目录服务订单服务创建配置文件catalogservice.propertiesorderservice.properties

config-repo / catalogservice.properties

spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/catalog
spring.datasource.username=root
spring.datasource.password=admin

config-repo / orderservice.properties

spring.rabbitmq.host=localhost
spring.rabbitmq.port=5672
spring.rabbitmq.username=guest
spring.rabbitmq.password=guest

我们还可以创建特定于配置文件的配置文件,例如catalogservice-dev.propertiescatalogservice-prod.propertiesorderservice-dev.propertiesorderservice-prod.properties

config-repo / catalogservice-prod.properties

spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://appsrv1:3306/catalog
spring.datasource.username=appuser46
spring.datasource.password=T(iV&#)X84@1!

config-repo / orderservice-prod.properties

spring.rabbitmq.host=srv245.ind.com
spring.rabbitmq.port=5672
spring.rabbitmq.username=admin23
spring.rabbitmq.password=uY7&%we@1!

现在,将所有配置属性文件提交到config-repo git存储库中。

Spring Cloud Config Server应用程序

让我们通过选择启动器Config ServerActuator从http://start.spring.io或从您最喜欢的IDE创建SpringBoot应用程序spring-cloud-config-server

这将使用以下pom.xml生成maven项目。

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="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.sivalabs</groupId><artifactId>spring-cloud-config-server</artifactId><version>1.0.0-SNAPSHOT</version><packaging>jar</packaging><name>spring-cloud-config-server</name><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>1.5.6.RELEASE</version><relativePath/></parent><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><java.version>1.8</java.version><spring-cloud.version>Dalston.SR2</spring-cloud.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-config-server</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies><dependencyManagement><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>${spring-cloud.version}</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build>
</project>

为了使我们的SpringBoot应用程序成为SpringCloud Config Server,我们只需要在主入口点类中添加@EnableConfigServer批注并配置指向git存储库的spring.cloud.config.server.git.uri属性。

package com.sivalabs.configserver;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.config.server.EnableConfigServer;@EnableConfigServer
@SpringBootApplication
public class ConfigServerApplication {public static void main(String[] args) {SpringApplication.run(ConfigServerApplication.class, args);}
}

spring-cloud-config-server / src / main / resources / application.properties

server.port=8888
spring.cloud.config.server.git.uri=https://github.com/sivaprasadreddy/config-repo.git
management.security.enabled=false

除了配置git repo uri外,我们还将server.port配置为8888并禁用了执行器安全性 。 现在,您可以启动将在端口8888上启动的应用程序。

Spring Cloud Config Server公开以下REST端点以获取特定于应用程序的配置属性:

/{application}/{profile}[/{label}]
/{application}-{profile}.yml
/{label}/{application}-{profile}.yml
/{application}-{profile}.properties
/{label}/{application}-{profile}.properties

这里{application}指的是spring.config.name属性的值, {profile}是活动的概要文件, {label}是可选的git标签(默认为“ master”)。

现在,如果您访问URL http:// localhost:8888 / catalogservice / default,那么您将获得以下响应以及catalogservice 默认配置详细信息:

{"name": "catalogservice","profiles": ["default"],"label": null,"version": "8a06f25aeb3f28a8f06b5634eae01858b2c6465d","state": null,"propertySources": [{"name": "https://github.com/sivaprasadreddy/config-repo.git/catalogservice.properties","source": {"spring.datasource.username": "root","spring.datasource.driver-class-name": "com.mysql.jdbc.Driver","spring.datasource.password": "admin","spring.datasource.url": "jdbc:mysql://localhost:3306/catalog"}}]
}

如果访问URL http:// localhost:8888 / catalogservice / prod,则将收到以下响应,其中包含catalogservice prod配置详细信息。

{"name": "catalogservice","profiles": ["prod"],"label": null,"version": "8a06f25aeb3f28a8f06b5634eae01858b2c6465d","state": null,"propertySources": [{"name": "https://github.com/sivaprasadreddy/config-repo.git/catalogservice-prod.properties","source": {"spring.datasource.username": "appuser46","spring.datasource.driver-class-name": "com.mysql.jdbc.Driver","spring.datasource.password": "T(iV&#)X84@1!","spring.datasource.url": "jdbc:mysql://appsrv1:3306/catalog"}},{"name": "https://github.com/sivaprasadreddy/config-repo.git/catalogservice.properties","source": {"spring.datasource.username": "root","spring.datasource.driver-class-name": "com.mysql.jdbc.Driver","spring.datasource.password": "admin","spring.datasource.url": "jdbc:mysql://localhost:3306/catalog"}}]
}

除了特定于应用程序的配置文件(如catalogservice.propertiesorderservice.properties)之外 ,您还可以创建application.properties文件以包含所有应用程序的通用配置属性。 如您所料,您可以拥有特定于配置文件的文件,例如application-dev.properties,application-prod.properties

假设您在config-repo中有具有以下属性的application.properties文件:

message=helloworld
jdbc.datasource.url=jdbc:mysql://localhost:3306/defapp

现在,如果您访问http:// localhost:8888 / catalogservice / prod,则将收到以下响应:

{"name": "catalogservice","profiles": ["prod"],"label": null,"version": "8a06f25aeb3f28a8f06b5634eae01858b2c6465d","state": null,"propertySources": [{"name": "https://github.com/sivaprasadreddy/config-repo.git/catalogservice-prod.properties","source": {"spring.datasource.username": "appuser46","spring.datasource.driver-class-name": "com.mysql.jdbc.Driver","spring.datasource.password": "T(iV&#)X84@1!","spring.datasource.url": "jdbc:mysql://appsrv1:3306/catalog"}},{"name": "https://github.com/sivaprasadreddy/config-repo.git/catalogservice.properties","source": {"spring.datasource.username": "root","spring.datasource.driver-class-name": "com.mysql.jdbc.Driver","spring.datasource.password": "admin","spring.datasource.url": "jdbc:mysql://localhost:3306/catalog"}},{"name": "https://github.com/sivaprasadreddy/config-repo.git/application.properties","source": {"message": "helloworld","jdbc.datasource.url": "jdbc:mysql://localhost:3306/defapp"}}]
}

同样,您可以访问http:// localhost:8888 / orderservice / default以获取orderservice配置详细信息。

{"name": "orderservice","profiles": ["default"],"label": null,"version": "8a06f25aeb3f28a8f06b5634eae01858b2c6465d","state": null,"propertySources": [{"name": "https://github.com/sivaprasadreddy/config-repo.git/orderservice.properties","source": {"spring.rabbitmq.host": "localhost""spring.rabbitmq.port": "5672""spring.rabbitmq.username": "guest""spring.rabbitmq.password": "guest"}},{"name": "https://github.com/sivaprasadreddy/config-repo.git/application.properties","source": {"message": "helloworld","jdbc.datasource.url": "jdbc:mysql://localhost:3306/defapp"}}]
}

现在,我们已经了解了如何使用Spring Cloud Config Server创建配置服务器,以及如何使用REST API获取应用程序特定的配置属性。

让我们看看如何创建SpringBoot应用程序并使用Config Server中的配置属性,而不是将其放入应用程序中。

Spring Cloud Config客户端(目录服务)

使用Config Client, WebActuator启动器创建SpringBoot应用程序目录服务

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="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.sivalabs</groupId><artifactId>catalog-service</artifactId><version>1.0.0-SNAPSHOT</version><packaging>jar</packaging><name>spring-cloud-config-client</name><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>1.5.6.RELEASE</version><relativePath/></parent><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><java.version>1.8</java.version><spring-cloud.version>Dalston.SR2</spring-cloud.version></properties><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-config</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency><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><dependencyManagement><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>${spring-cloud.version}</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>

通常在SpringBoot应用程序中,我们在application.properties中配置属性。 但是,在使用Spring Cloud Config Server时,我们使用bootstrap.propertiesbootstrap.yml文件配置Config Server的URL,并且Spring Cloud Config Client模块将通过从Config Server中获取应用程序属性来启动应用程序。

src / main / resources / bootstrap.properties中配置以下属性:

server.port=8181
spring.application.name=catalogservice
spring.cloud.config.uri=http://localhost:8888
management.security.enabled=false

我们已经使用spring.cloud.config.uri属性配置了配置服务器的URL。 我们还使用spring.application.name属性指定了应用程序名称。

请注意, spring.application.name属性的值应与config-repo中的基本文件名(catalogservice)匹配。

现在运行以下目录服务主入口点类:

package com.sivalabs.catalogservice;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication
public class CatalogServiceApplication {public static void main(String[] args) {SpringApplication.run(CatalogServiceApplication.class, args);}
}

我们可以访问执行器端点http:// localhost:8181 / env以查看所有配置属性。

{"profiles": [],"server.ports": {"local.server.port": 8080},"configService:configClient": {"config.client.version": "8a06f25aeb3f28a8f06b5634eae01858b2c6465d"},"configService:https://github.com/sivaprasadreddy/config-repo.git/catalogservice.properties": {"spring.datasource.username": "root","spring.datasource.driver-class-name": "com.mysql.jdbc.Driver","spring.datasource.password": "******","spring.datasource.url": "jdbc:mysql://localhost:3306/catalog"},"configService:https://github.com/sivaprasadreddy/config-repo.git/application.properties": {"message": "helloworld","jdbc.datasource.url": "jdbc:mysql://localhost:3306/defapp"},"servletContextInitParams": {},"systemProperties": {......},"systemEnvironment": {......},"springCloudClientHostInfo": {"spring.cloud.client.hostname": "192.168.0.101","spring.cloud.client.ipAddress": "192.168.0.101"},"applicationConfig: [classpath:/bootstrap.properties]": {"management.security.enabled": "false","spring.cloud.config.uri": "http://localhost:8888","spring.application.name": "catalogservice"},"defaultProperties": {}
}

您可以看到目录服务应用程序在引导期间从Config Server获取目录服务属性。 如果在应用程序内部定义了这些属性,则可以使用@Value@EnableConfigurationProperties绑定这些属性。

属性优先

现在我们知道有很多方法可以在许多文件中提供配置属性,例如application src / main / resources{application-name}-{profile} .properties中的 application.properties,bootstrap.properties及其配置文件变体 config-repo中的{profile} .properties

下图显示了来自各个属性位置的配置属性的优先级。

在运行时刷新属性

让我们看看如何在运行时更新目录服务的配置属性而无需重新启动应用程序。

在config-repo git存储库中更新catalogservice.properties并提交更改。 现在,如果您访问http:// localhost:8181 / env,您仍然会看到旧的属性。

为了重新加载配置属性,我们需要执行以下操作:

  • 使用@RefreshScope标记要在配置更改时重新加载的Spring bean
  • 使用POST方法发出http:// localhost:8181 / refresh请求

为了测试重载行为,让我们在config-repo / catalogservice.properties中添加属性name = Siva并提交。

创建一个简单的RestController来显示名称值,如下所示:

@RestController
@RefreshScope
class HomeController
{@Value("${name}")String name;@GetMapping("/name")public String name(){return name;}
}

现在访问http:// localhost:8181 / name,它将显示Siva 。 现在,在config-repo / catalogservice.properties中将属性值更改为name = Prasad并提交。

为了重新加载配置更改,请使用POST方法触发http:// localhost:8181 / refresh请求,然后再次访问应显示Prasad的 http:// localhost:8181 / name。

但是在大量应用程序和同一应用程序的多个实例的情况下,手动发出/刷新请求是乏味且不切实际的。 在下一篇文章中,我们将介绍如何使用Spring Cloud Bus处理此问题。
Spring Cloud教程–使用Spring Cloud Bus自动刷新配置( http://sivalabs.in/2017/08/spring-cloud-tutorials-auto-refresh-config-changes-using-spring-cloud-bus/ )。

本文的源代码位于https://github.com/sivaprasadreddy/spring-cloud-tutorial

翻译自: https://www.javacodegeeks.com/2017/08/spring-cloud-tutorials-introduction-spring-cloud-config-server.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/349293.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数字孪生体技术白皮书_基于Flownex的数字孪生体解决方案 系列介绍之二:数据中心应用实例...

致力于数字孪生体技术的研究与发展通过解决方案和工程化应用造福人类来源&#xff1a;数字孪生体实验室原创作者&#xff1a;王永康转载请注明来源和出处导 读《基于Flownex的数字孪生体解决方案》是我们最近完成的系列落地方案之一。该方案适用于热力系统、冷却系统、通风空调…

node php聊天室,最简单的Nodejs聊天室示例

今天群里一个同学找我要一个nodejs聊天室的demo。给他了一个简单的例子&#xff0c;顺便记录下&#xff1a;准备工作(前提是已经装好了nodejs)&#xff1a;mkdir nodejs-democd nodejs-demo安装express : npm install express安装socket.io : npm install socket.io安装foreve…

neo4j安装_neo4j 社区版win10 下安装

准备工作&#xff1a;Neo4j下载网址&#xff1a;https://neo4j.com/download-center/#releasesava jdk官网下载&#xff1a;https://www.oracle.com/technetwork/java/javase/downloads/index.html安装 查看是否有用旧版本的java jdk ,如果有请在设置“应用和功能”卸载 旧的ja…

php网站 qq登陆,php写的插件网站接入QQ登录,QQ互联

qq按钮这里的链接是入口&#xff0c;调用你的apiapi_qq.php前端直接链接到此/*** 这个QQ登录简单实用&#xff0c;只要大家看我写的注释会一目了然&#xff0c;请注意看哦。* 带有"todo"这样注释的地方都是要你去改成你自己的逻辑* 这个php怎么进来呢&#xff1f;这是…

Spring MVC中@RequestParam和@PathVariable批注之间的区别?

Spring MVC框架是在Java世界中开发Web应用程序最流行的框架之一&#xff0c;它还提供了一些有用的注释&#xff0c;可以从传入的请求中提取数据并将请求映射到控制器&#xff0c;例如 RequestMapping&#xff0c; RequestParam和PathVariable。 即使将RequestParam和ParthVari…

excel 两列模糊匹配给出结果_北大硕士给大脑植入Excel病毒,工作效率提升了好几倍...

在工作中&#xff0c;我们经常会碰到这样的同事&#xff0c;他们是这样完成工作的&#xff1a;先用计算器算好结果&#xff0c;甚者动用手指头在电脑屏幕上数数&#xff0c;然后把数据填写到Excel表格中。结果可以预见&#xff0c;原本可以在上班时间完成的工作&#xff0c;愣是…

java ee cdi_Java EE CDI Producer方法教程

java ee cdi这是CDI Producer方法的教程。 在CDI中&#xff0c;生产者方法生成一个对象&#xff0c;然后可以将其注入。 当我们要注入本身不是bean的对象&#xff0c;要注入的对象的具体类型在运行时可能有所不同&#xff0c;或者当对象需要一些bean构造函数不执行的自定义初始…

qnap nas web php,如何在QNAP NAS上建立并使用 iSCSI Target

本帖最后由 小Q 于 2015-2-5 13:30 编辑在QNAP Turbo NAS上建立并使用iSCSI Target&#xff0c;快速、便利且便宜建置网络储存系统之方式内容&#xff1a;l 在Windows中使用Microsoft iSCSI启动器来连接iSCSI装置什么是iSCSI且它有什么好处?iSCSI(Internet Small Computer Sy…

openssl php api,PHP7使用openssl解密易班API中的用户数据

PHP7使用openssl解密易班API中的用户数据一、mcrypt扩展解密自从PHP版本更新到了7.1以上以后&#xff0c;mcrypt扩展被废弃&#xff0c;使用mcrypt扩展会出现如下图的报错。只能使用openssl来代替。然而易班轻应用提供的还是旧版本的mcrypt扩展&#xff0c;这将导致php版本升级…

Spring MVC的DispatcherServlet – Java开发人员应该知道的10件事

如果您使用过Spring MVC&#xff0c;那么您应该知道什么是DispatcherServlet&#xff1f; 它实际上是Spring MVC的心脏&#xff0c;确切地说是MVC设计模式或控制器的C语言。 应该由Spring MVC处理的每个Web请求都通过DispatcherServlet处理。 通常&#xff0c;它是Front Contro…

运行时错误7内存溢出_分别从运行时和GC的角度看JAVA8内存管理

运行时区域1.程序计数器程序计数器&#xff08;Program Counter Register&#xff09;是一块较小的内存空间&#xff0c;它可以看作是当前线程所执行的字节码的行号指示器。在虚拟机概念模型里&#xff08;概念模型&#xff0c;各种虚拟机可能会通过一些更高效的方式实现&#…

极域课堂管理系统软件如何取消控制_微缔电子组装业MES系统软件六大功能组成...

电子组装业MES系统软件六大功能组成MES系统软件是制造执行系统的英文简称&#xff0c;MES系统软件在整个企业信息集成系统中承上启下&#xff0c;是生产活动与管理活动信息沟通的桥梁&#xff0c;MES系统软件在产品从工单下发到生产成成品的整个过程中&#xff0c;扮演着促进生…

多个cuda 被单进程沾满_报名 | 提高GPU利用率,听英伟达专家分享这个CUDA工具

随着 NVIDIA GPU 计算性能的不断提升&#xff0c;如何提升 GPU 利用率是开发者普遍关心的问题之一。从 Kepler 架构开始&#xff0c;NVIDIA GPU 支持多个 CUDA kernels 函数的并发执行&#xff0c;称为 Hyper-Q 技术。Hyper-Q 技术支持多个 CUDA streams、多个 CPU threads 或者…

usb转ttl模块与matlab,USB接口转TTL小板的自检测试

现在电脑基本上都不会配置DB9串行数据端口了&#xff0c;这给一些喜欢折腾刷机和单片机加载程序的朋友带来了诸多的不便。还好&#xff0c;随着技术的发展&#xff0c;USB接口转TTL的产品越来越成熟&#xff0c;而这种产品主要以采用PL-2303HX芯片作为主控器的居多&#xff0c;…

matlab 误差椭圆,求3倍标准差误差椭圆分析的程序

根据《白话空间统计之九&#xff1a;方向分布(标准差椭圆)修正版》(有些地方没有理解清楚)&#xff0c;写了下面的程序。但是好像结果不对Zmvnrnd([0.5 1.5], [0.025 0.03 ; 0.03 0.16], 50);XZ(:,1); YZ(:,2);mean_Xnanmean(X); mean_Ynanmean(Y); %椭圆圆心%确定长短半轴…

java ee cdi_Java EE CDI处理程序方法示例

java ee cdi这是CDI Disposer方法的教程。 在CDI中&#xff0c;由于Producer方法生成的对象随后可以注入到应用程序中&#xff0c;因此使用Disposer方法&#xff0c;以便在其工作完成时将其删除。 Disposer方法始终与Producer方法匹配。 Disposer方法使用的一个示例是当应用程…

python皮卡丘编程代码_再接再厉,用python编程13行代码解方程组(纯字符)

因为是示例为主&#xff0c;我们将方程组限制在二元一次方程组&#xff1a;x,y两个变量&#xff0c;两个方程。类似这样&#xff1a;每个方程有两个变量&#xff0c;x和y&#xff0c;形式为&#xff1a;axbycd由于这次有了两个方程&#xff0c;我们提取参数的代码就适合提炼为一…

快速提示:使用Chrome开发工具调试GWT应用程序

调试是软件开发的重要方面。 拥有正确的工具可以节省大量时间和头痛。 在GWT Super Dev模式之前&#xff0c;经典的Dev模式允许使用JVM调试。 开发人员可以在其IDE中设置断点&#xff0c;并使用调试模式来跟踪错误和错误。 现在&#xff0c;在超级开发模式下&#xff0c;情况有…

用matlab做纹理合成,关于图像纹理合成的Matlab例程

纹理是普遍存在的视觉现象&#xff0c;其可以描述地形、植物、矿石、纤维和皮肤等等物体的表面特征。纹理结构在图像中反映其图像像素取值的空间变化情况&#xff0c;这种变化具有某中统计规律&#xff0c;在纹理区域内的各部分具有大致相同的结构。纹理合成是利用计算机产生纹…

matlab评估边缘检测性能,【模糊推理】模糊逻辑图像边缘检测,原理+matlab代码~...

这篇博客是接着上一篇来哒&#xff0c;https://blog.csdn.net/luolan9611/article/details/94285158本篇博客及上篇博客搜集的资料、实验代码、实验报告、PPT均已上传至百度网盘&#xff1a;链接&#xff1a;https://pan.baidu.com/s/1AmT4TtBAxj1FKf4KUFcsBw 提取码&#x…