使用带有JNDI Oracle数据源的独立Tomcat进行Spring Boot

时间:2015-01-26 14:00:23

标签: oracle10g spring-boot jndi tomcat8

我有一个新的Spring Boot(1.2.1.RELEASE)web / Jpa应用程序,我想连接到JNDI数据源(在独立的Tomcat的context.xml中定义的Oracle数据库)。

但是当我尝试这个时,我总是得到以下异常;

Unable to register MBean [org.apache.tomcat.dbcp.dbcp2.BasicDataSource@102f8ea9] with key 'dataSource'; nested exception is javax.management.InstanceAlreadyExistsException: Catalina:type=DataSource,class=javax.sql.DataSource,name="jdbc/npacore"

我的pom.xml看起来像这样:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.springframework</groupId>
    <artifactId>bootwar</artifactId>
    <version>0.1.0</version>
    <packaging>war</packaging>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.2.1.RELEASE</version>
    </parent>

    <dependencies>
        <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>
            <exclusions>
                <exclusion>
                    <groupId>org.hibernate</groupId>
                    <artifactId>hibernate-entitymanager</artifactId>
                </exclusion>
                <exclusion>
                    <artifactId>tomcat-jdbc</artifactId>
                    <groupId>org.apache.tomcat</groupId>
                </exclusion>
            </exclusions>
        </dependency>

        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-entitymanager</artifactId>
        </dependency>

        <!-- <dependency> -->
        <!-- <groupId>oracle.ojdbc</groupId> -->
        <!-- <artifactId>ojdbc</artifactId> -->
        <!-- <version>6</version> -->

        <!-- </dependency> -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
            <scope>provided</scope>
        </dependency>
    </dependencies>


    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <start-class>hello.Application</start-class>
        <java.version>1.7</java.version>
    </properties>

    <build>
        <finalName>${artifactId}</finalName>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

    <repositories>
        <repository>
            <id>spring-releases</id>
            <name>Spring Releases</name>
            <url>http://repo.spring.io/libs-release</url>
        </repository>
    </repositories>

    <pluginRepositories>
        <pluginRepository>
            <id>spring-releases</id>
            <name>Spring Releases</name>
            <url>http://repo.spring.io/libs-release</url>
        </pluginRepository>
    </pluginRepositories>

</project>

JNDI配置在appliation.properties中看起来像这样:

spring.datasource.jndi-name=java:/comp/env/jdbc/npacore
spring.datasource.driverClassName=oracle.jdbc.driver.OracleDriver
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.Oracle10gDialect

我在这里关注MySQL的非常相似的博客:Spring Boot with JNDI Datasource

1 个答案:

答案 0 :(得分:0)

你在Spring Boot中点击了this issue。您可以通过将spring.jmx.enabled设置为false来解决此问题。