如何解决即使连接两个数据库,Micronaut 也只能使用一个数据库
我已经用两个 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
这是我的 Repository
声明:
@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
}
}
如您所见,我指定了要使用的数据源:
@Repository("target")
解决方法
您可以使用 @Repository
注释来注释您的 @EachBean
bean,指定 EntityManager
作为依赖类型允许 Microanut 为每个创建的 {{1 }}(以及引擎盖下的每个 EntityManager
):
DataSource
然后您可以根据所需的目标 @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
}
}
注入合格的 DepartmentRepository
:
DataSource
或者动态使用注入的 @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);
}
}
:
ApplicationContext
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。