小编hec*_*o84的帖子

Springboot 2.5.1 服务不会在 System.exit(0) 上停止

我们有一个 spring-boot 服务,它需要在使用 flyway 进行一些数据库迁移后停止。我们通过回调和线路解决了这个问题

int exitCode = SpringApplication.exit(applicationContext, () -> 0);
System.exit(exitCode);
Run Code Online (Sandbox Code Playgroud)

到目前为止它运行良好(spring-boot 2.4.x),但最近,我们选择了 2.5.1,现在它不再停止了。这是错误还是功能?现在还有其他方法可以关闭服务吗?

编辑

我做了一个线程转储,但我不太确定如何解释它

"main" #1 prio=5 os_prio=0 tid=0x00000000027eb000 nid=0x1280 in Object.wait() [0x000000000276d000]
   java.lang.Thread.State: WAITING (on object monitor)
    at java.lang.Object.wait(Native Method)
    - waiting on <0x00000006c29756c8> (a java.lang.Thread)
    at java.lang.Thread.join(Thread.java:1252)
    - locked <0x00000006c29756c8> (a java.lang.Thread)
    at java.lang.Thread.join(Thread.java:1326)
    at java.lang.ApplicationShutdownHooks.runHooks(ApplicationShutdownHooks.java:107)
    at java.lang.ApplicationShutdownHooks$1.run(ApplicationShutdownHooks.java:46)
    at java.lang.Shutdown.runHooks(Shutdown.java:123)
    at java.lang.Shutdown.sequence(Shutdown.java:170)
    at java.lang.Shutdown.exit(Shutdown.java:216)
    - locked <0x00000006c28bc680> (a java.lang.Class for java.lang.Shutdown)
    at java.lang.Runtime.exit(Runtime.java:109)
    at java.lang.System.exit(System.java:973)
    at com.whatsoever.glp.moneypenny.config.PostMigrationCallback.supports(PostMigrationCallback.java:44)
    at org.flywaydb.core.internal.callback.DefaultCallbackExecutor.execute(DefaultCallbackExecutor.java:115)
    at org.flywaydb.core.internal.callback.DefaultCallbackExecutor.onMigrateOrUndoEvent(DefaultCallbackExecutor.java:73)
    at org.flywaydb.core.internal.command.DbMigrate.migrate(DbMigrate.java:165)
    at …
Run Code Online (Sandbox Code Playgroud)

java flyway spring-boot

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

如何在代码外部(即在XML文件中)定义AutoMapper映射,或使用其他方法进行完全可配置的对象映射?

编辑:最初我打算使用AutoMapper来实现我的目标,但我必须了解到AutoMapper并非旨在以这种方式工作。它使您可以创建配置文件,但就我而言(完全可配置),对于每种参数组合,我都需要一个配置文件,因此我想出了一种自己的方法,请参见答案。

从AutoMapper Wiki,我学会了创建一个简单的映射,例如

    Mapper.CreateMap<CalendarEvent, CalendarEventForm>().ForMember(dest => dest.Title, opt => opt.MapFrom(src => src.Title));
    Mapper.CreateMap<CalendarEvent, CalendarEventForm>().ForMember(dest => dest.EventDate, opt => opt.MapFrom(src => src.EventDate.Date));
    Mapper.CreateMap<CalendarEvent, CalendarEventForm>().ForMember(dest => dest.EventHour, opt => opt.MapFrom(src => src.EventDate.Hour));
    Mapper.CreateMap<CalendarEvent, CalendarEventForm>().ForMember(dest => dest.EventMinute, opt => opt.MapFrom(src => src.EventDate.Minute));
Run Code Online (Sandbox Code Playgroud)

对于两个类

public class CalendarEvent
{
    public DateTime EventDate;
    public string Title;
}

public class CalendarEventForm
{
    public DateTime EventDate { get; set; }
    public int EventHour { get; set; }
    public int EventMinute { get; set; }
    public string Title …
Run Code Online (Sandbox Code Playgroud)

c# mapping reflection automapper

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

如何在不增加圈复杂度的情况下覆盖等于?

我最近覆盖了equals我最近的Java项目的域对象中的一些方法.当我们使用Sonar计算我们的代码度量时,我立即看到这些类的圈复杂度增加到阈值以上.

我想知道是否有一种聪明的方式,模式或选项可以保持这个指标低,尽管有一些更复杂的equals方法.

编辑:这是我的一个例子,我没有具体说明,只是为了让我们知道我们在谈论什么.

@Override
public boolean equals(Object o) {
  if (o instanceof MyKey) {
  MyKey other = (MyKey) o;
  if (this.foo.longValue() == other.getFoo().longValue() &&
    this.bar.equalsIgnoreCase(other.getBar()) &&
    this.foobar.shortValue() == other.getFoobar().longValue()){
    return true;
    }
  }
  return false;
}

@Override
public int hashCode() {
  int hash = 3;
  hash = 53 * hash + foo.hashCode();
  hash = 53 * hash + bar.hashCode();
  hash = 53 * hash + foobar.hashCode();
  return hash;
}
Run Code Online (Sandbox Code Playgroud)

java overriding equals

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

Spring Boot:java.time.Duration 的默认序列化从 String 更改为 Number

我们最近从 Spring Boot 2.1.9 升级到 2.2.1,这导致我们的测试失败。调查导致该java.time.Duration类型现在默认以不同方式序列化。"PT15M"我们现在得到 JSON 消息中的字符串,而不是"900.0". POJO 定义看起来像这样

@JsonProperty(required = true, value = "duration")
@NotNull
private final Duration duration;
Run Code Online (Sandbox Code Playgroud)

现在的问题是,是否有一些配置属性可以用来获取“旧”行为。我知道我们也可以添加注释

@JsonFormat(shape = JsonFormat.Shape.STRING)
Run Code Online (Sandbox Code Playgroud)

但我更喜欢通过配置来获得它的方法。

java serialization jackson spring-boot

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

Springboot 2.3.4.RELEASE 连接到 Azure postgresql 失败

我们最近将我们的一项服务升级到了 2.3.4.RELEASE。更新后,我们无法再连接到 Azure PAAS PostgreSQL,我们收到 无法从数据库 (jdbc:postgresql://postgisdb:5432/someDb) 获取用户“someUser@someDB”的连接:连接尝试失败 我们看到 PostgreSQL 依赖从 4.2.14 更新到 4.2.16。切换回 4.2.14 使问题消失,但是,我想知道为什么它在当前版本上失败。

java postgresql spring-boot

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