Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在Micronaut 2.0中,Liquibase库因空指针而失败_Java_Docker_Micronaut - Fatal编程技术网

Java 在Micronaut 2.0中,Liquibase库因空指针而失败

Java 在Micronaut 2.0中,Liquibase库因空指针而失败,java,docker,micronaut,Java,Docker,Micronaut,我有一个Micronaut 2.0应用程序,带有Micronaut数据(postgresql)和liquibase。 当我在IDEA或本地jar中运行应用程序时,它运行良好。应用程序有多次迁移,当它在docker中运行时,只有第一次成功执行,然后失败并出现错误: app_1 | 06:40:33.937 [main] INFO liquibase.executor.jvm.JdbcExecutor - CREATE TABLE public.marker_type (id SMALLIN

我有一个Micronaut 2.0应用程序,带有Micronaut数据(postgresql)和liquibase。 当我在IDEA或本地jar中运行应用程序时,它运行良好。应用程序有多次迁移,当它在docker中运行时,只有第一次成功执行,然后失败并出现错误:

app_1  | 06:40:33.937 [main] INFO  liquibase.executor.jvm.JdbcExecutor - 
 CREATE TABLE public.marker_type (id SMALLINT GENERATED BY DEFAULT AS IDENTITY NOT NULL, name VARCHAR(20) NOT NULL, title VARCHAR(20) NOT NULL, description VARCHAR(100), CONSTRAINT MARKER_TYPE_PKEY PRIMARY KEY (id), UNIQUE (title), UNIQUE (name))
app_1  | 06:40:33.948 [main] INFO  liquibase.changelog.ChangeSet - Table marker_type created
app_1  | 06:40:33.953 [main] INFO  liquibase.changelog.ChangeSet - SQL in file sql/20200715-1712-create_marker_type_table.sql executed
app_1  | 06:40:33.955 [main] INFO  liquibase.changelog.ChangeSet - ChangeSet classpath:db/migrations/change-log.yml::20200715-1712-create_marker_type_table ran successfully in 18ms
app_1  | 06:40:33.956 [main] INFO  liquibase.executor.jvm.JdbcExecutor - SELECT MAX(ORDEREXECUTED) FROM public.databasechangelog
app_1  | 06:40:33.961 [main] INFO  l.lockservice.StandardLockService - Successfully released change log lock
app_1  | 06:40:33.963 [main] ERROR io.micronaut.runtime.Micronaut - Error starting Micronaut server: Bean definition [javax.sql.DataSource] could not be loaded: null
app_1  | io.micronaut.context.exceptions.BeanInstantiationException: Bean definition [javax.sql.DataSource] could not be loaded: null
app_1  |    at io.micronaut.context.DefaultBeanContext.initializeContext(DefaultBeanContext.java:1540)
app_1  |    at io.micronaut.context.DefaultApplicationContext.initializeContext(DefaultApplicationContext.java:220)
app_1  |    at io.micronaut.context.DefaultBeanContext.readAllBeanDefinitionClasses(DefaultBeanContext.java:2768)
app_1  |    at io.micronaut.context.DefaultBeanContext.start(DefaultBeanContext.java:228)
app_1  |    at io.micronaut.context.DefaultApplicationContext.start(DefaultApplicationContext.java:166)
app_1  |    at io.micronaut.runtime.Micronaut.start(Micronaut.java:64)
app_1  |    at ru.vinguardsoft.ApplicationKt.main(Application.kt:9)
app_1  | Caused by: java.lang.NullPointerException: null
app_1  |    at liquibase.util.LiquibaseUtil.getBuildInfo(LiquibaseUtil.java:45)
app_1  |    at liquibase.util.LiquibaseUtil.getBuildVersion(LiquibaseUtil.java:17)
app_1  |    at liquibase.sqlgenerator.core.MarkChangeSetRanGenerator.generateSql(MarkChangeSetRanGenerator.java:91)
app_1  |    at liquibase.sqlgenerator.core.MarkChangeSetRanGenerator.generateSql(MarkChangeSetRanGenerator.java:25)
app_1  |    at liquibase.sqlgenerator.SqlGeneratorChain.generateSql(SqlGeneratorChain.java:30)
app_1  |    at liquibase.sqlgenerator.SqlGeneratorFactory.generateSql(SqlGeneratorFactory.java:222)
app_1  |    at liquibase.executor.AbstractExecutor.applyVisitors(AbstractExecutor.java:25)
app_1  |    at liquibase.executor.jvm.JdbcExecutor.access$600(JdbcExecutor.java:40)
app_1  |    at liquibase.executor.jvm.JdbcExecutor$ExecuteStatementCallback.doInStatement(JdbcExecutor.java:384)
app_1  |    at liquibase.executor.jvm.JdbcExecutor.execute(JdbcExecutor.java:59)
app_1  |    at liquibase.executor.jvm.JdbcExecutor.execute(JdbcExecutor.java:131)
app_1  |    at liquibase.executor.jvm.JdbcExecutor.execute(JdbcExecutor.java:111)
app_1  |    at liquibase.changelog.StandardChangeLogHistoryService.setExecType(StandardChangeLogHistoryService.java:388)
app_1  |    at liquibase.database.AbstractJdbcDatabase.markChangeSetExecStatus(AbstractJdbcDatabase.java:1130)
app_1  |    at liquibase.changelog.visitor.UpdateVisitor.visit(UpdateVisitor.java:64)
app_1  |    at liquibase.changelog.ChangeLogIterator.run(ChangeLogIterator.java:83)
app_1  |    at liquibase.Liquibase.update(Liquibase.java:202)
app_1  |    at liquibase.Liquibase.update(Liquibase.java:179)
app_1  |    at io.micronaut.liquibase.LiquibaseMigrationRunner.performUpdate(LiquibaseMigrationRunner.java:189)
app_1  |    at io.micronaut.liquibase.LiquibaseMigrationRunner.migrate(LiquibaseMigrationRunner.java:146)
app_1  |    at io.micronaut.liquibase.LiquibaseMigrationRunner.run(LiquibaseMigrationRunner.java:109)
app_1  |    at io.micronaut.liquibase.LiquibaseMigrationRunner.lambda$null$0(LiquibaseMigrationRunner.java:91)
app_1  |    at java.base/java.util.Optional.ifPresent(Optional.java:183)
app_1  |    at io.micronaut.liquibase.LiquibaseMigrationRunner.lambda$onCreated$1(LiquibaseMigrationRunner.java:91)
app_1  |    at java.base/java.util.Optional.ifPresent(Optional.java:183)
app_1  |    at io.micronaut.liquibase.LiquibaseMigrationRunner.onCreated(LiquibaseMigrationRunner.java:88)
app_1  |    at io.micronaut.liquibase.LiquibaseMigrationRunner.onCreated(LiquibaseMigrationRunner.java:62)
app_1  |    at io.micronaut.context.DefaultBeanContext.doCreateBean(DefaultBeanContext.java:1945)
app_1  |    at io.micronaut.context.DefaultBeanContext.createAndRegisterSingletonInternal(DefaultBeanContext.java:2635)
app_1  |    at io.micronaut.context.DefaultBeanContext.createAndRegisterSingleton(DefaultBeanContext.java:2621)
app_1  |    at io.micronaut.context.DefaultBeanContext.loadContextScopeBean(DefaultBeanContext.java:2163)
app_1  |    at io.micronaut.context.DefaultBeanContext.initializeContext(DefaultBeanContext.java:1538)
app_1  |    ... 6 common frames omitted
第二次运行应用程序时出现错误:
关系标记类型已存在

若将Micronaut降级为v1,并且不更改其他代码,则应用程序在docker中运行时不会出现问题

Micronaut 2有什么问题

UPD:

application.yml
的片段:

datasources:
  default:
    url: 'jdbc:postgresql://${DB_HOST:localhost}:5432/demo'
    username: 'postgres'
    password: '1234'
    driverClassName: 'org.postgresql.Driver'
jpa:
  default:
    entity-scan:
      packages: 'models'
    properties:
      hibernate:
        hbm2ddl:
          auto: none
        show_sql: true
liquibase:
  datasources:
    default:
      change-log: 'classpath:db/migrations/change-log.yml'
DB\u主机
是docker compose中的环境

UPD:
docker compose.yml

version: "3.7"
services:
  app:
    build:
      context: .
      args:
        JAR_FILE: build/libs/mdemo*-all.jar
    ports:
      - "8090:8090"
    depends_on:
      - db
    environment:
      SERVER_PORT: 8090
      DB_HOST: db
  db:
    image: postgres:12
    expose:
      - "5432"
    environment:
      POSTGRES_USER: postgres
      POSTGRES_PASSWORD: 1234
      POSTGRES_DB: demo

您可以在资源文件夹中共享application.properties或application.yaml吗

我相信您的数据源没有配置,可能是通用数据源,也可能是flyway中的数据源


我可以想象,您在该配置中依赖于env vars,但在容器启动时没有提供它们。

您可以在资源文件夹中共享application.properties或application.yaml吗

我相信您的数据源没有配置,可能是通用数据源,也可能是flyway中的数据源


我可以想象,您在该配置中依赖于环境变量,但在容器启动时并没有提供这些变量。

我猜您遇到了以下问题

解决办法是

shadowJar {
    manifest {
        attributes 'Bundle-Version': 'UNKNOWN'
        attributes 'Build-Time': 'UNKNOWN'
    }
}
Micronaut仍在使用liquibase的3.8.0版


库升级完成后,您将不再点击它,但它将与Micronaut的2.1版一起发布。

我想您已经点击了以下问题

解决办法是

shadowJar {
    manifest {
        attributes 'Bundle-Version': 'UNKNOWN'
        attributes 'Build-Time': 'UNKNOWN'
    }
}
Micronaut仍在使用liquibase的3.8.0版


库升级完成后,您将不再点击它,但它将与Micronaut的2.1版一起发布。

添加到问题帖中。如果没有配置数据源,那么就根本不会进行任何迁移,对吗?当我更改Micronaut的verion.添加到问题帖子时,我对application.yml或docker文件没有做任何更改。如果没有配置数据源,那么就根本不会进行任何迁移,对吗?当我更改Micronaut的verion时,application.yml或docker文件中没有任何更改。您是否尝试重新创建容器<代码>docker编写-强制重新创建是的,我试过了。相同的行为请共享docker compose文件。你的Liquibase版本是什么?问题中增加了docker compose。Liquibase是最新的:实现(“io.micronaut.Liquibase:micronaut Liquibase”)-2.0.0根据我在micronaut is LiquibaServision=3.8.0中的回答,请检查发布的解决方案您是否尝试重新创建容器<代码>docker编写-强制重新创建是的,我试过了。相同的行为请共享docker compose文件。你的Liquibase版本是什么?问题中增加了docker compose。Liquibase是最新的:实现(“io.micronaut.Liquibase:micronaut Liquibase”)-2.0.0根据我在micronaut is LiquibaServision=3.8.0中的回答,请查看发布的解决方法