ORA-28040:与 Testcontainers Oracle-XE(通过 JDBC URL)和 Spring Framework 5 没有匹配的身份验证协议

问题描述 投票:0回答:1

我正在尝试设置 Testcontainers 来为使用 Spring 5.3 和 Oracle 12C 的项目执行集成测试,但每次尝试运行测试时都会收到错误“ORA-28040:没有匹配的身份验证协议”。

使用NamedParameterJdbcTemplate访问生产数据库,配置如下:

<tx:annotation-driven proxy-target-class="true"
        transaction-manager="transactionManager" />
    
<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean"> 
    <property name="jndiName" value="${connectionDataSource}" /> 
</bean>

<bean id="transactionManager"
    class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    <property name="dataSource">
        <ref bean="dataSource" />
    </property>
</bean>

<bean class="org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate" id="namedParameterJdbcTemplate">
     <constructor-arg ref="dataSource"/>
</bean> 

connectionDataSource
只是一个值为 jdbc/myproject 的属性,它指向应用程序服务器 (Bea Weblogic 12.2) 中配置的连接。

我正在尝试在单独的文件 test-applicationContext-resources.xml 中配置测试数据源,如下所示:

<tx:annotation-driven proxy-target-class="true"
                      transaction-manager="transactionManager" />

<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
    <property name="driverClassName" value="org.testcontainers.jdbc.ContainerDatabaseDriver"/>
    <property name="url" value="jdbc:tc:oracle:21-slim-faststart:///myproject?TC_INITSCRIPT=/myproject.sql"/>
    <property name="username" value="myproject"/>
    <property name="password" value="myproject"/>
</bean>

<bean id="transactionManager"
      class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    <property name="dataSource">
        <ref bean="dataSource" />
    </property>
</bean>

<bean class="org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate" id="namedParameterJdbcTemplate">
    <constructor-arg ref="dataSource"/>
</bean>

然后我尝试执行这个测试类:

@ExtendWith(SpringExtension.class)
@ContextConfiguration(locations = {"classpath:test-applicationContext-resources.xml"})
@WebAppConfiguration
@Testcontainers
class MyProjectTest {
    @Autowired
    MyProjectDAO myProjectDAO;

    @Test
    void test() {
        int userNumber = myProjectDAO.countUsers();
        assertEquals(1, userNumber);
    }
}

但我收到了上述错误。

我尝试从配置中删除用户名和密码属性,以及 driverClassName 属性,但没有改变任何东西。

我在生产中使用的 JDBC 驱动程序是:

testRuntime group: 'com.oracle', name: 'ojdbc', version: '6'

不确定这是否是原因。

进行一些搜索,看起来有此问题的人可以解决它设置

SQLNET.ALLOWED_LOGON_VERSION=8
,但我不确定如何使用 Testcontainers 图像来做到这一点。

java spring oracle testcontainers
1个回答
0
投票

@ibre5041 是对的。我只是通过将 ojdbc 更改为版本 8 来解决它:

testRuntime组:'com.oracle.database.jdbc',名称:'ojdbc8',版本:'23.3.0.23.09'

© www.soinside.com 2019 - 2024. All rights reserved.