Feign

目錄

RestTemplate方式調用存在的問題:

定義和使用Feign客戶端

自定義Feign的配置

性能優化

Feign的最佳實踐

Feign的使用步驟:

1、引入依賴
2、添加@EnableFeignClients注解

3、編寫FeignClient接口
4、使用FeignClient中定義的方法代替RestTemplate
?

Feign的日志配置:
1、方式一是配置文件,feign.client.config.xxx.loggerLevel
①如果xxx是default則代表全局
②如果xxx是服務名稱,例如userservice則代表某服務

2、方式二是java代碼配置Logger.Level這個Bean
①如果在@EnableFeignClients注解聲明則代表全局

②如果在@FeignClient注解中聲明則代表某服務
?

Feign的優化:命
1、日志級別盡量用basic
2、使用Httpclient或OKHttp代替URLConnection
????????引入feign-httpClient依賴
????????配置文件開啟httpClient功能,設置連接池參數

Feign的最佳實踐:
1、讓controller和FeignClient繼承同一接口
2、將FeignClient、POJO、Feign的默認配置都定義到一個項目中,供所有消費者使用

不同包的FeignClient的導入有兩種方式:
1、在@EnableFeignClients注解中添加basePackages,指定FeignClient所在的包
2、在@EnableFeignClients注解中添加clients,指定具體Feignclient的字節碼
?

RestTemplate方式調用存在的問題:

string url = "http: //userservice/user/" + order.getUserId();

User user = restTemplate.getFor0bject(url,User.class);

存在下面的問題:
代碼可讀性差,編程體驗不統一
參數復雜URL難以維護

定義和使用Feign客戶端

1.引入依賴:

在orderservice的pom文件引入依賴

<!--feign客戶端依賴-->
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<?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.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><parent><artifactId>cloud-demo</artifactId><groupId>cn.itcast.demo</groupId><version>1.0</version></parent><modelVersion>4.0.0</modelVersion><artifactId>order-service</artifactId><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId></dependency><!--mybatis--><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId></dependency><!--eureka客戶依賴-->
<!--        <dependency>-->
<!--            <groupId>org.springframework.cloud</groupId>-->
<!--            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>-->
<!--        </dependency>--><!-- nacos客戶端依賴包 --><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency><!--feign客戶端依賴--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build>
</project>

2.在order-service的啟動類添加注解開啟Feign的功能:

在orderservice的啟動類中添加注解

@EnableFeignClients
package cn.itcast.order;import com.netflix.loadbalancer.IRule;
import com.netflix.loadbalancer.RandomRule;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.cloud.openfeign.EnableFeignClients;
import org.springframework.context.annotation.Bean;
import org.springframework.web.client.RestTemplate;@MapperScan("cn.itcast.order.mapper")
@SpringBootApplication
@EnableFeignClients
public class OrderApplication {public static void main(String[] args) {SpringApplication.run(OrderApplication.class, args);}//創建RestTemplate并注入Spring容器@Bean@LoadBalancedpublic RestTemplate restTemplate(){return new RestTemplate();}//    @Bean
//    public IRule randomRule(){
//        return new RandomRule();//將負載均衡設置為隨機,范圍為整個order
//    }
}

3.編寫Feign客戶端:

添加一個包,并寫一個接口,再引入客戶端注解FeignClient

package cn.itcast.order.clients;import cn.itcast.order.pojo.User;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;@FeignClient("userservice")
public interface UserClient {@GetMapping("/user/{id}")User findById(@PathVariable("id") Long id);
}

4、改造orderservice的service.java文件,把以前寫的RestTemplate方式換成Feign方式

package cn.itcast.order.service;import cn.itcast.order.clients.UserClient;
import cn.itcast.order.mapper.OrderMapper;
import cn.itcast.order.pojo.Order;
import cn.itcast.order.pojo.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;@Service
public class OrderService {@Autowiredprivate OrderMapper orderMapper;@Autowiredprivate UserClient userClient;public Order queryOrderById(Long orderId) {// 1.查詢訂單Order order = orderMapper.findById(orderId);// 2.用Feign遠程調用// 2.1.url路徑User user = userClient.findById(order.getUserId());// 3.封裝user到orderorder.setUser(user);// 4.返回return order;}//    @Autowired
//    private RestTemplate restTemplate;
//
//    public Order queryOrderById(Long orderId) {
//        // 1.查詢訂單
//        Order order = orderMapper.findById(orderId);
//        // 2.利用RestTemplate發送http請求,查詢用戶
//        // 2.1.url路徑
//        String url = "http://userservice/user/" + order.getUserId();
//        // 2.2.發送http請求,實現遠程調用
//        User user = restTemplate.getForObject(url, User.class);//第一個參數是路徑,第二個參數是返回的類=類型
//        // 3.封裝user到order
//        order.setUser(user);
//        // 4.返回
//        return order;
//    }
}

訪問數據,可以發現:兩個userservice都能訪問,并且是負載均衡

自定義Feign的配置

方式一:配置文件方式,在orderservice的application.yml文件添加
1、全局生效:

feign:client:config:default: #這里填default是全局生效,填服務名就是局部生效loggerLevel: FULL #顯示完整信息
server:port: 8080
spring:datasource:url: jdbc:mysql://localhost:3306/cloud_order?useSSL=falseusername: rootpassword: 1234driver-class-name: com.mysql.jdbc.Driverapplication:name: orderservice #order的微服務名稱cloud:nacos:server-addr: localhost:8848
#      discovery:
#        cluster-name: HZ #集群名稱
#        namespace: 8279562b-ce89-420a-b765-f8b2adfdbe49 #命名空間id
#        ephemeral: false #是否為臨時實例
mybatis:type-aliases-package: cn.itcast.user.pojoconfiguration:map-underscore-to-camel-case: true
logging:level:cn.itcast: debugpattern:dateformat: MM-dd HH:mm:ss:SSS
#eureka:
#  client:
#    service-url: #eureka地址信息1
#      defaultZone: http://127.0.0.1:10086/eureka
userservice:ribbon:NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule #負載均衡規則:隨機。范圍:userservice服務
ribbon:eager-load:enabled: true #開啟饑餓加載clients:  #指定饑餓加載的服務- userservice
feign:client:config:default: #這里填default是全局生效,填服務名就是局部生效loggerLevel: FULL  #顯示完整信息

?可以看到只是訪問一次數據,就有很多信息

2、局部生效:?

feign:client:config:userservice: #這里填default是全局生效,填服務名就是局部生效loggerLevel: FULL #顯示完整信息

方式二: java代碼方式,需要先聲明一個Bean:

先把方式一的代碼注釋掉

#feign:
#  client:
#    config:
#      default: #這里填default是全局生效,填服務名就是局部生效
#        loggerLevel: FULL #顯示完整信息

server:port: 8080
spring:datasource:url: jdbc:mysql://localhost:3306/cloud_order?useSSL=falseusername: rootpassword: 1234driver-class-name: com.mysql.jdbc.Driverapplication:name: orderservice #order的微服務名稱cloud:nacos:server-addr: localhost:8848
#      discovery:
#        cluster-name: HZ #集群名稱
#        namespace: 8279562b-ce89-420a-b765-f8b2adfdbe49 #命名空間id
#        ephemeral: false #是否為臨時實例
mybatis:type-aliases-package: cn.itcast.user.pojoconfiguration:map-underscore-to-camel-case: true
logging:level:cn.itcast: debugpattern:dateformat: MM-dd HH:mm:ss:SSS
#eureka:
#  client:
#    service-url: #eureka地址信息1
#      defaultZone: http://127.0.0.1:10086/eureka
userservice:ribbon:NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule #負載均衡規則:隨機。范圍:userservice服務
ribbon:eager-load:enabled: true #開啟饑餓加載clients:  #指定饑餓加載的服務- userservice
#feign:
#  client:
#    config:
#      default: #這里填default是全局生效,填服務名就是局部生效
#        loggerLevel: FULL #顯示完整信息

先添加一個包config,再添加一個DefaultFeignConfiguration.java

 
package cn.itcast.order.config;import feign.Logger;
import org.springframework.context.annotation.Bean;public class DefaultFeignConfiguration {@Beanpublic Logger.Level logLevel(){return Logger.Level.BASIC;}
}

1、如果是全局配置,則把它放到@EnableFeignClients這個注解中:

@EnableFeignClients(defaultConfiguration = FeignclientConfiguration.class)

添加在啟動類上:

package cn.itcast.order;import cn.itcast.order.config.DefaultFeignConfiguration;
import com.netflix.loadbalancer.IRule;
import com.netflix.loadbalancer.RandomRule;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.cloud.openfeign.EnableFeignClients;
import org.springframework.context.annotation.Bean;
import org.springframework.web.client.RestTemplate;@MapperScan("cn.itcast.order.mapper")
@SpringBootApplication
@EnableFeignClients(defaultConfiguration = DefaultFeignConfiguration.class)
public class OrderApplication {public static void main(String[] args) {SpringApplication.run(OrderApplication.class, args);}//創建RestTemplate并注入Spring容器@Bean@LoadBalancedpublic RestTemplate restTemplate(){return new RestTemplate();}//    @Bean
//    public IRule randomRule(){
//        return new RandomRule();//將負載均衡設置為隨機,范圍為整個order
//    }
}

請求數據,可以看到比起方式一,這種方式的信息簡潔許多。因為第一種方式用的FULL,而第二種方式是BASIC

2、如果是局部配置,則把它放到@FeignClient這個注解中:

@FeignClient(value = "userservice", configuration = FeignClientConfiguration.class)?

添加在UserClient.interface上,這里就不再做演示了。

性能優化

Feign添加HttpClient的支持:

引入依賴

<!--引入httpClient依賴-->
<dependency><groupId>io.github.openfeign</groupId><artifactId>feign-httpclient</artifactId>
</dependency>

配置連接池

feign:httpclient:enabled: true #支持httpclient的開關max-connections: 200 #最大連接數max-connections-per-route: 50 #單個請求路徑的最大連接數
server:port: 8080
spring:datasource:url: jdbc:mysql://localhost:3306/cloud_order?useSSL=falseusername: rootpassword: 1234driver-class-name: com.mysql.jdbc.Driverapplication:name: orderservice #order的微服務名稱cloud:nacos:server-addr: localhost:8848
#      discovery:
#        cluster-name: HZ #集群名稱
#        namespace: 8279562b-ce89-420a-b765-f8b2adfdbe49 #命名空間id
#        ephemeral: false #是否為臨時實例
mybatis:type-aliases-package: cn.itcast.user.pojoconfiguration:map-underscore-to-camel-case: true
logging:level:cn.itcast: debugpattern:dateformat: MM-dd HH:mm:ss:SSS
#eureka:
#  client:
#    service-url: #eureka地址信息1
#      defaultZone: http://127.0.0.1:10086/eureka
userservice:ribbon:NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule #負載均衡規則:隨機。范圍:userservice服務
ribbon:eager-load:enabled: true #開啟饑餓加載clients:  #指定饑餓加載的服務- userservice
feign:httpclient:enabled: true #支持httpclient的開關max-connections: 200 #最大連接數max-connections-per-route: 50 #單個請求路徑的最大連接數

Feign的最佳實踐

方式一(繼承)︰給消費者的FeignClient和提供者的controller定義統一的父接口作為標準。

方式二(抽取)︰將FeignClient抽取為獨立模塊,并且把接口有關的POJO、默認的Feign配置都放到這個模塊中,提供給所有消費者使用

這里我只實現方式二

1.首先創建一個module,命名為feign-api,然后引入feign的starter依賴

<!--引入feign依賴-->
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>

<?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.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><parent><artifactId>cloud-demo</artifactId><groupId>cn.itcast.demo</groupId><version>1.0</version></parent><modelVersion>4.0.0</modelVersion><artifactId>feign-api</artifactId><properties><maven.compiler.source>8</maven.compiler.source><maven.compiler.target>8</maven.compiler.target></properties><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId></dependency></dependencies></project>

2.將order-service中編寫的UserClient、User、DefaultFeignConfiguration都剪切到feign-api項目中

因為這些代碼移到其他模塊了,所以會報錯

①UserClient的User報錯,重新導包,用feign包內的User

②Orderservice的Order依賴User報錯,在pom文件引入依賴,并重新導包,用feign模塊的包

<!--引入feign的統一依賴-->
<dependency><groupId>cn.itcast.demo</groupId><artifactId>feign-api</artifactId><version>1.0</version>
</dependency>
<?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.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><parent><artifactId>cloud-demo</artifactId><groupId>cn.itcast.demo</groupId><version>1.0</version></parent><modelVersion>4.0.0</modelVersion><artifactId>order-service</artifactId><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId></dependency><!--mybatis--><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId></dependency><!--eureka客戶依賴-->
<!--        <dependency>-->
<!--            <groupId>org.springframework.cloud</groupId>-->
<!--            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>-->
<!--        </dependency>--><!-- nacos客戶端依賴包 --><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency><!--feign客戶端依賴--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId></dependency><!--引入httpClient依賴--><dependency><groupId>io.github.openfeign</groupId><artifactId>feign-httpclient</artifactId></dependency><!--引入feign的統一依賴--><dependency><groupId>cn.itcast.demo</groupId><artifactId>feign-api</artifactId><version>1.0</version></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build>
</project>

③Orderservice的Orderservice報錯,重新導入feign模塊下的包

④Orderservice的啟動類報錯,導入feign模塊的包

⑤當定義的FeignClient不在SpringBootApplication的掃描包范圍時,這些FeignClient無法使用。

有兩種方式解決:

方式一:指定FeignClient所在包

@EnableFeignclients(basePackages = "cn.itcast.feign.clients")

方式二:指定Feignclient字節碼

@EnableFeignclients(clients = {Userclient.class})?

在order的啟動類的EnableFeignclients加一個屬性

@EnableFeignClients(clients = UserClient.class, defaultConfiguration = DefaultFeignConfiguration.class)

我這里使用第一個方式?

package cn.itcast.order;import cn.itcast.feign.clients.UserClient;
import cn.itcast.feign.config.DefaultFeignConfiguration;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.cloud.openfeign.EnableFeignClients;
import org.springframework.context.annotation.Bean;
import org.springframework.web.client.RestTemplate;@MapperScan("cn.itcast.order.mapper")
@SpringBootApplication
@EnableFeignClients(clients = UserClient.class, defaultConfiguration = DefaultFeignConfiguration.class)
public class OrderApplication {public static void main(String[] args) {SpringApplication.run(OrderApplication.class, args);}//創建RestTemplate并注入Spring容器@Bean@LoadBalancedpublic RestTemplate restTemplate(){return new RestTemplate();}//    @Bean
//    public IRule randomRule(){
//        return new RandomRule();//將負載均衡設置為隨機,范圍為整個order
//    }
}

訪問數據,請求成功
代碼文件點擊下載icon-default.png?t=N7T8https://pan.baidu.com/s/1GooYipFzcnCyubANjf5S6Q?pwd=vpea上一篇:Nacos配置管理

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/164334.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/164334.shtml
英文地址,請注明出處:http://en.pswp.cn/news/164334.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

什么是遷移學習

1 遷移學習概述 遷移學習&#xff08;Transfer Learning&#xff09;是機器學習中的一種方法&#xff0c;它允許模型將從一個任務中學到的知識應用到另一個相關的任務中。這種方法在數據稀缺的情況下尤為有用&#xff0c;因為它減少了對大量標記數據的需求。遷移學習已成為深度…

Node使用Nvm安裝雙版本切換(node兩個版本同時用怎么辦?不同的項目Node版本要求不一樣怎么辦?)

先把node.js卸載 開始—>添加刪除程序—>node npm -v node -v //檢查是否還存在&#xff0c;卸載成功就行了NVM下載 github下載 百度網盤下載 打開安裝包以管理員身份安裝&#xff0c;要是記得這個路徑并且必須全是英文 使用nvm安裝兩個使用的node版本 cmd以管理員…

計算機組成原理2

1.浮點數 2.IEEE 754 3.存儲器的性能指標 4.存儲器的層次化結構 主存類似手機運行內存8g &#xff0c;輔存類似手機內存128g.... 輔存必須先通過主存才能被cpu接收&#xff0c;就例如微信打開那個月亮小人界面兩三秒就是主存在讀取輔存的程序然后被cpu接收運行。 5.主存儲…

Greenplum的數據庫年齡檢查處理

概述 Greenplum是基于Postgresql數據庫的分布式數據庫&#xff0c;而PG數據庫在事務及多版本并發控制的實現方式上很特別&#xff0c;采用的是遞增事務id的方法&#xff0c;事務id大的事務&#xff0c;認為比較新&#xff0c;反之事務id小&#xff0c;認為比較舊。 事務id的上…

經典的回溯算法題leetcode組合問題整理及思路代碼詳解

目錄 組合問題 leetcode77題.組合 leetcode216題.組合總和III leetcode40題.組合總和II leetcode39題.組合總和 倘若各位不太清楚回溯算法可以去看我上一篇文章。 回溯算法詳解-CSDN博客 組合問題 一般組合和排列類的問題我們都會轉化成一個樹形問題&#xff0c;更便于…

26. 刪除有序數組中的重復項(remove-duplicates-from-sorted-array)

26. 刪除有序數組中的重復項(remove-duplicates-from-sorted-array) 給你一個 非嚴格遞增排列 的數組 nums &#xff0c;請你** 原地** 刪除重復出現的元素&#xff0c;使每個元素 只出現一次 &#xff0c;返回刪除后數組的新長度。元素的 相對順序 應該保持 一致 。然后返回 …

批量創建表空間數據文件(DM8:達夢數據庫)

DM8:達夢數據庫 - - 批量創建表空間數據文件 環境介紹1 批量創建表空間SQL2 達夢數據庫學習使用列表 環境介紹 在某些場景(分區表子表)需要批量創建表空間,給不同的表使用,以下代碼是批量創建表空間的SQL語句; 1 批量創建表空間SQL --創建 24個數據表空間,每個表空間有3個數…

強化學習小筆記 —— 如何選擇合適的更新步長

在強化學習中&#xff0c;動作價值函數的更新可以使用增量法&#xff0c;如下所示&#xff1a; Q k 1 k ∑ i 1 k r i 1 k ( r k ∑ i 1 k ? 1 r i ) 1 k ( r k ( k ? 1 ) Q k ? 1 ) 1 k ( r k k Q k ? 1 ? Q k ? 1 ) Q k ? 1 1 k [ r k ? Q k ? 1 ] \beg…

Linux寶塔面板搭建Discuz論壇, 并內網穿透實現公網訪問

Linux寶塔面板搭建Discuz論壇&#xff0c; 并內網穿透實現公網訪問 文章目錄 Linux寶塔面板搭建Discuz論壇&#xff0c; 并內網穿透實現公網訪問前言1.安裝基礎環境2.一鍵部署Discuz3.安裝cpolar工具4.配置域名訪問Discuz5.固定域名公網地址6.配置Discuz論壇 &#x1f4f7; 江池…

低代碼平臺推薦:五大低代碼廠商誰的模式更“合適”

隨著數字化時代的到來&#xff0c;低代碼開發平臺作為提高數字生產力的工具正受到越來越多企業的關注&#xff0c;市面上的低代碼產品和廠商更是“亂花漸欲迷人眼”。 各家產品不僅功能各有不同&#xff0c;甚至商機都有區別的情況&#xff0c;如何做好產品選型已然成了采購企…

C語言——指針(一)

&#x1f4dd;前言 這篇文章主要帶大家初步認識一下指針&#xff0c;供大家理解參考。 主要歸納與講解&#xff1a; 1&#xff0c;指針與指針變量 2&#xff0c;指針的基本使用&#xff08;如何定義&#xff0c;初始化&#xff0c;引用&#xff09; &#x1f3ac;個人簡介&…

計算方法 期末總結

思維導圖 緒論 算法的性質&#xff1a; 有窮性、確切性、有輸入輸出、可行性 算法的描述方法&#xff1a; 自然語言、偽代碼、流程圖、N-S流程圖 算法設計思想&#xff1a; 化大為小的縮減技術&#xff1a;二分法化難為易的校正技術&#xff1a;開方法化粗為精的松弛技術&a…

無需公網IP,使用內網穿透實現公網訪問本地OpenWRT管理界面

文章目錄 1.openWRT安裝cpolar2.配置遠程訪問地址3.固定公網地址 簡單幾步實現在公網環境下遠程訪問openWRT web 管理界面&#xff0c;使用cpolar內網穿透創建安全隧道映射openWRT web 界面面板443端口&#xff0c;無需公網IP&#xff0c;無需設置路由器。 1.openWRT安裝cpola…

SpringBoot使用ObjectMapper之Long和BigDemical類型的屬性字符串處理,防止前端丟失數值精度

SpringBoot使用ObjectMapper之Long和BigDemical類型的屬性字符串處理&#xff0c;防止前端丟失數值精度! 方式一&#xff1a;注解 使用注解 JsonFormat(shape JsonFormat.Shape.STRING)&#xff0c;如下&#xff1a; import com.fasterxml.jackson.annotation.JsonFormat; …

在arm 64 環境下使用halcon算法

背景&#xff1a; halcon&#xff0c;機器視覺領域神一樣得存在&#xff0c;在windows上&#xff0c;應用得特別多&#xff0c; 但是arm環境下使用得很少。那如何在arm下使用halcon呢。按照官方說明&#xff0c;arm下只提供了運行時環境&#xff0c;并且需要使用價值一萬多人民…

設計高手的秘密武器:5款讓平面作品更出彩的軟件

平面設計是一種迷人而多樣化的藝術形式&#xff0c;它結合了顏色、形狀、排版和創造力&#xff0c;通過圖像和文本傳達信息。市場上有各種各樣的平面設計軟件&#xff0c;選擇合適的設計軟件是成為優秀設計師的重要一步。為了降低軟件成本&#xff0c;大多數設計師會優先使用免…

編譯原理之LL(1)語法分析實驗(附完整C/C++代碼與測試)

一、實驗內容與要求 先從鍵盤讀入要分析的文法&#xff0c;由程序自動構造FIRST、FOLLOW 集以及SELECT集合&#xff0c;判斷是否為LL (1)文法。 分析文法為G[E]&#xff1a; &#xff08;0&#xff09;E→ TE’ &#xff08;1&#xff09;E’→ TE’ &#xff08;2&#xff…

軟件開發王者搭配:80%低代碼+20%高代碼

數字化領域從來不缺新概念&#xff0c;前兩年市場大談云原生、技術中臺、業務中臺等概念&#xff0c;企業更多聚焦在業務與IT架構的升級。而這兩年&#xff0c;隨著低代碼、生成式AI的盛行&#xff0c;大家則開始挖掘數字化應用的低成本建設模式。 在過去&#xff0c;開發一套系…

Linux 是否被過譽了?

Linux 是否被過譽了&#xff1f; 有些人眼里&#xff0c;電腦這種東西就應該是華麗麗的桌面&#xff0c;手握鼠標戳戳按鈕&#xff0c;鍵盤只為偶爾打打字&#xff0c;仿佛windows式的桌面形式才是理所應當&#xff0c;GUI才是理所應當&#xff0c;x86才是理所應當&#xff0c…

使用 NVProf 檢測 CUDA kernel 的 bank conflict

使用 NVProf 檢測 CUDA kernel 的 bank conflict NVProf 指令 使用 NVProf 可以對 bank conflict 進行檢測: nvprof --events shared_ld_bank_conflict,shared_st_bank_conflict <app> [args...]其中: --events 選項指定的 shared_ld_bank_conflict,shared_st_bank_c…