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

springboot遠(yuǎn)程執(zhí)行服務(wù)器指令

 更新時(shí)間:2023年09月22日 10:58:39   作者:愛劉溫柔的小豬  
這篇文章主要介紹了springboot遠(yuǎn)程執(zhí)行服務(wù)器指令,本例是java遠(yuǎn)程連接到服務(wù)器,去抓取查詢kubesphere中的etcd日志,并返回,需要的朋友可以參考下

本例是java遠(yuǎn)程連接到服務(wù)器,去抓取查詢kubesphere中的etcd日志,并返回。步驟拆分:

  • 連接到服務(wù)器
  • 執(zhí)行指令獲取pod信息:kubectl get po -n kubesphere-system
  • 將pod信息分割,只返回pod名稱
  • 根據(jù)pod名稱,執(zhí)行指令獲取pod日志:kubectl logs -n kubesphere-system "+podName + "
  • –tail=500

1、在工程中引入下方依賴

<dependency>
			<groupId>ch.ethz.ganymed</groupId>
			<artifactId>ganymed-ssh2</artifactId>
			<version>build210</version>
		</dependency>

2、編寫連接命令工具類KubeSphereSSHUtils

import ch.ethz.ssh2.Connection;
import ch.ethz.ssh2.Session;
import ch.ethz.ssh2.StreamGobbler;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
@Component
public class KubeSphereSSHUtils {
    private String hostname;
    private String username;
    private String password;
    public void setHostname(String hostname) {
        this.hostname = hostname;
    }
    public void setUsername(String username) {
        this.username = username;
    }
    public void setPassword(String password) {
        this.password = password;
    }
    private static Logger log = LoggerFactory.getLogger(KubeSphereSSHUtils.class);
    public Connection sshConnection() {
        Connection sshConn = null;
        try {
            sshConn = new Connection(hostname);
            sshConn.connect();
            boolean isAuthenticate = sshConn.authenticateWithPassword(username, password);
            if(isAuthenticate == false) {
                throw new IOException("連接到指定環(huán)境失敗");
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        return sshConn;
    }
    //獲取發(fā)布的日志的容器名
    public List<String> getReleasePod(String nameSpaceName, String containName) {
        Connection conn = this.sshConnection();
        Session sess = null;
        InputStream is = null;
        InputStreamReader inputStreamReader = null;
        BufferedReader reader = null;
        try {
            sess = conn.openSession();
            String str = " kubectl get po  -n "+nameSpaceName;
            log.info("執(zhí)行指令:"+str);
            sess.execCommand(str);
            is = new StreamGobbler(sess.getStdout());
            inputStreamReader = new InputStreamReader(is);
            reader = new BufferedReader(inputStreamReader);
            boolean flg = true;
            List<String> names = new ArrayList<String>();
            while(flg) {
                String line = reader.readLine();
                if(StringUtils.isEmpty(line)) {
                    break;
                }
                if(line.startsWith(containName)){
                    names.add(line.split("\\s+")[0]);
                }
            }
            return names;
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                conn.close();
                sess.close();
                reader.close();
                inputStreamReader.close();
                is.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return null;
    }
    //獲取pod內(nèi)部日志
    public  List<String> getReleaseLogs(String nameSpaceName,String podName, String deploymentName){
        Connection conn = this.sshConnection();
        Session sess = null;
        InputStream is = null;
        InputStreamReader inputStreamReader = null;
        BufferedReader reader = null;
        try {
            sess = conn.openSession();
            String execCommand = "kubectl logs -n "+nameSpaceName+" "+podName + " --tail=500";
//            String execCommand = "kubectl logs -n "+nameSpaceName+" "+podName + " --tailssss=500";
            log.info("執(zhí)行指令:"+execCommand);
            sess.execCommand(execCommand);
            is = new StreamGobbler(sess.getStdout());
            inputStreamReader = new InputStreamReader(is);
            reader = new BufferedReader(inputStreamReader);
            boolean flg = true;
            List<String> logs = new ArrayList<String>();
            while(flg) {
                String line = reader.readLine();
                if(line == null) {
                    break;
                }
                logs.add(line);
            }
            return logs;
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                reader.close();
                inputStreamReader.close();
                is.close();
                conn.close();
                sess.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return null;
    }
    //獲取pod內(nèi)部日志
    public  List<String> getKubeletLogs(){
        Connection conn = this.sshConnection();
        Session sess = null;
        InputStream is = null;
        InputStreamReader inputStreamReader = null;
        BufferedReader reader = null;
        try {
            sess = conn.openSession();
            String execCommand = "systemctl status kubelet";
            log.info("執(zhí)行指令:"+execCommand);
            sess.execCommand(execCommand);
            is = new StreamGobbler(sess.getStdout());
            inputStreamReader = new InputStreamReader(is);
            reader = new BufferedReader(inputStreamReader);
            boolean flg = true;
            List<String> logs = new ArrayList<String>();
            while(flg) {
                String line = reader.readLine();
                if(line == null) {
                    break;
                }
                logs.add(line);
            }
            return logs;
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                reader.close();
                inputStreamReader.close();
                is.close();
                conn.close();
                sess.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return null;
    }
    public List<String> getNodesStatus() {
        Connection conn = this.sshConnection();
        Session sess = null;
        InputStream is = null;
        InputStreamReader inputStreamReader = null;
        BufferedReader reader = null;
        try {
            sess = conn.openSession();
            String execCommand = "kubectl get nodes";
            log.info("執(zhí)行指令:"+execCommand);
            sess.execCommand(execCommand);
            is = new StreamGobbler(sess.getStdout());
            inputStreamReader = new InputStreamReader(is);
            reader = new BufferedReader(inputStreamReader);
            boolean flg = true;
            List<String> logs = new ArrayList<String>();
            while(flg) {
                String line = reader.readLine();
                if(line == null) {
                    break;
                }
                logs.add(line);
            }
            return logs;
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                reader.close();
                inputStreamReader.close();
                is.close();
                conn.close();
                sess.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return null;
    }
    public List<String> getNoReadyNodeMessage() {
        Connection conn = this.sshConnection();
        Session sess = null;
        InputStream is = null;
        InputStreamReader inputStreamReader = null;
        BufferedReader reader = null;
        try {
            sess = conn.openSession();
//            String execCommand = "kubectl get nodes | grep NotReady | awk '{print$1}'";
            String execCommand = "kubectl get nodes | grep Ready | awk '{print$1}'";
            log.info("執(zhí)行指令:"+execCommand);
            sess.execCommand(execCommand);
            is = new StreamGobbler(sess.getStdout());
            inputStreamReader = new InputStreamReader(is);
            reader = new BufferedReader(inputStreamReader);
            boolean flg = true;
            List<String> logs = new ArrayList<String>();
            while(flg) {
                String line = reader.readLine();
                if(line == null) {
                    break;
                }
                logs.add(line);
            }
            return logs;
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                reader.close();
                inputStreamReader.close();
                is.close();
                conn.close();
                sess.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return null;
    }
    public List<String> restartKubelet() {
        Connection conn = this.sshConnection();
        Session sess = null;
        InputStream is = null;
        InputStreamReader inputStreamReader = null;
        BufferedReader reader = null;
        try {
            sess = conn.openSession();
            String execCommand = "systemctl restart kubelet.service";
            log.info("執(zhí)行指令:"+execCommand);
            sess.execCommand(execCommand);
            is = new StreamGobbler(sess.getStdout());
            inputStreamReader = new InputStreamReader(is);
            reader = new BufferedReader(inputStreamReader);
            boolean flg = true;
            List<String> logs = new ArrayList<String>();
            while(flg) {
                String line = reader.readLine();
                if(line == null) {
                    break;
                }
                logs.add(line);
            }
            return logs;
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                reader.close();
                inputStreamReader.close();
                is.close();
                conn.close();
                sess.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return null;
    }
    public List<String> getNodeIPMessage() {
        Connection conn = this.sshConnection();
        Session sess = null;
        InputStream is = null;
        InputStreamReader inputStreamReader = null;
        BufferedReader reader = null;
        try {
            sess = conn.openSession();
            String execCommand = "hostname -i";
            sess.execCommand(execCommand);
            is = new StreamGobbler(sess.getStdout());
            inputStreamReader = new InputStreamReader(is);
            reader = new BufferedReader(inputStreamReader);
            boolean flg = true;
            List<String> logs = new ArrayList<String>();
            while(flg) {
                String line = reader.readLine();
                if(line == null) {
                    break;
                }
                logs.add(line);
            }
            return logs;
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                reader.close();
                inputStreamReader.close();
                is.close();
                conn.close();
                sess.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return null;
    }
    //重啟node機(jī)器,慎用?。。。。?!
    public List<String> rebootNode() {
        Connection conn = this.sshConnection();
        Session sess = null;
        InputStream is = null;
        InputStreamReader inputStreamReader = null;
        BufferedReader reader = null;
        try {
            sess = conn.openSession();
            String execCommand = "systemctl reboot";
            sess.execCommand(execCommand);
            is = new StreamGobbler(sess.getStdout());
            inputStreamReader = new InputStreamReader(is);
            reader = new BufferedReader(inputStreamReader);
            boolean flg = true;
            List<String> logs = new ArrayList<String>();
            while(flg) {
                String line = reader.readLine();
                if(line == null) {
                    break;
                }
                logs.add(line);
            }
            return logs;
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                reader.close();
                inputStreamReader.close();
                is.close();
                conn.close();
                sess.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return null;
    }
}

3、編寫配置連接類

@Component
public class DeployUtil {
    private KubeSphereSSHUtils sshUtilsDev;
    private KubeSphereSSHUtils sshUtilsRelease;
    private KubeSphereSSHUtils sshUtilsProd;
    private KubeSphereSSHUtils sshUtilsDev_node1;
    private KubeSphereSSHUtils sshUtilsDev_node2;
    private KubeSphereSSHUtils sshUtilsDev_node3;
    private KubeSphereSSHUtils sshUtilsDev_node4;
    private KubeSphereSSHUtils sshUtilsRelease_node1;
    private KubeSphereSSHUtils sshUtilsRelease_node2;
    private KubeSphereSSHUtils sshUtilsRelease_node3;
    private KubeSphereSSHUtils sshUtilsRelease_node4;
    private KubeSphereSSHUtils sshUtilsRelease_node5;
    private KubeSphereSSHUtils sshUtilsRelease_node6;
    @Autowired
    K8sEnvConfigBean k8sEnvConfigBean;
    @PostConstruct
    public void init() {
        this.createK8sSSHUtils("dev");
        this.createK8sSSHUtils("release");
        this.createK8sSSHUtils("prod");
        this.createK8sSSHNodeUtils_Dev("dev-node1");
        this.createK8sSSHNodeUtils_Dev("dev-node2");
        this.createK8sSSHNodeUtils_Dev("dev-node3");
        this.createK8sSSHNodeUtils_Dev("dev-node4");
        this.createK8sSSHNodeUtils_Release("release-node1");
        this.createK8sSSHNodeUtils_Release("release-node2");
        this.createK8sSSHNodeUtils_Release("release-node3");
        this.createK8sSSHNodeUtils_Release("release-node4");
        this.createK8sSSHNodeUtils_Release("release-node5");
        this.createK8sSSHNodeUtils_Release("release-node6");
    }
    //創(chuàng)建三套環(huán)境主節(jié)點(diǎn)的連接
    public void createK8sSSHUtils(String env) {
        if(env.equals("dev")) {
            sshUtilsDev = new KubeSphereSSHUtils();
            sshUtilsDev.setPassword(k8sEnvConfigBean.getDevPassword());
            sshUtilsDev.setUsername(k8sEnvConfigBean.getDevUsername());
            sshUtilsDev.setHostname(k8sEnvConfigBean.getDevHost());
        }else if(env.equals("release")) {
            sshUtilsRelease = new KubeSphereSSHUtils();
            sshUtilsRelease.setPassword(k8sEnvConfigBean.getReleasePassword());
            sshUtilsRelease.setUsername(k8sEnvConfigBean.getReleaseUsername());
            sshUtilsRelease.setHostname(k8sEnvConfigBean.getReleaseHost());
        }else if(env.equals("prod")) {
            sshUtilsProd = new KubeSphereSSHUtils();
            sshUtilsProd.setPassword(k8sEnvConfigBean.getProdPassword());
            sshUtilsProd.setUsername(k8sEnvConfigBean.getProdUsername());
            sshUtilsProd.setHostname(k8sEnvConfigBean.getProdHost());
        }
    }
    //創(chuàng)建dev環(huán)境子節(jié)點(diǎn)的連接
    public void createK8sSSHNodeUtils_Dev(String env) {
        switch (env) {
            case "dev-node1":
                sshUtilsDev_node1 = new KubeSphereSSHUtils();
                sshUtilsDev_node1.setPassword(k8sEnvConfigBean.getDev_node1_password());
                sshUtilsDev_node1.setUsername(k8sEnvConfigBean.getDev_node1_username());
                sshUtilsDev_node1.setHostname(k8sEnvConfigBean.getDev_node1_host());
                break;
            case "dev-node2":
                sshUtilsDev_node2 = new KubeSphereSSHUtils();
                sshUtilsDev_node2.setPassword(k8sEnvConfigBean.getDev_node2_password());
                sshUtilsDev_node2.setUsername(k8sEnvConfigBean.getDev_node2_username());
                sshUtilsDev_node2.setHostname(k8sEnvConfigBean.getDev_node2_host());
                break;
            case "dev-node3":
                sshUtilsDev_node3 = new KubeSphereSSHUtils();
                sshUtilsDev_node3.setPassword(k8sEnvConfigBean.getDev_node3_password());
                sshUtilsDev_node3.setUsername(k8sEnvConfigBean.getDev_node3_username());
                sshUtilsDev_node3.setHostname(k8sEnvConfigBean.getDev_node3_host());
                break;
            case "dev-node4":
                sshUtilsDev_node4 = new KubeSphereSSHUtils();
                sshUtilsDev_node4.setPassword(k8sEnvConfigBean.getDev_node4_password());
                sshUtilsDev_node4.setUsername(k8sEnvConfigBean.getDev_node4_username());
                sshUtilsDev_node4.setHostname(k8sEnvConfigBean.getDev_node4_host());
        }
    }
    //創(chuàng)建release環(huán)境子節(jié)點(diǎn)連接
    public void createK8sSSHNodeUtils_Release(String env) {
        switch (env) {
            case "release-node1":
                sshUtilsRelease_node1 = new KubeSphereSSHUtils();
                sshUtilsRelease_node1.setPassword(k8sEnvConfigBean.getRelease_node1_password());
                sshUtilsRelease_node1.setUsername(k8sEnvConfigBean.getRelease_node1_username());
                sshUtilsRelease_node1.setHostname(k8sEnvConfigBean.getRelease_node1_host());
                break;
            case "release-node2":
                sshUtilsRelease_node2 = new KubeSphereSSHUtils();
                sshUtilsRelease_node2.setPassword(k8sEnvConfigBean.getRelease_node2_password());
                sshUtilsRelease_node2.setUsername(k8sEnvConfigBean.getRelease_node2_username());
                sshUtilsRelease_node2.setHostname(k8sEnvConfigBean.getRelease_node2_host());
                break;
            case "release-node3":
                sshUtilsRelease_node3 = new KubeSphereSSHUtils();
                sshUtilsRelease_node3.setPassword(k8sEnvConfigBean.getRelease_node3_password());
                sshUtilsRelease_node3.setUsername(k8sEnvConfigBean.getRelease_node3_username());
                sshUtilsRelease_node3.setHostname(k8sEnvConfigBean.getRelease_node3_host());
                break;
            case "release-node4":
                sshUtilsRelease_node4 = new KubeSphereSSHUtils();
                sshUtilsRelease_node4.setPassword(k8sEnvConfigBean.getRelease_node4_password());
                sshUtilsRelease_node4.setUsername(k8sEnvConfigBean.getRelease_node4_username());
                sshUtilsRelease_node4.setHostname(k8sEnvConfigBean.getRelease_node4_host());
                break;
            case "release-node5":
                sshUtilsRelease_node5 = new KubeSphereSSHUtils();
                sshUtilsRelease_node5.setPassword(k8sEnvConfigBean.getRelease_node5_password());
                sshUtilsRelease_node5.setUsername(k8sEnvConfigBean.getRelease_node5_username());
                sshUtilsRelease_node5.setHostname(k8sEnvConfigBean.getRelease_node5_host());
            case "release-node6":
                sshUtilsRelease_node6 = new KubeSphereSSHUtils();
                sshUtilsRelease_node6.setPassword(k8sEnvConfigBean.getRelease_node6_password());
                sshUtilsRelease_node6.setUsername(k8sEnvConfigBean.getRelease_node6_username());
                sshUtilsRelease_node6.setHostname(k8sEnvConfigBean.getRelease_node6_host());
        }
    }
    //獲取相應(yīng)環(huán)境的某臺(tái)機(jī)器的連接
    public KubeSphereSSHUtils getK8sSSHUtils(String env) {
        KubeSphereSSHUtils result = null;
        if(env.equals("dev")) {
            if (this.sshUtilsDev == null) {
                this.createK8sSSHUtils(env);
            }
            result = sshUtilsDev;
        }else if(env.equals("release")) {
            if (this.sshUtilsRelease == null) {
                this.createK8sSSHUtils(env);
            }
            result = sshUtilsRelease;
        }else if(env.equals("prod")) {
            if (this.sshUtilsProd == null) {
                this.createK8sSSHUtils(env);
            }
            result = sshUtilsProd;
        }
        //新增操作dev節(jié)點(diǎn)的邏輯
        else if(env.equals("dev-node1")) {
            if (this.sshUtilsDev_node1 == null) {
                this.createK8sSSHNodeUtils_Dev(env);
            }
            result = sshUtilsDev_node1;
        }else if(env.equals("dev-node2")) {
            if (this.sshUtilsDev_node2 == null) {
                this.createK8sSSHNodeUtils_Dev(env);
            }
            result = sshUtilsDev_node2;
        }else if(env.equals("dev-node3")) {
            if (this.sshUtilsDev_node3 == null) {
                this.createK8sSSHNodeUtils_Dev(env);
            }
            result = sshUtilsDev_node3;
        }else if(env.equals("dev-node4")) {
            if (this.sshUtilsDev_node4 == null) {
                this.createK8sSSHNodeUtils_Dev(env);
            }
            result = sshUtilsDev_node4;
        }
        //新增操作release節(jié)點(diǎn)的邏輯
        else if(env.equals("release-node1")) {
            if (this.sshUtilsRelease_node1 == null) {
                this.createK8sSSHNodeUtils_Release(env);
            }
            result = sshUtilsRelease_node1;
        }else if(env.equals("release-node2")) {
            if (this.sshUtilsRelease_node2 == null) {
                this.createK8sSSHNodeUtils_Release(env);
            }
            result = sshUtilsRelease_node2;
        }else if(env.equals("release-node3")) {
            if (this.sshUtilsRelease_node3 == null) {
                this.createK8sSSHNodeUtils_Release(env);
            }
            result = sshUtilsRelease_node3;
        }else if(env.equals("release-node4")) {
            if (this.sshUtilsRelease_node4 == null) {
                this.createK8sSSHNodeUtils_Release(env);
            }
            result = sshUtilsRelease_node4;
        }else if(env.equals("release-node5")) {
            if (this.sshUtilsRelease_node5 == null) {
                this.createK8sSSHNodeUtils_Release(env);
            }
            result = sshUtilsRelease_node5;
        }else if(env.equals("release-node6")) {
            if (this.sshUtilsRelease_node6 == null) {
                this.createK8sSSHNodeUtils_Release(env);
            }
            result = sshUtilsRelease_node6;
        }
        return result;
    }
    //尋找環(huán)境下的某一個(gè)子節(jié)點(diǎn)物理機(jī),便于重啟該機(jī)器
    public String getNodeEnvType(String nodeName,String env) {
        String k8sEnv = null;
        if(Objects.equals(env,"dev")){ //dev環(huán)境機(jī)器匹配,不匹配主節(jié)點(diǎn)
            switch (nodeName) {
                case "node1":
                    k8sEnv = "dev-node1";
                    break;
                case "node2":
                    k8sEnv = "dev-node2";
                    break;
                case "node3":
                    k8sEnv = "dev-node3";
                    break;
                case "node4":
                    k8sEnv = "dev-node4";
                    break;
            }
        } else if(Objects.equals(env,"release")) { //release環(huán)境機(jī)器匹配,不匹配主節(jié)點(diǎn)
            switch (nodeName) {
                case "node1":
                    k8sEnv = "release-node1";
                    break;
                case "node2":
                    k8sEnv = "release-node2";
                    break;
                case "node3":
                    k8sEnv = "release-node3";
                    break;
                case "node4":
                    k8sEnv = "release-node4";
                    break;
                case "node5":
                    k8sEnv = "release-node5";
                    break;
                case "node6":
                    k8sEnv = "release-node6";
                    break;
            }
        }
        //prod環(huán)境機(jī)器暫時(shí)不開啟自動(dòng)重啟功能
        return k8sEnv;
    }
}

4、調(diào)用時(shí)的代碼如下:

KubeSphereSSHUtils sshUtils = deployUtils.getK8sSSHUtils(env);//連接到指令環(huán)境
List<String> podNames = sshUtils.getReleasePod(KUBESPHERE_NAMESPACE, KUBESPHERE_ETCD_CONTAINNAME); //獲取pod名稱
List<String> logs = sshUtils.getReleaseLogs(KUBESPHERE_NAMESPACE, podName, KUBESPHERE_ETCD_CONTAINNAME);//獲取日志

到此這篇關(guān)于springboot遠(yuǎn)程執(zhí)行服務(wù)器指令的文章就介紹到這了,更多相關(guān)springboot服務(wù)器指令內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 詳解Java8新特性Stream之list轉(zhuǎn)map及問題解決

    詳解Java8新特性Stream之list轉(zhuǎn)map及問題解決

    這篇文章主要介紹了詳解Java8新特性Stream之list轉(zhuǎn)map及問題解決,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • Java-性能分析和監(jiān)控工具深入詳解

    Java-性能分析和監(jiān)控工具深入詳解

    這篇文章主要介紹了Java-性能分析和監(jiān)控工具深入詳解,文章內(nèi)容詳細(xì),簡單易懂,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2023-01-01
  • 實(shí)例詳解Java實(shí)現(xiàn)圖片與base64字符串之間的轉(zhuǎn)換

    實(shí)例詳解Java實(shí)現(xiàn)圖片與base64字符串之間的轉(zhuǎn)換

    這篇文章主要介紹了Java實(shí)現(xiàn)圖片與base64字符串之間的轉(zhuǎn)換實(shí)例代碼,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友參考下
    2016-12-12
  • SpringBoot實(shí)現(xiàn)Excel讀取的實(shí)例教程

    SpringBoot實(shí)現(xiàn)Excel讀取的實(shí)例教程

    這篇文章主要給大家介紹了關(guān)于SpringBoot實(shí)現(xiàn)Excel讀取的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • Spring中@Autowired、@Qualifier、@Resource注解的區(qū)別

    Spring中@Autowired、@Qualifier、@Resource注解的區(qū)別

    這篇文章主要介紹了Spring中@Autowired、@Qualifier、@Resource注解的區(qū)別,@Autowired 可以單獨(dú)使用,如果單獨(dú)使用,它將按類型裝配,因此,如果在容器中聲明了多個(gè)相同類型的bean,則會(huì)出現(xiàn)問題,因?yàn)?nbsp;@Autowired 不知道要使用哪個(gè)bean來注入,需要的朋友可以參考下
    2023-11-11
  • 詳解Mybatis的二級(jí)緩存配置

    詳解Mybatis的二級(jí)緩存配置

    這篇文章主要介紹了Mybatis的二級(jí)緩存配置的相關(guān)資料,需要的朋友可以參考下
    2017-05-05
  • java導(dǎo)出excel 瀏覽器直接下載或者或以文件形式導(dǎo)出

    java導(dǎo)出excel 瀏覽器直接下載或者或以文件形式導(dǎo)出

    這篇文章主要介紹了java導(dǎo)出excel 瀏覽器直接下載或者或以文件形式導(dǎo)出方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • java異步編程之一文看完其異步函數(shù)表

    java異步編程之一文看完其異步函數(shù)表

    這篇文章主要為大家介紹了java異步編程之一文看完其異步函數(shù)表示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-01-01
  • SpringBoot測試類注入Bean失敗的原因及分析

    SpringBoot測試類注入Bean失敗的原因及分析

    SpringBoot 2.2版本前后測試類有所變化,2.2版本之后使用JUnit 5,導(dǎo)入注解@SpringBootTest和@Test來自junit.jupiter.api包;而2.2版本之前使用JUnit 4,需要額外導(dǎo)入@RunWith注解來自junit.runner包,無論哪個(gè)版本,都需確保測試類和啟動(dòng)類的包名一致
    2024-09-09
  • Java中Integer的valueOf()方法用法及說明

    Java中Integer的valueOf()方法用法及說明

    文章詳細(xì)介紹了`Integer.valueOf()`的三個(gè)重載方法,分別是根據(jù)指定進(jìn)制將字符串轉(zhuǎn)換為十進(jìn)制整數(shù)、將字符串直接轉(zhuǎn)換為十進(jìn)制整數(shù)和將int類型轉(zhuǎn)換為Integer對(duì)象,并給出了具體示例
    2026-04-04

最新評(píng)論

特克斯县| 贞丰县| 绥中县| 馆陶县| 中江县| 廉江市| 江西省| 沐川县| 揭东县| 海门市| 宜良县| 肥西县| 毕节市| 清河县| 周口市| 平山县| 南平市| 大关县| 嘉义县| 乐亭县| 缙云县| 岳阳县| 个旧市| 肇庆市| 余姚市| 神木县| 二连浩特市| 怀宁县| 定西市| 冷水江市| 从化市| 前郭尔| 苍溪县| 荆州市| 阜康市| 全南县| 玉溪市| 报价| 东台市| 靖宇县| 万安县|