【问题标题】:Is it possible to use liquibase in AWS ECS Fargate?是否可以在 AWS ECS Fargate 中使用 liquibase?
【发布时间】:2018-06-22 08:23:03
【问题描述】:

我问是因为我尝试过但失败了。问题似乎是 liquibase 需要有关它正在运行的主机的信息来锁定并写入 DATABASECHANGELOG。

因此,当我在 ECS Fargate 集群中启动我的 spring-boot 应用程序时,我看到了:

018-01-12 19:34:03.406 错误 6 --- [main] os.boot.SpringApplication : 应用程序启动失败 org.springframework.beans.factory.BeanCreationException:在类路径资源 [com/mlb/best/config/LiquibaseConfig.class] 中定义名称为“liquibase”的 bean 创建错误:调用 init 方法失败;嵌套异常是 java.lang.ExceptionInInitializerError 在 .springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1628) ~[spring-beans-4.3.12.RELEASE.jar!/:4.3.12.RELEASE] 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:555) ~[spring-beans-4.3.12.RELEASE.jar!/:4.3.12.RELEASE] 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:483) ~[spring-beans-4.3.12.RELEASE.jar!/:4.3.12.RELEASE] 在 org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306) ~[spring-beans-4.3.12.RELEASE.jar!/:4.3.12.RELEASE] 在 org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) ~[spring-beans-4.3.12.RELEASE.jar!/:4.3.12.RELEASE] 在 org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302) ~[spring-beans-4.3.12.RELEASE.jar!/:4.3.12.RELEASE] 在 org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197) ~[spring-beans-4.3.12.RELEASE.jar!/:4.3.12.RELEASE] 在 org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:761) ~[spring-beans-4.3.12.RELEASE.jar!/:4.3.12.RELEASE] 在 org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:867) ~[spring-context-4.3.12.RELEASE.jar!/:4.3.12.RELEASE] 在 org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:543) ~[spring-context-4.3.12.RELEASE.jar!/:4.3.12.RELEASE] 在 org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:122) ~[spring-boot-1.5.8.RELEASE.jar!/:1.5.8.RELEASE] 在 org.springframework.boot.SpringApplication.refresh(SpringApplication.java:693) [spring-boot-1.5.8.RELEASE.jar!/:1.5.8.RELEASE] 在 org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:360) [spring-boot-1.5.8.RELEASE.jar!/:1.5.8.RELEASE] 在 org.springframework.boot.SpringApplication.run(SpringApplication.java:303) [spring-boot-1.5.8.RELEASE.jar!/:1.5.8.RELEASE] 在 org.springframework.boot.SpringApplication.run(SpringApplication.java:1118) [spring-boot-1.5.8.RELEASE.jar!/:1.5.8.RELEASE] 在 com.mlb.best.Application.main(Application.java:31) [classes!/:1.0-SNAPSHOT] 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_92-internal] 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_92-internal] 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_92-internal] 在 java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_92-internal] 在 org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:48) [application.jar:1.0-SNAPSHOT] 在 org.springframework.boot.loader.Launcher.launch(Launcher.java:87) [application.jar:1.0-SNAPSHOT] 在 org.springframework.boot.loader.Launcher.launch(Launcher.java:50) [application.jar:1.0-SNAPSHOT] 在 org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:51) [application.jar:1.0-SNAPSHOT] 引起:java.lang.ExceptionInInitializerError: null 在 sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[na:1.8.0_92-internal] 在 sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) ~[na:1.8.0_92-internal] 在 sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) ~[na:1.8.0_92-internal] 在 java.lang.reflect.Constructor.newInstance(Constructor.java:423) ~[na:1.8.0_92-internal] 在 liquibase.sqlgenerator.SqlGeneratorFactory.(SqlGeneratorFactory.java:40) ~[liquibase-core-3.3.2.jar!/:na] 在 liquibase.sqlgenerator.SqlGeneratorFactory.getInstance(SqlGeneratorFactory.java:54) ~[liquibase-core-3.3.2.jar!/:na] 在 liquibase.executor.AbstractExecutor.applyVisitors(AbstractExecutor.java:23) ~[liquibase-core-3.3.2.jar!/:na] 在 liquibase.executor.jvm.JdbcExecutor.access$700(JdbcExecutor.java:36) ~[liquibase-core-3.3.2.jar!/:na] 在 liquibase.executor.jvm.JdbcExecutor$QueryStatementCallback.doInStatement(JdbcExecutor.java:345) ~[liquibase-core-3.3.2.jar!/:na] 在 liquibase.executor.jvm.JdbcExecutor.execute(JdbcExecutor.java:55) ~[liquibase-core-3.3.2.jar!/:na] 在 liquibase.executor.jvm.JdbcExecutor.query(JdbcExecutor.java:135) ~[liquibase-core-3.3.2.jar!/:na] 在 liquibase.executor.jvm.JdbcExecutor.query(JdbcExecutor.java:143) ~[liquibase-core-3.3.2.jar!/:na] 在 liquibase.executor.jvm.JdbcExecutor.queryForObject(JdbcExecutor.java:151) ~[liquibase-core-3.3.2.jar!/:na] 在 liquibase.executor.jvm.JdbcExecutor.queryForObject(JdbcExecutor.java:166) ~[liquibase-core-3.3.2.jar!/:na] 在 liquibase.executor.jvm.JdbcExecutor.queryForInt(JdbcExecutor.java:187) ~[liquibase-core-3.3.2.jar!/:na] 在 liquibase.executor.jvm.JdbcExecutor.queryForInt(JdbcExecutor.java:182) ~[liquibase-core-3.3.2.jar!/:na] 在 liquibase.lockservice.StandardLockService.isDatabaseChangeLogLockTableInitialized(StandardLockService.java:118) ~[liquibase-core-3.3.2.jar!/:na] 在 liquibase.lockservice.StandardLockService.init(StandardLockService.java:94) ~[liquibase-core-3.3.2.jar!/:na] 在 liquibase.lockservice.StandardLockService.acquireLock(StandardLockService.java:188) ~[liquibase-core-3.3.2.jar!/:na] 在 liquibase.lockservice.StandardLockService.waitForLock(StandardLockService.java:154) ~[liquibase-core-3.3.2.jar!/:na] 在 liquibase.Liquibase.update(Liquibase.java:186) ~[liquibase-core-3.3.2.jar!/:na] 在 liquibase.integration.spring.SpringLiquibase.performUpdate(SpringLiquibase.java:353) ~[liquibase-core-3.3.2.jar!/:na] 在 liquibase.integration.spring.SpringLiquibase.afterPropertiesSet(SpringLiquibase.java:317) ~[liquibase-core-3.3.2.jar!/:na] 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1687) ~[spring-beans-4.3.12.RELEASE.jar!/:4.3.12.RELEASE] 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1624) ~[spring-beans-4.3.12.RELEASE.jar!/:4.3.12.RELEASE] ...省略了23个常用框架 引起:liquibase.exception.UnexpectedLiquibaseException:java.net.UnknownHostException:19f647ae563e:19f647ae563e:未知错误 在 liquibase.sqlgenerator.core.LockDatabaseChangeLogGenerator.(LockDatabaseChangeLogGenerator.java:32) ~[liquibase-core-3.3.2.jar!/:na] ...省略了48个常用框架 引起:java.net.UnknownHostException:19f647ae563e:19f647ae563e:未知错误 在 java.net.InetAddress.getLocalHost(InetAddress.java:1505) ~[na:1.8.0_92-internal] 在 liquibase.util.NetUtil.getLocalHostName(NetUtil.java:41) ~[liquibase-core-3.3.2.jar!/:na] 在 liquibase.sqlgenerator.core.LockDatabaseChangeLogGenerator.(LockDatabaseChangeLogGenerator.java:29) ~[liquibase-core-3.3.2.jar!/:na] ...省略了48个常用框架 原因:java.net.UnknownHostException: 19f647ae563e: 未知错误 在 java.net.Inet4AddressImpl.lookupAllHostAddr(Native Method) ~[na:1.8.0_92-internal] 在 java.net.InetAddress$2.lookupAllHostAddr(InetAddress.java:928) ~[na:1.8.0_92-internal] 在 java.net.InetAddress.getAddressesFromNameService(InetAddress.java:1323) ~[na:1.8.0_92-internal] 在 java.net.InetAddress.getLocalHost(InetAddress.java:1500) ~[na:1.8.0_92-internal] ...省略了50个常用框架

有什么办法可以解决这个问题,或者我必须使用 AWS ECS EC2 吗?通常我会通过检查我的 /etc/hosts 来解决这个问题,以确保在那里定义了一个本地主机。但不确定我如何使用 fargate 做到这一点。

【问题讨论】:

  • 您使用的是哪个版本的 liquibase?这是发生类似情况的 liquibase-jira 票证:liquibase.jira.com/browse/CORE-2344。也许您只需要更新 liquibase?如果没有,也许您可​​以创建一张票?正如 Nathan 所说,主机名仅供参考。所以我猜如果 liquibase 无法获得主机名,它应该不会失败。
  • 我运行的是 3.3.2。已将其更新到 3.5.3,这似乎已经解决了问题。谢谢@jens。

标签: liquibase amazon-ecs aws-fargate


【解决方案1】:

如上所述,使用最新版本的 liquibase-core 解决了该问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-06
    • 2021-10-10
    • 1970-01-01
    • 2021-07-22
    • 1970-01-01
    • 2019-02-19
    相关资源
    最近更新 更多