我试图连接到Sybase数据库从Spring Boot应用程序。作为WAR文件运行时,Sybase JDBC连接登录失败;但在Eclipse中运行时登录成功
我使用JCONNECT jconn4 jdbc驱动。
登录密码是在Sybase服务器上加密,所以我用BouncyCastle的加密API加密密码。
下面是块的代码:
该代码使用纯JDBC测试连接,后来我打算修改该使用Spring的JdbcTemplate。
Connection con = null;
try {
Class.forName("com.sybase.jdbc4.jdbc.SybDriver");
logger.info("Loaded Sybase driver successfully.....");
} catch (ClassNotFoundException cnfe) {
cnfe.printStackTrace();
}
和
String url = "jdbc:sybase:Tds:<url>:<port>/<databasename>";
Properties props = new Properties();
props.put("ENCRYPT_PASSWORD", "true");
props.put("JCE_PROVIDER_CLASS", "org.bouncycastle.jce.provider.BouncyCastleProvider");
props.put("user", "username");
props.put("password", "pwd");
和
con = DriverManager.getConnection(url, props);
当成功登录到Sybase服务器:
- 运行Eclipse IDE中的应用。
当登录失败到Sybase服务器:
- 运行中的Windows命令提示符下产生WAR文件。
- 内运行的Linux 壳牌(开发/ QA服务器)所生成的WAR文件。
我试图alreday什么:
1.Compared jar文件的版本在运行应用程序使用了以下jars.Because有多个同罐子的版本文件存在于类路径(来自各种依赖关系)。
jconn4-7.07.jar
(sybase jdbc driver)。 (bouncycastle crypto API)。
bcprov-jdk16-1.43.ja
r(bouncycastle crypto API)。
我使用下面的代码块来找到应用程序在运行时使用的jar。
Class clazz = null;
try {
clazz = Class.forName("org.bouncycastle.jce.provider.BouncyCastleProvider");
logger.info("BouncyCastleProvider is ... " + clazz.toString());
if (clazz != null && clazz.getProtectionDomain() != null
&& clazz.getProtectionDomain().getCodeSource() != null) {
URL codeLocation = clazz.getProtectionDomain().getCodeSource().getLocation();
logger.info("BouncyCastleProvider jar is ... " + codeLocation.toString());
}
} catch (ClassNotFoundException e) {
logger.info(e.getMessage());
}
2.Found 4版本的bcprov-jdk1x-x.xx.jar文件的通过pom.xml中的依赖层次窗口Eclipse和'排除' 在POM其中三个文件。这是为了避免版本冲突的jar文件。
但它不:-(工作。
为什么它能够内Eclispe的连接,而不是运行的WAR而?
任何帮助/方向会更有益。