我正在为 Web 应用程序使用 springboot,我正在尝试设置一个外部目录,该目录将包含最终用户可能选择使用的各种 JDBC 驱动程序。为此,我要添加:

loader.path=/opt/myapp/lib/ 

到我的 application.properties 文件,这是由 PropertySourcesPropertyResolver 获取的

2016-04-28 17:27:38.739 DEBUG 22539 --- [restartedMain] o.s.c.e.PropertySourcesPropertyResolver  : Found key 'loader.path' in [applicationConfigurationProperties] with type [String] and value '/opt/myapp/lib/' 

我的问题是我似乎无法从放入该目录的任何 jar 中加载任何 JDBC 驱动程序,我缺少什么?我正在使用默认的嵌入式 tomcat 服务器。当我尝试使用 Class.forName 加载驱动程序时,我得到以下信息,就像该目录中不存在 jars 一样。

 public Connection buildConnection(DataSource dataSource) throws ClassNotFoundException, SQLException { 
 
    if (dataSource == null) { 
        throw new NullPointerException("Data Source is null!"); 
    } 
 
    if (!dataSource.isReady()) { 
        throw new IllegalArgumentException("Data Source is reporting that it is not ready!"); 
    } 
 
    logger.debug("Loading JDBC Driver: {}", dataSource.getDriverClass()); 
    Class.forName(dataSource.getDriverClass()); 
    logger.debug("Loaded Driver: {}", dataSource.getDriverClass()); 
 
    logger.debug("Attempting to build connection using: {}", dataSource.getConnectionString()); 
 
    DriverManager.setLoginTimeout(10); 
    Connection c = DriverManager.getConnection(dataSource.getConnectionString(), dataSource.getUserName(), dataSource.getPassword()); 
    if (c != null) { 
        c.setAutoCommit(true); 
        c.setReadOnly(true); 
        return c; 
    } 
    throw new NullPointerException("Unable to create connection!"); 
}  

这是抛出的异常

2016-04-28 17:38:53.525 DEBUG 22539 --- [nio-8081-exec-5] c.c.reportout.processor.JobProcessor     : Loading JDBC Driver: com.mysql.jdbc.Driver 
2016-04-28 17:38:53.526  WARN 22539 --- [nio-8081-exec-5] c.c.reportout.processor.JobProcessor     : Unable to successfully test connection: com.mysql.jdbc.Driver 
 
java.lang.ClassNotFoundException: com.mysql.jdbc.Driver 
at java.net.URLClassLoader.findClass(URLClassLoader.java:381) ~[na:1.8.0_91] 
at java.lang.ClassLoader.loadClass(ClassLoader.java:424) ~[na:1.8.0_91] 
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) ~[na:1.8.0_91] 
at java.lang.ClassLoader.loadClass(ClassLoader.java:357) ~[na:1.8.0_91] 
at org.springframework.boot.devtools.restart.classloader.RestartClassLoader.loadClass(RestartClassLoader.java:151) ~[spring-boot-devtools-1.3.3.RELEASE.jar:1.3.3.RELEASE] 
at java.lang.ClassLoader.loadClass(ClassLoader.java:357) ~[na:1.8.0_91] 
at java.lang.Class.forName0(Native Method) ~[na:1.8.0_91] 
at java.lang.Class.forName(Class.java:264) ~[na:1.8.0_91] 

关于我如何调试它或我做错了什么的任何指示?

谢谢

请您参考如下方法:

所以经过大量谷歌搜索后,事实证明我能够通过添加来解决它:

<configuration> 
    <layout>ZIP</layout> 
</configuration> 

到我的 pom 文件中的 spring-boot-maven-plugin 插件。所以现在的工作版本看起来像这样:

<plugins> 
        <plugin> 
            <groupId>org.springframework.boot</groupId> 
            <artifactId>spring-boot-maven-plugin</artifactId> 
            <version>${spring-boot.version}</version> 
            <configuration> 
                <layout>ZIP</layout> 
            </configuration> 
            <executions> 
                <execution> 
                    <goals> 
                        <goal>repackage</goal> 
                    </goals> 
                </execution> 
            </executions> 
        </plugin> 
    </plugins> 


评论关闭
IT序号网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!