为了账号安全,请及时绑定邮箱和手机立即绑定

使用多个数据源 (Micronaut) javax.persistence.Transaction

使用多个数据源 (Micronaut) javax.persistence.Transaction

RISEBY 2023-06-21 14:54:50
我正在尝试使用 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);

    

}


查看完整回答
反对 回复 2023-06-21
?
梦里花落0921

TA贡献1772条经验 获得超6个赞

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);

}


查看完整回答
反对 回复 2023-06-21
?
撒科打诨

TA贡献1934条经验 获得超2个赞

好吧,只需要添加

  @Transactional("keycloak")
查看完整回答
反对 回复 2023-06-21
  • 3 回答
  • 0 关注
  • 170 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信