是否可以在 AWS ECS Fargate 中使用 liquibase?

Is it possible to use liquibase in AWS ECS Fargate?

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

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

018-01-12 19:34:03.406 错误 6 --- [main] o.s.boot.SpringApplication:应用程序启动失败 org.springframework.beans.factory.BeanCreationException:创建名称为 'liquibase' 的 bean 在 class 路径资源 [com/mlb/best/config/LiquibaseConfig.class] 中定义时出错:调用 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.refresh上下文 (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(本机方法)~[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:空 在 sun.reflect.NativeConstructorAccessorImpl.newInstance0(本机方法)~[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:未知错误 at java.net.Inet4AddressImpl.lookupAllHostAddr(本机方法)~[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-core 解决了这个问题。