我正在尝试使用 micronaut (1.2.0) 的多个数据库连接,没有注入方法对我有用,这是我的配置:应用.ymldatasources: default: url: ${JDBC_URL:`jdbc:mysql://localhost/cossine?useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC`} username: ${JDBC_USER:******} password: ${JDBC_PASSWORD:*****} driverClassName: ${JDBC_DRIVER:com.mysql.cj.jdbc.Driver} keycloak: url: ${JDBC_KYC_URL:`jdbc:mysql://localhost/keycloak?useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC`} username: ${JDBC_KYC_USER:******} password: ${JDBC_KYC_PASSWORD:*******} driverClassName: ${JDBC_DRIVER:com.mysql.cj.jdbc.Driver}jpa: default: packages-to-scan: - 'com.acmain.domain' properties: hibernate: hbm2ddl: auto: none show_sql: false keycloak: packages-to-scan: - 'com.acmain.kdomain' properties: hibernate: hbm2ddl: auto: none show_sql: true当我使用默认配置时,它可以正常工作,但是当使用第二个配置时,如下所示: private final EntityManager entityManager; public UserEntityImpl(@CurrentSession(value = "keycloak") EntityManager em) { this.entityManager = em; } @Override @Transactional public UsersResponse findAll(@NotNull SortingAndOrderArguments args) { List<UserEntity> users; StringBuilder qlString = new StringBuilder("SELECT g FROM UserEntity as g");...........................我错过了什么?也试过 @PersistenceContext(name = "keycloak")
private final EntityManager entityManager;
3 回答
繁花不似锦
TA贡献1851条经验 获得超4个赞
如果有人来到这里寻找如何在不使用 Hibernate 的情况下执行此操作,那么这应该可以实现。
@Transactional
@TransactionalAdvice("my-datasource") // if you have more than one datasource
public Thing saveThing(Thing thing) {
repo.save(thing);
}
梦里花落0921
TA贡献1772条经验 获得超5个赞
Micronaut 文档对此非常清楚:
在多数据源场景中,@Repository 和@TransactionalAdvice 注释可用于指定要使用的数据源配置。默认情况下,Micronaut Data 将查找默认数据源。
例如:
@Repository("inventoryDataSource")
@JdbcRepository(dialect = Dialect.ORACLE)
@TransactionalAdvice("inventoryDataSource")
public interface PhoneRepository extends CrudRepository<Phone, Integer> {
Optional<Phone> findByAssetId(@NotNull Integer assetId);
}
添加回答
举报
0/150
提交
取消