Java Micronaut只能使用一个数据库,甚至可以连接两个数据库

Java Micronaut只能使用一个数据库,甚至可以连接两个数据库,java,hibernate,jpa,micronaut,micronaut-data,Java,Hibernate,Jpa,Micronaut,Micronaut Data,我已经用两个MySQL数据库配置了Micronaut应用程序,但它总是使用默认数据源执行操作 如何处理多个数据库 以下是我的application.yml配置: datasources: default: url: jdbc:mysql://localhost:3306/micronaut_demo username: root password: goti@181994 dialect: MYSQL target: url:

我已经用两个MySQL数据库配置了Micronaut应用程序,但它总是使用默认数据源执行操作

如何处理多个数据库

以下是我的application.yml配置:

datasources:
  default:
      url: jdbc:mysql://localhost:3306/micronaut_demo
      username: root
      password: goti@181994
      dialect: MYSQL
  target:
      url: jdbc:mysql://localhost:3306/micronaut_demo_target
      username: root
      password: goti@181994
      dialect: MYSQL
jpa:
  default:
    packages-to-scan:
      - 'com.example'
    properties:
      hibernate:
        hbm2ddl:
          auto: create-drop
        show_sql: true
  target:
    properties:
      hibernate:
        hbm2ddl:
          auto: create-drop
        show_sql: true
这是我的
存储库
声明:

@Singleton
@Repository("target")
public class DepartmentRepositoryImpl implements  DepartmentRepository {
    private EntityManager entityManager;

    public DepartmentRepositoryImpl(EntityManager entityManager) {
        this.entityManager = entityManager;
    }

    @Override
    @ReadOnly
    public Optional<Department> findById(Long id) {
        return Optional.ofNullable(entityManager.find(Department.class, id));
    }

    @Override
    @Transactional
    public Department save(String name) {
        //save logic
    }
}

您可以使用
@EachBean
注释对
@Repository
bean进行注释,该注释将
EntityManager
指定为依赖类型,允许Micronut为每个创建的
EntityManager
(以及引擎盖下的每个
数据源
)创建bean:

或者动态使用注入的
应用程序上下文

@Singleton
public class ServiceImpl implements Service {

    private ApplicationContext applicationContext;

    public ServiceImpl(ApplicationContext applicationContext) {
        this.applicationContext = applicationContext;
    }

    @Override
    public Department save(String name) {
        return this.save(name, "default");
    }

    public Department save(String name, String targetDataSource) {
        return this.applicationContext.getBean(DepartmentRepository.class, Qualifiers.byName(target)).save(name);
    }
}

请添加
DepartmentRepository
声明,好吗?您如何调用
部门repositoryimpl
存储库bean?您能添加调用方代码段吗?谢谢您的回复,DepartmentRepository只是一个接口,只有声明的方法。我和我们一样,通过注入DepartmentRepository来调用这些方法。
@EachBean(EntityManager.class)
@Repository
public class DepartmentRepositoryImpl implements  DepartmentRepository {

    private EntityManager entityManager;

    public DepartmentRepositoryImpl(EntityManager entityManager) {
        this.entityManager = entityManager;
    }

    @Override
    @ReadOnly
    public Optional<Department> findById(Long id) {
        return Optional.ofNullable(entityManager.find(Department.class, id));
    }

    @Override
    @Transactional
    public Department save(String name) {
        //save logic
    }
}
@Singleton
public class ServiceImpl implements Service {

    private DepartmentRepository departmentRepository;

    public ServiceImpl(@Named("target") DepartmentRepository departmentRepository) {
        this.departmentRepository = departmentRepository;
    }

    @Override
    public Department save(String name) {
        return this.departmentRepository.save(name);
    }
}
@Singleton
public class ServiceImpl implements Service {

    private ApplicationContext applicationContext;

    public ServiceImpl(ApplicationContext applicationContext) {
        this.applicationContext = applicationContext;
    }

    @Override
    public Department save(String name) {
        return this.save(name, "default");
    }

    public Department save(String name, String targetDataSource) {
        return this.applicationContext.getBean(DepartmentRepository.class, Qualifiers.byName(target)).save(name);
    }
}