1、概念:SpringCloudConfig 高级配置

2、具体内容

在 SpringCloudConfig 之中考虑到所有配置文件都暴露在远程仓库之中的安全性问题,所以提供有安全访问的处理机制,这样可以对一些数据进行加密以及在读取的时候实现解密的控制。

2.1、密钥加密处理

所谓的密钥的处理指的就是设置一个公共的操作访问密码,而后通过 curl 命令对要进行访问的数据做一个加密处理即可。

1、 【microcloud-config-7101】修改 application.yml 配置文件,进行密钥的设置:

encrypt:
key: studyjava.cn # 设置了一个加密的访问密钥

随后立即启动“microcloud-config-7101”微服务进程。

2、 更换要使用的 JCE(下载地址:http://www.oracle.com/technetwork/java/javase/downloads/jce8-download-2133166.html)

· 将下载后的文件做解压缩处理,而后保存到使用的 JDK 目录:“D:\Java\jdk1.8.0_144\jre\lib\security”;

3、 【本地系统】利用 curl 命令进行微服务访问,对指定的数据做一个加密的操作处理:

· 注意:一定要保证你现在的微服务使用的 JDK 是已经更新过 JCE 的 JDK。

curl -X POST http://studyava:hello@config-7101.com:7101/encrypt -d mysqladmin

密码加密处理后: a2722e75244753f656aa9776e5af8a4e94452046fe68087b798a1500fee9bdca

现在可以发现加密后的内容是比较长的。如果要解密的话也可以使用:

curl -X POST http://studyava:hello@config-7101.com:7101/decrypt -d a2722e75244753f656aa9776e5af8a4e94452046fe68087b798a1500fee9bdca

4、 【GITHUB】修改“D:\springcloudconfig\microconfig\microcloud-config-dept-client\ microcloud-config-dept-client.yml”文件,将加密后的内容保存到此处,但是需要注意一个问题,如果要想进行正确的解密要保持下面的格式:

spring:
profiles: dev
datasource:
type: com.alibaba.druid.pool.DruidDataSource # 配置当前要使用的数据源的操作类型
driver-class-name: org.gjt.mm.mysql.Driver # 配置MySQL的驱动程序类
url: jdbc:mysql://localhost:3306/study8001 # 数据库连接地址
username: root # 数据库用户名
password: '{cipher}a2722e75244753f656aa9776e5af8a4e94452046fe68087b798a1500fee9bdca'

5、 【GITHUB】将修改后的microcloud-config-dept-client.yml提交到 GITHUB 之中:

现在只是保存到 GITHUB 上的内容进行了加密处理,但是由于有 SpringCloudConfig 配置中心的存在(配置好了密钥),所以用户按照传统的模式正常访问即可。

访问路径:http://studyava:hello@config-7101.com:7101/microcloud-config-dept-client-dev.yml;

最为关键的是现在可以发现进行解密处理的时候,如果没有加密的数据是不会进行解密处理的。

2.2、KeyStore 加密处理

在进行加密处理的时候还有一种加密的方式会更加的方便,就是直接利用 JKS 操作的模式来完成,通过这种的加密更加的安全,因为只需要有一个 jks 配置文件即可实现加密与解密。

1、 【本地系统】需要生成一个进行加密处理的 key 信息(主要是得到了“*.jks”文件)

keytool -genkeypair -alias mytestkey -keyalg RSA -dname "CN=Web Server,OU=Unit,O=Organization,L=City,S=State,C=US" -keypass
changeit -keystore server.jks -storepass studyjava

2、 【microcloud-config-7101】此时会出现有一个“server.jks”配置文件,将配置文件拷贝到项目中的“src/main/resources”目录之中,如下图所示:

3、 【microcloud-config-7101】修改 application.yml 配置文件,在这个配置文件之中追加有 keystore 相关配置项:

encrypt:
keyStore:
location: classpath:/server.jks # server.jks的配置文件的路径
password: studyjava # 设置store的密码
alias: mytestkey
secret: changeit # keypass密码

4、 【microcloud-config-7101】以上的配置文件之中已经设置了 server.jks 的路径,但是这个路径你现在如果在 maven 里面是找不到的,所以应该修改项目中的 pom.xml 文件,追加资源的输出配置项:

    <build>
<finalName>microcloud-config</finalName>
<resources>
<resource> <!-- 防止JKS被Maven过掉 -->
<directory>src/main/resources</directory>
<filtering>false</filtering>
</resource>
</resources>
</build>

5、 【浏览器测试】进行数据的加密与解密处理:

数据加密:curl -X POST http://studyjava:hello@config-7101.com:7101/encrypt -d mysqladmin

加密结果: AQABpN8ZrZbbYNx2cVBoy2qCQLI/mGCeTjA5L...此处省略几千个字符

数据解密: curl -X POST http://studyjava:hello@config-7101.com:7101/decrypt -d AQABpN8ZrZbbY ...此处省略几千个字符

6、 【GITHUB】修改 microcloud-config-dept-client.yml 配置文件,将加密后的内容配置上:

spring:
profiles: dev
datasource:
type: com.alibaba.druid.pool.DruidDataSource # 配置当前要使用的数据源的操作类型
driver-class-name: org.gjt.mm.mysql.Driver # 配置MySQL的驱动程序类
url: jdbc:mysql://localhost:3306/study8001 # 数据库连接地址
username: root # 数据库用户名
password: '{cipher}AQABpN8ZrZbbYNx2cVBoy2qCQLI/mGCeTjA5L6cksGdcTGlBoaYBsvMvLanShWukEv985CmtMETDlqpviKZ7YXEO3PGIW9sLgQXf2MB2yEFzTKoUzQk1EPUBnYLndw8jrkeI41Yiwzq6pJ28yJfE4lWV8mcirb7XhdwR4xYwy/BwgAna8c+4gHo9pLhtDU4Mvu0ccR3EqPv6hc9sK8ElR7SaQ48HGjOsZJZT0v4g1HWrWMf58xShgOd1qBL2iXsHkCbGjUpzbtCQBkDEavaMHxiA3sLLqtCX7CuFOv1enE09w1L0Vdj3wHjCMNygr1PmMNpuGrl3VbMDKSYSu5KD3kKN/NcwvAL+Jwt01j/fdHp7Q6Jpi2o5PWMccYV+mPLCnP8='

随后将配置文件提交到 GITHUB 之中,再通过 SpringCloudConfig 访问后就可以得到原始的数据了。

2.3、SpringCloudConfig 高可用机制

现在已经实现了整个的 SpringCloudConfig 的配置项处理,但是在这之中会存在有一个小小的问题,就是说所有的服务现在都 需要通过 SpringCloudConfig 加载配置文件,那么一旦 SpringCloudConfig 出错了,所有的服务就挂掉了

1、 【microcloud-config-eureka-7301】建立一新的模块,通过已有的 eureka 服务的配置模块拷贝过来,为了方便本次的 eureka 就 只设计一个节点,随后为了以后方便访问,可以修改 hosts 配置文件,追加新的主机名称:

127.0.0.1 eureka-config.com

2、 【microcloud-config-eureka-7301】修改项目中的 application.yml 配置文件:

spring:
profiles:
active:
- dev-7301
---
spring:
profiles: dev-7301
application:
name: microcloud-eureka-7301
server:
port: 7301
security:
basic:
enabled: true # 启用安全认证处理
user:
name: edmin # 用户名
password: studyjava # 密码
eureka:
client: # 客户端进行Eureka注册的配置
service-url:
defaultZone: http://edmin:studyjava@eureka-7301.com:7002/eureka
register-with-eureka: false # 当前的微服务不注册到eureka之中
fetch-registry: false # 不通过eureka获取注册信息
instance: # eureak实例定义
hostname: eureka-7301.com # 定义Eureka实例所在的主机名称

配置完成之后进行服务的启动,访问地址:http://edmin:studyjava@eureka-config.com:7301

3、 【microcloud-config-*】修改 pom.xml 配置文件,追加 eureka 客户端依赖包:

        <dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>

4、 【microcloud-config-*】修改 application.yml 配置文件,主要是进行 eureka 客户端的配置处理:

eureka:
client:
service-url:
defaultZone: http://edmin:studyjava@eureka-config.com:7301/eureka
instance:
prefer-ip-address: true # 在地址栏上使用IP地址进行显示
instance-id: config-7101.com

随后的其它的配置文件只需要考虑到“instance-id”的不同即可;

5、 【microcloud-config-*】修改程序启动类,追加 Eureka 客户端注解:

package cn.study.microcloud;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.config.server.EnableConfigServer;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
@SpringBootApplication
@EnableConfigServer
@EnableEurekaClient
public class Config_7101_StartSpringCloudApplication {
public static void main(String[] args) {
SpringApplication.run(Config_7101_StartSpringCloudApplication.class, args);
}
}

6、 【本地主机】修改 hosts 配置文件,追加多个配置主机名称:

127.0.0.1 config-7101.com
127.0.0.1 config-7102.com
127.0.0.1 config-7103.com

7、 【本地测试】分别启动所有的 SpringCloudConfig 微服务进程,随后进行访问测试:

8、 【GITHUB】修改 microcloud-config-client.yml 配置文件,在这个配置文件里面需要考虑好 eureka 的问题;

spring:
profiles:
active:
- dev
---
server:
port: 8201
spring:
profiles: dev
application:
name: microcloud-config-client
eureka:
client:
service-url:
defaultZone: http://edmin:studyjava@eureka-config.com:7301/eureka
---
server:
port: 8102
spring:
profiles: beta
application:
name: microcloud-config-client
eureka:
client:
service-url:
defaultZone: http://edmin:studyjava@eureka-config.com:7301/eureka

9、 【microcloud-config-client-8201】修改 bootstrap.yml 配置文件,此时的配置文件需要通过 eureka 获取 config 服务信息;

spring:
cloud:
config:
name: microcloud-config-client # 定义要读取的资源文件的名称
profile: beta # 定义profile的 名称
label: master # 定义配置文件所在的分支
# uri: http://config-7101.com:7101 # SpringCloudConfig的服务地址
username: studyjava # 连接的用户名
password: hello # 连接的密码
discovery:
enabled: true # 通过配置中心加载配置文件
service-id: MICROCLOUD-CONFIG # 在eureka之中注册的服务ID eureka: # 一定要编写一个eureka的地址
client: # 目的是为了让客户端可以通过eureka找到SpringCloudConfig微服务
service-url:
defaultZone: http://edmin:studyjava@eureka-config.com:7301/eureka

10、 【microcloud-config-client-8201】在启动类上追加 Eureka 客户端的配置注解:

package cn.study.microcloud;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
@SpringBootApplication
@EnableEurekaClient
public class Client_8201_StartSpringCloudApplication {
public static void main(String[] args) {
SpringApplication.run(Client_8201_StartSpringCloudApplication.class, args);
}
}

那么现在就实现了 SpringCloudConfig 基于 Eureka 的高可用处理机制。

2.4、SpringCloudBus 服务总线

在整个 SpringCloudConfig 设计之中,主要考虑的是所有微服务配置文件过多的统一管理问题,但是在整个的设计上还存在有一个小小的缺陷,就是配置信息的实时更新

SpringCloudBus 服务总线工作原理

说明:

传统的做法是配置更新以后重启微服务,但是我们不这样做,我们要做的是通过消息中间件作为桥梁,客户端订阅消息中间件的消息服务,SpringCloudConfig 更新配置以后通知消息中间件,客户端就能及时知道配置有更新从而做出对应的更新

在实现 SpringCloudBus 的过程之中必须要有一个明确的消息服务组件,而这种服务组件一般会有两类处理模式:RabbitMQ、 Kafka。

1、 【GITHUB】本次的操作中为了简化处理,直接采用一些服务信息的更新获取;

spring:
profiles:
active:
- dev
---
server:
port: 8201
spring:
profiles: dev
application:
name: microcloud-config-client
eureka:
client:
service-url:
defaultZone: http://edmin:studyjava@eureka-config.com:7301/eureka
info:
app.name: study-microcloud-dev-1
company.name: www.study.cn
app.version: v-dev-1.0.0 ---
server:
port: 8102
spring:
profiles: beta
application:
name: microcloud-config-client
eureka:
client:
service-url:
defaultZone: http://edmin:studyjava@eureka-config.com:7301/eureka
info:
app.name: study-microcloud-beta-1
company.name: www.studyjava.cn
app.version: v-beta-1.0.0

2、 【microcloud-config-bus-7201】该项目模块是通过 microcloud-config-7101 复制过来的,本项目依然要求将服务注册到 eureka 之中;

3、 【microcloud-config-bus-7201】修改 pom.xml 配置文件:

        <dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bus-amqp</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

4、 【microcloud-config-bus-7201】修改 application.yml 配置文件,追加 rabbitmq 的相关配置项:

spring:
rabbitmq: # 现在将集成RabbitMQ作为消息服务总线处理
host: rabbitmq-server # RabbitMQ主机服务地址
port: 5672 # RabbitMQ的监听端口
username: studyjava # 用户名
password: hello # 密码

5、 【microcloud-config-bus-7201】启动此微服务信息,而后一定要保证该微服务已经注册到了 Eureka 之中,同时还需要观察出现 的访问路径,此时会出现有一个重要的路径信息:

 restartedMain] o.s.b.a.e.mvc.EndpointHandlerMapping : Mapped "{[/bus/refresh],methods=[POST]}"
onto public void org.springframework.cloud.bus.endpoint.RefreshBusEndpoint.refresh(java.lang.String)

6、 【microcloud-config-bus-client-8301】该项目模块是通过“microcloud-config-client-8201”模块复制得来的;

7、 【microcloud-config-bus-client-8301】修改 pom.xml 配置文件,追加与 SpringCloudConfig 同样的依赖包:

 <dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bus-amqp</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

8、 【microcloud-config-bus-client-8301】修改 bootstrap.yml 配置文件,追加 rabbitmq 的相关地址配置:

spring:
rabbitmq: # 现在将集成RabbitMQ作为消息服务总线处理
host: rabbitmq-server # RabbitMQ主机服务地址
port: 5672 # RabbitMQ的监听端口
username: studyjava # 用户名
password: hello # 密码

9、 【microcloud-config-bus-client-8301】建立一个可以进行配置文件内容保存的程序类,该类的主要功能是可以进行配置的刷新获取(如果是一些系统的服务,例如:eureka.defaultZone 之类的内容,不容易看见):

package cn.study.microcloud.config;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.stereotype.Component;
@Component
@RefreshScope // 如果现在没有这个注解,则在通过SpringCloudBus获取配置信息的时候无法进行刷新
public class InfoConfig { // 将所有可能动态获取的配置内容写在一个类之中,到处引用
@Value("${info.app.name}")
private String appName ;
@Value("${info.company.name}")
private String companyName ;
@Value("${info.app.version}")
private String appVersion ;
public String getAppName() {
return appName;
}
public String getAppVersion() {
return appVersion;
}
public String getCompanyName() {
return companyName;
}
}

10、 【microcloud-config-bus-client-8301】创建 InfoClientRest 的客户端显示程序

package cn.study.microcloud.rest;

import javax.annotation.Resource;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; import cn.study.microcloud.config.InfoConfig; @RestController
public class InfoClientRest {
@Resource
private InfoConfig infoConfig;
@RequestMapping("/config")
public String getConfig() {
return "ApplicationName = " + this.infoConfig.getAppName()
+ "、CompanyName = " + this.infoConfig.getCompanyName()
+ "、ApplicationVersion = " + this.infoConfig.getAppVersion();
}
}

11、 【microcloud-config-bus-client-8301】启动该微服务,而后获取信息:

· 访问路径:http://studyjava:hello@client-8201.com:8102/config;

12、 【GITHUB】修改 microcloud-config-client.yml 配置文件,修改 beta 部分的内容:

info:
app.name: mldn-microcloud-beta-2
company.name: www.mldnjava.cn
app.version: v-beta-2.1.2

此时 GITHUB 上的配置文件已经发生了改变,但是客户端并不知道 GITHUB 上的这次操作,所以其显示的内容还属于原始内容,如果要想加载新的内容,则就必须进行服务总线的刷新。

13、 【microcloud-security】如果要想进行总线服务刷新,用户必须具备有“ACTUATOR”角色,所以需要修改用户的配置程序类

package cn.study.microcloud.config;

import javax.annotation.Resource;

import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.builders.WebSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.config.http.SessionCreationPolicy;
@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter { @Resource
public void configGlobal(AuthenticationManagerBuilder auth)
throws Exception {
auth.inMemoryAuthentication().withUser("studyjava").password("hello")
.roles("ACTUATOR").and().withUser("admin").password("hello")
.roles("USER", "ADMIN");
}
@Override
protected void configure(HttpSecurity http) throws Exception {
// 表示所有的访问都必须进行认证处理后才可以正常进行
http.httpBasic().and().authorizeRequests().anyRequest()
.fullyAuthenticated().and().csrf().disable();
// 所有的Rest服务一定要设置为无状态,以提升操作性能
http.sessionManagement()
.sessionCreationPolicy(SessionCreationPolicy.STATELESS);
}
}

14、 【本地系统】通过 curl 命令发出一个 post 请求访问指定的 SpringCloudConfig 微服务:

curl -X POST http://studyjava:hello@config-7201.com:7201/bus/refresh

此时需要观察以下几个方面:

· 需要观察 RabbitMQ 消息的信息:

· 观察后台的提示信息:

Received remote refresh request. Keys refreshed [info.app.version, info.app.name]

这个时候刷新了配置信息后实际上会自动找到“@RefreshScope”标记的程序类并且对其进行更新处理。

15、 【microcloud-config-bus-7201】如果用户有需要也可以获取一些跟踪轨迹信息,映射路径:“/trace”,但是要想实现这样的更新处理,必须做一个配置上的变更,修改 application.yml 配置文件,追加“spring.cloud.bus.trace.enabled=true”配置项:

spring:
cloud: # 进行SpringCloud的相关配置
bus:
trace:
enabled: true

则这个时候就可以通过 trace 进行配置的更新追踪:http://studyjava:hello@config-7201.com:7201/trace。

SpringCloud系列十:SpringCloudConfig 高级配置(密钥加密处理(JCE)、KeyStore 加密处理、SpringCloudConfig 高可用机制、SpringCloudBus 服务总线)的更多相关文章

  1. SpringCloud系列四:Eureka 服务发现框架(定义 Eureka 服务端、Eureka 服务信息、Eureka 发现管理、Eureka 安全配置、Eureka-HA(高可用) 机制、Eureka 服务打包部署)

    1.概念:Eureka 服务发现框架 2.具体内容 对于服务发现框架可以简单的理解为服务的注册以及使用操作步骤,例如:在 ZooKeeper 组件,这个组件里面已经明确的描述了一个服务的注册以及发现操 ...

  2. keepalived安装配置实战心得(实现高可用保证网络服务不间断)

    keepalived安装配置实战心得(实现高可用保证网络服务不间断) 一.准备2台虚拟机     安装的系统是:centos-release-7-1.1503.el7.centos.2.8.x86_6 ...

  3. SpringCloud微服务实战——搭建企业级开发框架(十三):OpenFeign+Ribbon实现高可用重试机制

      Spring Cloud OpenFeign 默认是使用Ribbon实现负载均衡和重试机制的,虽然Feign有自己的重试机制,但该功能在Spring Cloud OpenFeign基本用不上,除非 ...

  4. 一寸宕机一寸血,十万容器十万兵|Win10/Mac系统下基于Kubernetes(k8s)搭建Gunicorn+Flask高可用Web集群

    原文转载自「刘悦的技术博客」https://v3u.cn/a_id_185 2021年,君不言容器技术则已,欲言容器则必称Docker,毫无疑问,它是当今最流行的容器技术之一,但是当我们面对海量的镜像 ...

  5. Nginx配置upstream实现负载均衡及keepalived实现nginx高可用

    (原文链接:http://www.studyshare.cn/blog-front//blog/details/1159/0 ) 一.准备工作 1.准备两个项目,发布到不同的服务器上,此处使用2个虚拟 ...

  6. spring cloud深入学习(十二)-----Spring Cloud Zuul网关 Filter、熔断、重试、高可用的使用方式

    Zuul的核心 Filter是Zuul的核心,用来实现对外服务的控制.Filter的生命周期有4个,分别是“PRE”.“ROUTING”.“POST”.“ERROR”,整个生命周期可以用下图来表示. ...

  7. SpringCloud系列十二:SpringCloudSleuth(SpringCloudSleuth 简介、SpringCloudSleuth 基本配置、数据采集)

    声明:本文来源于MLDN培训视频的课堂笔记,写在这里只是为了方便查阅. 1.概念:SpringCloudSleuth 2.具体内容 Sleuth 是一种提供的跟踪服务,也就是说利用 sleuth 技术 ...

  8. SpringBoot系列(十二)过滤器配置详解

    SpringBoot(十二)过滤器详解 往期精彩推荐 SpringBoot系列(一)idea新建Springboot项目 SpringBoot系列(二)入门知识 springBoot系列(三)配置文件 ...

  9. shiro实战系列(十四)之配置

    Shiro 被设计成能够在任何环境下工作,从最简单的命令行应用程序到最大的的企业群集应用.由于环境的多样性,使得许多配置机制适用于它的配置. 一. 许多配置选项 Shiro的SecurityManag ...

随机推荐

  1. JQ方法实用案例///鼠标移动到div和修改ipt中弹窗、CSS鼠标变小手、JQ获取元素属性、JQ选择器

    今天学习了jQ,jQ对js的帮助很大,菜鸟教程上也有属性.可以查看 js 和 jquery主要的区别 在 dom    想用jquery  必须先引入(顺序问题)        先css 再js:   ...

  2. vue---- v-bind指令

    v-bind指令用于给html标签设置属性. 基本用法 <div id="app"> <div v-bind:id="id1">文字&l ...

  3. Windows L2TP Client Setup

    原文链接:http://www.softether.org/4-docs/2-howto/9.L2TPIPsec_Setup_Guide_for_SoftEther_VPN_Server/4.Wind ...

  4. js数据三大储存格式

    一.String格式  做为一个前端者 你第一手得到的数据都是字符串 二.数组格式 1.定义  var arr=[“张三”,”李四”,”王五”]; 数据通过索引去查找对应的元素   arr[3] 2. ...

  5. [noip2016]洛谷2827

    来一发文字证明~ 数据范围很大... 如果用priority_queue搞的话肯定是会t的. 所以肯定要想一想优化的思路. 我们发现,对于队列来讲,同加,减是不改变这个队列的大小关系的: 但是呢,切开 ...

  6. docker下搭建fastfds

    https://blog.csdn.net/weixin_40247263/article/details/81087726 搭建过程参考 作者 https://me.csdn.net/feng_qi ...

  7. 游戏编程模式 Game Programming Patterns (Robert Nystrom 著)

    第1篇 概述 第1章 架构,性能和游戏 (已看) 第2篇 再探设计模式 第2章 命令模式 (已看) 第3章 享元模式 (已看) 第4章 观察者模式 (已看) 第5章 原型模式 (已看) 第6章 单例模 ...

  8. salt+jenkins+gitlab+ecs构建公司部署平台

    1.网络架构图如下 2.采用这种方案的原因 1.现网机器都在各个省机房内网,或者堡垒机内部.无法直接从公司总部ssh到各个现网机器 2.现网机器可以访问到公网.因此可以从公网下载制作的tar包 3.每 ...

  9. mac 中 git 操作账号的保存与删除

    mac 系统中,运行命令:git config -l,输出中看到credential.helper=osxkeychain时,说明 git 密码保存在 Keychain 中. 右上角搜索框内搜索 gi ...

  10. 带查询参数 可分页 的 T-SQL 语句写法

    ) DECLARE @pageindex int DECLARE @pagesize int DECLARE @classid int set @keys = '' ; ; ; with temptb ...