【问题标题】:How to add a second datasource to a Micronaut project?如何向 Micronaut 项目添加第二个数据源?
【发布时间】:2019-10-11 06:31:52
【问题描述】:

我有一个 java Micronaut 项目并想添加第二个数据源。只要我添加第二个数据源,我的代码就可以正常工作。 documentation 刚刚说过,我必须在我的配置中以新名称添加新源。我做错了什么以及如何使用第二个数据库。

我的应用程序.yaml

---
micronaut:
  application:
    name: transfer-service

---
datasources:
  default:
    url: jdbc:postgresql://XXX.XXX.XXX.XXX:XXXX/t4dserver
    driverClassName: org.postgresql.Driver
    username: postgres
    password: password
  germany:
    url: jdbc:postgresql://YYY.YYY.YYY.YYY:YYYY/t4dserver
    driverClassName: org.postgresql.Driver
    username: postgres
    password: password
jpa:
  default:
    properties:
      hibernate:
        hbm2ddl:
          auto: none

添加“德国”数据源时出现的错误:

ERROR io.micronaut.runtime.Micronaut - Error starting Micronaut server: Bean definition [org.hibernate.SessionFactory] could not be loaded: Error instantiating bean of type  [org.hibernate.boot.MetadataSources]

Message: Missing bean argument value: jpaConfiguration
Path Taken: SessionFactory.hibernateSessionFactory([SessionFactoryBuilder sessionFactoryBuilder]) --> SessionFactoryBuilder.hibernateSessionFactoryBuilder([MetadataSources metadataSources],ValidatorFactory validatorFactory) --> MetadataSources.hibernateMetadataSources([JpaConfiguration jpaConfiguration],StandardServiceRegistry standardServiceRegistry)
io.micronaut.context.exceptions.BeanInstantiationException: Bean definition [org.hibernate.SessionFactory] could not be loaded: Error instantiating bean of type  [org.hibernate.boot.MetadataSources]

Message: Missing bean argument value: jpaConfiguration
Path Taken: SessionFactory.hibernateSessionFactory([SessionFactoryBuilder sessionFactoryBuilder]) --> SessionFactoryBuilder.hibernateSessionFactoryBuilder([MetadataSources metadataSources],ValidatorFactory validatorFactory) --> MetadataSources.hibernateMetadataSources([JpaConfiguration jpaConfiguration],StandardServiceRegistry standardServiceRegistry)
        at io.micronaut.context.DefaultBeanContext.initializeContext(DefaultBeanContext.java:1174)
        at io.micronaut.context.DefaultApplicationContext.initializeContext(DefaultApplicationContext.java:236)
        at io.micronaut.context.DefaultBeanContext.readAllBeanDefinitionClasses(DefaultBeanContext.java:2313)
        at io.micronaut.context.DefaultBeanContext.start(DefaultBeanContext.java:199)
        at io.micronaut.context.DefaultApplicationContext.start(DefaultApplicationContext.java:187)
        at io.micronaut.runtime.Micronaut.start(Micronaut.java:69)
        at io.micronaut.runtime.Micronaut.run(Micronaut.java:288)
        at io.micronaut.runtime.Micronaut.run(Micronaut.java:274)
        at transfer.service.Application.main(Application.java:8)
Caused by: io.micronaut.context.exceptions.BeanInstantiationException: Error instantiating bean of type  [org.hibernate.boot.MetadataSources]

Message: Missing bean argument value: jpaConfiguration
Path Taken: SessionFactory.hibernateSessionFactory([SessionFactoryBuilder sessionFactoryBuilder]) --> SessionFactoryBuilder.hibernateSessionFactoryBuilder([MetadataSources metadataSources],ValidatorFactory validatorFactory) --> MetadataSources.hibernateMetadataSources([JpaConfiguration jpaConfiguration],StandardServiceRegistry standardServiceRegistry)
        at io.micronaut.context.AbstractParametrizedBeanDefinition.build(AbstractParametrizedBeanDefinition.java:99)
        at io.micronaut.context.BeanDefinitionDelegate.build(BeanDefinitionDelegate.java:201)
        at io.micronaut.context.DefaultBeanContext.doCreateBean(DefaultBeanContext.java:1494)
        at io.micronaut.context.DefaultBeanContext.createAndRegisterSingleton(DefaultBeanContext.java:2163)
        at io.micronaut.context.DefaultBeanContext.getBeanForDefinition(DefaultBeanContext.java:1849)
        at io.micronaut.context.DefaultBeanContext.getBeanInternal(DefaultBeanContext.java:1829)
        at io.micronaut.context.DefaultBeanContext.getBean(DefaultBeanContext.java:997)
        at io.micronaut.context.AbstractBeanDefinition.getBeanForConstructorArgument(AbstractBeanDefinition.java:982)
        at io.micronaut.configuration.hibernate.jpa.$EntityManagerFactoryBean$HibernateSessionFactoryBuilderDefinition.build(Unknown Source)
        at io.micronaut.context.BeanDefinitionDelegate.build(BeanDefinitionDelegate.java:205)
        at io.micronaut.context.DefaultBeanContext.doCreateBean(DefaultBeanContext.java:1494)
        at io.micronaut.context.DefaultBeanContext.createAndRegisterSingleton(DefaultBeanContext.java:2163)
        at io.micronaut.context.DefaultBeanContext.getBeanForDefinition(DefaultBeanContext.java:1849)
        at io.micronaut.context.DefaultBeanContext.getBeanInternal(DefaultBeanContext.java:1829)
        at io.micronaut.context.DefaultBeanContext.getBean(DefaultBeanContext.java:997)
        at io.micronaut.context.AbstractBeanDefinition.getBeanForConstructorArgument(AbstractBeanDefinition.java:982)
        at io.micronaut.configuration.hibernate.jpa.$EntityManagerFactoryBean$HibernateSessionFactoryDefinition.build(Unknown Source)
        at io.micronaut.context.BeanDefinitionDelegate.build(BeanDefinitionDelegate.java:205)
        at io.micronaut.context.DefaultBeanContext.doCreateBean(DefaultBeanContext.java:1494)
        at io.micronaut.context.DefaultBeanContext.createAndRegisterSingleton(DefaultBeanContext.java:2163)
        at io.micronaut.context.DefaultBeanContext.loadContextScopeBean(DefaultBeanContext.java:1761)
        at io.micronaut.context.DefaultBeanContext.initializeContext(DefaultBeanContext.java:1172)
        ... 8 common frames omitted

【问题讨论】:

  • 您是否按照文档的建议注入了“德国”数据源? @Inject @Named("germany") DataSource dataSource
  • 您需要为“德国”数据源提供 jpg 定义吗?

标签: java hibernate jpa jdbc micronaut


【解决方案1】:

为了清楚起见,写下我的评论作为答案

我认为您需要将第二个数据源添加到 jpa 部分:

jpa:
   default:
      properties:
         hibernate:
            hbm2ddl:
               auto: none
   germany:
      properties:
         hibernate:
            hbm2ddl:
               auto: none

【讨论】:

  • 感谢您为我工作,但是当我知道使用 @PersistenceContext(name = "germany") private final EntityManager entityManager; public GerService(@CurrentSession EntityManager entityManager) { this.entityManager = entityManager; } 时,我的应用程序仍然使用默认的 entityManager??
  • 我想我会补充一个不同的问题,这可能与 JPA 有更多关系,我从未尝试过拥有多个实体管理器。
猜你喜欢
  • 1970-01-01
  • 2019-12-03
  • 2014-12-29
  • 2012-09-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-27
  • 1970-01-01
相关资源
最近更新 更多