我正在尝试设置 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 图像来做到这一点。
@ibre5041 是对的。我只是通过将 ojdbc 更改为版本 8 来解决它:
testRuntime组:'com.oracle.database.jdbc',名称:'ojdbc8',版本:'23.3.0.23.09'