You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为Quartz Scheduler 2.3.2配置Oracle Wallet实现无密码登录?

解决Quartz 2.3.2对接Oracle Wallet时的ORA-01017错误

我之前帮同事排查过几乎一模一样的问题——Quartz默认依赖的C3P0连接池不会自动识别Oracle Wallet的配置,得手动把Wallet的参数传递到JDBC连接或JVM系统属性里才行。下面是一步步的解决方案:

1. 确保JDBC URL正确包含Wallet配置

你需要把Oracle Wallet的路径直接嵌入JDBC URL,或者通过系统属性指定,两种方式选其一即可:

方式一:直接在JDBC URL中指定Wallet

修改Quartz数据源的JDBC URL为带Wallet参数的格式,注意必须用绝对路径指向包含cwallet.sso和ewallet.p12的目录:

org.quartz.dataSource.myDS.URL=jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=your-oracle-host)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=your-service-name))(SECURITY=(WALLET_LOCATION=(SOURCE=(METHOD=FILE)(METHOD_DATA=(DIRECTORY=/absolute/path/to/your/wallet/directory))))))

方式二:通过JVM系统属性指定

如果习惯用TNS别名,先确保tnsnames.ora放在TNS_ADMIN目录下,然后给JVM添加启动参数:

-Doracle.net.wallet_location=(SOURCE=(METHOD=FILE)(METHOD_DATA=(DIRECTORY=/absolute/path/to/wallet)))
-Doracle.net.tns_admin=/absolute/path/to/tns_admin_directory

此时Quartz的JDBC URL可以简化为:

org.quartz.dataSource.myDS.URL=jdbc:oracle:thin:@your-tns-alias

2. 清理Quartz数据源的明文账号密码配置

在quartz.properties里,必须删除以下两行:

# 删掉这两行!
org.quartz.dataSource.myDS.user=your-username
org.quartz.dataSource.myDS.password=your-password

留着这两行的话,C3P0会优先使用明文账号密码,反而忽略Wallet的配置。

3. 确保Oracle JDBC驱动版本兼容

Quartz 2.3.2默认依赖的C3P0版本是0.9.5.2,建议使用12cR2以上的Oracle JDBC驱动(比如ojdbc8),它对Wallet的支持更稳定,避免版本不匹配导致的异常。

4. 验证C3P0是否正确读取Wallet配置

如果还是报错,可以开启C3P0的DEBUG日志,查看连接初始化时的参数:
在你的日志配置文件(比如log4j.xml)中添加:

<logger name="com.mchange.v2.c3p0" level="DEBUG"/>

启动后观察日志,确认是否有类似Oracle Wallet location set to...的信息,或者连接请求没有携带明文账号密码。

5. 备选:在代码中手动设置系统属性

如果JVM启动参数没生效,可以在Quartz初始化之前,在代码里手动设置系统属性:

public static void main(String[] args) throws SchedulerException {
    // 先设置Wallet参数
    System.setProperty("oracle.net.wallet_location", 
        "SOURCE=(METHOD=FILE)(METHOD_DATA=(DIRECTORY=/absolute/path/to/wallet))");
    // 再初始化Quartz
    StdSchedulerFactory factory = new StdSchedulerFactory();
    factory.initialize("quartz.properties");
    Scheduler scheduler = factory.getScheduler();
    scheduler.start();
}

这种方式能确保Quartz启动时已经加载了Wallet的配置,不会出现参数遗漏的情况。

按照这些步骤配置后,C3P0应该就能正确通过Oracle Wallet获取数据库凭据,不再报ORA-01017错误了。

内容的提问来源于stack exchange,提问作者nephewtom

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 09:54:05