小编SRa*_*Raj的帖子

将 Flyway 集成到现有数据库中

我们从项目一开始就没有使用Flyway。我们正处于先进的发展状态。专家评审建议在我们的项目中使用 Flyway。

问题是我们也将部分服务(微服务)转移到另一个测试环境中。

正确实施 Flyway 的最佳方法是什么?要求是:

  1. 在开发环境中,无需更改已经存在的模式。但所有新脚本都应该使用 Flyway 完成。

  2. 在测试环境中,无需更改已经存在的模式。但是,当我们将项目从开发迁移到测试时,测试环境中不可用的内容应该使用 Flyway 自动创建。

  3. 当我们迁移到全新的环境(UAT、生产等)时,整个模式应该使用 Flyway 自动创建。

从文档中,我的理解是:

  1. 将开发模式(DDL 和 DML)备份为 SQL 脚本文件,文件名类似于 V1_0_1__initial.sql。
  2. 使用“flyway clean”清理开发数据库。
  3. 为开发数据库设置基线“flyway benchmark -baselineversion=1.0.0”
  4. 现在,执行“flyway migrate”,这将应用 SQL 脚本文件 V1_0_1__initial.sql。
  5. 任何新脚本都应使用更高版本号编写(例如 V2_0_1__account_table.sql)

这是正确的方法还是有更好的方法来做到这一点?

问题是我有一个测试数据库,其中有不同的数据集(开发和测试中的数据不同,我想保留两个环境中的数据)。如果是这样,当我们从Dev环境中取出并在每个环境中单独应用它们时,是否可以将DDL和DML分离在不同的脚本文件中?可以根据需要手动添加DML;但有点困惑我是否在做正确的事情。

提前致谢。

flyway

7
推荐指数
1
解决办法
6452
查看次数

为什么 JWT 是无状态认证?

我试图了解 JWT 身份验证是如何无状态的。在有状态身份验证中,会有一个会话 ID。这里有一个已签名的 JWT 令牌。所以认证服务器发出 JWT 令牌,但我可以说后续请求中 JWT 令牌的验证是由端点服务器(应用程序服务器)而不是认证服务器完成的。我相信这是可能的,因为 JWT 是用到期日期(以及一些其他信息)签名的,并且所有端点服务器都可以使用身份验证服务器的公共证书。

因此,身份验证服务器将只负责颁发令牌而不负责验证。验证将由端点服务器完成。

我的理解正确吗?这就是 JWT 无状态的方式吗?否则,我看不出它与有状态身份验证有何不同,因为两者都可以使用令牌实现。

在状态验证中,中央服务器将负责发布令牌以及验证每个请求。

authentication oauth-2.0 jwt jwt-auth

5
推荐指数
1
解决办法
6807
查看次数

为什么Java流API中的某些收集器称为下游收集器?

我想知道为什么我们将某些收藏家归类为“下游”?那么是否有上游收集器?请注意,这不是关于用法,而是试图理解术语“下游”背后的逻辑。对我来说,当您通常处理流 API 使用时,构建器链中的所有流看起来都只是下游。

List<String> list = List.of("AAA","B","CCCCC","DDD", "FFFFFF", "AAA");
List<Integer> res =
            list.stream()
                    .collect(
                            Collectors.mapping(s -> s.length(), // string -> int
                                Collectors.toList())); // downstreaming
Run Code Online (Sandbox Code Playgroud)

在上面的代码中,Collectors.toList()被视为下游。

java java-8

5
推荐指数
2
解决办法
620
查看次数

有效识别差异

每天,我们都会收到来自不同供应商的不同格式(CSV,XML,自定义)的巨大文件,需要将其上传到数据库中进行进一步处理。

问题在于这些供应商将发送其数据的完整转储,而不仅仅是更新。在某些应用程序中,我们仅需要发送更新(即,仅更改记录)。当前,我们要做的是将数据加载到临时表中,然后将其与以前的数据进行比较。由于数据集非常庞大,这非常痛苦,而且我们有时会缺少SLA。

有更快的方法解决此问题吗?任何建议或帮助,不胜感激。我们的程序员用尽了所有的想法。

sql database algorithm logic generic-programming

4
推荐指数
2
解决办法
56
查看次数

使用 Docker 时共享主机操作系统的内核

  1. 如果我在我的 Ubuntu 机器上部署一个通过选择 Alpine Linux 作为基础镜像构建的镜像(它充当主机操作系统——安装了 Docker),这里是否有两个内核在运行——一个来自 Ubuntu,另一个来自 Alpine?我读到 Docker 容器将共享主机内核,所以我在这里有点困惑。

  2. 如果我登录到正在运行的容器并发出另一个命令,从主机操作系统的角度来看,这是否是另一个进程?或者这将是另一个线程?从客户操作系统的角度来看,我认为这将是两个独立的进程。

请澄清。

containers operating-system docker

3
推荐指数
1
解决办法
503
查看次数

在Spring中使用ConfigurationProperties初始化地图列表

我正在寻找一种巧妙的方法来使用 Spring Boot 从 application.properties 初始化地图列表。

@ConfigurationProperties(prefix = "mail") 
public class ConfigProperties { 
private String hostName;
private int port;
private List<Map<String,String>> userList;  


// standard getters and setters 
Run Code Online (Sandbox Code Playgroud)

}

我想从 application.properties 初始化地图列表“ userList ”。我们如何在 application.properties 文件中为下面的 mail.userList 赋值?

#application.properties
mail.hostname=host@mail.com
mail.port=9000
mail.userList=?
Run Code Online (Sandbox Code Playgroud)

提前致谢。

spring spring-boot

3
推荐指数
1
解决办法
2256
查看次数

Java Comparator.comparing() 类型签名是什么意思?

我无法理解方法签名:

static <T,U extends Comparable<? super U>> Comparator<T> comparing(Function<? super T,? extends U> keyExtractor)
Run Code Online (Sandbox Code Playgroud)

super, extends, 通配符 ( ?) 和多个尖括号混淆。请不要误会我的意思,我了解基本的泛型。正是这里使用的更高的构造让我感到困惑。

java generics java-8

2
推荐指数
1
解决办法
371
查看次数

连接到远程 Docker 守护进程

我已经安装了 VirtualBox 并在 VirtualBox VM 中安装了 Ubuntu 服务器版本。我的主机是 Windows 10。

我还在我的主机 Windows 框中安装了 Docker。我的目的是使用 Windows 中的 docker CLI 连接到 VM 内的 docker 守护进程(服务器)。

我已经在 Ubuntu VM 中进行了更改,它正在侦听端口 2375。

tcp        0      0 127.0.0.1:2375          0.0.0.0:*                LISTEN 2305/dockerd
Run Code Online (Sandbox Code Playgroud)

此外,我已将主机(Windows)中的环境变量 DOCKER_HOST 设置为 VM 机器 IP 和端口。

 set DOCKER_HOST=tcp://192.168.56.107:2375
Run Code Online (Sandbox Code Playgroud)

我的 Windows 机器 IP 是 192.168.56.1,ping 工作正常。

Pinging 192.168.56.107 with 32 bytes of data:
Reply from 192.168.56.107: bytes=32 time<1ms TTL=64
Reply from 192.168.56.107: bytes=32 time<1ms TTL=64
Run Code Online (Sandbox Code Playgroud)

但是当我尝试从我的 Windows 机器连接时,它给出了以下错误:

error during connect: Get http://192.168.56.107:2375/v1.27/info: dial tcp …
Run Code Online (Sandbox Code Playgroud)

ubuntu containers firewall virtualbox docker

2
推荐指数
1
解决办法
5445
查看次数

向 Kafka 发送消息时,Camel 中的自定义标头丢失

我有以下路线。奇怪的是,自定义标头值“myHeader”在 Kafka 的消费者端丢失了。

您能否让我知道这是什么原因以及如何解决这个问题。

from("file://inputFolder?delay=2s&noop=true")
.convertBodyTo(String.class)
.setHeader("myHeader", constant("MY_HEADER_VALUE"))
.to("kafka:test-topic?brokers=localhost:9092");

from("kafka:test-topic?brokers=localhost:9092")
.log("${body}")
.log("***** myHeader: ${header.myHeader}")
Run Code Online (Sandbox Code Playgroud)

myHeader 的值是一个空字符串,尽管我将其设置为“”MY_HEADER_VALUE”。

我们使用 Apache Camel 2.20.2 和 Spring Boot 版本 1.5.10.RELEASE。

apache-camel apache-kafka

1
推荐指数
1
解决办法
2481
查看次数

AWS STS 使用案例和优势

我对 STS 的用例和优点感到困惑。根据文档,它是临时获取一个角色来执行 AWS 中 IAM 用户或服务无法执行的任务。请注意,我说的是编程访问(不是控制台访问)

例如,IAM 用户可能没有 S3 权限。据我的理解:

  1. 他可以通过联系AWS STS来获取临时访问密钥/令牌,并获取S3的访问密钥和秘密。

  2. 有了这些临时凭证,他就可以访问 S3。

我的问题是:

  1. 要从 AWS STS 获取临时凭证,他仍然需要现有的访问令牌(永久)和秘密,对吧?

  2. 如果他现有的访问令牌和秘密被泄露,攻击者仍然可以使用它首先从 STS 获取临时凭证,然后访问 S3,对吧?据我所知,攻击者将无法使用他的永久访问令牌和秘密直接访问 S3。

我正在尝试了解其正确的用例。我知道我很困惑,但也许我在循环思考。

提前致谢。

amazon-web-services aws-cli aws-sdk aws-sts

1
推荐指数
1
解决办法
1734
查看次数