使用Docker+Jenkins+Gitee自动化部署SpringBoot项目

2023-11-12

目录

搭建基础环境

1、使用Docker-Compose搭建基础环境

在linux中创建mydata文件夹。在该文件夹下写入以下代码脚本。
使用sed -i 's/\r//' start.sh将windows复制的文本转换成linux的文本。否则直接复制使用的话会提示commond not found。
在这里插入图片描述
其中start.sh中涉及到的相关配置文件、文件夹需要自己准备。当然你也可以手动删除该相关配置,在搭建自动化部署的过程中,并未用到。因为想单独配置自己的git以及maven进行自动化,但是失败了,后期再考虑如何配置,保留相关环境。
如下为我自己的配置:
搭建mysql时自动初始化配置文件的pro.sql。cp /sql/pro.sql /mydata/mysql/init
复制maven配置文件:cp /sql/settings.xml ./
复制git安装包:cp /sql/git-2.38.1.tar.gz ./

echo -e "\e[1;31m安装本地maven环境\e[0m"
mkdir -p /mydata/maven
cd /mydata/maven
wget --no-check-certificate https://dlcdn.apache.org/maven/maven-3/3.8.6/binaries/apache-maven-3.8.6-bin.tar.gz
tar -zxvf apache-maven-3.8.6-bin.tar.gz
cd /mydata/maven/apache-maven-3.8.6/conf/
mkdir -p /m2/repository
rm -rf settings.xml
cp /sql/settings.xml ./
echo -e "\e[1;31m配置maven环境变量\e[0m"
cat >> /etc/profile <<EOF
MAVEN_HOME=/mydata/maven/apache-maven-3.8.6
PATH=\$MAVEN_HOME/bin:\$PATH
export MAVEN_HOME PATH
EOF
echo -e "\e[1;31m安装本地git环境\e[0m"
mkdir -p /mydata/git
cd /mydata/git
cp /sql/git-2.38.1.tar.gz ./
tar -zxvf git-2.38.1.tar.gz
mv git-2.38.1 /usr/local/
cd /usr/local/git-2.38.1/
yum -y install autoconf-2.69-11.el7.noarch
yum -y install automake-1.13.4-3.el7.noarch
make configure
./configure --prefix=/usr/local/git
make profix=/usr/local/git
make install
cd /etc/profile.d/
echo export PATH=\$PATH:/usr/local/git/bin > git.sh
chmod +x /etc/profile.d/git.sh
source /etc/profile.d/git.sh
echo -e "\e[1;31m重新加载配置文件\e[0m"
source /etc/profile
echo -e "\e[1;31m创建mysql相关目录....\e[0m"
mkdir -p /mydata/mysql/data
mkdir -p /mydata/mysql/conf
mkdir -p /mydata/mysql/init
chmod -R 777 /mydata/mysql
rm -rf /mydata/mysql/data/*
cp /sql/pro.sql /mydata/mysql/init
echo -e "\e[1;31m写入mysql配置文件....\e[0m"
cat > /mydata/mysql/conf/my.cnf << EOF
[mysqld]
user=mysql
default-storage-engine=INNODB
character-set-server=utf8mb4
collation-server = utf8mb4_general_ci
[client]
default-character-set=utf8mb4
[mysql]
default-character-set=utf8mb4
EOF
echo -e "\e[1;31m创建redis相关目录....\e[0m"
mkdir -p /mydata/redis/data
mkdir -p /mydata/redis/conf
chmod -R 777 /mydata/redis
rm -rf /mydata/redis/data/*
​rm -rf /mydata/redis/conf/*
echo -e "\e[1;31m写入redis相关配置文件....\e[0m"
cat > /mydata/redis/conf/redis.conf << EOF
appendonly yes
EOF
chmod 777 /mydata/redis/conf/redis.conf
echo -e "\e[1;31m创建rabbitmq相关配置文件\e[0m"
mkdir -p /mydata/rabbitmq/data
chmod -R 777 /mydata/rabbitmq
rm -rf /mydata/rabbitmq/data/*
echo -e "\e[1;31m创建Nginx相关配置文件\e[0m"
mkdir -p /mydata/nginx/html /mydata/nginx/conf /mydata/nginx/conf.d /mydata/nginx/logs
rm -rf /mydata/nginx/html/*
rm -rf /mydata/nginx/conf/*
rm -rf /mydata/nginx/conf.d/*
rm -rf /mydata/nginx/logs/*
chmod -R 777 /mydata/nginx
echo -e "\e[1;31m写入nginx相关配置文件\e[0m"
cat > /mydata/nginx/conf/nginx.conf << EOF
events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    sendfile        on;

    keepalive_timeout  300;
    server {
        listen       80;
        server_name  192.168.56.103;
      
        location / {
            root   /usr/share/nginx/html;
            index  index.html index.htm;
        }
      
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}
EOF
echo -e "\e[1;31m创建jenkins相关配置文件\e[0m"
mkdir -p /mydata/jenkins/home
chmod -R 777 /mydata/jenkins
echo -e "\e[1;31m写入nginx默认首页\e[0m"
cat > /mydata/nginx/html/index.html << EOF
<h3>welcome to Nginx!</h3>
EOF
echo -e "\e[1;31m创建Tomcat文件夹\e[0m"
mkdir -p /mydata/tomcat
chmod -R 777 /mydata/tomcat
echo -e "\e[1;31m清除docker-compose.yaml文件\e[0m"
rm -rf /mydata/docker-compose.yaml
echo -e "\e[1;31m写入docker-compose.yaml文件....\e[0m"
cat > /mydata/docker-compose.yaml << EOF
version: '3.3'
services:
  mysql:
    image: mysql:5.7
    container_name: mysql
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: 123456
      TZ: Asia/Shanghai
      MYSQL_DATABASE: pro
    command:
      --default-authentication-plugin=mysql_native_password
      --character-set-server=utf8mb4
      --collation-server=utf8mb4_general_ci
      --explicit_defaults_for_timestamp=true
      --lower_case_table_names=1
    ports:
      - 3306:3306
    volumes:
      - /mydata/mysql/data:/var/lib/mysql
      - /mydata/mysql/conf:/etc/mysql/conf.d
      - /mydata/mysql/init:/docker-entrypoint-initdb.d/ 
  redis:
    image: redis:5.0.14-alpine3.15
    container_name: redis
    restart: always
    command: ["redis-server","/etc/redis/redis.conf"]
    ports:
     - 6379:6379
    volumes:
     - /mydata/redis/data:/data
     - /mydata/redis/conf/redis.conf:/etc/redis/redis.conf
  rabbitmq:
    image: rabbitmq:3.8.3-management
    container_name: rabbitmq
    restart: always
    ports:
     - 15672:15672
     - 5672:5672
    volumes:
     - /mydata/rabbitmq/data:/var/lib/rabbitmq
    environment:
     - RABBITMQ_DEFAULT_USER=root
     - RABBITMQ_DEFAULT_PASS=root
  nginx:
    image: nginx:stable-alpine-perl
    container_name: nginx
    restart: always
    ports:
     - 80:80
    volumes:
     - /mydata/nginx/html:/usr/share/nginx/html
     - /mydata/nginx/logs:/var/log/nginx
     - /mydata/nginx/conf.d:/etc/nginx/conf.d
     - /mydata/nginx/conf/nginx.conf:/etc/nginx/nginx.conf
  tomcat:
    restart: always
    image: tomcat:9.0
    container_name: tomcat
    privileged: true
    ports:
     - 8080:8080
    volumes:
     - /mydata/tomcat/webapps:/usr/local/tomcat/webapps
     - /mydata/tomcat/conf:/usr/local/tomcat/conf
     - /mydata/tomcat/logs:/usr/local/tomcat/logs
    environment:
      TZ: Asia/Shanghai
  jenkins:
    restart: always
    image: jenkins/jenkins:lts-jdk8
    container_name: jenkins
    ports:
     - 10240:8080
     - 10241:50000
    volumes:
     - /mydata/jenkins/home:/var/jenkins_home
     - $(which docker):/usr/bin/docker
     - /var/run/docker.sock:/var/run/docker.sock
EOF
echo -e "\e[1;31m创建临时tomcat并获取配置文件....\e[0m"
docker run --name tomcat -d -p 8080:8080 tomcat:9.0
echo -e "\e[1;31m进行文件复制....\e[0m"
docker cp tomcat:/usr/local/tomcat/conf /mydata/tomcat
docker cp tomcat:/usr/local/tomcat/logs /mydata/tomcat
docker cp tomcat:/usr/local/tomcat/webapps /mydata/tomcat
echo -e "\e[1;31m停止tomcat并删除临时容器....\e[0m"
docker stop tomcat
docker rm tomcat
echo -e "\e[1;31m启动所有基础环境中....\e[0m"
cd /mydata/
docker-compose up -d
echo -e "\e[1;31m请核对docker进程的状态\e[0m"
docker ps -a
echo -e "\e[1;31m授权docker.sock配置文件\e[0m"
chmod -R 777 /var/run/docker.sock 
echo -e "\e[1;31m重启jenkins\e[0m"
docker restart jenkins
echo -e "\e[1;31m请核对maven环境\e[0m"
mvn -version
echo -e "\e[1;31m请核对git环境\e[0m"
git --version

其中,在搭建jenkins环境以便于进行自动化部署时,参考了很多的文章始终得不到解决,无一例外在构建步骤,提示docker: command not found。网上很多参考方案说的是jenkins没有进行容器卷挂载,使用外部的Docker指令。需要在运行jenkins时挂载/var/run/docker.sock:/var/run/docker.sock。但事实证明是不够的的,还需要挂载如下指令:$(which docker):/usr/bin/docker。同时,需要确保挂载成功后,需要给docker.sock授予权限。

当出现以下面板时,基础环境搭建成功。
在这里插入图片描述
在这里插入图片描述

2、搭建项目仓库环境,创建Dockerfile文件(2022-12-15更新)

在IDEA根目录下,创建Dockerfile文件,连同Dockerfile文件一起上传至gitee/git。
在这里插入图片描述

FROM java:8

VOLUME /tmp

COPY ./target/JavaSpirder-1.0-SNAPSHOT.jar JavaSpirder-1.0-SNAPSHOT.jar

EXPOSE 8088

ENTRYPOINT ["java", "-jar", "/JavaSpirder-1.0-SNAPSHOT.jar", "&"]

其中,FROM java:8指的基础镜像是java镜像。COPY指的是将当前目录-target下的jar包一同拷贝到镜像里面,暴露端口为8088。当容器运行时执行java -jar JavaSpirder-1.0-SNAPSHOT.jar指令。target目录下的jar包名字需要自己在控制台输入mvn package执行打包命令。待打包完成过后查看。Volume用于创建一个挂载目录。
关于VOLUME的说明,可以参考这篇文章一文说清楚Dockerfile 中VOLUME到底有什么用?

同时,修改项目中yml的配置文件,将相关中间件的地址修改为基础环境中的地址。如:

spring:
  application:
    name: java-spider
  main:
    allow-bean-definition-overriding: true
  jackson:
    date-format: yyyy-MM-dd HH:mm:ss
    time-zone: GMT+8
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://yourip:port/database?useUnicode=true&useSSL=false&serverTimezone=Asia/Shanghai&allowMutiQueries=true
    username: yourusername # username
    password: yourpassword #password

一切完成后,上传至gitee/git。
在这里插入图片描述

  • 2022-12-15更新
    dockerfile配置文件修改如下,修改了JDK镜像里的默认时间,确保容器运行时间与服务器时间同步。
FROM java:8

VOLUME /tmp

COPY ./target/springboot-wxcloudrun-1.0.jar springboot-wxcloudrun-1.0.jar

#修改jdk镜像里的默认时间
RUN echo "Asia/Shanghai" > /etc/timezone

EXPOSE 80

ENTRYPOINT ["java", "-jar", "/springboot-wxcloudrun-1.0.jar", "&"]

3、配置Jenkins

3.1、初始化Jenkins

当步骤1完成后,可以开始配置Jenkins。在浏览器中输入你的服务ip+端口,访问Jenkins。由于已经挂载了目录,因此可以前往/mydata/jenkins/home/secrets/initialAdminPassword中查看密码。也可以进入到容器内部docker exec -it jenkins /bin/bash后进行查询。
在这里插入图片描述
登陆成功后,根据自己的需要选择,可以安装推荐的插件,也可以选择插件来安装。安装推荐的插件里,只有一个git是我们需要的,我们后续还要安装插件。如果不安装推荐的插件,则需要搜索如下三个插件进行安装。

  • Maven Integration:Maven工具,此处不是maven仓库
  • Publish Over SSH:远程连接工具
  • Gitee:gitee仓库的一些辅助工具
    在这里插入图片描述
    在这里我选的是安装推荐的插件,但由于源的问题,以及版本的问题,安装推荐插件并不是总是成功的,但这并不影响我们的自动化部署。我们只需要继续就好。
    在这里插入图片描述
    此处可以自己创建新的账户,或者继续使用admin账户。
    在这里插入图片描述
    随后保存并完成即可。

3.2、安装核心插件

左侧面板点击“Manage Jenkins”。随后下拉页面。
在这里插入图片描述
点击Manage Plugins
在这里插入图片描述
选择可选插件,并安装如下插件。

  • Maven Integration:Maven工具,此处不是maven仓库
  • Publish Over SSH:远程连接工具
  • Gitee:gitee仓库的一些辅助工具
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

当然,由于Jenkins的优化,大部分版本只支持JDK11,因此并不是所有的插件下载都是一帆风顺的,例如我就全部下载失败。问题就在于镜像,在Docker-Compose中我使用的是jenkins/jenkins:lts-centos7-jdk8这个镜像。因此,若小伙伴们下载失败,可以考虑换个镜像下载Jenkins,或通过下载war包的方式直接更新Jenkins。
在这里插入图片描述

安装完成后,可在linux中手动重启Jenkins。Docker restart jenkins
或者在插件栏勾选“安装完成后重启Jenkins”。
在这里插入图片描述

3.3、全局工具配置

系统管理-全局工具配置。
在这里插入图片描述

3.3.1、配置Git。
  • 默认配置

由于我们在安装推荐插件时,已经安装了git插件,因此我们的Jenkins里是存在Git的了,此处配置无需改动,使用默认配置即可。
在这里插入图片描述

  • 自定义本地环境Git

在步骤1搭建基础环境时,我的本地虚拟机环境也安装了Git,但是无论我怎么配置都配置失败。此处先占一个坑,后面有空的时候再研究一下。

3.3.2、配置Maven
  • 默认配置

由Jenkins帮我们下载Maven并使用。点击新增Maven。
在这里插入图片描述
填写Name,然后勾选自动安装即可。这样Jenkins在使用Maven时便会自动帮我们安装。
在这里插入图片描述

  • 自定义本地环境Maven
    同样,在步骤1的时候,我在本地虚拟机已搭建成功git环境,但是在配置的时候总是配置失败,占坑,等下次更新时补充完整。
3.3.3、配置JDK

由于Jenkins自带了JDK,因此此处无需再额外配置。

3.4、配置Git凭证

点击“Manage Credentials”。
在这里插入图片描述
点击“全局-添加凭证”。
在这里插入图片描述
填写Git的用户名密码。
在这里插入图片描述

3.5、构建项目

在菜单栏选中“新建项目”,选中构建一个Maven项目,输入你的项目名称。
在这里插入图片描述

3.5.1、配置源码管理

勾选中“源码管理”。在此处配置你的Git仓库。若凭证(即3.4中配置的Git凭证)错误或者未填写,则会出现以下错误。
在这里插入图片描述
若你的凭证正确,则没有任何提示。
在这里插入图片描述
同时需要注意构建的分支,根据自己代码的分支情况选择构建时拉取的分支。*/master的意思是构建的分支为master分支。

3.5.2、构建触发器(2022-12-15更新)

Gitee webhook 提供了灵活的选择,可以指定为推送到仓库时自动拉取并构建项目。但若需要启用webhook功能,需要有一个公网的IP服务器地址才行。

  • 第一步:在jenkins配置webhooks
    在这里插入图片描述在这里插入图片描述
    其中在“允许触发构建的分支”中可以根据自己的需要制定构建分支。若只有一个分支,可以考虑所有分支选项。

  • 第二步:打开gitee仓库,在“管理-webhooks”中配置webhook
    在这里插入图片描述

  • 第三步:测试配置是否成功在这里插入图片描述
    保存webhook配置后,点击按钮“测试”。查看结果,若有响应结果,且在jenkins上能够查看到构建记录,则表明配置成功。

    若出现如下结果,提示响应超时,请记得查看自己服务器的防火墙是否有打开jenkins的防火墙接口,以及对应的入口ip是否有限制。
    在这里插入图片描述

3.5.3、构建环境(可选)

此处我只选择了Add timestamps to the console output。作用是在构建的时候,将输出到控制台的内容加上时间戳。
在这里插入图片描述

3.5.4、Build

Goals and Optains中输入:clean install -Dmaven.test.skip=true
clean为清空jar包。
install为打jar包,打好的jar包在项目的target下面。
-Dmaven.test.skip=true为不执行测试用例,也不编译测试用例类,跳过此类的打包。
此处Build的意思是调用Maven对项目进行编译打包,在对应的Target目录下生成jar包的意思。相当于直接在IDEA中,执行打包命令生成jar。方便在3.5.5、Post Steps步骤中,执行shell时,将项目jar包复制到镜像容器内。
在这里插入图片描述

3.5.5、Post Steps

选择执行shell。
在这里插入图片描述

填写shell语句。

在这里插入图片描述
cd /var/jenkins_home/workspace/Jenkins-Docker-Spider。这句话的意思是进入Jenkins容器内部工作目录。Jenkins-Docker-Spider是你自己在3.5构建项目中你自己输入的项目名称。

docker stop java-spider || true。这句话的意思是,如果存在已经运行的容器,则暂停容器,否则默认为true,不做任何处理。

docker rm java-spider || true。这句话的意思是,如果存在已经暂停了的容器,则移除该容器,否则默认为true,不做任何处理。

docker rmi java-spider || true。这句话的意思是,如果已经移除了容器,则删除该容器对应的镜像,否则默认为true,不做任何处理。

docker build -t java-spider .。这句话的意思是,根据目录下的 Dockerfile 文件构建镜像,-t 后面指定该镜像名称。注意后面还有一个“点”。这个点的意思就是表示当前目录,即Dockerfile所在目录。该Dockerfile即为我们在IDEA根目录下的文件。

docker run -d -p 8088:8088 --name java-spider java-spider:latest。这句话的意思就是在后台运行该镜像生成容器,容器名为java-spider。

cd /var/jenkins_home/workspace/Jenkins-Docker-Spider
docker stop java-spider || true
docker rm java-spider || true
docker rmi java-spider || true
docker build -t java-spider .
docker run -d -p 8088:8088 --name java-spider java-spider:latest
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
3.5.6、立即构建

当以上步骤完成后,点击保存。即可开始进行构建。
在这里插入图片描述

在构建任务出,查看控制台输出,观察构建过程。

在这里插入图片描述

在这里插入图片描述

此处可以看到我构建失败了,原因是因为Jenkins内部无法执行Shell命令。虽然我在步骤1搭建基础环境时,我是将Jenkins内部使用的Docker指令和外部Docker进行挂载(- /var/run/docker.sock:/var/run/docker.sock)。但此时我并没有授权。因此只需要授权即可。在对应Linux终端输入[root@localhost ~]# chmod -R 777 /var/run/docker.sock即可。此时就可以正常的进行构建啦。

在这里插入图片描述
构建成功

在这里插入图片描述

此时查看我的Jenkins目录。可以看到Build步骤成功将jar包打包,在工作空间目标目录中,生成了我项目的jar包。

在这里插入图片描述

查看容器运行状态。可以发现我自己的镜像服务已经启动。

在这里插入图片描述

此时通过Postman访问我自己的服务,也可以成功将数据保存到我的虚拟机mysql中。

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

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

使用Docker+Jenkins+Gitee自动化部署SpringBoot项目 的相关文章

  • 如何从秘密字符串中制作 HMAC_SHA256 密钥以在 jose4j 中与 JWT 一起使用?

    我想生成 JWT 并使用 HMAC SHA256 对其进行签名 对于该任务我必须使用jose4j https bitbucket org b c jose4j wiki Home 我尝试根据秘密生成密钥 SecretKeySpec key
  • Java:使用 HttpURLConnection 的 HTTP PUT

    如何执行 HTTP PUT 我正在使用的类似乎认为它正在执行 PUT 但端点将其视为我执行了 GET 我做错了什么吗 URL url new URL https HttpURLConnection conn HttpURLConnectio
  • 如何使用 Spring Boot 在运行时配置 Micrometer 的监控系统

    我对一般指标尤其是微米很陌生 所以这可能是一个愚蠢的问题 千分尺在其上描述了自己主页 https micrometer io 作为 外观 没有供应商锁定 想想 SLF4J 但为了指标 具有 对 Netflix Atlas 的内置支持 这do
  • 无法在 Spring Boot 测试中模拟 persistenceContext

    我正在使用带有 Mockito 框架的 spring boot 测试来测试我的应用程序 存储库类 EntityManager 之一作为参考 我的班级如下所示 Repository Transactional Slf4j public cla
  • 内存一致性 - Java 中的happens-before关系[重复]

    这个问题在这里已经有答案了 在阅读有关内存一致性错误的 Java 文档时 我发现与创建 发生 之前 关系的两个操作相关的点 当语句调用时Thread start 每个具有 与该语句发生之前的关系也有一个 与 new 执行的每个语句之间发生的
  • 列表应该如何转换为具体的实现?

    假设我正在使用一个我不知道源代码的库 它有一个返回列表的方法 如下所示 public List
  • jq中如何分组?

    这是 json 文档 name bucket1 clusterName cluster1 name bucket2 clusterName cluster1 name bucket3 clusterName cluster2 name bu
  • 查找哪些页面不再与写入时复制共享

    假设我在 Linux 中有一个进程 我从中fork 另一个相同的过程 后forking 因为原始进程将开始写入内存 Linux写时复制机制将为进程提供与分叉进程使用的不同的唯一物理内存页 在执行的某个时刻 我如何知道原始进程的哪些页面已被写
  • 无法加载或查找主类,可以在命令行中使用,但不能在 IDE 中使用[重复]

    这个问题在这里已经有答案了 在将其标记为重复之前 请先听我说完 我正在尝试使用 gradle 导入一个 java 项目 功能齐全 适用于所有其他笔记本电脑 没有问题 我的项目 100 正常运行 适用于所有其他笔记本电脑 当我的笔记本电脑被重
  • 计算日期之间的天数差异

    在我的代码中 日期之间的差异是错误的 因为它应该是 38 天而不是 8 天 我该如何修复 package random04diferencadata import java text ParseException import java t
  • Cloudfoundry:如何组合两个运行时

    cloundfoundry 有没有办法结合两个运行时环境 我正在将 NodeJS 应用程序部署到 IBM Bluemix 现在 我还希望能够执行独立的 jar 文件 但应用程序失败 APP 0 bin sh 1 java not found
  • 如何通过ssh检查ubuntu服务器上是否存在php和apache

    如何通过ssh检查Ubuntu服务器上apache是 否安装了php和mysql 另外如果安装的话在哪个目录 如果安装了其他软件包 例如 lighttpd 那么它在哪里 确定程序是否已安装的另一种方法是使用which命令 它将显示您正在搜索
  • 如何确保应用程序在 Linux 上持续运行

    我试图确保脚本在开发服务器上保持运行 它会整理统计数据并提供网络服务 因此它应该会持续存在 但一天中有几次 它会因未知原因而消失 当我们注意到时 我们只需再次启动它 但这很麻烦 并且某些用户没有权限 或专有技术 来启动它 作为一名程序员 我
  • 将图像添加到自定义 AlertDialog

    我制作了一个 AlertDialog 让用户可以从我显示的 4 个选项中选择一个 前 3 个让他们在单击号码时直接拨打号码 第 4 个显示不同的视图 现在看起来是这样的 由于第四个选项的目的是不同的任务 我想让它看起来不同 因为用户可能会感
  • Java的-XX:+UseMembar参数是什么

    我在各种地方 论坛等 看到这个参数 并且常见的答案是它有助于高并发服务器 尽管如此 我还是找不到 sun 的官方文档来解释它的作用 另外 它是Java 6中添加的还是Java 5中存在的 顺便说一句 许多热点虚拟机参数的好地方是这一页 ht
  • 如何使用 GOPATH 的 Samba 服务器位置?

    我正在尝试将 GOPATH 设置为共享网络文件夹 当我进入 export GOPATH smb path to shared folder I get go GOPATH entry is relative must be absolute
  • Android AutoCompleteTextView 带芯片

    我不确定我是否使用了正确的词语来描述此 UI 功能 但我已附上我希望在我的应用程序中实现的目标的快照 它由 Go SMS 使用 用户在编辑文本中键入联系人 在用户从完成下拉列表中选择联系人后 该联系人将被插入到编辑文本中 如附图所示 编辑文
  • spring boot @Autowired 来自另一个模块的 bean

    我的问题是如何将包添加到组件列表中以扫描 ComponentScan basePackages io swagger com company project like add it here 但该包位于另一个模块中在我的项目中 这是我的项目
  • 启动Java项目时发生类冲突:ClassMetadataReadingVisitor将接口org.springframework.asm.ClassVisitor作为超类

    我正在使用最新的Spring框架版本 3 2 2 RELEASE 开发一个Java Web项目 但是现在项目启动时遇到了问题 详细错误是 java lang IncompleteClassChangeError 类 org springfr
  • 在哪里存储 Java 的 .properties 文件?

    The Java教程 http download oracle com javase tutorial essential environment properties htmlon using Properties 讨论如何使用 Prop

随机推荐

  • 力扣刷题笔记 数组能形成多少数对

    代码如下 from collections import defaultdict class Solution def numberOfPairs self nums List int gt List int a defaultdict i
  • caffe-include caffe/caffe/hpp 出错

    文章目录 include include
  • C# 操作JSON的几种方式

    关于Json数据在开发中的重要性 自然不言而喻 本篇通过两种在c 中常用的方式来实现对Json数据的序列化和反序列化 为了实现大多数的需求 我们采用稍微复杂一点的数据模型 首先我们有以下json数据 name 张三 age 20 idCar
  • Unity Shader入门精要第四章:学习Shader 所需的数学基础--坐标空间

    Unity系列文章目录 文章目录 Unity系列文章目录 前言 一 4 6 1 为什么要使用这么多不同的坐标空间 二 4 6 3 顶点的坐标空间变换过程 4 6 4 模型空间 4 6 6 观察空间 4 6 7 裁剪空间 总结 法线变换 参考
  • python中index方法_Python中的index()方法使用教程

    Python中的index 方法使用教程 index 方法确定字符串str 如果起始索引beg和结束索引end在末尾给出了找到字符串或字符串的一个子串 这个方法与find 方法一样 只是如果没有找到子符趾会抛出一个异常 语法 以下是inde
  • 阿里SR Gateway:IDLE_TIMEOUT:Websocket session is idle for too long time

    阿里SR在10秒内无数据流输入 SR会自动断开 sdk本身在请求建立链接后 长时间没有发送任何数据 超过10s后 服务端会返回40000004错误信息 Gateway IDLE TIMEOUT Websocket session is id
  • C++ list 类学习笔记

    双向循环链表list list是双向循环链表 每一个元素都知道前面一个元素和后面一个元素 在STL中 list和vector一样 是两个常被使用的容器 和vector不一样的是 list不支持对元素的任意存取 list中提供的成员函数与ve
  • windows cmd命令整理

    文章目录 windows 路由表 命令行设置环境变量 windows cmd 查看文件内容 类似linux cat type file name txt cmd 切换用户 类似 linux su user name runas user u
  • vue 微信分享

    场景 一个h5界面要求点击右上角三个点后点击微信好友分享带标题和图片给好友 vue项目中 分享携带头部标题 简介和缩略图等信息 1 下载微信的 weixin js sdk npm install weixin js sdk 2 在需要分享的
  • 顺序表的逆置算法

    顺序表的逆置算法 1 逆置原理 2 算法实现 3 经典例题1 4 经典例题2 1 逆置原理 顺序表的逆置即将线性表 a1 a2 a3 an 转化为 an an 1 an 2 a2 a1 此操作在程序设计中经常使用 2 算法实现 includ
  • 第十四届蓝桥杯(第三期)模拟赛试题与题解 C++

    第十四届蓝桥杯 第三期 模拟赛试题与题解 C 试题 A 问题描述 请找到一个大于 2022 的最小数 这个数转换成十六进制之后 所有的数位 不含前导 0 都为字母 A 到 F 请将这个数的十进制形式作为答案提交 答案提交 这是一道结果填空的
  • 使用腾讯云clb实现https转发

    腾讯云clb实现https进行转发 七层反代 四层负载均衡和七层负载均衡有什么区别 四层均衡能力 是基于 IP 端口的负载均衡 七层是基于应用层信息 如 HTTP 头部 URL 等 的负载均衡 四到七层负载均衡 就是在对后台的服务器进行负载
  • SpringBoot读取配置文件的两种方式以及自定义配置文件的读取

    1 读取默认配置文件中的数据 application properties 直接使用 Value注解获取数据 2 使用Environment获取数据 防止乱码统一编码格式 注入Environment 使用getProperty获取数据 3
  • UE4 Actor生命周期 SpawnActor DestroyActor剖析

    原创文章 转载请注明出处 AActor很重要 只要是我们世界大纲列表内的物体 全部都是AActor 目录 第一部分 从编辑器点击Play开始分析World里面全部的Actor的Spawn流程 分析到调用BeginPlay结束 1 gt 下面
  • Effective java 总结10-并发

    Effective java 总结10 并发 第78条 同步访问共享的可变数据 Synchronized 可以保证在同一时刻 只有一个线程可以执行某一个方法 或者某一个代码块 同步可以阻止一个线程看到对象处于不一致的状态中 还可以保证进入同
  • mysql 5.7的jdbc驱动_高版本MySQL(5.7,5.8)的JDBC连接新问题

    在使用JDBC连接访问MySQL时一般要使用对应版本的驱动 比如我使用了8 0 11版本的MySQL 对应驱动的Maven描述为 1 2 mysql 3 mysql connector java 4 8 0 11 5 然后遇到了驱动问题 S
  • Python 自动化处理 Yaml 文件

    1 Yaml 是什么 Yaml是一种简洁的非标记语言 Yaml是一个可读性高 用来表达数据序列化的格式 Yaml以数据为中心 使用空白 缩进 分行组织数据 从而使得表示更加简洁 Yaml特别适合用来表达或编辑数据结构 各种配置文件 文件大纲
  • Run-Time Check Failure #2 - Stack around the variable 'a' was corrupted

    一般为数组越界 查看一下数组大小
  • 算力军备竞赛白热化 “卖铲人”联想集团竞争力如何?

    继微软通过OpenAI推出GPT系列 谷歌推出Bard和PaLM E2之后 国内AI大模型也呈百家争鸣态势 年初至今 国内科技巨头几乎都发布了自研AI大模型产品 AI竞赛全面升级的背后 是全球科技巨头们对算力的争夺 作为算力载体的AI服务器
  • 使用Docker+Jenkins+Gitee自动化部署SpringBoot项目

    目录 搭建基础环境 1 使用Docker Compose搭建基础环境 2 搭建项目仓库环境 创建Dockerfile文件 2022 12 15更新 3 配置Jenkins 3 1 初始化Jenkins 3 2 安装核心插件 3 3 全局工具