skwax 发布的文章 - 记录笔记的地方
首页
联系
关于
搜 索
1
chrony同步阿里云时间
171 阅读
2
分布式定时任务
121 阅读
3
Frp配置
113 阅读
4
Swagger 3.0 集成
104 阅读
5
Dubbo 服务间通信
87 阅读
未分类
默认分类
Docker相关
Nginx相关
Ant Design Pro of Vue
Spring Boot 相关
Flutter
MAUI
登录
搜 索
标签搜索
随身WIFI
Skwax
累计撰写
27
篇文章
累计收到
3
条评论
首页
栏目
未分类
默认分类
Docker相关
Nginx相关
Ant Design Pro of Vue
Spring Boot 相关
Flutter
MAUI
页面
联系
关于
用户登录
登录
找到
27
篇与
skwax
相关的结果
2021-09-14
C#中调用Windows API时的数据类型对应关系
https://www.cnblogs.com/zjoch/p/5999335.html
2021年09月14日
17 阅读
0 评论
0 点赞
2021-09-03
占用CPU的高 Sql 查询
SELECT TOP 10[session_id],[request_id],[start_time] AS '开始时间',[status] AS '状态',[command] AS '命令',dest.[text] AS 'sql语句',DB_NAME([database_id]) AS '数据库名',[blocking_session_id] AS '正在阻塞其他会话的会话ID',[wait_type] AS '等待资源类型',[wait_time] AS '等待时间',[wait_resource] AS '等待的资源',[reads] AS '物理读次数',[writes] AS '写次数',[logical_reads] AS '逻辑读次数',[row_count] AS '返回结果行数'FROM sys.[dm_exec_requests] AS derCROSS APPLYsys.dm_exec_sql_text AS destWHERE [session_id]>50 AND DB_NAME(der.[database_id])='gposdb'ORDER BY [cpu_time] DESC
2021年09月03日
10 阅读
0 评论
0 点赞
2021-08-10
acme.sh
【acme.sh】安装acme.shcurl https://get.acme.sh | sh安装目录为: /root/.acme.sh/然后执行以下命令:source ~/.bashrc换为你的cf的keyexport CF_Key="8f1660278d10746efe524cd1b907f39779bf4"换为你的cf的邮箱export CF_Email="@163.com"生成ssl证书acme.sh --issue -d typealpha.ltd --dns dns_cf -d *.typealpha.ltdcd /etc/nginx/mkdir ssl_key复制证书acme.sh --install-cert -d typealpha.ltd \--key-file /etc/nginx/ssl_key/key.key \--fullchain-file /etc/nginx/ssl_key/cert.pem \--reloadcmd "service nginx force-reload"
2021年08月10日
26 阅读
0 评论
0 点赞
2021-08-10
debian 10 阿里源
【Debian ali镜像源】cat < /etc/apt/sources.listdeb http://mirrors.aliyun.com/debian/ buster main non-free contribdeb http://mirrors.aliyun.com/debian-security buster/updates maindeb http://mirrors.aliyun.com/debian/ buster-updates main non-free contribdeb http://mirrors.aliyun.com/debian/ buster-backports main non-free contribdeb-src http://mirrors.aliyun.com/debian-security buster/updates maindeb-src http://mirrors.aliyun.com/debian/ buster main non-free contribdeb-src http://mirrors.aliyun.com/debian/ buster-updates main non-free contribdeb-src http://mirrors.aliyun.com/debian/ buster-backports main non-free contribEOF
2021年08月10日
29 阅读
0 评论
0 点赞
2021-08-10
Spring Cloud Gateway 使用
Spring Cloud Gateway基础使用//依赖 spring-cloud-starter-gateway //不能添加springweb依赖,网关采用netty,web采用tomcatapplication.yml//application.yml server: 80 spring: application: #服务名称 name: gateway cloud: #配置网关 gateway: discovery: locator: enable: true #启用DiscoveryClient网关集成,可以实现服务发现 #配置网关路由转发规则,是否转发以及转发路径 routes: - id: route1 #负载均衡 + 服务名称 uri: lb://demo #谓词:是否匹配,可用正则,共11种谓词,以下为Path predicates: - Path=/test, /index, /test*/** #过滤器,提供31种,可对请求和响应进行操作 filters: - AddRequestHeader=Context-Type, application-json #服务注册发现 nacos: discovery: server-addr: 192.168.2.8:8848 password: nacos username: nacos #哨兵 sentinel: eager: true transport: dashboard: 192.168.2.8:8849集成Swagger3.0.0pom.xml 添加<dependency> <groupId>io.springfox</groupId> <artifactId>springfox-boot-starter</artifactId> <version>$</version> </dependency>添加 SwaggerProvider/** * 聚合系统接口 * @author Skwax */ @Component @Primary public class SwaggerProvider implements SwaggerResourcesProvider { /** * swagger3默认的url后缀 */ private static final String SWAGGER3URL = "/v3/api-docs"; /** * 网关路由 */ private final RouteLocator routeLocator; /** * gateway配置文件 */ private final GatewayProperties gatewayProperties; /** * 网关应用名称 */ @Value("$") private String self; @Autowired public SwaggerProvider(RouteLocator routeLocator, GatewayProperties gatewayProperties) { this.routeLocator = routeLocator; this.gatewayProperties = gatewayProperties; } /** * 对于gateway来说这块比较重要 让swagger能找到对应的服务 * * @return */ @Override public List<SwaggerResource> get() { List<SwaggerResource> resources = new ArrayList<>(); List<String> routes = new ArrayList<>(); routeLocator.getRoutes().subscribe(route -> routes.add(route.getId())); //从配置文件中获取并配置SwaggerResource gatewayProperties.getRoutes().stream() //过滤路由 .filter(routeDefinition -> routes.contains(routeDefinition.getId())) //循环添加,从路由的断言中获取,一般来说路由都会配置断言Path信息,这就不多说了 .forEach(route -> { route.getPredicates().stream() //获取Path信息 .filter(predicateDefinition -> ("Path").equalsIgnoreCase(predicateDefinition.getName())) //开始添加SwaggerResource .forEach(predicateDefinition -> resources.add(swaggerResource(route.getId(), predicateDefinition.getArgs().get(NameUtils.GENERATED_NAME_PREFIX + "0") .replace("**", SWAGGER3URL)))); }); return resources; } private SwaggerResource swaggerResource(String name, String location) { SwaggerResource swaggerResource = new SwaggerResource(); swaggerResource.setName(name); swaggerResource.setLocation(location); swaggerResource.setSwaggerVersion(DocumentationType.OAS_30.getVersion()); return swaggerResource; } }集成Sentinelpom.xml 添加 <!-- SpringCloud Alibaba Sentinel --> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId> </dependency> <!-- SpringCloud Alibaba Sentinel Gateway --> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-alibaba-sentinel-gateway</artifactId> </dependency> <!-- Sentinel Datasource Nacos --> <dependency> <groupId>com.alibaba.csp</groupId> <artifactId>sentinel-datasource-nacos</artifactId> </dependency>自定义谓词predicates: - Token=12345定义配置类,用于承载配置参数import lombok.Data; @Data public class TokenConfig { private String Token; }定义路由谓词工厂,类名固定格式import org.springframework.cloud.gateway.handler.predicate.AbstractRoutePredicateFactory; import org.springframework.web.server.ServerWebExchange; import java.util.Collections; import java.util.List; import java.util.function.Predicate; @Component public class TokenRoutePredicateFactory extends AbstractRoutePredicateFactory<TokenConfig> { public TokenRoutePredicateFactory() { super(TokenConfig.class); } /* 将yml配置中的Token值存入TokenConfig类 */ @Override public List<String> shortcutFieldOrder() { return Collections.singletonList("token"); } /* 具体判断逻辑,返回true/false */ @Override public Predicate<ServerWebExchange> apply(TokenConfig config) { return exchange -> { //获取yml中配置的Token var token = config.getToken(); //获取请求的request var request = exchange.getRequest(); return true; }; } }自定义过滤器filters: - RequestLog=user, dsqda自定义网关过滤工厂import org.springframework.cloud.gateway.filter.GatewayFilter;import org.springframework.cloud.gateway.filter.factory.AbstractNameValueGatewayFilterFactory;import org.springframework.stereotype.Component;@Componentpublic class RequestLogGatewayFilterFactory extends AbstractNameValueGatewayFilterFactory ; }}自定义全局过滤器import org.springframework.cloud.gateway.filter.GatewayFilterChain; import org.springframework.cloud.gateway.filter.GlobalFilter; import org.springframework.core.Ordered; import org.springframework.stereotype.Component; import org.springframework.web.server.ServerWebExchange; import reactor.core.publisher.Mono; @Component public class CustomeGlobalFilter implements GlobalFilter, Ordered { @Override public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) { return chain.filter(exchange); } //数值越小越靠前 @Override public int getOrder() { return 0; } }跨域增加配置类import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.web.cors.CorsConfiguration; import org.springframework.web.cors.reactive.CorsWebFilter; import org.springframework.web.cors.reactive.UrlBasedCorsConfigurationSource; import org.springframework.web.util.pattern.PathPatternParser; @Configuration public class CorsConfig { @Bean public CorsWebFilter corsWebFilter(){ CorsConfiguration config = new CorsConfiguration(); config.addAllowedMethod("*"); config.addAllowedOrigin("*"); config.addAllowedHeader("*"); UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(new PathPatternParser()); source.registerCorsConfiguration("/**",config); return new CorsWebFilter(source); } }
2021年08月10日
23 阅读
0 评论
0 点赞
1
2
3
4
...
6