2016-04-28 24 views
2

webappにspringbootを使用しています。エンドユーザーが使用することができるさまざまなJDBCドライバを保持する外部ディレクトリをセットアップしようとしています。私のapplication.propertiesファイルにSpringBoot loader.path外部Jarをロードできません

loader.path=/opt/myapp/lib/ 

を、これは私の問題は、私がから任意のJDBCドライバをロードすることができないようです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/' 

によってピックアップされています。これを行うには、私は追加してい私がこのディレクトリにドロップするどんな瓶、私は何が欠けていますか?私は既定の埋め込みTomcatサーバーを使用しています。 Class.forNameを使用してドライバをロードしようとすると、jarがそのディレクトリに存在しないように、次のようになります。

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> 

を私のポンポンファイル内のスプリング・ブートのmaven-pluginのプラグインに:

+0

アプリケーションをどのように構築してパッケージ化しましたか? 'loader.path'は、' PropertiesLauncher'を使用している場合にのみ有効です。 –

+0

はい、私はしました。私はちょうど瓶を作り、それをjava -jar MyApp-1.0-SNAPSHOT.jarで走らせて、同じ結果を得ました。 – csyperski

+0

jdbcドライバの依存関係をpomに追加すると、明らかに機能しますが、何らかの理由で外部ディレクトリから読み込むことができません。 – csyperski

答えて

5

だから、後に多くのグーグル

おかげで、それは私が追加することによってそれを解決することができましたが判明しました。作業バージョンは次のようになります。

<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> 
+0

これは、 '' mvn spring-boot:run''を使用しているときではなく、実行可能なjarを実行しているときにSpring Bootに '' PropertiesLauncher''を使用するよう伝えることができる限り誰でも助けます。 –

関連する問題