1

我正在开发我的第一个 micronaut 应用程序,但在使用 ucp 配置 oracle 多个数据源时遇到问题。

当我尝试执行选择时,我正在关注官方教程(https://micronaut-projects.github.io/micronaut-sql/latest/guide/ ),出现错误:

io.micronaut.transaction.jdbc.exceptions.CannotGetJdbcConnectionException: No current JDBC Connection found. Consider wrapping this call in transactional boundaries.

我检查了 DataSourceFactory 并且 PoolDataSource 设置正确

我错过了什么?

谢谢!

micronaut:
  application:
    name: myapp
datasources:
  first: 
    url: url
    connectionFactoryClassName: oracle.jdbc.pool.OracleDataSource
    username: user
    password: password
    minPoolSize: 1
    maxPoolSize: 10
  second: 
    url: url
    connectionFactoryClassName: oracle.jdbc.pool.OracleDataSource
    username: user
    password: password
    minPoolSize: 1
    maxPoolSize: 10

@JdbcRepository(dialect = Dialect.ORACLE)
public abstract class MyRepository {

@Inject
@Named("first")
protected final DataSource dataSource;

protected final JdbcOperations jdbcOperations;

public MyRepository(JdbcOperations jdbcOperations, DataSource dataSource) {
    this.dataSource = dataSource;
    this.jdbcOperations = jdbcOperations;
}
}

@Singleton
public class MyDao extends MyRepository {

    public MyDao(JdbcOperations jdbcOperations, DataSource dataSource) {
        super(jdbcOperations, dataSource);
    }

    @Transactional
    public Long find() {
        String sql = "select * from table where id = 1";
        return this.jdbcOperations.prepareStatement(sql, st -> {
            return 1L;
        });

}
4

1 回答 1

0

第一个数据源需要被称为“默认”。此外,当使用具有非默认数据源的事务时,您需要使用带有数据源名称的 @TransactionAdvice,例如@TransactionalAdvice("Second").

于 2021-07-20T13:43:58.830 回答