Spring 作为WAR文件运行时Sybase JDBC连接登录失败;但在Eclipse中运行时登录成功

Spring 作为WAR文件运行时Sybase JDBC连接登录失败;但在Eclipse中运行时登录成功,spring,jdbc,sybase,bouncycastle,sap-ase,Spring,Jdbc,Sybase,Bouncycastle,Sap Ase,我正在尝试从Spring Boot应用程序连接到Sybase数据库 我正在使用jconnectjconn4jdbc驱动程序 Class clazz = null; try { clazz = Class.forName("org.bouncycastle.jce.provider.BouncyCastleProvider"); logger.info("BouncyCastleProvider is ... " + clazz.toString()); if (claz

我正在尝试从Spring Boot应用程序连接到Sybase数据库

我正在使用jconnectjconn4jdbc驱动程序

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());
}
登录密码在Sybase server上是加密的,因此我使用bouncycastle加密API来加密密码

下面是代码的

此代码使用普通JDBC来测试连接,稍后我计划修改此代码以使用Spring的JDBC模板

    Connection con = null;

    try {
        Class.forName("com.sybase.jdbc4.jdbc.SybDriver");
        logger.info("Loaded Sybase driver successfully.....");
    } catch (ClassNotFoundException cnfe) {
        cnfe.printStackTrace();
    }

成功登录Sybase服务器时:

  • 在EclipseIDE中运行应用程序
  • 登录Sybase服务器失败时:

  • Windows命令提示符下运行生成的WAR文件
  • LinuxShell(Dev/QA服务器)中运行生成的WAR文件
  • 我一直在尝试什么:

    1.比较应用程序在运行时使用的jar文件的版本,因为同一jar文件在类路径中存在多个版本(来自不同的依赖项)

    jconn4-7.07.jar
    (sybase jdbc驱动程序)

    bcprov-jdk16-1.43.ja
    r(bouncycastle加密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.通过eclipse中pom.xml的依赖关系层次结构窗口找到了bcprov-jdk1x-x.xx.jar文件的4个版本,并在pom中“排除”了其中三个文件。这是为了避免jar文件的版本冲突

    但它不起作用:-(

    为什么它能够在Eclispe中连接,而不能作为WAR运行


    任何帮助/指导都会非常有用。

    经过大量的研究并花费了将近10个小时的努力,我能够通过在连接属性中添加“字符集”来解决这个问题

    props.put("CHARSET", "iso_1");
    
    这个故事的寓意是:问题可能更大,但解决方案不是:-)

    props.put("CHARSET", "iso_1");