スプリングブートアプリケーションに接続しようとしています。WARファイルとして実行すると、Sybase JDBC接続ログインに失敗しました。 Eclipse内で実行するとログインが成功する
私はJConnect jconn4 jdbcドライバを使用しています。
ログインパスワードは、Sybaseサーバーでを暗号化あるので、私はパスワードを暗号化するためにはBouncyCastle暗号化APIを使用しています。以下は
は、コードのブロックです:
このコードは、後に、私は春のJDBCTemplateを使用するために、これを変更する予定です、接続をテストするためにプレーンJDBCを使用しています。
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 Serverに失敗した
:
- Windowsのコマンドプロンプト内で生成されたWARファイルを実行します。
- Linuxのシェル(のDev/QAサーバ)内で生成されたWARファイルを実行します。私が試したalreday何
:
1.Compared jars.Becauseの下に同じjarファイルの複数バージョンが存在するためランタイム時にアプリケーションが使用するjarファイルのバージョンファイルはクラスパス(さまざまな依存関係)にあります。
jconn4-7.07.jar
(sybase jdbcドライバ)。
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のpom.xmlの依存階層 Eclipseのウィンドウとてbcprov-jdk1x-x.xx.jarファイルのバージョンはポンポンでこれらのファイルの 3 'を除外' 。これは回避することですバージョンjarファイルのが矛盾しています。
それは:-(動作していません。
WARとして実行している間Eclispe以内に接続していないことが可能であるのはなぜ?
すべてのヘルプ/方向はあまり有用であろう。