Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/400.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中有多个数据源的情况下获取EntityManager的特定实例_Java_Jpa_Datasource_Micronaut_Micronaut Data - Fatal编程技术网

Java 在Micronaut中有多个数据源的情况下获取EntityManager的特定实例

Java 在Micronaut中有多个数据源的情况下获取EntityManager的特定实例,java,jpa,datasource,micronaut,micronaut-data,Java,Jpa,Datasource,Micronaut,Micronaut Data,我对Micronaut应用程序的application.yml中的两个不同数据源有以下定义- datasources: default: url: <jdbc-url> driverClassName: org.postgresql.Driver username: <username> password: <password> dialect: POSTGRES schema: <schema>

我对Micronaut应用程序的application.yml中的两个不同数据源有以下定义-

datasources:
  default:
    url: <jdbc-url>
    driverClassName: org.postgresql.Driver
    username: <username>
    password: <password>
    dialect: POSTGRES
    schema: <schema>
  ms-sql:
    url: <jdbc-url>
    driverClassName: com.microsoft.sqlserver.jdbc.SQLServerDriver
    username: <username>
    password: <password>
    dialect: org.hibernate.dialect.SQLServer2012Dialect
    schema: <schema>

对于每个
数据源
配置(也注入由
配置属性
驱动的bean
数据源配置
),Micronaut将创建一个合格的
会话工厂
bean

在下面,每个合格的
SessionFactory
将导致
TransactionManager
合格bean的创建

根据
io.micronaut.context.annotation.EachBean
注入机制,创建的每个bean将在驱动其创建的bean限定名之后
@命名

从配置到bean创建的简短注入路径如下:

datasources.some-datasource-name (configuration item within your .yaml, .properties...)
              |
              |
              v
    DataSourceConfiguration @Named("some-datasource-name")
              |
              |
              v
         DataSource @Named("some-datasource-name")
              |
              |
              v
        SessionFactory @Named("some-datasource-name")
              |
              |
              v
      TransactionManager @Named("some-datasource-name")
              |
              |
              v
     RepositoryOperations @Named("some-datasource-name")
然后,您必须以编程方式使用限定的
TransactionManager
以及事务感知的
EntityManager
来执行JPA操作(请注意,编程事务样式中不再需要
@Transactional
注释):

@Singleton
公共类MyServiceImpl实现了MyService{
私有EntityManager em;//事务感知bean
私有最终同步transactionManager transactionManager;
公共MyServiceImpl(@NonNull EntityManager EntityManager,@NonNull@Named(“ms sql”)SynchronousTransactionManager transactionManager){
this.em=实体管理器;
this.transactionManager=transactionManager;
}
@凌驾
公共int callSP(int num){
返回transactionManager.executeRead(状态->{
StoredProcedureQuery=em.createStoredProcedureQuery(“storelist.testSP1”)
.registerStoredProcedureParameter(“Input”、Integer.class、ParameterMode.IN)
.registerStoredProcedureParameter(“OutputInt”、Integer.class、ParameterMode.OUT)
.setParameter(“输入”,num);
query.execute();
return(Integer)query.getOutputParameterValue(“OutputInt”);
});
}
}
或者注入一个合格的
RepositoryOperations
,在您的情况下,它将是
hibernatejbaooperations
的一个实例,并用于查询您的数据源

datasources.some-datasource-name (configuration item within your .yaml, .properties...)
              |
              |
              v
    DataSourceConfiguration @Named("some-datasource-name")
              |
              |
              v
         DataSource @Named("some-datasource-name")
              |
              |
              v
        SessionFactory @Named("some-datasource-name")
              |
              |
              v
      TransactionManager @Named("some-datasource-name")
              |
              |
              v
     RepositoryOperations @Named("some-datasource-name")