猿创征文|Java开发工具,从环境到开发,一篇管够!

2023-11-15


一、文章背景

优秀的开发工具已经项目管理工具可以很方便的开发流程有序、减轻开发过程中遇到的多人协同开发产生的冲突等问题。也可以让刚入职的小伙伴快速搭建Java环境,不用一篇一篇文章的找教程。

二、环境/开发工具

(1)安装Docker

1.进入docker官网下载docker
在这里插入图片描述
找到对应的系统下载版本并点击下载

2.下载完毕之后,双击安装包进⾏安装即可
在这里插入图片描述

(2)配置 Docker 阿里镜像加速器

阿里镜像加速器
Docker Toolbox
1.打开docker
2.Settings
3.Docker Engine
4.在 json 文本中添加以下列(要符合json规范)

{
  "builder": {
    "gc": {
      "defaultKeepStorage": "20GB",
      "enabled": true
    }
  },
  "experimental": false,
  "features": {
    "buildkit": true
  },
  "registry-mirrors": [
    "https://p9yals3y.mirror.aliyuncs.com"
  ]
}

(3)使用docker运行Mysql 8

mkdir -p /data/docker/mysql/{data,logs,conf}
# 复制配置文件到 conf 下,并修改所有者或者权限
docker run --name=mysql_dev_8 --restart=always  \
-e MYSQL_ROOT_PASSWORD=root \
-e MYSQL_DATABASE=mysql_dev  \
-e TZ=Asia/Shanghai \
-v mysql_dev_data_8:/var/lib/mysql \
-v mysql_dev_logs_8:/logs \
-v mysql_dev_conf_8:/etc/mysql/conf.d  \
-d -p3306:3306 mysql:8 \
--character-set-server=utf8mb4 \
--collation-server=utf8mb4_unicode_ci

注意:需要格式化成一句代码

(4)使用Docker运行Redis

docker run --name redis_dev --restart=always -d -p6379:6379 redis:latest redis-server --requirepass redis_dev

修改配置文件

  • 远程连接redis
    注释 bind 127.0.0.1
    修改 protected-mode yes 为 protected-mode no

  • 设置密码
    添加 requirepass yourpassword

  • 启动命令

 mkdir -p /data/docker/redis/{data,conf}
 #复制配置文件到 conf 下,并修改所有者或者权限

docker run -d --name redis --restart=always --privileged=true \
-p 6379:6379 \
-v /data/docker/redis/conf/redis.conf:/etc/redis/redis.conf \
-v /data/docker/redis/data:/data \
redis:5.0.7 \
redis-server /etc/redis/redis.conf \
--appendonly yes

注意:下载Windows Powershell更方便

(5)数据库管理工具

1.Navicat可以连接多种数据库,如:mysql、sqlServer、oracle等
在这里插入图片描述
缺点:
该工具需要购买,试用期为14天

优点:
他可对开发环境和测试或者生产环境的数据库数据、结构进行同步
可以做数据模型设计并直接生成表结构

IDEA自带数据库工具
在这里插入图片描述
可视化并没有前者好,对于初学者没那么友好。

2.Another Redis Desktop ManagerRedisDesktopManager都是对redis数据库进行管理,前者ui界面更美观。

在这里插入图片描述在这里插入图片描述

(6)接口测试工具

1.Swagger(接口文档)
当下最流行的 API 框架,接口文档在线生成,避免同步的麻烦,可以支持在线对接口执行测试。
在这里插入图片描述

1.在pom.xml文件中引入jar包(具体的版本根据自己的项目而定,我用的是swagger2x)

 <!--  swagger-ui  -->
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger2</artifactId>
            <version>2.9.2</version>
            <exclusions>
                <exclusion>
                    <artifactId>swagger-annotations</artifactId>
                    <groupId>io.swagger</groupId>
                </exclusion>
                <exclusion>
                    <artifactId>swagger-models</artifactId>
                    <groupId>io.swagger</groupId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger-ui</artifactId>
            <version>2.9.2</version>
        </dependency>
        <dependency>
            <groupId>io.swagger</groupId>
            <artifactId>swagger-annotations</artifactId>
            <version>1.5.22</version>
        </dependency>
        <dependency>
            <groupId>io.swagger</groupId>
            <artifactId>swagger-models</artifactId>
            <version>1.5.22</version>
        </dependency>

2.创建一个配置

@Configuration
@EnableSwagger2
@ConditionalOnProperty(prefix = "swagger2",value = {"enable"},havingValue = "true")
public class Swagger2 implements WebMvcConfigurer {

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("**/swagger-ui.html")
                .addResourceLocations("classpath:/META-INF/resources/");
        registry.addResourceHandler("/webjars*")
                .addResourceLocations("classpath:/META-INF/resources/webjars/");
    }

    @Bean
    public Docket platformApi() {
        return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo()).forCodeGeneration(true)
                .select().apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class))
                //扫描包路径
                .apis(RequestHandlerSelectors.basePackage("com.example.demo.controller"))
                //扫描所有包
//				.apis(RequestHandlerSelectors.any())
                .paths(PathSelectors.any())
                .build()
                .securitySchemes(securitySchemes())
                .securityContexts(securityContexts());
    }


    private List<ApiKey> securitySchemes() {
        List<ApiKey> apiKeyList = new ArrayList<>();
        apiKeyList.add(new ApiKey("token", "token", "header"));
        return apiKeyList;
    }

    private List<SecurityContext> securityContexts() {
        List<SecurityContext> securityContexts = new ArrayList<>();
        securityContexts.add(
                SecurityContext.builder()
                        .securityReferences(defaultAuth())
                        .forPaths(PathSelectors.any())
                        .build());
        return securityContexts;
    }

    private List<SecurityReference> defaultAuth() {
        AuthorizationScope authorizationScope = new AuthorizationScope("global", "accessEverything");
        AuthorizationScope[] authorizationScopes = new AuthorizationScope[1];
        authorizationScopes[0] = authorizationScope;
        List<SecurityReference> securityReferences = new ArrayList<>();
        securityReferences.add(new SecurityReference("token", authorizationScopes));
        return securityReferences;
    }

    //构建 api文档的详细信息函数,注意这里的注解引用的是哪个
    private ApiInfo apiInfo() {
        return new ApiInfoBuilder()
                //页面标题
                .title("JAVA-API")
                //描述
                .description("JAVA-API接口文档")
                //创建人
                .contact(new Contact("xxx", "https://www.baidu.com/", "xxx@163.com"))
                //版本号
                .version("1.0")
                .build();
    }

}

3.在对应的controller写对应的注解
在这里插入图片描述

2.Postman
在这里插入图片描述
postman是一个软件,测试工程师会有用的比较多

3.Apipost
在这里插入图片描述
ApiPost是一款支持模拟POST、GET、PUT等常见HTTP请求,支持团队协作,并可直接生成并导出接口文档的API 文档、调试、Mock、测试一体化协作性能非常强大的工具。简单说:
ApiPost = Postman + Swagger + Mock
ApiPost产生的初衷是为了提高研发团队各个角色的效率!产品的使用受众为由前端开发、后端开发和测试人员以及技术经理组成的整个研发技术团队。ApiPost通过协作功能将研发团队的每个角色整合打通。

(7)代码版本管理工具

有支持GitHub、Gitee等仓库管理
idea集成了git,有切Branch、commint、add、pull、push等丰富的操作
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
2.SVN是subversion的缩写,是一个开放源代码的版本控制系统,通过采用分支管理系统的高效管理,简而言之就是用于多个人共同开发同一个项目,实现共享资源,实现最终集中式的管理.
在这里插入图片描述

(8)远程连接工具

FinalShell、MobaXterm、XShell、secureCRT、Putty
在这里插入图片描述在这里插入图片描述
1.FinalShell可以看到cpu、内存、交换机的使用情况
在这里插入图片描述
2.MobaXterm
功能十分强大,支持SSH,FTP,串口,VNC,X server等功能。 支持标签,切换也十分方便

3.XShell
Xshell是一个强大的安全终端模拟软件,界面设计简洁,使用方便,它支持SSH1, SSH2, 以及Microsoft Windows 平台的TELNET 协议。

4.secureCRT
SecureCRT支持SSH,同时支持Telnet和rlogin协议。SecureCRT是一款用于连接运行包括Windows、UNIX和VMS的理想工具,支持同时发送多个session。

5.Putty
PuTTY是一个Telnet/SSH/rlogin/纯TCP以及串行阜连线软件。较早的版本仅支援Windows平台。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

猿创征文|Java开发工具,从环境到开发,一篇管够! 的相关文章

  • 如何使用 FileChannel 将一个文件的内容附加到另一个文件的末尾?

    File a txt好像 ABC File d txt好像 DEF 我正在尝试将 DEF 附加到 ABC 所以a txt好像 ABC DEF 我尝试过的方法总是完全覆盖第一个条目 所以我总是最终得到 DEF 这是我尝试过的两种方法 File
  • 如何将 Java 赋值表达式转换为 Kotlin

    java中的一些东西就像 int a 1 b 2 c 1 if a b c System out print true 现在它应该转换为 kotlin 就像 var a Int 1 var b Int 2 var c Int 1 if a
  • 如何在 JFace 的 TableViewer 中创建复选框?

    我创建了一个包含两列的 tableViewer 我想将其中一列设为复选框 为此 我创建了一个 CheckBoxCellEditor 但我不知道为什么它不起作用 名为 tableName 的列显示其值正常 色谱柱规格如下 String COL
  • Java程序中的数组奇怪的行为[重复]

    这个问题在这里已经有答案了 我遇到了这个 Java 程序及其以意想不到的方式运行 以下程序计算 int 数组中元素对之间的差异 import java util public class SetTest public static void
  • 线程自动利用多个CPU核心?

    假设我的应用程序运行 2 个线程 例如渲染线程和游戏更新线程 如果它在具有多核 CPU 当今典型 的移动设备上运行 我是否可以期望线程在可能的情况下自动分配给不同的核心 我知道底层操作系统内核 Android linux内核 决定调度 我的
  • 解决错误:日志已在具有多个实例的atomikos中使用

    我仅在使用atomikos的实时服务器上遇到问题 在我的本地服务器上它工作得很好 我在服务器上面临的问题是 init 中出错 日志已在使用中 完整的异常堆栈跟踪 java lang RuntimeException Log already
  • Java8无符号算术

    据广泛报道 Java 8 具有对无符号整数的库支持 然而 似乎没有文章解释如何使用它以及有多少可能 有些函数 例如 Integer CompareUnsigned 很容易找到 并且似乎可以实现人们所期望的功能 但是 我什至无法编写一个简单的
  • CXF Swagger2功能添加安全定义

    我想使用 org apache cxf jaxrs swagger Swagger2Feature 将安全定义添加到我的其余服务中 但是我看不到任何相关方法或任何有关如何执行此操作的资源 下面是我想使用 swagger2feature 生成
  • Convert.FromBase64String 方法的 Java 等效项

    Java 中是否有相当于Convert FromBase64String http msdn microsoft com en us library system convert frombase64string aspx which 将指
  • 为什么 Git 无法将文件更改与修改后的父级/主控合并?

    我有一个文件 里面只有一行 我创建一个分支并向同一文件添加第二行 保存并提交到分支 我切换回主人 并向文件中添加不同的第二行 保存并提交给master 现在总共有 3 条独特的线路 如果我现在尝试将分支合并回主分支 则会遇到合并冲突 为什么
  • Prim 的迷宫生成算法:获取相邻单元格

    我基于 Prim 算法编写了一个迷宫生成器程序 该算法是 Prim 算法的随机版本 从充满墙壁的网格开始 选择一个单元格 将其标记为迷宫的一部分 将单元格的墙壁添加到墙壁列表中 While there are walls in the li
  • Java中接口作为方法参数

    前几天去面试 被问到了这样的问题 问 反转链表 给出以下代码 public class ReverseList interface NodeList int getItem NodeList nextNode void reverse No
  • 检查 Android 手机上的方向

    如何查看Android手机是横屏还是竖屏 当前配置用于确定要检索的资源 可从资源中获取Configuration object getResources getConfiguration orientation 您可以通过查看其值来检查方向
  • 反思 Groovy 脚本中声明的函数

    有没有一种方法可以获取 Groovy 脚本中声明的函数的反射数据 该脚本已通过GroovyShell目的 具体来说 我想枚举脚本中的函数并访问附加到它们的注释 Put this到 Groovy 脚本的最后一行 它将作为脚本的返回值 a la
  • 制作java包

    我的 Java 类组织变得有点混乱 所以我要回顾一下我在 Java 学习中跳过的东西 类路径 我无法安静地将心爱的类编译到我为它们创建的包中 这是我的文件夹层次结构 com david Greet java greeter SayHello
  • 使当前提交成为 Git 存储库中唯一(初始)提交?

    我目前有一个本地 Git 存储库 我将其推送到 Github 存储库 本地存储库有约 10 次提交 Github 存储库是其同步副本 我想要做的是从本地 Git 存储库中删除所有版本历史记录 以便存储库的当前内容显示为唯一提交 因此存储库中
  • Tomcat 6找不到mysql驱动

    这里有一个类似的问题 但关于类路径 ClassNotFoundException com mysql jdbc Driver https stackoverflow com questions 1585811 classnotfoundex
  • 运行 Jar 文件时出现问题

    我已将 java 项目编译成 Jar 文件 但运行它时遇到问题 当我跑步时 java jar myJar jar 我收到以下错误 Could not find the main class myClass 类文件不在 jar 的根目录中 因
  • Keycloak - 自定义 SPI 未出现在列表中

    我为我的 keycloak 服务器制作了一个自定义 SPI 现在我必须在管理控制台上配置它 我将 SPI 添加为模块 并手动安装 因此我将其放在 module package name main 中 并包含 module xml 我还将其放
  • Springs 元素“beans”不能具有字符 [children],因为该类型的内容类型是仅元素

    我在 stackoverflow 中搜索了一些页面来解决这个问题 确实遵循了一些正确的答案 但不起作用 我是春天的新人 对不起 这是我的调度程序 servlet

随机推荐

  • 关于爬虫技术

    1 什么是爬虫 爬虫是一种自动化程序 它能够模拟人类用户访问网站的行为 从网站上抓取数据并保存到本地或者进行进一步处理 爬虫是一种非常常用的网络数据采集工具 可以用于搜索引擎 电商数据采集 舆情监测等多个领域 通过使用爬虫 可以自动化地获取
  • springboot获取nacos的服务列表、实例列表及修改实例、发布配置等

    1 通过java sdk的方式发布配置 官方文档说明 https nacos io zh cn docs sdk html https nacos io zh cn docs open api html 1 1构造ConfigService
  • Linux系统中环境变量的设置

    目录 业务描述 设置环境变量的方法 系统环境变量 指定用户环境变量 临时有效的环境变量 系统常用环境变量应用分析 PATH 环境变量 HOME 环境变量 HISTSIZE 环境变量 LOGNAME环境变量 SHELL环境变量 业务描述 Li
  • 【JAVA进阶】File类、字节流

    个人主页 个人主页 系列专栏 JAVASE基础 前言 目前的编程中 数据存储方式有很多种 包括但不限于 文件存储 将数据以文件的形式存储在磁盘上 可以使用文件读写操作进行数据的存取 数据库存储 将数据以表格的形式存储在数据库中 可以使用SQ
  • 黑群晖docker安装人人影视_在云主机上手动安装腾讯PAI面板

    本文关键字 云主机上装管理面板 在前面 我们介绍过lnmp sandstorm paas 还有黑群晖 docker管理面板 这些都是云OS上的面板扩展和APPSTACK扩展 分散在不同级别被实现 像群晖这种是OS和面板一体的 包括这里要介绍
  • line-height的使用

    line height 26px 表示行高为26px line height 120 表示行高为当前字体大小的120 line height 2 6em 表示行高为当前字体的2 6倍 带单位的行高都有继承性 其子元素继承的是计算值 如父元素
  • 计算机盲打最快要多久,电脑打字怎样做到又快又准确

    除了熟悉26个字母 我们还要熟悉键盘 熟悉键盘是根本 可以下载个金山打字通练习下很快就上手了 而本文笔者着重给大家讲解下可以帮助自己快速输入的技巧 还是要利用工具的 我们聊天的时候 有的词语如果是你常用到的 而这个词又有点长 不是成语类的
  • ctfshow-网络迷踪-新手上路 ( 使用百度搜图收集景点信息)

    ctf show 网络迷踪模块第1关 只有一座桥的图片 拿到桥的名字即可 推荐使用百度搜图 先把图片下载到本地 使用百度搜图收集图片中的景点信息 根据搜图的结果可以发现 图片的来源均指向同一个地方 三亚蜈支洲岛 接下来 百度搜索 三亚蜈支洲
  • 死锁的讲解

    目录 1 死锁定义 2 死锁产生原因 3 如何解决死锁问题 1 死锁定义 死锁是指两个或两个以上的进程在执 过程中 由于竞争资源或者由于彼此通信 造成的 种阻塞的现象 若 外 作 它们都将 法推进下去 也就是两个线程拥有锁的情况下 在尝试获
  • 六、可解释性分析(Datawhale组队学习)

    文章目录 前言 理论简介 CAM算法 Lime算法 DFF算法 代码实战 torch cam工具包实战 pytorch gradcam工具包实战 captum工具包实战 shap工具包实战 lime工具包实战 总结 参考资料 本文内容为 同
  • alter table语法

    文档地址 http docs oracle com cd B19306 01 server 102 b14200 statements 3001 htm CIHCFDDJ ALTER TABLE Purpose Use the ALTER
  • shell脚本中的多行注释

    shell 中注释的使用方法 1 单行注释 单行注释最为常见 它是通过一个 来实现的 注意shell脚本的最开始部分 bin bash 的 号不是用来注释的 2 多行注释 在shell脚本中还有一种多行的注释方法 我们称之为 HERE DO
  • 机器视觉毕业设计 深度学习人体跌倒检测系统 - opencv python

    文章目录 0 前言 课题背景和意义 1 实现方法 传统机器视觉算法 基于机器学习的跌倒检测 SVM简介 SVM跌倒检测原理 算法流程 算法效果 深度学习跌倒检测 最终效果 网络原理 最后 0 前言 这两年开始毕业设计和毕业答辩的要求和难度不
  • 解决:报错cv2.error: OpenCV(4.1.2) error: (-215:Assertion failed) !_img.empty() in function ‘cv::imwrite‘

    cv2 error OpenCV 4 1 2 C projects opencv python opencv modules imgcodecs src l oadsave cpp 715 error 215 Assertion faile
  • 常见线性滤波(第一篇博客)

    一 基本概念了解 1 什么是图像滤波 官方解释 图像滤波 即在尽量保留图像细节特征的条件下对目标图像的噪声进行抑制 是图像预处理中不可缺少的操作 其处理效果的好坏将直接影响到后续图像处理和分析的有效性和可靠性 个人理解 为图像滤波是通过设计
  • Kubernetes 101,第二部分,pod

    在上一篇文章中 我们了解了Kubernetes 的基础知识以及对其主要架构的介绍 介绍完毕后 就该探索如何在 Kubernetes 中运行应用程序了 容器包装器 在 Kubernetes 中 我们无法直接创建单个容器 相反 为了更好 我们可
  • 加工中心G76,G87,G83,G84数控代码讲解

    G76表示精密镗孔循环 具体使用格式如下面 G76 X Y Z R Q F
  • Linux Shell脚本字符串变量拼接与赋值总结

    Linux Shell脚本字符串总结 1 字符串拼接 2 定义值为双引号或单引号的字符串 3 在单引号和双引号字符串中取变量值 最近在工作用到shell脚本 用到了字符串变量的拼接 同时需要对字符串进行赋值 这里与大家分享一下 1 字符串拼
  • Android进阶知识树——应用进程的启动过程

    程序的启动是从进程启动开始的 换句话说只有程序进程启动后 程序才会加载和执行 在AMS启动程序时首先会判断当前进程是否启动 对未启动的进程会发送请求 Zygote在收到请求后创建新的进程 1 Zygote监听客户端请求 由Android进阶
  • 猿创征文|Java开发工具,从环境到开发,一篇管够!

    文章目录 一 文章背景 二 环境 开发工具 1 安装Docker 2 配置 Docker 阿里镜像加速器 3 使用docker运行Mysql 8 4 使用Docker运行Redis 5 数据库管理工具 6 接口测试工具 7 代码版本管理工具