首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Micronaut-data :找不到当前的JDBC连接。考虑将此调用包装在事务边界中

Micronaut-data :找不到当前的JDBC连接。考虑将此调用包装在事务边界中
EN

Stack Overflow用户
提问于 2020-07-02 21:43:22
回答 1查看 698关注 0票数 2

我没有找到当前的JDBC连接。使用micronaut data时出现异常,我指的是https://github.com/tdisanti/micronaut-single-ucp

微型机版本

代码语言:javascript
复制
<micronaut.version>2.0.0</micronaut.version>
<micronaut.data.version>1.1.1</micronaut.data.version>

日志:

代码语言:javascript
复制
   2020-07-02 19:03:30.716 [nioEventLoopGroup-1-3] ERROR i.m.h.s.netty.RoutingInBoundHandler:1839- Unexpected error occurred: No current JDBC Connection found. Consider wrapping this call in transactional boundaries.
    io.micronaut.transaction.jdbc.exceptions.CannotGetJdbcConnectionException: No current JDBC Connection found. Consider wrapping this call in transactional boundaries.
        at io.micronaut.transaction.jdbc.DataSourceUtils.doGetConnection(DataSourceUtils.java:135)
        at io.micronaut.transaction.jdbc.DataSourceUtils.getConnection(DataSourceUtils.java:93)
        at io.micronaut.transaction.jdbc.DataSourceTransactionManager.getConnection(DataSourceTransactionManager.java:342)
        at io.micronaut.transaction.jdbc.DataSourceTransactionManager.getConnection(DataSourceTransactionManager.java:88)
        at io.micronaut.data.jdbc.operations.DefaultJdbcRepositoryOperations.prepareStatement(DefaultJdbcRepositoryOperations.java:1185)

java

代码语言:javascript
复制
@JdbcRepository(dialect = Dialect.ORACLE)
public class BooksDao {
        private final JdbcOperations jdbcOperations;

    @Inject
    public BooksDao (JdbcOperations jdbcOperations) {
        this.jdbcOperations = jdbcOperations;

    }

    @Transactional
public List<Book> get(){
...
}

}

yml属性

代码语言:javascript
复制
datasources:
  default:
    validationQuery: SELECT 1 FROM DUAL
    driverClass: oracle.jdbc.driver.OracleDriver
    url: jdbc:oracle:thin:<url>,cn=OracleContext,dc=uk,dc=csfb,dc=com
    autoCommit: true
    connectionTestQuery: SELECT 1 FROM DUAL
    leakDetectionThreshold: 180000
    poolName: hikariConnectionPoolName
    maximumPoolSize: 10
    minimumIdle: 5
    data-source-properties:
      truststore: '${client.truststore.path}'
      truststore.password: '${client.truststore.password}'
      truststore.type: JKS
      keystore: '${client.keystore.path}'
      keystore.password: '${client.keystore.password}'
      keystore.type: PKCS12
    dialect: ORACLE

DatasourceConfiguration.java

代码语言:javascript
复制
@Singleton
public class DatasourceConfiguration implements BeanCreatedEventListener<DatasourceConfiguration> {
    @Override
    public DatasourceConfiguration onCreated(BeanCreatedEvent<DatasourceConfiguration> event) {
        LOGGER.info("Overriding DatasourceConfiguration Properties...");
        DatasourceConfiguration bean = event.getBean();
        Properties dataSourceProperties = bean.getDataSourceProperties();
        Map<String, String> props = new HashMap<>();
        props.put("javax.net.ssl.keyStore",dataSourceProperties.getProperty("keystore"));
        props.put("javax.net.ssl.keyStorePassword",dataSourceProperties.getProperty("keystore.password"));
        props.put("javax.net.ssl.keyStoreType",dataSourceProperties.getProperty("keystore.type"));
        props.put("javax.net.ssl.trustStore",dataSourceProperties.getProperty("truststore"));
        props.put("javax.net.ssl.trustStorePassword",dataSourceProperties.getProperty("truststore.password"));
        props.put("javax.net.ssl.trustStoreType",dataSourceProperties.getProperty("truststore.type"));
        props.put("oracle.net.authentication_services","(TCPS)");
        props.put("oracle.net.ssl_client_authentication","TRUE");
        props.put("ssl.keyManagerFactory.algorithm","SunX509");
        props.put("oracle.net.ssl_cipher_suites","(TLS_RSA_WITH_AES_256_CBC_SHA)");
        props.put("oracle.net.encryption_client","REJECTED");
        props.put("oracle.net.crypto_checksum_client","REJECTED");
        bean.setDataSourceProperties(props);
        return bean;
    }
}
EN

回答 1

Stack Overflow用户

发布于 2020-07-02 23:29:37

通过在maven-compiler-plugin的annotationProcessorPaths中添加micronaut-data-processor解决了这个问题。

代码语言:javascript
复制
 <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <version>${maven-compiler-plugin.version}</version>
                    <configuration>
                        <release>${jdk.version}</release>
                        <encoding>UTF-8</encoding>
                        <compilerArgs>
                            <arg>-parameters</arg>
                        </compilerArgs>
                        <annotationProcessorPaths>
                            <path>
                                <groupId>io.micronaut</groupId>
                                <artifactId>micronaut-inject-java</artifactId>
                                <version>${micronaut.version}</version>
                            </path>
                            <path>
                                <groupId>io.micronaut</groupId>
                                <artifactId>micronaut-validation</artifactId>
                                <version>${micronaut.version}</version>
                            </path>
                            <path>
                                <groupId>io.micronaut.configuration</groupId>
                                <artifactId>micronaut-openapi</artifactId>
                                <version>${micronaut.openapi.version}</version>
                            </path>
                            <path>
                                <groupId>io.micronaut.data</groupId>
                                <artifactId>micronaut-data-processor</artifactId>
                                <version>1.0.2</version>
                            </path>
                        </annotationProcessorPaths>
                    </configuration>
                    <executions>
                        <execution>
                            <id>test-compile</id>
                            <goals>
                                <goal>testCompile</goal>
                            </goals>
                            <configuration>
                                <compilerArgs>
                                    <arg>-parameters</arg>
                                </compilerArgs>
                                <annotationProcessorPaths>
                                    <path>
                                        <groupId>io.micronaut</groupId>
                                        <artifactId>micronaut-inject-java</artifactId>
                                        <version>${micronaut.version}</version>
                                    </path>
                                    <path>
                                        <groupId>io.micronaut</groupId>
                                        <artifactId>micronaut-validation</artifactId>
                                        <version>${micronaut.version}</version>
                                    </path>
                                    <path>
                                        <groupId>io.micronaut.configuration</groupId>
                                        <artifactId>micronaut-openapi</artifactId>
                                        <version>${micronaut.openapi.version}</version>
                                    </path>
                                    <path>
                                        <groupId>io.micronaut.data</groupId>
                                        <artifactId>micronaut-data-processor</artifactId>
                                        <version>1.0.2</version>
                                    </path>
                                </annotationProcessorPaths>
                            </configuration>
                        </execution>
                    </executions>
                </plugin>
            </plugins>
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62697782

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档