我看到 Kubernetes Job&Deployment提供了非常相似的配置。两者都可以部署一个或多个具有特定配置的 Pod。所以我对这些问题很少有疑问:
.spec.template中的Pod 规格是否不同?JobDeploymentJob和completions的Deployment区别是什么replicas?Deployment并完成(没有服务器或守护进程进程容器),则 pod 将终止。这同样适用于a Job。那么这两种资源中的 pod 生命周期有何不同?我们有一些使用 s3 作为后端的 terraform 配置。我们有多个 AWS 账户,每个环境对应一个账户。
在所有环境和跨多个区域中,我们使用了不同的 s3 存储桶和 dynamodb_table 名称,这些名称目前不遵循有效的约定,并且很难从名称中识别存储桶的用途。现在,我们希望对所有 s3 terraform 状态存储桶遵循基于约定的命名。为此,我需要将现有 terraform 资源的状态迁移到新的 s3 存储桶。
我不确定实现这一目标的最佳方法是什么,而无需在旧状态存储桶上运行销毁并应用于新状态存储桶。
我能想到的一些选择如下,但我不确定它们是否正确。
.terraform并非如此。因此,我可以使用新存储桶更改源代码,提交它并从此提交创建一个新的 git 标签。现在,当实际进行迁移时,我会检查环境中使用的旧 git 标签,运行terraform init,检查新的 git 标签并terraform init再次运行,理想情况下会询问我是否要进行迁移并执行必要的操作。这个过程与 terraform在这里建议的类似,但我不确定的是,这种方法是否会在我期望的运动中发挥作用。PS:我认为重命名 DynamoDB 表或仅使用新表而不是旧表可以开箱即用,因为我将确保在进行状态迁移时,我没有任何正在进行的实时 terraform 运行。
我有一个注释:
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnnotation {
String annotationArgument1() default "";
String annotationArgument2();
}
Run Code Online (Sandbox Code Playgroud)
我有两个类:
class MyClass1 {
@MyAnnotation(annotationArgument1="ABC", annotationArgument2="XYZ")
public void method1(MyClass2 object) {
//do something
}
@MyAnnotation(annotationArgument1="MNO", annotationArgument2="PQR")
public void method2(MyClass2 object) {
//do something
}
}
class MyClass2 {
int num;
}
Run Code Online (Sandbox Code Playgroud)
我希望method1和method2(或任何其他类中用 注释的任何其他方法@MyAnnotation)只接受一个参数,MyClass2因为它们用@MyAnnotation. 如果传递了其他参数,则必须给出编译时错误。
实际上有可能做到这一点吗?如果是,怎么做,如果不是,有什么办法可以使这种行为成为可能?
我们使用 Spring 5.2.x(带有 Spring Boot 2.3.x)和 Mockito 3.3.x。
我需要@Transactional从我的服务中调用一个方法。因此我不得不求助于自我注入。
@Service
@RequiredArgsCostructor // lombok
public class MyClass {
private final dep1;
private final dep2;
@Autowired
private MyClass self;
public void someMethod() {
self.someTransactionalMethod();
// do something
}
@Transactional
public void someTransactionalMethod() {
// do something
}
}
public class MyClassTest {
@Mock
private dep1;
@Mock
private dep2;
@InjectMocks
private MyClass myClass;
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
}
@Test
public void someMethodTest() {
// NPE when calling self.someTransactionalMethod()
} …Run Code Online (Sandbox Code Playgroud) 我有以下两个类:
class KeyClass {
private prop1;
private prop2;
hashcode() {
//implemented properly
}
equals() {
//implemented properly
}
}
class ValueClass {
private prop1;
private prop2;
hashcode() {
//implemented properly
}
equals() {
//implemented properly
}
}
Run Code Online (Sandbox Code Playgroud)
我试图从地图中找出最大对,其中这些类的对象分别是键和值对.我也有一个com.google.common.collect.Ordering<ValueClass>使用多个比较器.我可以使用这个排序轻松找出最大值,但我感兴趣的是最大值的关键.
我可以编写一个特定的实现,其中我可以跟踪循环中的值并使用排序来比较值(类似于查找最大值的传统方式),但我想知道我们是否已经有这样的情况由Guava任何其他图书馆处理?
我试图从高层次上了解 Spring 代理的工作原理。为什么我应该在应用程序中使用“API Interface & Impl Bean”模式或仅使用“Bean Class”模式。我读了很多 SO 答案,但它们都非常古老,我相信大多与Java 7 和 Spring 3.x相关。我想知道 2020 年Java 11+ 与 Spring 5.x (Spring Boot 2.x)仍然相关。有什么可以遵循的“最佳实践”吗?
另外,随着 的可用性@FunctionalInterface,如果我有实现像Consumer、Function和类似接口的 bean,那么用where代替是否Predicate有意义。这只是一个例子,我也可能使用我自己的功能接口(带或不带泛型)。@Autowire/@Inject Consumer<A>FooFoo implements Consumer<A>
考虑到上述所有内容,我还想知道 Spring 创建的每个 bean 是否都被代理,或者如果实际上不需要的话,spring 创建 bean 时是否不代理它们。对于前。如果一个类只是简单地注释并@Component直接注入,没有其他注释或代理需求,spring还会为这个bean创建代理吗?
我已经看过的一些问题:
2020 年 5 月 7 日更新:
在阅读了更多文章、评论和答案后,我想谈谈我想到的确切问题/疑问。让我们考虑以下示例。我有一个课程Foo和AnotherFoo。
@Component
@RequiredArgsConstructor // From lombok
class …Run Code Online (Sandbox Code Playgroud) 如何访问由<context:property-placeholder>in加载的属性BeanDefinitionRegistryPostProcessor.postProcessBeanDefinitionRegistry。
我无法使用用 注释的字段@Value,因为它们似乎没有被初始化(它们的值为空)。
我的系统上有 4 个与我们项目相同的存储库的克隆。
原因是我们在过去 2 年里在技术堆栈方面取得了进展,并且这种演变的 4 个版本中的每一个都需要不同的文件夹结构和 Eclipse 工作空间设置。每个版本都存在于其自己的分支上。为了继续为客户支持旧版本,我需要有不同的克隆来简化我的工作,这样我就不必切换分支并相应地更改设置。
我主要是离线工作。因此,每当我连接到网络时,我都会执行一个git fetch在每个克隆上一一运行的脚本。我想要的是在这个过程中节省一些网络带宽。git fetch我只想在说存储库上运行一次prime,其余存储库必须从prime.
我尝试将其设置prime为远程到其他存储库,但它只获取prime辅助存储库中本地签出的分支。有办法实现我想要实现的目标吗?
我们在多个服务内的多个脚本中使用 terraform 命令,并且使用文件或 AWS CloudWatch 访问这些脚本的输出,因此我们看到的是一堆令人困惑的颜色字符分布在几乎所有 terraform 输出行中。我希望禁用这些字符,但 github 上的讨论线程不太清楚当前禁用所有 terraform 命令的颜色输出的最佳方法是什么(例如: https: //github.com/hashicorp/terraform/issues/ 15264 )
我的问题是,如何在 2021 年 9 月最好地解决这个问题?我们目前使用的是 terraform 版本0.14.0,很快就会升级到 版本1.x,因此最好使用两个版本的解决方案,但如果只有1.x,我们可以考虑在升级时实现它。
java ×4
spring ×3
spring-boot ×2
terraform ×2
amazon-s3 ×1
annotations ×1
collections ×1
git ×1
guava ×1
junit ×1
kubernetes ×1
mockito ×1
spring-aop ×1
spring-bean ×1