私はSpring Boot 1.4.2.RELEASE
を使用しています。私はTomcat 8.5.9
(埋込みされていない)とJava 8
も使用しています。私application.properties
ファイルでSpringブートとTomcatがJNDIリソースを見つけられない
、私は手動で使用して私のデータソースを設定することができます。
spring.datasource.url = jdbc:as400://blahblah....
spring.datasource.username = myuser
spring.datasource.password = password
spring.datasource.driver-class-name=com.ibm.as400.access.AS400JDBCDriver
これはうまく動作します。しかし、私たちはTomcatを使って接続をホストしています。 Tomcatのでは、我々は持っている:
<GlobalNamingResources>
<Resource name="jdbc/BLAH" ..... />
</GlobalNamingResources>
だから私は、その後にapplication.propertiesを変更:今すぐ
spring.datasource.jndi-name=java:comp/env/jdbc/BLAH
spring.jpa.database-platform=org.hibernate.dialect.DB2400Dialect
spring.jpa.show-sql=true
、私もアプリケーションを構築することはできません。私は、次の例外を取得:
o.s.w.c.s.GenericWebApplicationContext :
Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException:
Error creating bean with name 'org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration':
Unsatisfied dependency expressed through constructor parameter 0;
nested exception is org.springframework.beans.factory.BeanCreationException:
Error creating bean with name 'dataSource' defined in class path resource
[org/springframework/boot/autoconfigure/jdbc/JndiDataSourceAutoConfiguration.class]:
Bean instantiation via factory method failed;
nested exception is org.springframework.beans.BeanInstantiationException:
Failed to instantiate [javax.sql.DataSource]:
Factory method 'dataSource' threw exception; nested exception is
org.springframework.jdbc.datasource.lookup.DataSourceLookupFailureException:
Failed to look up JNDI DataSource with name 'java:comp/env/jdbc/BLAH';
nested exception is javax.naming.NoInitialContextException:
Need to specify class name in environment or system property, or as an applet parameter,
or in an application resource file: java.naming.factory.initial
はNoInitialContextException
は春ブーツは、それがJNDIルックアップを実行することはできませんので、Tomcatが動作して見つけることができないと信じて私をリードしています。
正確なは、Springブート1.2.5.RELEASEを使用して同じセットアップが行われました。 1.2.5.RELEASE、Java 7、Tomcat 7を使用する別のアプリケーションがあり、JNDIリソースを使用して動作します。しかし、最新のSpring Bootを使用すると、Java 8とTomcat 8はそうではありません。
何か助けていただければ幸いです。
私のpom.xmlからいくつか抜粋:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.4.2.RELEASE</version>
<relativePath/>
</parent>
...
<dependencies>
<dependency>
<groupId>net.sf.jt400</groupId>
<artifactId>jt400</artifactId>
<version>6.7</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.vaadin</groupId>
<artifactId>vaadin-spring-boot-starter</artifactId>
<version>1.1.1</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
....
</dependencies>
その他のコードスニペット:
@SpringBootApplication
public class MyApplication {
public static void main(String[] args) {
SpringApplication.run(MyApplication.class, args);
}
}
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(basePackages = "com.company.myapp")
@EnableJpaRepositories(basePackages = "com.company.myapp.repository")
@EnableTransactionManagement
@EnableVaadin
@EnableVaadinServlet
public class AppConfiguration {
}
UPDATE
私が使用してTomcatの(外部)内のリソースを作成しましたGlobalNamingResources
はserver.xml
です。 これは他のアプリケーションでも機能します。また、私はそれが問題をクリアしたい
<?xml version="1.0" encoding="UTF-8"?>
<Context>
<ResourceLink global="jdbc/BLAH"
name="jdbc/BLAH"
type="com.mchange.v2.c3p0.ComboPooledDataSource"/>
</Context>
UPDATE 3
:
UPDATE 2
は、私がsrc/main/webapp/META-INF/context.xml
ファイルに次のしていることを言及し忘れましたmaven package
のステップで発生します。
先行するスラッシュでリソースを参照しようとしましたか? (つまりjava:/ ...)spring.datasource.jndi-name = java:/ comp/env/jdbc/BLAH –
申し訳ありませんが、私はあなたの言っていることに従いません。 – cbmeeks
まだ同じ。私は '/ jdbc/BLAH'と' jdbc/BLAH'も試しました。 – cbmeeks