最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Node.js調(diào)用java之node-java問題

 更新時間:2023年10月31日 14:56:12   作者:我啥都會  
這篇文章主要介紹了Node.js調(diào)用java之node-java問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

故事的起源是這樣:

項目中用ioredis封裝的模塊,在定時、大數(shù)據(jù)量寫入redis的情況下,內(nèi)存激增,如果不是我對ioredis使用姿勢有問題的話,那么就是在這種苛刻的情況下,node招架不住了,然后自然想到了jedis,官方推薦的redis的java客戶端,大廠、線上都在大量使用,生態(tài)也非常的好。

對于我們要在node中調(diào)用java,則基本需求是

(1)、java封裝接口,到處jar,node調(diào)用jar中的接口,傳參拿值;

(2)另一種比較少用,因為通用性不強,node中chilld_process運行jar包,當然jar中需要有java主函數(shù),然后就在另一個線程中運行起來了,就沒node什么事情了。

本文主要講的是第一種需求,因為這才是通用的使用方法。

1、環(huán)境搭建

nodejs基本環(huán)境是自然的了。

(1)安裝java(jdk、jre),自行百度,并配置環(huán)境變量;

(2)安裝python2版本;

(3)全局安裝node-gyp;

npm/cnpm i -g node-gyp

(4)全局安裝window-build-tools;(由于下載下來的模塊需要編譯,所以需要這個工具,如果你本身安裝了vs,就不需要這個東西,能自動檢測到)

npm i --g --production windows-build-tools 

(5)安裝node-java模塊;

雖然叫node-java,但模塊本身是java

cnpm i java

如果(1)~(3)你都配置好了,然后在vscode中運行npm i java時還是出錯的話,良好的建議,打開控制臺運行,vscode可能存在一些權(quán)限問題,至少我遇見過這樣的事情,然后按照這種方法就成功了。

2、導出jar包

我使用的時idea,其實各種ide都一個樣,都能搞,這里說一下基本步驟:

(1)創(chuàng)建一個java project

(2) 導入相關(guān)jar包(Jedis為例)

新建一個jar文件夾,將jars放進去,然后導入項目;

導入jar,點擊項目結(jié)構(gòu)進入

然后選擇剛剛放置好的jars,點擊勾選,確認即可

然后可以開發(fā)接口了,這里簡單一個寫入redis的接口

package com.company;
 
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
import redis.clients.jedis.Pipeline;
 
public class JedisTool {
    private Pipeline pl = null;
    private JedisPoolConfig poolConfig = null;
    private Jedis jr = null;
    private JedisPool jedisPool = null;
 
    public void initJedis() {
        this.poolConfig = new JedisPoolConfig();
        // 最大連接數(shù)
        this.poolConfig.setMaxTotal(4);
        // 最大空閑數(shù)
        this.poolConfig.setMaxIdle(1);
        // 最大允許等待時間
        this.poolConfig.setMaxWaitMillis(2000);
        //獲得連接池
        this.jedisPool = new JedisPool(poolConfig,"127.0.0.1",6379);
 
        this.jr = this.jedisPool.getResource();
 
        this.pl = this.jr.pipelined();
    }
 
    public void usePipeline(int count) {
        try{
            for(int i=0;i<count;i++) {
                this.pl.set("abcdefgh" + Integer.toString(i), "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz" + Integer.toString(i));
            }
            this.pl.sync();
        }catch (Exception e){
            e.printStackTrace();
        }finally {
 
        }
    }
 
    public Jedis getClient(){
        return this.jedisPool.getResource();
    }
}

接下來點擊項目結(jié)構(gòu)--》Artifact,點擊左上加號--》form modules with dependencies

填寫主類,這里改成接口類也是可以的(手動改,無法選擇接口類)、點擊完成、然后點擊build--》build artifacts--》build

然后再項目中的out文件夾就生成了jar包。

3、nodejs調(diào)用jar

直接看代碼吧,這里只是很簡單的,但很實用。 

let java = require("java"); //引入nodejs的java模塊
 
java.classpath.push("./testJedis.jar"); //導入編寫的jar包
 
let JedisTool = java.import('com.company.JedisTool'); //package.class
 
let jedisTool = new JedisTool();
 
jedisTool.initJedis();  //方法調(diào)用
 
setInterval(() => {
 
  jedisTool.usePipeline(100000);
 
}, 1000);

還有很多使用方法,這里不一一列出了,有了node的java模塊,你也可以在node中進行java開發(fā)了。

node-java文檔 ,官方文檔很詳細,我雖然英語好,但是也是實在讀不下去,挑自己感興趣的學習即可。

4、心得

本文簡單記錄了node調(diào)用java的方法,在生產(chǎn)項目中會增加許多可能,因為優(yōu)秀的接口我們都值得使用,不管他是java還是c++。

這個過程中有幾點注意事項:

(1)java模塊的依賴問題,換臺電腦還能不能用之類的事情,最起碼要運行的機器需要java環(huán)境;

(2)高版本編譯的jar,裝有低版本java的node調(diào)用jar會報錯;

(3)openJDK能否正常調(diào)用等待明天驗證;

(4)jar不能在nodejs的多線程使用,這個問題有待研究。

5、后續(xù)驗證

(1)java模塊的依賴問題,換臺電腦還能不能用之類的事情,最起碼要運行的機器需要java環(huán)境;

這一點在其他機器上(windows)只需要安裝同版本的java環(huán)境,并且將jvm.dll的路徑添加到環(huán)境變量path中即可。

(2)openJDK能否正常調(diào)用(可以);

由于nodejs安裝java模塊的時候需要編譯且生唉成了一個.node,而.node并不跨平臺,所以需要重新編譯,在linux下使用java模塊同樣需要編譯(java、javac、node-gyp,g++...)。

但是linux有些系統(tǒng)只安裝了java,并沒有安裝javac,所以需要安裝javac,重新編譯java模塊源碼。

然后就可以愉快的使用了。

(3)開啟多線程,只能有一個線程運行我們封裝的jar包;

經(jīng)過驗證,確實如此,查看官網(wǎng),說是只能創(chuàng)建一個jvm,線程同屬于一個進程,所以之。

突然又會想到,那多進程呢,理論上是可以的,驗證之后確實如此,進程之間相互隔離,所以可以創(chuàng)建多個jvm。

6、補充

中標麒麟下運行node調(diào)用java的注意事項

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • express的中間件basicAuth詳解

    express的中間件basicAuth詳解

    這篇文章主要介紹了node.js中express的中間件basicAuth的使用方法,需要的朋友可以參考下
    2014-12-12
  • Node.js實現(xiàn)用戶身份驗證和授權(quán)的示例代碼

    Node.js實現(xiàn)用戶身份驗證和授權(quán)的示例代碼

    在web開發(fā)中,我們常常需要對一些敏感的url進行訪問權(quán)限控制,本文主要介紹了Node.js實現(xiàn)用戶身份驗證和授權(quán)的示例代碼,具有一定的參考價值,感興趣的了解一下
    2024-02-02
  • 手寫Node靜態(tài)資源服務器的實現(xiàn)方法

    手寫Node靜態(tài)資源服務器的實現(xiàn)方法

    這篇文章主要介紹了手寫Node靜態(tài)資源服務器的實現(xiàn)方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-03-03
  • 淺談Node新版本13.2.0正式支持ES Modules特性

    淺談Node新版本13.2.0正式支持ES Modules特性

    這篇文章主要介紹了淺談Node新版本13.2.0正式支持ES Modules特性,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-11-11
  • node.js 使用 net 模塊模擬 websocket 握手進行數(shù)據(jù)傳遞操作示例

    node.js 使用 net 模塊模擬 websocket 握手進行數(shù)據(jù)傳遞操作示例

    這篇文章主要介紹了node.js 使用 net 模塊模擬 websocket 握手進行數(shù)據(jù)傳遞操作,結(jié)合實例形式分析了node.js基于net模塊模擬 websocket握手相關(guān)原理及進行數(shù)據(jù)傳遞具體操作技巧,需要的朋友可以參考下
    2020-02-02
  • 詳解PNPM?Monorepo依賴項管理功能模擬實現(xiàn)

    詳解PNPM?Monorepo依賴項管理功能模擬實現(xiàn)

    這篇文章主要介紹了PNPM?Monorepo依賴項管理功能模擬實現(xiàn)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-03-03
  • 手把手帶你搭建一個node cli的方法示例

    手把手帶你搭建一個node cli的方法示例

    這篇文章主要介紹了手把手帶你搭建一個node cli的方法示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-08-08
  • Nodejs學習筆記之測試驅(qū)動

    Nodejs學習筆記之測試驅(qū)動

    本文是本系列文章的第二篇,主要是測試針對于web后端的驅(qū)動,在開發(fā)過程中,在開發(fā)完成一段代碼后如果負責任而不是說完全把問題交給測試人員去發(fā)現(xiàn)的話,這個時候通常都會去做一些手動的測試。
    2015-04-04
  • 淺談node如何優(yōu)雅地獲取mac系統(tǒng)版本

    淺談node如何優(yōu)雅地獲取mac系統(tǒng)版本

    這篇文章主要和大家聊聊node如何優(yōu)雅地獲取mac系統(tǒng)版本,文中有詳細的代碼示例和流程步驟,對我們學習或工作有一定的幫助,需要的朋友可以參考下
    2023-06-06
  • node.js中npm下載依賴包報錯解決步驟詳解

    node.js中npm下載依賴包報錯解決步驟詳解

    本文給大家介紹node.js中npm下載依賴包報錯解決步驟,本文分步驟給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2025-10-10

最新評論

上杭县| 大城县| 锡林浩特市| 长沙县| 东明县| 乳源| 苍山县| 治多县| 油尖旺区| 商水县| 醴陵市| 郎溪县| 红河县| 琼结县| 上思县| 漳州市| 江西省| 荆州市| 九台市| 桐乡市| 沁阳市| 扬州市| 肇源县| 前郭尔| 邯郸县| 甘洛县| 井冈山市| 修武县| 河东区| 玉林市| 涿州市| 荆门市| 霍林郭勒市| 保康县| 陕西省| 葫芦岛市| 凤庆县| 邵东县| 敦煌市| 龙泉市| 镇远县|