如何在Kotlin中使用单独的配置文件/环境数据源进行Micronaut测试?

跨软件

我正在尝试对用Kotlin编写的Micronaut Web应用程序使用两个数据源一个具有mysql数据库的数据源,以及一个在执行测试时要使用的内存H2数据库中的数据源

我尝试仅使用h2数据库作为默认生产数据源,因此有关它的配置字段应该正确。

通过执行,应用程序将按预期与mysql数据源一起运行 ./gradlew run

  1. 我试过把数据来源,单独的配置文件,application.ymlapplication-test.ymlsrc/main/resources/目录中,也将只application-test.ymlsrc/test/resources/,没有结果。
  2. 添加@MicronautTest注释来声明test环境和application = BookieSparaerverApplication参数无效。
  3. 添加@TypeHint(Genre::class, Book::class, DefaultGenreRepository::class)注释BookieServerApplication无效。

这些是src/main/resources/application.yml配置文件的相关字段

datasources:
  default:
    url: 'jdbc:mysql://localhost:3306/bookie-server?useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC&useSSL=false'
    dbCreate: create-update
    driverClassName: com.mysql.cj.jdbc.Driver
    dialect: org.hibernate.dialect.MySQL5InnoDBDialect
    username: root
    password: root

jpa:
  default:
    entity-scan:
      packages:
        - 'com.transgressoft.bookieserver.domain'
    properties:
      hibernate:
        hbm2ddl:
          auto: update
        show_sql: true

这是src/test/resources/application-test.yml文件:

datasources:
  default:
    url: ${JDBC_URL:`jdbc:h2:mem:default;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE`}
    username: ${JDBC_USER:sa}
    password: ${JDBC_PASSWORD:""}
    driverClassName: ${JDBC_DRIVER:org.h2.Driver}

jpa:
  default:
    entity-scan:
      packages:
        - 'com.transgressoft.bookieserver.domain'
    properties:
      hibernate:
        hbm2ddl:
          auto: update
        show_sql: true

当我执行测试(GenreControllerSpec在代码中)时,似乎EntityManager未创建Bean,因此无法实例化DAO类(在我的代码中是GenreRepository该类)。

这是完整的日志消息:

Internal Server Error: Failed to inject value for parameter [entityManager] of class: com.transgressoft.bookieserver.domain.$DefaultGenreRepositoryDefinition$Intercepted

Message: No bean of type [javax.persistence.EntityManager] exists. Make sure the bean is not disabled by bean requirements (enable trace logging for 'io.micronaut.context.condition' to check) and if the bean is enabled then ensure the class is declared a bean and annotation processing is enabled (for Java and Kotlin the 'micronaut-inject-java' dependency should be configured as an annotation processor).
Path Taken: new $GenreControllerDefinition$Intercepted([GenreRepository genreRepository],BeanContext beanContext,Interceptor[] interceptors) --> new $DefaultGenreRepositoryDefinition$Intercepted([EntityManager entityManager],ConfigurationProperties applicationConfiguration,BeanContext beanContext,Interceptor[] interceptors)
io.micronaut.http.client.exceptions.HttpClientResponseException: Internal Server Error: Failed to inject value for parameter [entityManager] of class: com.transgressoft.bookieserver.domain.$DefaultGenreRepositoryDefinition$Intercepted

完整的项目代码可在此处https://github.com/octaviospain/bookie-server/tree/feature/jpa-and-hibernate访问,要重现以上日志,只需执行./gradlew test并打开报告,或在激活日志的情况下运行它。

编辑:我已经用伊凡·洛佩兹(Ivan Lopez)的建议更新了说明,但错误和预期结果仍然相同。

詹姆斯·克莱

您的示例应用程序正在使用1.1.1,micronaut-hibernate-jpa其中不支持

jpa:
  default:
    entity-scan:
      packages:
        - 'com.transgressoft.bookieserver.domain'

您必须jpa.default.packages-to-scan改为使用文档说明中的内容。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何使用Play和sbt在CI中使用单独的配置文件进行测试?

从配置文件获取数据源

在春季创建后如何使用数据源配置文件

使用配置文件指定连接字符串以在单元测试中定义数据源

如何在OSRM配置文件中使用外部数据

如何在Java Web应用程序中使用数据源测试DAO?

如何在配置文件中使用文件系统为测试设置飞行路径配置?

使用数据源进行Wildfly配置

在Maven配置文件中排除Mock数据源

多个数据源和多个配置文件

如何在Spring Boot中使用不活动的数据源创建Jar文件?

如何在JPA中使用动态JNDI数据源?

如何在UITableView中使用外部数据源

如何在SQL数据源的列中使用公式

如何在jqwidgets数据源中使用DataTable

如何在Kendo Grid中使用SignalR数据源

如何在envoyproxy配置文件中使用环境变量?

如何在休眠配置文件中使用环境变量?

Micronaut环境和登录配置文件

如何在JBoss中配置SQL Server数据源以使用特定的Active Directory用户进行连接?

如何在每个新请求中使用Ajax数据源进行select2下拉?

如何在node-webkit中使用跨源数据进行测试?

如何在Liberty配置文件中使用MicroProfile FaultTolerance

如何在配置文件中使用路由助手

如何在Puppet中使用模板作为配置文件

如何在Airflow中使用配置文件

如何在dockerfile中使用bash配置文件

如何在SSH配置文件中使用变量

如何在 LDAP 的 RabbitMQ 配置文件中使用变量