服务器搭建系列之9:k8s安装jenkins实现自动化部署(包含全流程配置),2022最新版本

准备工作:
下载jenkins安装包,地址:jenkins的rpm安装包
下载maven安装包,地址:maven下载地址
下载jdk8和jdk17的tar包,地址:jdk下载地址
下载publish-over-ssh安装包,地址:插件下载

将下方内容保存为对应名称文件

vim jenkins

## Path:        Development/Jenkins
## Description: Jenkins Automation Server
## Type:        string
## Default:     "/var/lib/jenkins"
## ServiceRestart: jenkins
#
# Directory where Jenkins store its configuration and working
# files (checkouts, build reports, artifacts, ...).
#
JENKINS_HOME="/var/lib/jenkins"

## Type:        string
## Default:     ""
## ServiceRestart: jenkins
#
# Java executable to run Jenkins
# When left empty, we'll try to find the suitable Java.
#
JENKINS_JAVA_CMD=""

## Type:        string
## Default:     "jenkins"
## ServiceRestart: jenkins
#
# Unix user account that runs the Jenkins daemon
# Be careful when you change this, as you need to update
# permissions of $JENKINS_HOME and /var/log/jenkins.
#
JENKINS_USER="root"

## Type:        string
## Default: "false"
## ServiceRestart: jenkins
#
# Whether to skip potentially long-running chown at the
# $JENKINS_HOME location. Do not enable this, "true", unless
# you know what you're doing. See JENKINS-23273.
#
#JENKINS_INSTALL_SKIP_CHOWN="false"

## Type: string
## Default:     "-Djava.awt.headless=true"
## ServiceRestart: jenkins
#
# Options to pass to java when running Jenkins.
#
JENKINS_JAVA_OPTIONS="-Djava.awt.headless=true"

## Type:        integer(0:65535)
## Default:     8080
## ServiceRestart: jenkins
#
# Port Jenkins is listening on.
# Set to -1 to disable
#
JENKINS_PORT="8080"

## Type:        string
## Default:     ""
## ServiceRestart: jenkins
#
# IP address Jenkins listens on for HTTP requests.
# Default is all interfaces (0.0.0.0).
#
JENKINS_LISTEN_ADDRESS=""

## Type:        integer(0:65535)
## Default:     ""
## ServiceRestart: jenkins
#
# HTTPS port Jenkins is listening on.
# Default is disabled.
#
JENKINS_HTTPS_PORT=""

## Type:        string
## Default:     ""
## ServiceRestart: jenkins
#
# Path to the keystore in JKS format (as created by the JDK 'keytool').
# Default is disabled.
#
JENKINS_HTTPS_KEYSTORE=""

## Type:        string
## Default:     ""
## ServiceRestart: jenkins
#
# Password to access the keystore defined in JENKINS_HTTPS_KEYSTORE.
# Default is disabled.
#
JENKINS_HTTPS_KEYSTORE_PASSWORD=""

## Type:        string
## Default:     ""
## ServiceRestart: jenkins
#
# IP address Jenkins listens on for HTTPS requests.
# Default is disabled.
#
JENKINS_HTTPS_LISTEN_ADDRESS=""

## Type:        integer(0:65535)
## Default:     ""
## ServiceRestart: jenkins
#
# HTTP2 port Jenkins is listening on.
# Default is disabled.
#
# Notice: HTTP2 support may require additional configuration, see Winstone
# documentation for more information.
#
JENKINS_HTTP2_PORT=""

## Type:        string
## Default:     ""
## ServiceRestart: jenkins
#
# IP address Jenkins listens on for HTTP2 requests.
# Default is disabled.
#
# Notice: HTTP2 support may require additional configuration, see Winstone
# documentation for more information.
#
JENKINS_HTTP2_LISTEN_ADDRESS=""

## Type:        integer(1:9)
## Default:     5
## ServiceRestart: jenkins
#
# Debug level for logs -- the higher the value, the more verbose.
# 5 is INFO.
#
JENKINS_DEBUG_LEVEL="5"

## Type:        yesno
## Default:     no
## ServiceRestart: jenkins
#
# Whether to enable access logging or not.
#
JENKINS_ENABLE_ACCESS_LOG="no"

## Type:        integer
## Default:     100
## ServiceRestart: jenkins
#
# Maximum number of HTTP worker threads.
#
JENKINS_HANDLER_MAX="100"

## Type:        integer
## Default:     20
## ServiceRestart: jenkins
#
# Maximum number of idle HTTP worker threads.
#
JENKINS_HANDLER_IDLE="20"

## Type:        string
## Default:     ""
## ServiceRestart: jenkins
#
# Folder for additional jar files to add to the Jetty class loader.
# See Winstone documentation for more information.
# Default is disabled.
#
JENKINS_EXTRA_LIB_FOLDER=""

## Type:        string
## Default:     ""
## ServiceRestart: jenkins
#
# Pass arbitrary arguments to Jenkins.
# Full option list: java -jar jenkins.war --help
#
JENKINS_ARGS=""

vim mvn8

#!/bin/sh
JAVA_HOME=/home/jdk8
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements.  See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership.  The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License.  You may obtain a copy of the License at
#
#    http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied.  See the License for the
# specific language governing permissions and limitations
# under the License.

# -----------------------------------------------------------------------------
# Apache Maven Startup Script
#
# Environment Variable Prerequisites
#
#   JAVA_HOME       Must point at your Java Development Kit installation.
#   MAVEN_OPTS      (Optional) Java runtime options used when Maven is executed.
#   MAVEN_SKIP_RC   (Optional) Flag to disable loading of mavenrc files.
# -----------------------------------------------------------------------------

if [ -z "$MAVEN_SKIP_RC" ] ; then

  if [ -f /usr/local/etc/mavenrc ] ; then
    . /usr/local/etc/mavenrc
  fi

  if [ -f /etc/mavenrc ] ; then
    . /etc/mavenrc
  fi

  if [ -f "$HOME/.mavenrc" ] ; then
    . "$HOME/.mavenrc"
  fi

fi

# OS specific support. $var _must_ be set to either true or false.
cygwin=false;
mingw=false;
case "`uname`" in
  CYGWIN*) cygwin=true;;
  MINGW*) mingw=true;;
esac

## resolve links - $0 may be a link to Maven's home
PRG="$0"

# need this for relative symlinks
while [ -h "$PRG" ] ; do
  ls=`ls -ld "$PRG"`
  link=`expr "$ls" : '.*-> \(.*\)$'`
  if expr "$link" : '/.*' > /dev/null; then
    PRG="$link"
  else
    PRG="`dirname "$PRG"`/$link"
  fi
done

saveddir=`pwd`

MAVEN_HOME=`dirname "$PRG"`/..

# make it fully qualified
MAVEN_HOME=`cd "$MAVEN_HOME" && pwd`

cd "$saveddir"

# For Cygwin, ensure paths are in Unix format before anything is touched
if $cygwin ; then
  [ -n "$MAVEN_HOME" ] &&
    MAVEN_HOME=`cygpath --unix "$MAVEN_HOME"`
  [ -n "$JAVA_HOME" ] &&
    JAVA_HOME=`cygpath --unix "$JAVA_HOME"`
  [ -n "$CLASSPATH" ] &&
    CLASSPATH=`cygpath --path --unix "$CLASSPATH"`
fi

# For MinGW, ensure paths are in Unix format before anything is touched
if $mingw ; then
  [ -n "$MAVEN_HOME" ] &&
    MAVEN_HOME=`(cd "$MAVEN_HOME"; pwd)`
  [ -n "$JAVA_HOME" ] &&
    JAVA_HOME=`(cd "$JAVA_HOME"; pwd)`
  # TODO classpath?
fi

if [ -z "$JAVA_HOME" ] ; then
  JAVACMD="`\\unset -f command; \\command -v java`"
else
  JAVACMD="$JAVA_HOME/bin/java"
fi

if [ ! -x "$JAVACMD" ] ; then
  echo "The JAVA_HOME environment variable is not defined correctly," >&2
  echo "this environment variable is needed to run this program." >&2
  exit 1
fi

CLASSWORLDS_JAR=`echo "${MAVEN_HOME}"/boot/plexus-classworlds-*.jar`
CLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher

# For Cygwin, switch paths to Windows format before running java
if $cygwin ; then
  [ -n "$MAVEN_HOME" ] &&
    MAVEN_HOME=`cygpath --path --windows "$MAVEN_HOME"`
  [ -n "$JAVA_HOME" ] &&
    JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"`
  [ -n "$CLASSPATH" ] &&
    CLASSPATH=`cygpath --path --windows "$CLASSPATH"`
  [ -n "$CLASSWORLDS_JAR" ] &&
    CLASSWORLDS_JAR=`cygpath --path --windows "$CLASSWORLDS_JAR"`
fi

# traverses directory structure from process work directory to filesystem root
# first directory with .mvn subdirectory is considered project base directory
find_maven_basedir() {
(
  basedir=`find_file_argument_basedir "$@"`
  wdir="${basedir}"
  while [ "$wdir" != '/' ] ; do
    if [ -d "$wdir"/.mvn ] ; then
      basedir=$wdir
      break
    fi
    wdir=`cd "$wdir/.."; pwd`
  done
  echo "${basedir}"
)
}

find_file_argument_basedir() {
(
  basedir=`pwd`

  found_file_switch=0
  for arg in "$@"; do
    if [ ${found_file_switch} -eq 1 ]; then
      if [ -d "${arg}" ]; then
        basedir=`cd "${arg}" && pwd -P`
      elif [ -f "${arg}" ]; then
        basedir=`dirname "${arg}"`
        basedir=`cd "${basedir}" && pwd -P`
        if [ ! -d "${basedir}" ]; then
          echo "Directory ${basedir} extracted from the -f/--file command-line argument ${arg} does not exist" >&2
          exit 1
        fi
      else
        echo "POM file ${arg} specified with the -f/--file command line argument does not exist" >&2
        exit 1
      fi
      break
    fi
    if [ "$arg" = "-f" -o "$arg" = "--file" ]; then
      found_file_switch=1
    fi
  done
  echo "${basedir}"
)
}

# concatenates all lines of a file
concat_lines() {
  if [ -f "$1" ]; then
    echo "`tr -s '\r\n' '  ' < "$1"`"
  fi
}

MAVEN_PROJECTBASEDIR="${MAVEN_BASEDIR:-`find_maven_basedir "$@"`}"
MAVEN_OPTS="`concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config"` $MAVEN_OPTS"

# For Cygwin, switch project base directory path to Windows format before
# executing Maven otherwise this will cause Maven not to consider it.
if $cygwin ; then
  [ -n "$MAVEN_PROJECTBASEDIR" ] &&
  MAVEN_PROJECTBASEDIR=`cygpath --path --windows "$MAVEN_PROJECTBASEDIR"`
fi

export MAVEN_PROJECTBASEDIR

# Provide a "standardized" way to retrieve the CLI args that will
# work with both Windows and non-Windows executions.
MAVEN_CMD_LINE_ARGS="$MAVEN_CONFIG $@"
export MAVEN_CMD_LINE_ARGS

exec "$JAVACMD" \
  $MAVEN_OPTS \
  $MAVEN_DEBUG_OPTS \
  -classpath "${CLASSWORLDS_JAR}" \
  "-Dclassworlds.conf=${MAVEN_HOME}/bin/m2.conf" \
  "-Dmaven.home=${MAVEN_HOME}" \
  "-Dlibrary.jansi.path=${MAVEN_HOME}/lib/jansi-native" \
  "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \
  ${CLASSWORLDS_LAUNCHER} "$@"

vim mvn17

#!/bin/sh
JAVA_HOME=/home/jdk17
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements.  See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership.  The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License.  You may obtain a copy of the License at
#
#    http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied.  See the License for the
# specific language governing permissions and limitations
# under the License.

# -----------------------------------------------------------------------------
# Apache Maven Startup Script
#
# Environment Variable Prerequisites
#
#   JAVA_HOME       Must point at your Java Development Kit installation.
#   MAVEN_OPTS      (Optional) Java runtime options used when Maven is executed.
#   MAVEN_SKIP_RC   (Optional) Flag to disable loading of mavenrc files.
# -----------------------------------------------------------------------------

if [ -z "$MAVEN_SKIP_RC" ] ; then

  if [ -f /usr/local/etc/mavenrc ] ; then
    . /usr/local/etc/mavenrc
  fi

  if [ -f /etc/mavenrc ] ; then
    . /etc/mavenrc
  fi

  if [ -f "$HOME/.mavenrc" ] ; then
    . "$HOME/.mavenrc"
  fi

fi

# OS specific support. $var _must_ be set to either true or false.
cygwin=false;
mingw=false;
case "`uname`" in
  CYGWIN*) cygwin=true;;
  MINGW*) mingw=true;;
esac

## resolve links - $0 may be a link to Maven's home
PRG="$0"

# need this for relative symlinks
while [ -h "$PRG" ] ; do
  ls=`ls -ld "$PRG"`
  link=`expr "$ls" : '.*-> \(.*\)$'`
  if expr "$link" : '/.*' > /dev/null; then
    PRG="$link"
  else
    PRG="`dirname "$PRG"`/$link"
  fi
done

saveddir=`pwd`

MAVEN_HOME=`dirname "$PRG"`/..

# make it fully qualified
MAVEN_HOME=`cd "$MAVEN_HOME" && pwd`

cd "$saveddir"

# For Cygwin, ensure paths are in Unix format before anything is touched
if $cygwin ; then
  [ -n "$MAVEN_HOME" ] &&
    MAVEN_HOME=`cygpath --unix "$MAVEN_HOME"`
  [ -n "$JAVA_HOME" ] &&
    JAVA_HOME=`cygpath --unix "$JAVA_HOME"`
  [ -n "$CLASSPATH" ] &&
    CLASSPATH=`cygpath --path --unix "$CLASSPATH"`
fi

# For MinGW, ensure paths are in Unix format before anything is touched
if $mingw ; then
  [ -n "$MAVEN_HOME" ] &&
    MAVEN_HOME=`(cd "$MAVEN_HOME"; pwd)`
  [ -n "$JAVA_HOME" ] &&
    JAVA_HOME=`(cd "$JAVA_HOME"; pwd)`
  # TODO classpath?
fi

if [ -z "$JAVA_HOME" ] ; then
  JAVACMD="`\\unset -f command; \\command -v java`"
else
  JAVACMD="$JAVA_HOME/bin/java"
fi

if [ ! -x "$JAVACMD" ] ; then
  echo "The JAVA_HOME environment variable is not defined correctly," >&2
  echo "this environment variable is needed to run this program." >&2
  exit 1
fi

CLASSWORLDS_JAR=`echo "${MAVEN_HOME}"/boot/plexus-classworlds-*.jar`
CLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher

# For Cygwin, switch paths to Windows format before running java
if $cygwin ; then
  [ -n "$MAVEN_HOME" ] &&
    MAVEN_HOME=`cygpath --path --windows "$MAVEN_HOME"`
  [ -n "$JAVA_HOME" ] &&
    JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"`
  [ -n "$CLASSPATH" ] &&
    CLASSPATH=`cygpath --path --windows "$CLASSPATH"`
  [ -n "$CLASSWORLDS_JAR" ] &&
    CLASSWORLDS_JAR=`cygpath --path --windows "$CLASSWORLDS_JAR"`
fi

# traverses directory structure from process work directory to filesystem root
# first directory with .mvn subdirectory is considered project base directory
find_maven_basedir() {
(
  basedir=`find_file_argument_basedir "$@"`
  wdir="${basedir}"
  while [ "$wdir" != '/' ] ; do
    if [ -d "$wdir"/.mvn ] ; then
      basedir=$wdir
      break
    fi
    wdir=`cd "$wdir/.."; pwd`
  done
  echo "${basedir}"
)
}

find_file_argument_basedir() {
(
  basedir=`pwd`

  found_file_switch=0
  for arg in "$@"; do
    if [ ${found_file_switch} -eq 1 ]; then
      if [ -d "${arg}" ]; then
        basedir=`cd "${arg}" && pwd -P`
      elif [ -f "${arg}" ]; then
        basedir=`dirname "${arg}"`
        basedir=`cd "${basedir}" && pwd -P`
        if [ ! -d "${basedir}" ]; then
          echo "Directory ${basedir} extracted from the -f/--file command-line argument ${arg} does not exist" >&2
          exit 1
        fi
      else
        echo "POM file ${arg} specified with the -f/--file command line argument does not exist" >&2
        exit 1
      fi
      break
    fi
    if [ "$arg" = "-f" -o "$arg" = "--file" ]; then
      found_file_switch=1
    fi
  done
  echo "${basedir}"
)
}

# concatenates all lines of a file
concat_lines() {
  if [ -f "$1" ]; then
    echo "`tr -s '\r\n' '  ' < "$1"`"
  fi
}

MAVEN_PROJECTBASEDIR="${MAVEN_BASEDIR:-`find_maven_basedir "$@"`}"
MAVEN_OPTS="`concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config"` $MAVEN_OPTS"

# For Cygwin, switch project base directory path to Windows format before
# executing Maven otherwise this will cause Maven not to consider it.
if $cygwin ; then
  [ -n "$MAVEN_PROJECTBASEDIR" ] &&
  MAVEN_PROJECTBASEDIR=`cygpath --path --windows "$MAVEN_PROJECTBASEDIR"`
fi

export MAVEN_PROJECTBASEDIR

# Provide a "standardized" way to retrieve the CLI args that will
# work with both Windows and non-Windows executions.
MAVEN_CMD_LINE_ARGS="$MAVEN_CONFIG $@"
export MAVEN_CMD_LINE_ARGS

exec "$JAVACMD" \
  $MAVEN_OPTS \
  $MAVEN_DEBUG_OPTS \
  -classpath "${CLASSWORLDS_JAR}" \
  "-Dclassworlds.conf=${MAVEN_HOME}/bin/m2.conf" \
  "-Dmaven.home=${MAVEN_HOME}" \
  "-Dlibrary.jansi.path=${MAVEN_HOME}/lib/jansi-native" \
  "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \
  ${CLASSWORLDS_LAUNCHER} "$@"

vim settings.xml
可自行配置server,mirrors,docker镜像仓库账号密码等

"1.0" encoding="UTF-8"?>

"http://maven.apache.org/SETTINGS/1.0.0"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">

    /home/repository</localRepository>

    
    </pluginGroups>

    
    </proxies>

    
        
            releases</id>
            admin</username>
            123456</password>
        </server>
        
            snapshots</id>
            admin</username>
            123456</password>
        </server>
        
            docker-aliyun</id>
            阿里云账号</username>
            阿里云密码</password>
        </server>
    </servers>

    
        
            alimaven</id>
            central</mirrorOf>
            http://maven.aliyun.com/nexus/content/groups/public</url>
        </mirror>
    </mirrors>

    
    </profiles>

    
    </activeProfiles>

</settings>

Dockerfile

需要用到jdk11基础镜像
强烈建议使用本人构建的镜像,否则jenkins构建步骤不支持中文
将下方安装包名称修改为下载的安装包名称

FROM registry.cn-qingdao.aliyuncs.com/fandai/fd-jdk11
COPY jenkins-2.332-1.1.noarch.rpm /home/jenkins-2.332-1.1.noarch.rpm
COPY apache-maven-3.8.4-bin.tar.gz /home/apache-maven-3.8.4-bin.tar.gz
COPY jdk-8u321-linux-x64.tar.gz /home/jdk-8u321-linux-x64.tar.gz
COPY jdk-17_linux-x64_bin.tar.gz /home/jdk-17_linux-x64_bin.tar.gz

WORKDIR /home/

RUN tar -zxvf apache-maven-3.8.4-bin.tar.gz && \
    tar -zxvf jdk-8u321-linux-x64.tar.gz && \
    tar -zxvf jdk-17_linux-x64_bin.tar.gz && \
    mv jdk1.8.0_321 jdk8 && \
    mv jdk-17.0.2 jdk17 && \
    mv apache-maven-3.8.4 maven && \
    yum -y install epel-release && \
    yum -y install daemonize initscripts git && \
    rpm -ivh jenkins-2.332-1.1.noarch.rpm && \
    rm -rf jenkins-2.332-1.1.noarch.rpm && \
    rm -rf apache-maven-3.8.4-bin.tar.gz && \
    rm -rf jdk-8u321-linux-x64.tar.gz && \
    rm -rf jdk-17_linux-x64_bin.tar.gz && \
    echo "export MAVEN_HOME=/home/maven" >> /etc/profile && \
    echo -e "PATH=\$PATH:\$JAVA_HOME/bin:\$MAVEN_HOME/bin" >> /etc/profile && \
    source /etc/profile

COPY settings.xml /home/maven/conf/settings.xml
COPY mvn8 /home/maven/bin/mvn8
COPY mvn17 /home/maven/bin/mvn17

COPY jenkins /var/sysconfig/jenkins

#赋予执行权限,修改编码格式
RUN chmod +x /home/maven/bin/mvn8 && sed -i "s/\r//" mvn8
RUN chmod +x /home/maven/bin/mvn17 && sed -i "s/\r//" mvn17
RUN ln -s /home/maven/bin/mvn /usr/local/bin/
RUN ln -s /home/maven/bin/mvn8 /usr/local/bin/
RUN ln -s /home/maven/bin/mvn17 /usr/local/bin/

EXPOSE 8080
EXPOSE 50000

deoply.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: jenkins
  namespace: fandai
spec:
  replicas: 1
  selector:
    matchLabels:
      app: jenkins
  template:
    metadata:
      labels:
        app: jenkins
    spec:
      containers:
        - name: jenkins
          image: registry.cn-qingdao.aliyuncs.com/fandai/jenkins  # 可使用本人生成的镜像,或通过dockerfile自行构建
          command: ["java","-jar","/usr/lib/jenkins/jenkins.war"]
          env:
            - name: USER_UID
              value: "1000"
            - name: USER_GID
              value: "1000"
          volumeMounts:
            - name: jenkins
              mountPath: /root/.jenkins
      volumes:
        - name: jenkins
          nfs:
            server: fandai-nfs  #nfs服务器地址
            path: /home/nfs/jenkins #共享文件路径
---
apiVersion: v1  # 资源版本
kind: Service  # 资源类型
metadata: # 元数据
  name: jenkins # 资源名称
  namespace: fandai # 命名空间
spec: # 描述
  selector: # 标签选择器,用于确定当前service代理哪些pod
    app: jenkins
  type: NodePort # service类型
  ports: # 端口信息
    - protocol: TCP
      name: jenkins1
      port: 8080  # service端口
      targetPort: 8080 # pod端口
    - protocol: TCP
      name: jenkins2
      port: 50000  # service端口
      targetPort: 50000 # pod端口
    - protocol: TCP
      name: jenkins3
      port: 38742  # service端口
      targetPort: 38742 # pod端口
kubectl apply -f deploy.yaml

修改jenkins插件仓库地址

https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json

jenkins配置中文界面

下载插件Locale和chinese
配置中修改Locale为zh_cn
服务器搭建系列之9:k8s安装jenkins实现自动化部署(包含全流程配置),2022最新版本_第1张图片

maven和jdk配置

服务器搭建系列之9:k8s安装jenkins实现自动化部署(包含全流程配置),2022最新版本_第2张图片
服务器搭建系列之9:k8s安装jenkins实现自动化部署(包含全流程配置),2022最新版本_第3张图片

服务器搭建系列之9:k8s安装jenkins实现自动化部署(包含全流程配置),2022最新版本_第4张图片

配置webhook

下载插件
下方以gitea私有git仓库为例,github、gitee等类似,gitea安装请参考本人其他教程

服务器搭建系列之9:k8s安装jenkins实现自动化部署(包含全流程配置),2022最新版本_第5张图片
服务器搭建系列之9:k8s安装jenkins实现自动化部署(包含全流程配置),2022最新版本_第6张图片

配置token

服务器搭建系列之9:k8s安装jenkins实现自动化部署(包含全流程配置),2022最新版本_第7张图片
服务器搭建系列之9:k8s安装jenkins实现自动化部署(包含全流程配置),2022最新版本_第8张图片

服务器搭建系列之9:k8s安装jenkins实现自动化部署(包含全流程配置),2022最新版本_第9张图片

构建完成发送邮件

安装插件

服务器搭建系列之9:k8s安装jenkins实现自动化部署(包含全流程配置),2022最新版本_第10张图片
服务器搭建系列之9:k8s安装jenkins实现自动化部署(包含全流程配置),2022最新版本_第11张图片

服务器搭建系列之9:k8s安装jenkins实现自动化部署(包含全流程配置),2022最新版本_第12张图片

服务器搭建系列之9:k8s安装jenkins实现自动化部署(包含全流程配置),2022最新版本_第13张图片

邮件模板:email.html

<!DOCTYPE html>
"">

    "UTF-8">
    $<span class="token punctuation">{</span>ENV<span class="token punctuation">,</span> <span class="token keyword">var</span>=<span class="token string">"JOB_NAME"</span><span class="token punctuation">}</span><span class="token operator">-</span>第$<span class="token punctuation">{</span>BUILD_NUMBER<span class="token punctuation">}</span>次构建日志<<span class="token operator">/</span>title>
<<span class="token operator">/</span>head>

<body leftmargin=<span class="token string">"8"</span> marginwidth=<span class="token string">"0"</span> topmargin=<span class="token string">"8"</span> marginheight=<span class="token string">"4"</span>
      offset=<span class="token string">"0"</span>>
<table width=<span class="token string">"95%"</span> cellpadding=<span class="token string">"0"</span> cellspacing=<span class="token string">"0"</span>
       style=<span class="token string">"font-size: 11pt; font-family: Tahoma, Arial, Helvetica, sans-serif"</span>>
    <tr>
        <td><span class="token punctuation">(</span>本邮件是Jenkins程序自动下发的,请勿回复!<span class="token punctuation">)</span><<span class="token operator">/</span>td>
    <<span class="token operator">/</span>tr>
    <tr>
        <td><h2><font color=<span class="token string">"#0000FF"</span>>构建结果 <span class="token operator">-</span> $<span class="token punctuation">{</span>BUILD_STATUS<span class="token punctuation">}</span><<span class="token operator">/</span>font><<span class="token operator">/</span>h2><<span class="token operator">/</span>td>
    <<span class="token operator">/</span>tr>
    <tr>
        <td><br<span class="token operator">/</span>>
            <b><font color=<span class="token string">"#0B610B"</span>>构建信息:<<span class="token operator">/</span>font><<span class="token operator">/</span>b>
            <hr size=<span class="token string">"2"</span> width=<span class="token string">"100%"</span> align=<span class="token string">"center"</span><span class="token operator">/</span>>
        <<span class="token operator">/</span>td>
    <<span class="token operator">/</span>tr>
    <tr>
        <td>
            <ul>
                <li>项目名称:$<span class="token punctuation">{</span>PROJECT_NAME<span class="token punctuation">}</span><<span class="token operator">/</span>li>
                <li>构建编号:第$<span class="token punctuation">{</span>BUILD_NUMBER<span class="token punctuation">}</span>次构建<<span class="token operator">/</span>li>
                <<span class="token operator">!</span>-<span class="token operator">-</span>
                <li>SVN 版本: $<span class="token punctuation">{</span>SVN_REVISION<span class="token punctuation">}</span><<span class="token operator">/</span>li>
                <span class="token operator">--</span>>
                <li>触发原因:$<span class="token punctuation">{</span>CAUSE<span class="token punctuation">}</span><<span class="token operator">/</span>li>
                <li>构建日志:<a href=<span class="token string">"${BUILD_URL}console"</span>>$<span class="token punctuation">{</span>BUILD_URL<span class="token punctuation">}</span>console<<span class="token operator">/</span>a><<span class="token operator">/</span>li>
                <li>构建地址:<a href=<span class="token string">"${BUILD_URL}"</span>>$<span class="token punctuation">{</span>BUILD_URL<span class="token punctuation">}</span><<span class="token operator">/</span>a><<span class="token operator">/</span>li>
                <li>工作目录:<a href=<span class="token string">"${PROJECT_URL}ws"</span>>$<span class="token punctuation">{</span>PROJECT_URL<span class="token punctuation">}</span>ws<<span class="token operator">/</span>a><<span class="token operator">/</span>li>
                <li>项目地址:<a href=<span class="token string">"${PROJECT_URL}"</span>>$<span class="token punctuation">{</span>PROJECT_URL<span class="token punctuation">}</span><<span class="token operator">/</span>a><<span class="token operator">/</span>li>
                <li>变更集:$<span class="token punctuation">{</span>JELLY_SCRIPT<span class="token punctuation">,</span>template=<span class="token string">"html"</span><span class="token punctuation">}</span><<span class="token operator">/</span>li>
            <<span class="token operator">/</span>ul>
        <<span class="token operator">/</span>td>
    <<span class="token operator">/</span>tr>
    <tr>
        <td><b><font color=<span class="token string">"#0B610B"</span>>Changes Since Last Successful Build:<<span class="token operator">/</span>font><<span class="token operator">/</span>b>
            <hr size=<span class="token string">"2"</span> width=<span class="token string">"100%"</span> align=<span class="token string">"center"</span><span class="token operator">/</span>>
        <<span class="token operator">/</span>td>
    <<span class="token operator">/</span>tr>
    <tr>
        <td>
            <ul>
                <li>历史变更记录 : <a href=<span class="token string">"${PROJECT_URL}changes"</span>>$<span class="token punctuation">{</span>PROJECT_URL<span class="token punctuation">}</span>changes<<span class="token operator">/</span>a><<span class="token operator">/</span>li>
            <<span class="token operator">/</span>ul>
            $<span class="token punctuation">{</span>CHANGES_SINCE_LAST_SUCCESS<span class="token punctuation">,</span>reverse=true<span class="token punctuation">,</span> format=<span class="token string">"Changes for Build #%n:<br/>%c<br/>"</span><span class="token punctuation">,</span>showPaths=true<span class="token punctuation">,</span>changesFormat=<span class="token string">"
            <pre>[%a]<br/>%m</pre>
            "</span><span class="token punctuation">,</span>pathFormat=<span class="token string">"%p"</span><span class="token punctuation">}</span>
        <<span class="token operator">/</span>td>
    <<span class="token operator">/</span>tr>
    <tr>
        <td><b><font color=<span class="token string">"#0B610B"</span>>Failed Test Results:<<span class="token operator">/</span>font><<span class="token operator">/</span>b>
            <hr size=<span class="token string">"2"</span> width=<span class="token string">"100%"</span> align=<span class="token string">"center"</span><span class="token operator">/</span>>
        <<span class="token operator">/</span>td>
    <<span class="token operator">/</span>tr>
    <tr>
        <td>
            <pre style=<span class="token string">"font-size: 11pt; font-family: Tahoma, Arial, Helvetica, sans-serif"</span>>$<span class="token punctuation">{</span>FAILED_TESTS<span class="token punctuation">}</span><<span class="token operator">/</span>pre>
            <br<span class="token operator">/</span>><<span class="token operator">/</span>td>
    <<span class="token operator">/</span>tr>
    <tr>
        <td><b><font color=<span class="token string">"#0B610B"</span>>构建日志 <span class="token punctuation">(</span>最后 100行<span class="token punctuation">)</span>:<<span class="token operator">/</span>font><<span class="token operator">/</span>b>
            <hr size=<span class="token string">"2"</span> width=<span class="token string">"100%"</span> align=<span class="token string">"center"</span><span class="token operator">/</span>>
        <<span class="token operator">/</span>td>
    <<span class="token operator">/</span>tr>
    <tr>
        <td>Test Logs <span class="token punctuation">(</span><span class="token keyword">if</span> test has ran<span class="token punctuation">)</span>: <a
                href=<span class="token string">"${PROJECT_URL}ws/TestResult/archive_logs/Log-Build-${BUILD_NUMBER}.zip"</span>>$<span class="token punctuation">{</span>PROJECT_URL<span class="token punctuation">}</span><span class="token operator">/</span>ws<span class="token operator">/</span>TestResult<span class="token operator">/</span>archive_logs<span class="token operator">/</span>Log<span class="token operator">-</span>Build<span class="token operator">-</span>$<span class="token punctuation">{</span>BUILD_NUMBER<span class="token punctuation">}</span><span class="token punctuation">.</span>zip<<span class="token operator">/</span>a>
            <br<span class="token operator">/</span>>
            <br<span class="token operator">/</span>>
        <<span class="token operator">/</span>td>
    <<span class="token operator">/</span>tr>
    <tr>
        <td><textarea cols=<span class="token string">"80"</span> rows=<span class="token string">"30"</span> readonly=<span class="token string">"readonly"</span>
                      style=<span class="token string">"font-family: Courier New"</span>>$<span class="token punctuation">{</span>BUILD_LOG<span class="token punctuation">,</span> maxLines=100<span class="token punctuation">}</span><<span class="token operator">/</span>textarea>
        <<span class="token operator">/</span>td>
    <<span class="token operator">/</span>tr>
<<span class="token operator">/</span>table>
<<span class="token operator">/</span>body>
<<span class="token operator">/</span>html>
</code></pre> 
  <blockquote> 
   <p>jenkinsfile中添加配置</p> 
  </blockquote> 
  <pre><code class="prism language-powershell">post<span class="token punctuation">{</span>
    always<span class="token punctuation">{</span>
    	emailext body: <span class="token string">'${FILE,path="email.html"}'</span><span class="token punctuation">,</span> subject: <span class="token string">'构建通知:${PROJECT_NAME} - Build # ${BUILD_NUMBER} - ${BUILD_STATUS}!'</span><span class="token punctuation">,</span> to: <span class="token string">'******@163.com'</span>
    <span class="token punctuation">}</span>
<span class="token punctuation">}</span>
</code></pre> 
  <h3>sonarqube代码审查</h3> 
  <blockquote> 
   <p>sonarqube服务端搭建请参考:服务器搭建系列之8:k8s安装sonarQube代码审查工具,2022最新版本</p> 
  </blockquote> 
  <blockquote> 
   <p>下载插件</p> 
  </blockquote> 
  <p><a href="http://img.e-com-net.com/image/info8/f32a6304f6ef439099b6f1be04dd5383.jpg" target="_blank"><img src="http://img.e-com-net.com/image/info8/f32a6304f6ef439099b6f1be04dd5383.jpg" alt="服务器搭建系列之9:k8s安装jenkins实现自动化部署(包含全流程配置),2022最新版本_第14张图片" width="650" height="119" style="border:1px solid black;"></a><br> <a href="http://img.e-com-net.com/image/info8/c4c18910e4f84190b2df3ef35a4d0d6f.jpg" target="_blank"><img src="http://img.e-com-net.com/image/info8/c4c18910e4f84190b2df3ef35a4d0d6f.jpg" alt="服务器搭建系列之9:k8s安装jenkins实现自动化部署(包含全流程配置),2022最新版本_第15张图片" width="650" height="322" style="border:1px solid black;"></a></p> 
  <p><a href="http://img.e-com-net.com/image/info8/e5df3729ab414750bb12961557e088ac.jpg" target="_blank"><img src="http://img.e-com-net.com/image/info8/e5df3729ab414750bb12961557e088ac.jpg" alt="服务器搭建系列之9:k8s安装jenkins实现自动化部署(包含全流程配置),2022最新版本_第16张图片" width="650" height="320" style="border:1px solid black;"></a></p> 
  <h3>publish over ssh</h3> 
  <blockquote> 
   <p>jenkins容器运行,生成秘钥,要求是旧版</p> 
  </blockquote> 
  <pre><code class="prism language-powershell">ssh<span class="token operator">-</span>keygen <span class="token operator">-</span>m PEM <span class="token operator">-</span>t rsa <span class="token operator">-</span>b 4096
</code></pre> 
  <blockquote> 
   <p>将/root/.ssh/id_rsa拷贝到要访问的机器的/root/.ssh/authorized_keys<br> <a href="http://img.e-com-net.com/image/info8/7bd0b8a64ec84b0988728b4146abce76.jpg" target="_blank"><img src="http://img.e-com-net.com/image/info8/7bd0b8a64ec84b0988728b4146abce76.jpg" alt="服务器搭建系列之9:k8s安装jenkins实现自动化部署(包含全流程配置),2022最新版本_第17张图片" width="650" height="421" style="border:1px solid black;"></a></p> 
  </blockquote> 
  <h3>构建多选框</h3> 
  <blockquote> 
   <p>下载插件</p> 
  </blockquote> 
  <p><a href="http://img.e-com-net.com/image/info8/21ad6bb9b6ac4507a1a2b21a33523db8.jpg" target="_blank"><img src="http://img.e-com-net.com/image/info8/21ad6bb9b6ac4507a1a2b21a33523db8.jpg" alt="服务器搭建系列之9:k8s安装jenkins实现自动化部署(包含全流程配置),2022最新版本_第18张图片" width="650" height="156" style="border:1px solid black;"></a></p> 
 </div> 
</div>
                            </div>
                        </div>
                    </div>
                    <!--PC和WAP自适应版-->
                    <div id="SOHUCS" sid="1727682390656102400"></div>
                    <script type="text/javascript" src="/views/front/js/chanyan.js"></script>
                    <!-- 文章页-底部 动态广告位 -->
                    <div class="youdao-fixed-ad" id="detail_ad_bottom"></div>
                </div>
                <div class="col-md-3">
                    <div class="row" id="ad">
                        <!-- 文章页-右侧1 动态广告位 -->
                        <div id="right-1" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad">
                            <div class="youdao-fixed-ad" id="detail_ad_1"> </div>
                        </div>
                        <!-- 文章页-右侧2 动态广告位 -->
                        <div id="right-2" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad">
                            <div class="youdao-fixed-ad" id="detail_ad_2"></div>
                        </div>
                        <!-- 文章页-右侧3 动态广告位 -->
                        <div id="right-3" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad">
                            <div class="youdao-fixed-ad" id="detail_ad_3"></div>
                        </div>
                    </div>
                </div>
            </div>
        </div>
    </div>
    <div class="container">
        <h4 class="pt20 mb15 mt0 border-top">你可能感兴趣的:(jenkins,服务器,自动化)</h4>
        <div id="paradigm-article-related">
            <div class="recommend-post mb30">
                <ul class="widget-links">
                    <li><a href="/article/1890908671936884736.htm"
                           title="AWS ECS Fargate 中处理部署失败事件" target="_blank">AWS ECS Fargate 中处理部署失败事件</a>
                        <span class="text-muted">flybirding10011</span>
<a class="tag" taget="_blank" href="/search/aws/1.htm">aws</a><a class="tag" taget="_blank" href="/search/%E4%BA%91%E8%AE%A1%E7%AE%97/1.htm">云计算</a>
                        <div>AWSElasticContainerService(ECS)是一项高度可扩展、高性能的容器编排服务,可轻松运行和扩展容器化应用程序。作为无服务器计算模式,Fargate允许您在AWS上运行容器,而无需管理底层EC2实例。然而,在滚动部署过程中,可能会出现部署失败的情况,这可能会影响应用程序的可用性和可靠性。本文将介绍如何使用AWSEventBridge和Lambda函数来监控和处理ECSFarg</div>
                    </li>
                    <li><a href="/article/1890906656557035520.htm"
                           title="Golang使用redis实现分布式锁(redigo框架)" target="_blank">Golang使用redis实现分布式锁(redigo框架)</a>
                        <span class="text-muted">DDDerek~</span>
<a class="tag" taget="_blank" href="/search/golang/1.htm">golang</a><a class="tag" taget="_blank" href="/search/redis/1.htm">redis</a><a class="tag" taget="_blank" href="/search/%E5%88%86%E5%B8%83%E5%BC%8F/1.htm">分布式</a>
                        <div>本文思路来自Wx公众号:小徐生先生的变成世界,原文地址分布式锁个人理解分布式锁是分布式服务器的单机锁,对于单机锁是保证服务器在同一时间只能有一个线程能访问该方法。但是对于分布式服务器来说,可能存在多台服务器接收用户请求,这样请求在不同服务器的数据就没办法通过单机锁来阻塞。所以才需要通过额外的组件,实现多服务器之间的管理。选型Redis的原因Redis高效且具备高可用性,当提供分布式锁服务的基础组件</div>
                    </li>
                    <li><a href="/article/1890905017775353856.htm"
                           title="Python实现AWS Fargate自动化部署系统" target="_blank">Python实现AWS Fargate自动化部署系统</a>
                        <span class="text-muted">ivwdcwso</span>
<a class="tag" taget="_blank" href="/search/%E8%BF%90%E7%BB%B4/1.htm">运维</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91/1.htm">开发</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/aws/1.htm">aws</a><a class="tag" taget="_blank" href="/search/%E8%87%AA%E5%8A%A8%E5%8C%96/1.htm">自动化</a><a class="tag" taget="_blank" href="/search/ecs/1.htm">ecs</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91/1.htm">开发</a><a class="tag" taget="_blank" href="/search/Fargate/1.htm">Fargate</a><a class="tag" taget="_blank" href="/search/%E8%BF%90%E7%BB%B4/1.htm">运维</a>
                        <div>一、背景介绍在现代云原生应用开发中,自动化部署是提高开发效率和保证部署质量的关键。AWSFargate作为一项无服务器计算引擎,可以让我们专注于应用程序开发而无需管理底层基础设施。本文将详细介绍如何使用Python实现AWSFargate的完整自动化部署流程。©ivwdcwso(ID:u012172506)二、技术栈选择Python3.8+:作为主要开发语言boto3:AWS官方PythonSDK</div>
                    </li>
                    <li><a href="/article/1890893674645090304.htm"
                           title="zipkin备忘" target="_blank">zipkin备忘</a>
                        <span class="text-muted">dzl84394</span>
<a class="tag" taget="_blank" href="/search/springboot%E5%AD%A6%E4%B9%A0/1.htm">springboot学习</a><a class="tag" taget="_blank" href="/search/%E6%97%A5%E5%BF%97/1.htm">日志</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/zipkin/1.htm">zipkin</a>
                        <div>server安装https://zipkin.io/pages/quickstart.html这里提供了几种安装方式当天他可以吧数据方存cassandra,kafka,es,等地方服务器直接下载curl-sSLhttps://zipkin.io/quickstart.sh|bash-s得到zipkin.jar启动nohup/usr/local/jdk17/bin/java-jarzipkin.ja</div>
                    </li>
                    <li><a href="/article/1890892665965309952.htm"
                           title="Elasticsearch和Kibana的安装部署及服务器配置" target="_blank">Elasticsearch和Kibana的安装部署及服务器配置</a>
                        <span class="text-muted">TpCode</span>
<a class="tag" taget="_blank" href="/search/elasticsearch/1.htm">elasticsearch</a><a class="tag" taget="_blank" href="/search/%E6%9C%8D%E5%8A%A1%E5%99%A8/1.htm">服务器</a><a class="tag" taget="_blank" href="/search/%E5%A4%A7%E6%95%B0%E6%8D%AE/1.htm">大数据</a>
                        <div>Elasticsearch和Kibana是一对强大的工具,用于搜索、分析和可视化大规模数据集。Elasticsearch是一个开源的分布式搜索和分析引擎,而Kibana是一个用于数据可视化的开源工具。本文将详细介绍如何安装、部署和配置Elasticsearch和Kibana,并在服务器上运行它们。步骤1:安装JavaElasticsearch和Kibibana都需要Java来运行。确保您的服务器上</div>
                    </li>
                    <li><a href="/article/1890885984707473408.htm"
                           title="AWS上基于高德API验证Amazon Redshift里国内地址数据正确性的设计方案" target="_blank">AWS上基于高德API验证Amazon Redshift里国内地址数据正确性的设计方案</a>
                        <span class="text-muted">weixin_30777913</span>
<a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E4%BB%93%E5%BA%93/1.htm">数据仓库</a><a class="tag" taget="_blank" href="/search/%E4%BA%91%E8%AE%A1%E7%AE%97/1.htm">云计算</a><a class="tag" taget="_blank" href="/search/aws/1.htm">aws</a>
                        <div>该方案通过无服务架构实现高可扩展性,结合分页查询和批量更新确保高效处理海量数据,同时通过密钥托管和错误重试机制保障安全性及可靠性。一、技术栈组件技术选型说明计算层AWSLambda无服务器执行,适合事件驱动、按需处理,成本低数据存储AmazonRedshift存储原始地址数据及验证结果API调用高德地理编码API提供地址标准化及验证能力开发语言Python3.9+使用requests处理HTTP请</div>
                    </li>
                    <li><a href="/article/1890878546847526912.htm"
                           title="云创智城虚拟充电桩功能:技术赋能充电模拟交互" target="_blank">云创智城虚拟充电桩功能:技术赋能充电模拟交互</a>
                        <span class="text-muted">云创智城-yuncitys</span>
<a class="tag" taget="_blank" href="/search/%E6%99%BA%E8%83%BD%E5%85%85%E7%94%B5%E6%A1%A9/1.htm">智能充电桩</a><a class="tag" taget="_blank" href="/search/%E7%94%B5%E5%8A%A8%E8%BD%A6%E5%85%85%E7%94%B5%E7%B3%BB%E7%BB%9F/1.htm">电动车充电系统</a><a class="tag" taget="_blank" href="/search/%E8%99%9A%E6%8B%9F%E5%85%85%E7%94%B5%E6%A1%A9/1.htm">虚拟充电桩</a><a class="tag" taget="_blank" href="/search/%E6%99%BA%E6%85%A7%E5%9F%8E%E5%B8%82/1.htm">智慧城市</a><a class="tag" taget="_blank" href="/search/%E6%B1%BD%E8%BD%A6/1.htm">汽车</a><a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a>
                        <div>在新能源汽车产业迅猛发展的背景下,充电基础设施的高效管理与优化成为行业关键议题。云创智城两轮充电平台适时推出虚拟充电桩功能,凭借对物理汽车充电桩交互的模拟能力,为研发、运营等环节提供了极具价值的技术支持,其优势显著。一、功能详述于云创智城两轮充电平台的站点设备管理模块中,虚拟桩模拟器功能板块清晰呈现。在此,用户可针对虚拟充电桩的多项关键参数进行精准设定。服务器与编号设置:ChargePointSe</div>
                    </li>
                    <li><a href="/article/1890873126598799360.htm"
                           title="软考高级《系统架构设计师》知识点(三)" target="_blank">软考高级《系统架构设计师》知识点(三)</a>
                        <span class="text-muted">Ritchie里其</span>
<a class="tag" taget="_blank" href="/search/%E7%B3%BB%E7%BB%9F%E6%9E%B6%E6%9E%84/1.htm">系统架构</a>
                        <div>数据库系统数据库系统概念数据库系统DBS的组成:数据库、硬件、软件、人员。数据库管理系统DBMS的功能:数据定义、数据库操作、数据库运行管理、数据的存储管理、数据库的建立和维护等。DBMS的分类:关系数据库系统RDBS、面向对象的数据库系统OODBS、对象关系数据库系统ORDBS。数据库系统的体系结构:集中式数据库系统(所有东西集中在DBMS电脑上)、客户端/服务器体系结构(客户端负责请求和数据表</div>
                    </li>
                    <li><a href="/article/1890863292176461824.htm"
                           title="QT5实现简单的TCP通信" target="_blank">QT5实现简单的TCP通信</a>
                        <span class="text-muted">瑟寒凌风</span>
<a class="tag" taget="_blank" href="/search/QT%E5%BC%80%E5%8F%91/1.htm">QT开发</a>
                        <div>原文https://blog.csdn.net/u014695839/article/details/70041771/这段时间用到了QT的TCP通信,做了初步的学习与尝试,编写了一个客户端和服务器基于窗口通信的小例程。使用QT的网络套接字需要.pro文件中加入一句:QT+=network一、客户端的编写1、客户端的代码比服务器稍简单,总的来说,使用QT中的QTcpSocket类与服务器进行通信只</div>
                    </li>
                    <li><a href="/article/1890861901873737728.htm"
                           title="思科华为华三实战案例-在华三设备上配置远程管理协议-配置SSH协议案例4" target="_blank">思科华为华三实战案例-在华三设备上配置远程管理协议-配置SSH协议案例4</a>
                        <span class="text-muted">BinaryStarXin</span>
<a class="tag" taget="_blank" href="/search/%E7%BD%91%E7%BB%9C%E5%B7%A5%E7%A8%8B%E5%B8%88%E6%8F%90%E5%8D%87%E4%B9%8B%E8%B7%AF/1.htm">网络工程师提升之路</a><a class="tag" taget="_blank" href="/search/%E7%BD%91%E7%BB%9C%E5%B7%A5%E7%A8%8B%E5%B8%88%E6%8F%90%E5%8D%87%E8%AE%A1%E5%88%922/1.htm">网络工程师提升计划2</a><a class="tag" taget="_blank" href="/search/%E7%BD%91%E7%BB%9C%E5%B7%A5%E7%A8%8B%E5%B8%88%E6%8F%90%E5%8D%87%E8%AE%A1%E5%88%923/1.htm">网络工程师提升计划3</a><a class="tag" taget="_blank" href="/search/%E5%8D%8E%E4%B8%BA/1.htm">华为</a><a class="tag" taget="_blank" href="/search/%E7%BD%91%E7%BB%9C/1.htm">网络</a><a class="tag" taget="_blank" href="/search/%E6%9C%8D%E5%8A%A1%E5%99%A8/1.htm">服务器</a><a class="tag" taget="_blank" href="/search/%E7%BD%91%E7%BB%9C%E5%AE%89%E5%85%A8/1.htm">网络安全</a><a class="tag" taget="_blank" href="/search/%E7%BD%91%E7%BB%9C%E5%8D%8F%E8%AE%AE/1.htm">网络协议</a><a class="tag" taget="_blank" href="/search/%E4%BF%A1%E6%81%AF%E4%B8%8E%E9%80%9A%E4%BF%A1/1.htm">信息与通信</a><a class="tag" taget="_blank" href="/search/wireshark/1.htm">wireshark</a>
                        <div>3.3在华三设备上配置远程管理协议3.31通过Telnet协议远程管理华三网络设备通过Telnet功能远程登录管理华三设备如图3-3所示。作为客户端的R可以使用Telnet协议远程管理服务器SW1。3.32华三设备远程管理协议配置拓扑在本例中,把网络设备既作为Telnet协议的服务器端,又作为Telnet协议的客户端,即从一台网络设备去远程管理另外一台网络设备。在现实网络中,客户端是运行Secur</div>
                    </li>
                    <li><a href="/article/1890861270689705984.htm"
                           title="SoftEther 内网穿透配置及使用*" target="_blank">SoftEther 内网穿透配置及使用*</a>
                        <span class="text-muted">十八点四零</span>
<a class="tag" taget="_blank" href="/search/%E8%BF%90%E7%BB%B4/1.htm">运维</a><a class="tag" taget="_blank" href="/search/%E9%98%BF%E9%87%8C%E4%BA%91/1.htm">阿里云</a><a class="tag" taget="_blank" href="/search/%E7%BD%91%E7%BB%9C/1.htm">网络</a>
                        <div>一、程序简介SoftEtherV*N是个由筑波大学DaiyuuNobori研究生因硕士论文开发的开源、跨平台、多重协议的虚拟专用网方案。他让一些虚拟专用网协议像是SSLV*N、L2TP、IPsec、OpenV*N以及微软SSTP都由同一个单一V*N服务器提供。在2014年一月四日以GNU通用公共授权条款方式发布。SothEtherV*N是专门被设计为穿过防火墙的。它支持NAT穿透,使他能越过政府或</div>
                    </li>
                    <li><a href="/article/1890859000304562176.htm"
                           title="服务器虚拟化(详解)" target="_blank">服务器虚拟化(详解)</a>
                        <span class="text-muted">敖光 SRE</span>
<a class="tag" taget="_blank" href="/search/devops/1.htm">devops</a><a class="tag" taget="_blank" href="/search/%E6%9C%8D%E5%8A%A1%E5%99%A8/1.htm">服务器</a><a class="tag" taget="_blank" href="/search/%E8%BF%90%E7%BB%B4/1.htm">运维</a>
                        <div>服务器虚拟化是一种技术,通过将物理服务器的硬件资源(如CPU、内存、存储、网络等)抽象化并分割成多个虚拟机(VM),每个虚拟机可以独立运行不同的操作系统和应用程序。虚拟化使得资源使用更加高效,提供了更高的灵活性、可扩展性和隔离性。它已成为现代数据中心和云计算的核心技术之一。1.虚拟化的基本概念1.1虚拟化类型硬件虚拟化(FullVirtualization):通过虚拟机监控程序(Hyperviso</div>
                    </li>
                    <li><a href="/article/1890856476675731456.htm"
                           title="工业相机选型五要素" target="_blank">工业相机选型五要素</a>
                        <span class="text-muted">普密斯科技</span>
<a class="tag" taget="_blank" href="/search/%E6%95%B0%E7%A0%81%E7%9B%B8%E6%9C%BA/1.htm">数码相机</a><a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a><a class="tag" taget="_blank" href="/search/%E8%AE%A1%E7%AE%97%E6%9C%BA%E8%A7%86%E8%A7%89/1.htm">计算机视觉</a><a class="tag" taget="_blank" href="/search/%E8%A7%86%E8%A7%89%E6%A3%80%E6%B5%8B/1.htm">视觉检测</a><a class="tag" taget="_blank" href="/search/%E6%99%BA%E8%83%BD%E6%89%8B%E6%9C%BA/1.htm">智能手机</a><a class="tag" taget="_blank" href="/search/%E8%87%AA%E5%8A%A8%E5%8C%96/1.htm">自动化</a>
                        <div>在工业自动化、机器视觉等领域,工业相机扮演着至关重要的角色,为后续的分析和决策提供图像数据基础。但面对市场上琳琅满目的工业相机产品,如何正确选型成为众多从业者面临的难题。接下来,我们就深入探讨工业相机选型的关键要素。分辨率分辨率是工业相机最直观的参数之一,它决定了相机所拍摄图像的精细程度。简单来说,分辨率越高,图像中包含的像素点就越多,能够呈现的细节也就越丰富。例如在精密电子元件检测中,高分辨率相</div>
                    </li>
                    <li><a href="/article/1890854080050425856.htm"
                           title="电气小白的逆袭秘籍!西门子 PLCS7-SCL 编程手册来袭" target="_blank">电气小白的逆袭秘籍!西门子 PLCS7-SCL 编程手册来袭</a>
                        <span class="text-muted">白嫖党资源</span>
<a class="tag" taget="_blank" href="/search/%23/1.htm">#</a><a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0%E6%96%87%E6%A1%A3/1.htm">学习文档</a><a class="tag" taget="_blank" href="/search/%E8%A5%BF%E9%97%A8%E5%AD%90/1.htm">西门子</a><a class="tag" taget="_blank" href="/search/PLC/1.htm">PLC</a><a class="tag" taget="_blank" href="/search/S7-SCL/1.htm">S7-SCL</a><a class="tag" taget="_blank" href="/search/%E7%BC%96%E7%A8%8B/1.htm">编程</a><a class="tag" taget="_blank" href="/search/%E6%89%8B%E5%86%8C/1.htm">手册</a>
                        <div>电气小白的逆袭秘籍!西门子PLCS7-SCL编程手册来袭西门子PLCS7-SCL编程手册语言:简体中文下载地址:迅雷下载备注:作为一名电气初学者,怀揣着对自动化控制领域的热情,一头扎进西门子PLCS7编程的世界,却被SCL(结构化控制语言)编程的复杂语法和独特逻辑弄得晕头转向,是不是感觉满心沮丧?那些密密麻麻的代码,复杂的变量声明和数据结构,想要实现一个简单的控制功能都困难重重。别气馁,今天就给大</div>
                    </li>
                    <li><a href="/article/1890845382531936256.htm"
                           title="浅聊MQ之Kafka与RabbitMQ简用" target="_blank">浅聊MQ之Kafka与RabbitMQ简用</a>
                        <span class="text-muted">天天向上杰</span>
<a class="tag" taget="_blank" href="/search/kafka/1.htm">kafka</a><a class="tag" taget="_blank" href="/search/rabbitmq/1.htm">rabbitmq</a><a class="tag" taget="_blank" href="/search/%E5%88%86%E5%B8%83%E5%BC%8F/1.htm">分布式</a>
                        <div>(前记:内容有点多,先看目录再挑着看。)Kafka与RabbitMQ的使用举例Kafka的使用举例安装与启动:从ApacheKafka官网下载Kafka中间件的运行脚本。解压后,通过命令行启动Zookeeper(Kafka的运行依赖于Zookeeper)。启动Kafka的服务器进程。基本功能实现:生产者:启动生产者进程,向指定的主题(Topic)发送消息。消费者:启动消费者进程,从指定的主题中接收</div>
                    </li>
                    <li><a href="/article/1890845382972338176.htm"
                           title="浅识Linux高阶用法" target="_blank">浅识Linux高阶用法</a>
                        <span class="text-muted">天天向上杰</span>
<a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/%E8%BF%90%E7%BB%B4/1.htm">运维</a><a class="tag" taget="_blank" href="/search/%E6%9C%8D%E5%8A%A1%E5%99%A8/1.htm">服务器</a>
                        <div>(前记:内容有点多,先看目录再挑着看。)问题:在Java面试中,当被提问到Linux的高阶用法以及如何使用Linux将程序、数据库、中间件等部署在云上时,可以从以下几个方面进行回答:Linux的高阶用法Shell脚本编写:编写复杂的Shell脚本,实现自动化管理任务,如批量启动/停止服务、日志收集与分析等。利用正则表达式、循环、条件判断等Shell脚本特性,提高脚本的灵活性和可维护性。假设需要每天</div>
                    </li>
                    <li><a href="/article/1890843742999474176.htm"
                           title="数据驱动的DevOps,MLOps工具链初现端倪" target="_blank">数据驱动的DevOps,MLOps工具链初现端倪</a>
                        <span class="text-muted">AI架构设计之禅</span>
<a class="tag" taget="_blank" href="/search/%E8%AE%A1%E7%AE%97%E6%9C%BA%E8%BD%AF%E4%BB%B6%E7%BC%96%E7%A8%8B%E5%8E%9F%E7%90%86%E4%B8%8E%E5%BA%94%E7%94%A8%E5%AE%9E%E8%B7%B5/1.htm">计算机软件编程原理与应用实践</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a><a class="tag" taget="_blank" href="/search/kotlin/1.htm">kotlin</a><a class="tag" taget="_blank" href="/search/golang/1.htm">golang</a><a class="tag" taget="_blank" href="/search/%E6%9E%B6%E6%9E%84/1.htm">架构</a><a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a>
                        <div>DevOps,MLOps,数据驱动,工具链,自动化,持续交付,模型部署,模型监控1.背景介绍在当今以数据为中心的时代,软件开发和机器学习模型的部署和维护日益复杂。传统的开发流程难以满足快速迭代、持续交付和模型生命周期管理的需求。DevOps和MLOps应运而生,旨在通过自动化、持续集成和持续交付等实践,提高软件开发和机器学习模型部署的效率和可靠性。DevOps是一种文化和实践,旨在打破开发和运维之</div>
                    </li>
                    <li><a href="/article/1890843615723319296.htm"
                           title="边界扫描测试(Boundary Scan Test)优缺点" target="_blank">边界扫描测试(Boundary Scan Test)优缺点</a>
                        <span class="text-muted">JTAG测试白头翁</span>
<a class="tag" taget="_blank" href="/search/%E6%B5%8B%E8%AF%95%E5%B7%A5%E5%85%B7/1.htm">测试工具</a><a class="tag" taget="_blank" href="/search/%E6%B5%8B%E8%AF%95%E8%A6%86%E7%9B%96%E7%8E%87/1.htm">测试覆盖率</a><a class="tag" taget="_blank" href="/search/%E7%A1%AC%E4%BB%B6%E5%B7%A5%E7%A8%8B/1.htm">硬件工程</a><a class="tag" taget="_blank" href="/search/%E5%B5%8C%E5%85%A5%E5%BC%8F%E7%A1%AC%E4%BB%B6/1.htm">嵌入式硬件</a>
                        <div>边界扫描测试(BoundaryScanTest)定义:主要基于IEEE1149.1和1149.6标准(JTAG),通过芯片内置的扫描链访问和控制引脚状态,主要用于检测硬件连接的物理缺陷。优点:物理缺陷检测高效检测焊接问题、开路/短路、元器件缺失等制造缺陷。高覆盖率可覆盖传统测试难以触及的节点(如高密度BGA封装引脚)。无需物理探针通过JTAG接口即可访问内部节点,无需外部测试设备。自动化程度高支持</div>
                    </li>
                    <li><a href="/article/1890839205085507584.htm"
                           title="香港服务器里面说的CN2线路指的是什么?" target="_blank">香港服务器里面说的CN2线路指的是什么?</a>
                        <span class="text-muted">网硕互联的小客服</span>
<a class="tag" taget="_blank" href="/search/%E6%9C%8D%E5%8A%A1%E5%99%A8/1.htm">服务器</a><a class="tag" taget="_blank" href="/search/%E4%BA%91%E8%AE%A1%E7%AE%97/1.htm">云计算</a><a class="tag" taget="_blank" href="/search/%E8%BF%90%E7%BB%B4/1.htm">运维</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/windows/1.htm">windows</a>
                        <div>CN2线路指的是中国电信的"中国电信下一代承载网"(ChinaTelecomNextCarrierNetwork,简称CN2)。这是中国电信专门为高质量网络传输设计的骨干网络,具有低延迟、高带宽的特点,主要用于国际通信、跨境数据传输等场景。在香港服务器的环境下,CN2线路通常指的是香港的服务器通过CN2专线与中国大陆进行网络连接。与传统中国电信的163骨干网相比,CN2线路在网络质量、稳定性和速度</div>
                    </li>
                    <li><a href="/article/1890835047401975808.htm"
                           title="网络安全---SQL注入攻击" target="_blank">网络安全---SQL注入攻击</a>
                        <span class="text-muted">犹若故人归</span>
<a class="tag" taget="_blank" href="/search/%E7%BD%91%E7%BB%9C/1.htm">网络</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%BA%93/1.htm">数据库</a><a class="tag" taget="_blank" href="/search/postgresql/1.htm">postgresql</a><a class="tag" taget="_blank" href="/search/web%E5%AE%89%E5%85%A8/1.htm">web安全</a><a class="tag" taget="_blank" href="/search/docker/1.htm">docker</a><a class="tag" taget="_blank" href="/search/%E5%AE%89%E5%85%A8/1.htm">安全</a><a class="tag" taget="_blank" href="/search/sql/1.htm">sql</a>
                        <div>一、实验目的SQL注入是一种代码注入技术,可利用Web应用程序和数据库服务器之间接口中的漏洞。当用户的输入在发送到后端数据库服务器之前未在Web应用程序中正确检查时,该漏洞就存在。许多Web应用程序从用户处获取输入,然后使用这些输入构建SQL查询,以便从数据库获取信息。Web应用程序还使用SQL查询将信息存储在数据库中。这些都是开发Web应用程序的常见做法。当SQL查询没有仔细构建时,可能会出现S</div>
                    </li>
                    <li><a href="/article/1890834291475148800.htm"
                           title="labview与西门子1200 S7通信 PLC不用写通信程序,上位机直接读写DB块,不是调用DLL," target="_blank">labview与西门子1200 S7通信 PLC不用写通信程序,上位机直接读写DB块,不是调用DLL,</a>
                        <span class="text-muted">yTxroTQk</span>
<a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%BA%93/1.htm">数据库</a><a class="tag" taget="_blank" href="/search/labview/1.htm">labview</a><a class="tag" taget="_blank" href="/search/%E7%BD%91%E7%BB%9C/1.htm">网络</a>
                        <div>labview与西门子1200S7通信PLC不用写通信程序,上位机直接读写DB块,不是调用DLL,labviewS7协议,简单好用YID:6930654641311183沁星12随着科技的不断发展和应用领域的拓宽,实时控制系统在工业生产中扮演着至关重要的角色。在这个过程中,PLC(可编程逻辑控制器)作为一种可靠的自动化控制设备,被广泛应用于工业自动化领域。然而,对于PLC与上位机之间的通信问题,一</div>
                    </li>
                    <li><a href="/article/1890825339857334272.htm"
                           title="DataWhale 组队学习 wow-agent task2 体验总结归纳" target="_blank">DataWhale 组队学习 wow-agent task2 体验总结归纳</a>
                        <span class="text-muted">菜鸟码农01</span>
<a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0/1.htm">学习</a><a class="tag" taget="_blank" href="/search/datawhale/1.htm">datawhale</a>
                        <div>一、Llama-index知识体验1.ReActAgent与业务自动化ReActAgent:通过ReActAgent,业务逻辑可以自动转换为代码,只要有相应的API,模型就可以调用。这种自动化能力使得许多业务场景变得更加高效和智能化。LlamaIndex开源工具:LlamaIndex提供了一些开源工具,帮助开发者实现这些功能。通过访问官网,开发者可以获取这些工具并应用到自己的项目中。2.Agent</div>
                    </li>
                    <li><a href="/article/1890824708744605696.htm"
                           title="双端搭建个人博客" target="_blank">双端搭建个人博客</a>
                        <span class="text-muted">宇宙第一小趴菜</span>
<a class="tag" taget="_blank" href="/search/Vmware/1.htm">Vmware</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/wordpress/1.htm">wordpress</a>
                        <div>1.准备工作确保你的两个虚拟机都安装了以下软件:虚拟机1(Web服务器):Apache2,PHP虚拟机2(数据库服务器):MariaDB2.安装步骤虚拟机1(Web服务器)安装Apache2和PHP更新系统包列表:sudoaptupdate安装Apache2:sudoaptinstallapache2</div>
                    </li>
                    <li><a href="/article/1890819543555698688.htm"
                           title="网络安全-攻击流程-传输层" target="_blank">网络安全-攻击流程-传输层</a>
                        <span class="text-muted">星河776(重名区分)</span>
<a class="tag" taget="_blank" href="/search/%E7%BD%91%E7%BB%9C%E5%AE%89%E5%85%A8/1.htm">网络安全</a><a class="tag" taget="_blank" href="/search/web%E5%AE%89%E5%85%A8/1.htm">web安全</a><a class="tag" taget="_blank" href="/search/%E5%AE%89%E5%85%A8/1.htm">安全</a><a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0/1.htm">学习</a>
                        <div>传输层攻击主要针对OSI模型的第四层,涉及TCP和UDP协议的安全漏洞。以下是常见攻击类型及其流程,以及防御措施:1.SYN洪水攻击(TCP半连接攻击)攻击流程:目标选择:确定目标服务器的IP地址和开放端口。伪造请求:攻击者伪造大量虚假源IP地址,向目标发送TCPSYN包。资源消耗:服务器为每个SYN分配资源(如连接表条目),并回复SYN-ACK包到伪造IP。连接未完成:因伪造IP无响应,服务器持</div>
                    </li>
                    <li><a href="/article/1890811727436640256.htm"
                           title="疯狂前端面试题(四)" target="_blank">疯狂前端面试题(四)</a>
                        <span class="text-muted">吃蛋糕的居居</span>
<a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/html5/1.htm">html5</a><a class="tag" taget="_blank" href="/search/ajax/1.htm">ajax</a><a class="tag" taget="_blank" href="/search/%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F/1.htm">正则表达式</a><a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a><a class="tag" taget="_blank" href="/search/firefox/1.htm">firefox</a><a class="tag" taget="_blank" href="/search/chrome/1.htm">chrome</a>
                        <div>一、Ajax、JSONP、JSON、Fetch和Axios技术详解1.Ajax(异步JavaScript和XML)什么是Ajax?Ajax是一种用于在不刷新页面的情况下与服务器进行数据交互的技术。它通过`XMLHttpRequest`对象实现。优点-支持同步和异步请求。-能够发送和接收多种格式的数据(如JSON、XML等)。缺点-原生代码较复杂。-不支持跨域请求(需要服务器配置CORS或使用JSO</div>
                    </li>
                    <li><a href="/article/1890808575865974784.htm"
                           title="go文件服务器mimetype,解决golang post文件时Content-Type出现的问题" target="_blank">go文件服务器mimetype,解决golang post文件时Content-Type出现的问题</a>
                        <span class="text-muted">付游</span>
<a class="tag" taget="_blank" href="/search/go%E6%96%87%E4%BB%B6%E6%9C%8D%E5%8A%A1%E5%99%A8mimetype/1.htm">go文件服务器mimetype</a>
                        <div>同事用php写了一个接口,要上传文件,让我做下测试,直接用curl命令调用成功,然后想用golang写个示例,源码如下:packagemainimport("bytes""fmt""io/ioutil""mime/multipart""net/http")funcmain(){uri:="http://xxxxxxxxxxxx/api/fileattr"//URL地址xxxxxxxxxxxx由商务</div>
                    </li>
                    <li><a href="/article/1890800373715759104.htm"
                           title="【Vite】前端构建工具详解" target="_blank">【Vite】前端构建工具详解</a>
                        <span class="text-muted">Peter-Lu</span>
<a class="tag" taget="_blank" href="/search/%23/1.htm">#</a><a class="tag" taget="_blank" href="/search/Vite/1.htm">Vite</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a><a class="tag" taget="_blank" href="/search/npm/1.htm">npm</a><a class="tag" taget="_blank" href="/search/node.js/1.htm">node.js</a><a class="tag" taget="_blank" href="/search/webpack/1.htm">webpack</a>
                        <div>文章目录一、构建工具概述1.什么是构建工具?2.常见的构建工具二、Vite的优势1.极速的开发服务器2.极速的冷启动3.高效的HMR(热模块替换)4.生产环境中的优化三、Vite的基本用法1.安装Vite2.项目结构3.启动开发服务器4.构建生产版本四、Vite的核心概念1.按需加载2.ESBuild3.Rollup打包五、Vite的扩展与定制1.插件系统2.环境变量六、Vite的应用场景1.适合</div>
                    </li>
                    <li><a href="/article/1890799111607742464.htm"
                           title="解决远程桌面连接后没有声音的问题" target="_blank">解决远程桌面连接后没有声音的问题</a>
                        <span class="text-muted">huanghong6956</span>

                        <div>1.首先确定被远程主机已安装声卡和驱动,换句话说就是被远程主机可以出声2.在被远程主机上,开始-运行-gpedit.msc,打开组策略计算机配置-管理模板-终端服务-客户端/服务器数据重定向-启用“允许音频重定向3.重启4.欧了</div>
                    </li>
                    <li><a href="/article/1890795709175754752.htm"
                           title="夯实生态合作基础 | 华宇TAS应用中间件与安擎EG920A-G20、EG921A-G20完成兼容互认证" target="_blank">夯实生态合作基础 | 华宇TAS应用中间件与安擎EG920A-G20、EG921A-G20完成兼容互认证</a>
                        <span class="text-muted">Thuni_soft</span>
<a class="tag" taget="_blank" href="/search/%E4%B8%AD%E9%97%B4%E4%BB%B6/1.htm">中间件</a>
                        <div>近日,华宇TAS应用中间件完成了与安擎计算机信息股份有限公司的EG920A-G20、EG921A-G20的兼容适配,双方产品协同运行稳定、性能表现卓越、使用体验良好,可满足用户安全性、可靠性及关键性应用需求。这也标志着华宇进一步扩大了在整机侧的生态及合作厂商。安擎计算机信息股份有限公司安擎计算机信息股份有限公司是专业的AI服务器及定制化方案提供商,具备服务器全生命周期研产销能力,始终致力于服务器自</div>
                    </li>
                    <li><a href="/article/1890795709595185152.htm"
                           title="信创生态版图持续拓宽 | 华宇TAS应用中间件与宝德自强PR210K系列服务器完成兼容互认证" target="_blank">信创生态版图持续拓宽 | 华宇TAS应用中间件与宝德自强PR210K系列服务器完成兼容互认证</a>
                        <span class="text-muted">Thuni_soft</span>
<a class="tag" taget="_blank" href="/search/%E4%B8%AD%E9%97%B4%E4%BB%B6/1.htm">中间件</a><a class="tag" taget="_blank" href="/search/%E6%9C%8D%E5%8A%A1%E5%99%A8/1.htm">服务器</a><a class="tag" taget="_blank" href="/search/%E8%BF%90%E7%BB%B4/1.htm">运维</a>
                        <div>近日,华宇TAS应用中间件软件完成与宝德计算机系统股份有限公司自强PR210K系列服务器、自强PT620Q、PT620W台式机的兼容适配,双方将深入融合各自的产品优势和服务能力,为企事业单位的数字化转型提供高性价比、安全可靠的解决方案,充分满足客户对国产化应用的高标准要宝德计算机系统股份有限公司宝德计算机系统股份有限公司是中国领先的计算产品方案提供商,以服务器和PC整机的研发、生产、销售及提供相关</div>
                    </li>
                                <li><a href="/article/69.htm"
                                       title="对股票分析时要注意哪些主要因素?" target="_blank">对股票分析时要注意哪些主要因素?</a>
                                    <span class="text-muted">会飞的奇葩猪</span>
<a class="tag" taget="_blank" href="/search/%E8%82%A1%E7%A5%A8+%E5%88%86%E6%9E%90+%E4%BA%91%E6%8E%8C%E8%82%A1%E5%90%A7/1.htm">股票 分析 云掌股吧</a>
                                    <div> 
  众所周知,对散户投资者来说,股票技术分析是应战股市的核心武器,想学好股票的技术分析一定要知道哪些是重点学习的,其实非常简单,我们只要记住三个要素:成交量、价格趋势、振荡指标。 
 
    一、成交量 
 
  大盘的成交量状态。成交量大说明市场的获利机会较多,成交量小说明市场的获利机会较少。当沪市的成交量超过150亿时是强市市场状态,运用技术找综合买点较准;</div>
                                </li>
                                <li><a href="/article/196.htm"
                                       title="【Scala十八】视图界定与上下文界定" target="_blank">【Scala十八】视图界定与上下文界定</a>
                                    <span class="text-muted">bit1129</span>
<a class="tag" taget="_blank" href="/search/scala/1.htm">scala</a>
                                    <div>Context Bound,上下文界定,是Scala为隐式参数引入的一种语法糖,使得隐式转换的编码更加简洁。 
  
隐式参数 
首先引入一个泛型函数max,用于取a和b的最大值 
  def max[T](a: T, b: T) = {
    if (a > b) a else b
  } 
 因为T是未知类型,只有运行时才会代入真正的类型,因此调用a > </div>
                                </li>
                                <li><a href="/article/323.htm"
                                       title="C语言的分支——Object-C程序设计阅读有感" target="_blank">C语言的分支——Object-C程序设计阅读有感</a>
                                    <span class="text-muted">darkblue086</span>
<a class="tag" taget="_blank" href="/search/apple/1.htm">apple</a><a class="tag" taget="_blank" href="/search/c/1.htm">c</a><a class="tag" taget="_blank" href="/search/%E6%A1%86%E6%9E%B6/1.htm">框架</a><a class="tag" taget="_blank" href="/search/cocoa/1.htm">cocoa</a>
                                    <div>自从1972年贝尔实验室Dennis Ritchie开发了C语言,C语言已经有了很多版本和实现,从Borland到microsoft还是GNU、Apple都提供了不同时代的多种选择,我们知道C语言是基于Thompson开发的B语言的,Object-C是以SmallTalk-80为基础的。和C++不同的是,Object C并不是C的超集,因为有很多特性与C是不同的。 
Object-C程序设计这本书</div>
                                </li>
                                <li><a href="/article/450.htm"
                                       title="去除浏览器对表单值的记忆" target="_blank">去除浏览器对表单值的记忆</a>
                                    <span class="text-muted">周凡杨</span>
<a class="tag" taget="_blank" href="/search/html/1.htm">html</a><a class="tag" taget="_blank" href="/search/%E8%AE%B0%E5%BF%86/1.htm">记忆</a><a class="tag" taget="_blank" href="/search/autocomplete/1.htm">autocomplete</a><a class="tag" taget="_blank" href="/search/form/1.htm">form</a><a class="tag" taget="_blank" href="/search/%E6%B5%8F%E8%A7%88/1.htm">浏览</a>
                                    <div>  
                                   &n</div>
                                </li>
                                <li><a href="/article/577.htm"
                                       title="java的树形通讯录" target="_blank">java的树形通讯录</a>
                                    <span class="text-muted">g21121</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a>
                                    <div>最近用到企业通讯录,虽然以前也开发过,但是用的是jsf,拼成的树形,及其笨重和难维护。后来就想到直接生成json格式字符串,页面上也好展现。 
	// 首先取出每个部门的联系人
			for (int i = 0; i < depList.size(); i++) {
				List<Contacts> list = getContactList(depList.get(i</div>
                                </li>
                                <li><a href="/article/704.htm"
                                       title="Nginx安装部署" target="_blank">Nginx安装部署</a>
                                    <span class="text-muted">510888780</span>
<a class="tag" taget="_blank" href="/search/nginx/1.htm">nginx</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a>
                                    <div>Nginx ("engine x") 是一个高性能的 HTTP 和 反向代理 服务器,也是一个 IMAP/POP3/SMTP 代理服务器。 Nginx 是由 Igor Sysoev 为俄罗斯访问量第二的 Rambler.ru 站点开发的,第一个公开版本0.1.0发布于2004年10月4日。其将源代码以类BSD许可证的形式发布,因它的稳定性、丰富的功能集、示例配置文件和低系统资源</div>
                                </li>
                                <li><a href="/article/831.htm"
                                       title="java servelet异步处理请求" target="_blank">java servelet异步处理请求</a>
                                    <span class="text-muted">墙头上一根草</span>
<a class="tag" taget="_blank" href="/search/%EF%BD%8A%EF%BD%81%EF%BD%96%EF%BD%81/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E5%BC%82%E6%AD%A5%E8%BF%94%E5%9B%9E/1.htm">异步返回</a><a class="tag" taget="_blank" href="/search/%EF%BD%93%EF%BD%85%EF%BD%92%EF%BD%96%EF%BD%8C%EF%BD%85%EF%BD%94/1.htm">servlet</a>
                                    <div>servlet3.0以后支持异步处理请求,具体是使用AsyncContext ,包装httpservletRequest以及httpservletResponse具有异步的功能, 
   
  
  final AsyncContext ac = request.startAsync(request, response); 
  ac.s</div>
                                </li>
                                <li><a href="/article/958.htm"
                                       title="我的spring学习笔记8-Spring中Bean的实例化" target="_blank">我的spring学习笔记8-Spring中Bean的实例化</a>
                                    <span class="text-muted">aijuans</span>
<a class="tag" taget="_blank" href="/search/Spring+3/1.htm">Spring 3</a>
                                    <div>在Spring中要实例化一个Bean有几种方法: 
 
1、最常用的(普通方法) 
 
 
<bean id="myBean" class="www.6e6.org.MyBean" /> 
 
使用这样方法,按Spring就会使用Bean的默认构造方法,也就是把没有参数的构造方法来建立Bean实例。 
 
(有构造方法的下个文细说) 
 
2、还</div>
                                </li>
                                <li><a href="/article/1085.htm"
                                       title="为Mysql创建最优的索引" target="_blank">为Mysql创建最优的索引</a>
                                    <span class="text-muted">annan211</span>
<a class="tag" taget="_blank" href="/search/mysql/1.htm">mysql</a><a class="tag" taget="_blank" href="/search/%E7%B4%A2%E5%BC%95/1.htm">索引</a>
                                    <div>


	索引对于良好的性能非常关键,尤其是当数据规模越来越大的时候,索引的对性能的影响越发重要。
	索引经常会被误解甚至忽略,而且经常被糟糕的设计。
	索引优化应该是对查询性能优化最有效的手段了,索引能够轻易将查询性能提高几个数量级,最优的索引会比
	较好的索引性能要好2个数量级。
	
	1 索引的类型
	  (1) B-Tree
	    不出意外,这里提到的索引都是指 B-</div>
                                </li>
                                <li><a href="/article/1212.htm"
                                       title="日期函数" target="_blank">日期函数</a>
                                    <span class="text-muted">百合不是茶</span>
<a class="tag" taget="_blank" href="/search/oracle/1.htm">oracle</a><a class="tag" taget="_blank" href="/search/sql/1.htm">sql</a><a class="tag" taget="_blank" href="/search/%E6%97%A5%E6%9C%9F%E5%87%BD%E6%95%B0/1.htm">日期函数</a><a class="tag" taget="_blank" href="/search/%E6%9F%A5%E8%AF%A2/1.htm">查询</a>
                                    <div>  
ORACLE日期时间函数大全

   TO_DATE格式(以时间:2007-11-02   13:45:25为例)
   
        Year:      
        yy two digits 两位年                显示值:07
        yyy three digits 三位年                显示值:007
   </div>
                                </li>
                                <li><a href="/article/1339.htm"
                                       title="线程优先级" target="_blank">线程优先级</a>
                                    <span class="text-muted">bijian1013</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/thread/1.htm">thread</a><a class="tag" taget="_blank" href="/search/%E5%A4%9A%E7%BA%BF%E7%A8%8B/1.htm">多线程</a><a class="tag" taget="_blank" href="/search/java%E5%A4%9A%E7%BA%BF%E7%A8%8B/1.htm">java多线程</a>
                                    <div>多线程运行时需要定义线程运行的先后顺序。 
线程优先级是用数字表示,数字越大线程优先级越高,取值在1到10,默认优先级为5。 
实例: 
package com.bijian.study;

/**
 * 因为在代码段当中把线程B的优先级设置高于线程A,所以运行结果先执行线程B的run()方法后再执行线程A的run()方法
 * 但在实际中,JAVA的优先级不准,强烈不建议用此方法来控制执</div>
                                </li>
                                <li><a href="/article/1466.htm"
                                       title="适配器模式和代理模式的区别" target="_blank">适配器模式和代理模式的区别</a>
                                    <span class="text-muted">bijian1013</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F/1.htm">设计模式</a>
                                    <div>一.简介        适配器模式:适配器模式(英语:adapter pattern)有时候也称包装样式或者包装。将一个类的接口转接成用户所期待的。一个适配使得因接口不兼容而不能在一起工作的类工作在一起,做法是将类别自己的接口包裹在一个已存在的类中。      &nbs</div>
                                </li>
                                <li><a href="/article/1593.htm"
                                       title="【持久化框架MyBatis3三】MyBatis3 SQL映射配置文件" target="_blank">【持久化框架MyBatis3三】MyBatis3 SQL映射配置文件</a>
                                    <span class="text-muted">bit1129</span>
<a class="tag" taget="_blank" href="/search/Mybatis3/1.htm">Mybatis3</a>
                                    <div> SQL映射配置文件一方面类似于Hibernate的映射配置文件,通过定义实体与关系表的列之间的对应关系。另一方面使用<select>,<insert>,<delete>,<update>元素定义增删改查的SQL语句, 
这些元素包含三方面内容 
1. 要执行的SQL语句 
2. SQL语句的入参,比如查询条件 
3. SQL语句的返回结果</div>
                                </li>
                                <li><a href="/article/1720.htm"
                                       title="oracle大数据表复制备份个人经验" target="_blank">oracle大数据表复制备份个人经验</a>
                                    <span class="text-muted">bitcarter</span>
<a class="tag" taget="_blank" href="/search/oracle/1.htm">oracle</a><a class="tag" taget="_blank" href="/search/%E5%A4%A7%E8%A1%A8%E5%A4%87%E4%BB%BD/1.htm">大表备份</a><a class="tag" taget="_blank" href="/search/%E5%A4%A7%E8%A1%A8%E6%95%B0%E6%8D%AE%E5%A4%8D%E5%88%B6/1.htm">大表数据复制</a>
                                    <div>前提: 
   数据库仓库A(就拿oracle11g为例)中有两个用户user1和user2,现在有user1中有表ldm_table1,且表ldm_table1有数据5千万以上,ldm_table1中的数据是从其他库B(数据源)中抽取过来的,前期业务理解不够或者需求有变,数据有变动需要重新从B中抽取数据到A库表ldm_table1中。 
    </div>
                                </li>
                                <li><a href="/article/1847.htm"
                                       title="HTTP加速器varnish安装小记" target="_blank">HTTP加速器varnish安装小记</a>
                                    <span class="text-muted">ronin47</span>
<a class="tag" taget="_blank" href="/search/http+varnish+%E5%8A%A0%E9%80%9F/1.htm">http varnish 加速</a>
                                    <div>上午共享的那个varnish安装手册,个人看了下,有点不知所云,好吧~看来还是先安装玩玩! 
苦逼公司服务器没法连外网,不能用什么wget或yum命令直接下载安装,每每看到别人博客贴出的在线安装代码时,总有一股羡慕嫉妒“恨”冒了出来。。。好吧,既然没法上外网,那只能麻烦点通过下载源码来编译安装了! 
Varnish 3.0.4下载地址: http://repo.varnish-cache.org/</div>
                                </li>
                                <li><a href="/article/1974.htm"
                                       title="java-73-输入一个字符串,输出该字符串中对称的子字符串的最大长度" target="_blank">java-73-输入一个字符串,输出该字符串中对称的子字符串的最大长度</a>
                                    <span class="text-muted">bylijinnan</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a>
                                    <div>

public class LongestSymmtricalLength {

	/*
	 * Q75题目:输入一个字符串,输出该字符串中对称的子字符串的最大长度。
	 * 比如输入字符串“google”,由于该字符串里最长的对称子字符串是“goog”,因此输出4。
	 */
	
	public static void main(String[] args) {
		Str</div>
                                </li>
                                <li><a href="/article/2101.htm"
                                       title="学习编程的一点感想" target="_blank">学习编程的一点感想</a>
                                    <span class="text-muted">Cb123456</span>
<a class="tag" taget="_blank" href="/search/%E7%BC%96%E7%A8%8B/1.htm">编程</a><a class="tag" taget="_blank" href="/search/%E6%84%9F%E6%83%B3/1.htm">感想</a><a class="tag" taget="_blank" href="/search/Gis/1.htm">Gis</a>
                                    <div>       写点感想,总结一些,也顺便激励一些自己.现在就是复习阶段,也做做项目. 
  
   本专业是GIS专业,当初觉得本专业太水,靠这个会活不下去的,所以就报了培训班。学习的时候,进入状态很慢,而且当初进去的时候,已经上到Java高级阶段了,所以.....,呵呵,之后有点感觉了,不过,还是不好好写代码,还眼高手低的,有</div>
                                </li>
                                <li><a href="/article/2228.htm"
                                       title="[能源与安全]美国与中国" target="_blank">[能源与安全]美国与中国</a>
                                    <span class="text-muted">comsci</span>
<a class="tag" taget="_blank" href="/search/%E8%83%BD%E6%BA%90/1.htm">能源</a>
                                    <div> 
 
     现在有一个局面:地球上的石油只剩下N桶,这些油只够让中国和美国这两个国家中的一个顺利过渡到宇宙时代,但是如果这两个国家为争夺这些石油而发生战争,其结果是两个国家都无法平稳过渡到宇宙时代。。。。而且在战争中,剩下的石油也会被快速消耗在战争中,结果是两败俱伤。。。 
 
 
      在这个大</div>
                                </li>
                                <li><a href="/article/2355.htm"
                                       title="SEMI-JOIN执行计划突然变成HASH JOIN了 的原因分析" target="_blank">SEMI-JOIN执行计划突然变成HASH JOIN了 的原因分析</a>
                                    <span class="text-muted">cwqcwqmax9</span>
<a class="tag" taget="_blank" href="/search/oracle/1.htm">oracle</a>
                                    <div>甲说: 
A B两个表总数据量都很大,在百万以上。 
idx1  idx2字段表示是索引字段 
A B 两表上都有 
col1字段表示普通字段 
 
select xxx from A 
where A.idx1 between mmm and nnn 
     and exists (select 1 from B where B.idx2 =</div>
                                </li>
                                <li><a href="/article/2482.htm"
                                       title="SpringMVC-ajax返回值乱码解决方案" target="_blank">SpringMVC-ajax返回值乱码解决方案</a>
                                    <span class="text-muted">dashuaifu</span>
<a class="tag" taget="_blank" href="/search/Ajax/1.htm">Ajax</a><a class="tag" taget="_blank" href="/search/springMVC/1.htm">springMVC</a><a class="tag" taget="_blank" href="/search/response/1.htm">response</a><a class="tag" taget="_blank" href="/search/%E4%B8%AD%E6%96%87%E4%B9%B1%E7%A0%81/1.htm">中文乱码</a>
                                    <div>  
SpringMVC-ajax返回值乱码解决方案 
  
一:(自己总结,测试过可行) 
ajax返回如果含有中文汉字,则使用:(如下例:) 
@RequestMapping(value="/xxx.do")       public @ResponseBody void getPunishReasonB</div>
                                </li>
                                <li><a href="/article/2609.htm"
                                       title="Linux系统中查看日志的常用命令" target="_blank">Linux系统中查看日志的常用命令</a>
                                    <span class="text-muted">dcj3sjt126com</span>
<a class="tag" taget="_blank" href="/search/OS/1.htm">OS</a>
                                    <div>因为在日常的工作中,出问题的时候查看日志是每个管理员的习惯,作为初学者,为了以后的需要,我今天将下面这些查看命令共享给各位 
cat 
tail -f 
日 志 文 件 说 明 
/var/log/message 系统启动后的信息和错误日志,是Red Hat Linux中最常用的日志之一 
/var/log/secure 与安全相关的日志信息 
/var/log/maillog 与邮件相关的日志信</div>
                                </li>
                                <li><a href="/article/2736.htm"
                                       title="[应用结构]应用" target="_blank">[应用结构]应用</a>
                                    <span class="text-muted">dcj3sjt126com</span>
<a class="tag" taget="_blank" href="/search/PHP/1.htm">PHP</a><a class="tag" taget="_blank" href="/search/yii2/1.htm">yii2</a>
                                    <div>应用主体 
应用主体是管理 Yii 应用系统整体结构和生命周期的对象。 每个Yii应用系统只能包含一个应用主体,应用主体在 入口脚本中创建并能通过表达式 \Yii::$app 全局范围内访问。 
 
 补充: 当我们说"一个应用",它可能是一个应用主体对象,也可能是一个应用系统,是根据上下文来决定[译:中文为避免歧义,Application翻译为应</div>
                                </li>
                                <li><a href="/article/2863.htm"
                                       title="assertThat用法" target="_blank">assertThat用法</a>
                                    <span class="text-muted">eksliang</span>
<a class="tag" taget="_blank" href="/search/JUnit/1.htm">JUnit</a><a class="tag" taget="_blank" href="/search/assertThat/1.htm">assertThat</a>
                                    <div>junit4.0  assertThat用法 
一般匹配符1、assertThat( testedNumber, allOf( greaterThan(8), lessThan(16) ) ); 
注释: allOf匹配符表明如果接下来的所有条件必须都成立测试才通过,相当于“与”(&&) 
2、assertThat( testedNumber, anyOf( g</div>
                                </li>
                                <li><a href="/article/2990.htm"
                                       title="android点滴2" target="_blank">android点滴2</a>
                                    <span class="text-muted">gundumw100</span>
<a class="tag" taget="_blank" href="/search/%E5%BA%94%E7%94%A8%E6%9C%8D%E5%8A%A1%E5%99%A8/1.htm">应用服务器</a><a class="tag" taget="_blank" href="/search/android/1.htm">android</a><a class="tag" taget="_blank" href="/search/%E7%BD%91%E7%BB%9C%E5%BA%94%E7%94%A8/1.htm">网络应用</a><a class="tag" taget="_blank" href="/search/OS/1.htm">OS</a><a class="tag" taget="_blank" href="/search/HTC/1.htm">HTC</a>
                                    <div>如何让Drawable绕着中心旋转? 
 

Animation a = new RotateAnimation(0.0f, 360.0f,
Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF,0.5f);
a.setRepeatCount(-1);
a.setDuration(1000);
 
 
如何控制Andro</div>
                                </li>
                                <li><a href="/article/3117.htm"
                                       title="超简洁的CSS下拉菜单" target="_blank">超简洁的CSS下拉菜单</a>
                                    <span class="text-muted">ini</span>
<a class="tag" taget="_blank" href="/search/html/1.htm">html</a><a class="tag" taget="_blank" href="/search/Web/1.htm">Web</a><a class="tag" taget="_blank" href="/search/%E5%B7%A5%E4%BD%9C/1.htm">工作</a><a class="tag" taget="_blank" href="/search/html5/1.htm">html5</a><a class="tag" taget="_blank" href="/search/css/1.htm">css</a>
                                    <div>效果体验:http://hovertree.com/texiao/css/3.htmHTML文件: 
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>简洁的HTML+CSS下拉菜单-HoverTree</title></div>
                                </li>
                                <li><a href="/article/3244.htm"
                                       title="kafka consumer防止数据丢失" target="_blank">kafka consumer防止数据丢失</a>
                                    <span class="text-muted">kane_xie</span>
<a class="tag" taget="_blank" href="/search/kafka/1.htm">kafka</a><a class="tag" taget="_blank" href="/search/offset+commit/1.htm">offset commit</a>
                                    <div>kafka最初是被LinkedIn设计用来处理log的分布式消息系统,因此它的着眼点不在数据的安全性(log偶尔丢几条无所谓),换句话说kafka并不能完全保证数据不丢失。 
  
尽管kafka官网声称能够保证at-least-once,但如果consumer进程数小于partition_num,这个结论不一定成立。 
  
考虑这样一个case,partiton_num=2</div>
                                </li>
                                <li><a href="/article/3371.htm"
                                       title="@Repository、@Service、@Controller 和 @Component" target="_blank">@Repository、@Service、@Controller 和 @Component</a>
                                    <span class="text-muted">mhtbbx</span>
<a class="tag" taget="_blank" href="/search/DAO/1.htm">DAO</a><a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a><a class="tag" taget="_blank" href="/search/bean/1.htm">bean</a><a class="tag" taget="_blank" href="/search/prototype/1.htm">prototype</a>
                                    <div>@Repository、@Service、@Controller 和 @Component 将类标识为Bean 
Spring 自 2.0 版本开始,陆续引入了一些注解用于简化 Spring 的开发。@Repository注解便属于最先引入的一批,它用于将数据访问层 (DAO 层 ) 的类标识为 Spring Bean。具体只需将该注解标注在 DAO类上即可。同时,为了让 Spring 能够扫描类</div>
                                </li>
                                <li><a href="/article/3498.htm"
                                       title="java 多线程高并发读写控制 误区" target="_blank">java 多线程高并发读写控制 误区</a>
                                    <span class="text-muted">qifeifei</span>
<a class="tag" taget="_blank" href="/search/java+thread/1.htm">java thread</a>
                                    <div>先看一下下面的错误代码,对写加了synchronized控制,保证了写的安全,但是问题在哪里呢? 
public class testTh7 {
	private String data;
	public String read(){
		System.out.println(Thread.currentThread().getName() + "read data " </div>
                                </li>
                                <li><a href="/article/3625.htm"
                                       title="mongodb replica set(副本集)设置步骤" target="_blank">mongodb replica set(副本集)设置步骤</a>
                                    <span class="text-muted">tcrct</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/mongodb/1.htm">mongodb</a>
                                    <div>网上已经有一大堆的设置步骤的了,根据我遇到的问题,整理一下,如下: 
 
首先先去下载一个mongodb最新版,目前最新版应该是2.6 
 

cd /usr/local/bin
wget http://fastdl.mongodb.org/linux/mongodb-linux-x86_64-2.6.0.tgz
tar -zxvf  mongodb-linux-x86_64-2.6.0.t</div>
                                </li>
                                <li><a href="/article/3752.htm"
                                       title="rust学习笔记" target="_blank">rust学习笔记</a>
                                    <span class="text-muted">wudixiaotie</span>
<a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/1.htm">学习笔记</a>
                                    <div>1.rust里绑定变量是let,默认绑定了的变量是不可更改的,所以如果想让变量可变就要加上mut。 
let x = 1; let mut y = 2; 
2.match 相当于erlang中的case,但是case的每一项后都是分号,但是rust的match却是逗号。 
3.match 的每一项最后都要加逗号,但是最后一项不加也不会报错,所有结尾加逗号的用法都是类似。 
4.每个语句结尾都要加分</div>
                                </li>
                </ul>
            </div>
        </div>
    </div>

<div>
    <div class="container">
        <div class="indexes">
            <strong>按字母分类:</strong>
            <a href="/tags/A/1.htm" target="_blank">A</a><a href="/tags/B/1.htm" target="_blank">B</a><a href="/tags/C/1.htm" target="_blank">C</a><a
                href="/tags/D/1.htm" target="_blank">D</a><a href="/tags/E/1.htm" target="_blank">E</a><a href="/tags/F/1.htm" target="_blank">F</a><a
                href="/tags/G/1.htm" target="_blank">G</a><a href="/tags/H/1.htm" target="_blank">H</a><a href="/tags/I/1.htm" target="_blank">I</a><a
                href="/tags/J/1.htm" target="_blank">J</a><a href="/tags/K/1.htm" target="_blank">K</a><a href="/tags/L/1.htm" target="_blank">L</a><a
                href="/tags/M/1.htm" target="_blank">M</a><a href="/tags/N/1.htm" target="_blank">N</a><a href="/tags/O/1.htm" target="_blank">O</a><a
                href="/tags/P/1.htm" target="_blank">P</a><a href="/tags/Q/1.htm" target="_blank">Q</a><a href="/tags/R/1.htm" target="_blank">R</a><a
                href="/tags/S/1.htm" target="_blank">S</a><a href="/tags/T/1.htm" target="_blank">T</a><a href="/tags/U/1.htm" target="_blank">U</a><a
                href="/tags/V/1.htm" target="_blank">V</a><a href="/tags/W/1.htm" target="_blank">W</a><a href="/tags/X/1.htm" target="_blank">X</a><a
                href="/tags/Y/1.htm" target="_blank">Y</a><a href="/tags/Z/1.htm" target="_blank">Z</a><a href="/tags/0/1.htm" target="_blank">其他</a>
        </div>
    </div>
</div>
<footer id="footer" class="mb30 mt30">
    <div class="container">
        <div class="footBglm">
            <a target="_blank" href="/">首页</a> -
            <a target="_blank" href="/custom/about.htm">关于我们</a> -
            <a target="_blank" href="/search/Java/1.htm">站内搜索</a> -
            <a target="_blank" href="/sitemap.txt">Sitemap</a> -
            <a target="_blank" href="/custom/delete.htm">侵权投诉</a>
        </div>
        <div class="copyright">版权所有 IT知识库 CopyRight © 2000-2050 E-COM-NET.COM , All Rights Reserved.
<!--            <a href="https://beian.miit.gov.cn/" rel="nofollow" target="_blank">京ICP备09083238号</a><br>-->
        </div>
    </div>
</footer>
<!-- 代码高亮 -->
<script type="text/javascript" src="/static/syntaxhighlighter/scripts/shCore.js"></script>
<script type="text/javascript" src="/static/syntaxhighlighter/scripts/shLegacy.js"></script>
<script type="text/javascript" src="/static/syntaxhighlighter/scripts/shAutoloader.js"></script>
<link type="text/css" rel="stylesheet" href="/static/syntaxhighlighter/styles/shCoreDefault.css"/>
<script type="text/javascript" src="/static/syntaxhighlighter/src/my_start_1.js"></script>





</body>

</html>