控制通过 Kubernetes 部署的 POD 的主机名

@Mapper(componentModel = "spring")

public interface SourceToTargetMapper {


  Target map(Source source);


  @BeanMapping(nullValuePropertyMappingStrategy = NullValuePropertyMappingStrategy.SET_TO_DEFAULT)

  void update(Source source, @MappingTarget Target target);

}

整个技巧是定义nullValuePropertyMappingStrategy = NullValuePropertyMappingStrategy.SET_TO_DEFAULT,但您不能在 @Mapper 注释中定义它。取而代之的是,您必须将它作为参数放在update()方法的 @BeanMapping 注释中。您可以在MapStruct 文档中阅读更多相关信息。


第2步:

因此,您必须在代码中再执行一项操作并使用刚刚实现的“update()”方法:


@Component

public class ClassThatUsingMapper {


  private final SourceToTargetMapper mapper;


  public Target someMethodToMapObjects(Source source) {

    Target target = mapper.map(source);

    mapper.update(source, target)


    return target;

  }

}


所有null 到空 String 的过程都发生在mapper.update(source, target)method 下。为您的项目运行后mvn clean install,您可以检查它的外观以及它在target/generated-sources/annotations/...../SourceToTargetMapperImpl.java文件中的工作方式。


慕容森
浏览 168回答 1
1回答

慕森王

HOSTNAME您可以使用每个容器上存在的env 变量,它只为您提供主机名。此外,尝试在任何 pod 上执行 env 以查看所有可用变量kubectl exec <pod-name> env此处解释了为什么使用InetAddress.getLocalHost().getHostName()不是检索主机名的正确方法
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java