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

我正在尝试使用 micronaut (1.2.0) 的多个数据库连接,没有注入方法对我有用,这是我的配置:


应用.yml


datasources:

  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;


RISEBY
浏览 171回答 3
3回答

繁花不似锦

如果有人来到这里寻找如何在不使用 Hibernate 的情况下执行此操作,那么这应该可以实现。@Transactional@TransactionalAdvice("my-datasource") // if you have more than one datasourcepublic Thing saveThing(Thing thing) {&nbsp; &nbsp; repo.save(thing);&nbsp; &nbsp;&nbsp;}

梦里花落0921

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

撒科打诨

好吧,只需要添加  @Transactional("keycloak")
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java