在春季批处理任务中,我配置了两个数据源,一个用于oracle,另一个用于h2。 H2我用于批处理和任务执行表,而oracle是用于批处理的真实数据。我能够从ide成功运行任务,但是当我从SCDF服务器运行它时,出现以下错误
Caused by: java.sql.SQLException: Unable to start the Universal Connection Pool: oracle.ucp.UniversalConnectionPoolException: Cannot get Connection from Datasource: org.h2.jdbc.JdbcSQLInvalidAuthorizationSpecException: Wrong user name or password [28000-200]
问题是,为什么还要连接到H2进行oracle db连接?
以下是我的数据库配置:
@Bean(name = "OracleUniversalConnectionPool")
public DataSource secondaryDataSource() {
PoolDataSource pds = null;
try {
pds = PoolDataSourceFactory.getPoolDataSource();
pds.setConnectionFactoryClassName(driverClassName);
pds.setURL(url);
pds.setUser(username);
pds.setPassword(password);
pds.setMinPoolSize(Integer.valueOf(minPoolSize));
pds.setInitialPoolSize(10);
pds.setMaxPoolSize(Integer.valueOf(maxPoolSize));
} catch (SQLException ea) {
log.error("Error connecting to the database: ", ea.getMessage());
}
return pds;
}
@Bean(name = "batchDataSource")
@Primary
public DataSource dataSource() throws SQLException {
final SimpleDriverDataSource dataSource = new SimpleDriverDataSource();
dataSource.setDriver(new org.h2.Driver());
dataSource.setUrl("jdbc:h2:tcp://localhost:19092/mem:dataflow");
dataSource.setUsername("sa");
dataSource.setPassword("");
return dataSource;
}
答案 0 :(得分:0)
我解决了这个问题,问题是我正在使用它来设置oracle db的值。
spring.datasource.url: ******
spring.datasource.username: ******
它在IDE上运行良好,但是当我在SCDF服务器上运行它时,默认情况下它被覆盖用于SCDF服务器数据库连接的属性。所以我只是将连接属性更新为:
spring.datasource.oracle.url: ******
spring.datasource.oracle.username: ******
现在它按预期运行。