使用 JNDI 数据源的 Spring Boot

2024-04-15

我有一个新的 Spring Boot Web 应用程序,我想连接到 JNDI 数据源(Tomcat 的 context.xml 中定义的 MySQL 数据库)。

然而,当我尝试这样做时,我总是遇到以下异常;

org.springframework.beans.factory.BeanCreationException: Cannot determine embedded database url for database type NONE. If you want an embedded database please put a supported on on the classpath.

尽管我的 pom.xml 包含 MySQL 连接器,但还是如此

<?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.test</groupId>
<artifactId>twojndi</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>

<name>Two JNDI Data Sources</name>
<description>Two JNDI Data Sources Example</description>

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.1.8.RELEASE</version>
    <relativePath /> <!-- lookup parent from repository -->
</parent>

<dependencies>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</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.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-tomcat</artifactId>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-entitymanager</artifactId>
    </dependency>
</dependencies>

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <start-class>org.test.twojndi.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>

</project>

我已按如下方式定义 application.properties 以使用 jndi-name 属性。

spring.datasource.jndi-name=java:comp/env/jdbc/twojndi_ds1
spring.datasource.driverClassName=com.mysql.jdbc.Driver
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5Dialect

然而尽管如此,Spring 似乎认为应该使用内存数据库。

如果我这样定义 application.properties 我就能够连接到 MySQL 数据库

spring.datasource.url=jdbc:mysql://localhost:3306/twojndi_ds1
spring.datasource.username=twojndi
spring.datasource.password=twojndi
spring.datasource.driverClassName=com.mysql.jdbc.Driver
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5Dialect

谁能帮我用 Spring Boot 连接到 JNDI?


正如 M. Deinum 所评论的,JDNI 查找是在 Spring Boot 1.2 中实现的,当前版本是 1.2.0.M2。

如果你想用 Spring Boot 1.1 来做到这一点,你可以像这样定义一个 bean:

@Bean
public DataSource dataSource() {
    JndiObjectFactoryBean jndiObjectFactoryBean = new JndiObjectFactoryBean();
    jndiObjectFactoryBean.setJndiName("jdbc/jndidatasource");
    try {
        jndiObjectFactoryBean.afterPropertiesSet();
    } catch (NamingException e) {
        LOGGER.error("Error while retrieving datasource with JNDI name jdbc/jndidatasource", e);
    }
    return (DataSource) jndiObjectFactoryBean.getObject();
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 JNDI 数据源的 Spring Boot 的相关文章

随机推荐

  • 如何在发布之前将取消令牌插入 ReactiveX 流(IObservable)?

    如何将取消令牌插入现有的IObservable调用前的管道Publish在其上 即 在它成为IConnectableObservable 在订阅它之前 这必须是冷可观察管道的一部分 否则 我可以传递一个CancellationToken令牌
  • JAXB Java 7 与 Java 8 的差异

    我发现在 Java 7 上处理 Jaxb 与在 Java 8 上处理 Jaxb 之间存在另一个区别 我已将问题简化为一个简化的示例 并且代码应作为单个类运行 更改了类别 因此它与工作无关等 当 Unmarshaller 调用列表的 sett
  • IntelliJ读取远程服务器日志文件

    您知道如何设置远程配置以在服务器而不是本地计算机上显示日志文件吗 在编辑配置屏幕 日志 选项卡 上 我可以选择显示日志文件 但仅记录来自我的计算机的日志 而不是来自远程服务器的日志 我不介意是否必须为其安装任何插件 但到目前为止我找不到任何
  • 将非 unicode、非英语内容转换为 unicode

    我有一个 xyz 语言的文本内容 p style font family xyz eWvS kmwkMns kq t mWmb KmeIvkn kocokns aq mw Xn v p It will not display correct
  • Rails 3.1应用程序部署教程

    我正在寻找一个关于服务器上 Rails 3 1 1 应用程序的良好部署教程 我所说的 好 实际上是指 完整 我发布这个问题的原因是 尽管网络上有大量教程 谷歌 博客 书籍 其他 stackoverflow 问题等 但它们似乎都集中在部署过程
  • 有没有办法在php代码中注意到E_NOTICE?

    我有一个 PHP 脚本 需要执行几个小时 有时由于某些原因 例如 执行需要连接到互联网的脚本时出现网络问题等 执行过程会停止一段时间 然后做了错误的事情 当进程走向错误时它总是会导致 E NOTICE 我的问题是 有 任何 方法可以注意到脚
  • 如何将元素翻译为里程表

    我有代码 div class wrap2 span 0 span span 1 span CSS wrap2 data num 0 transfom translate 0 0 wrap2 data num 1 transform tran
  • PHP 应用程序 URL 路由

    因此 我正在编写一个框架 我想在该框架上构建一些我正在开发的应用程序 该框架在那里 所以我有一个可以使用的环境 以及一个可以让我使用单个应用程序的系统 登录 我想制作这个框架 它的应用程序使用面向资源的架构 现在 我想创建一个可由 APP
  • VBscript 使用输出参数从 MySQL 调用存储过程[重复]

    这个问题在这里已经有答案了 编辑20220219 使用下面的 VBSCRIPT 代码解决 SQL CALL NewCheckData pOld cn execute SQL SQL SELECT pOld Set RS cn execute
  • 如何使用 ForwardRefRenderFunction 导出forwardRef

    我有一个属于 UI 库的组件 我们将其称为输入组件 当使用这个库调用Input时 我可以调用的类型有很多 例如
  • 默认的 msbuild 平台是什么

    如果没有指定 msbuild如何选择平台 在我看来 对于某些解决方案 它为其他 x86 选择 混合平台 我打开日志记录的诊断级别 我唯一能看到的是开头的 初始属性 包含例如 平台 混合平台 没有任何解释 为了抢占一些答案 我知道我可以手动覆
  • Spring Boot中使用PostgreSQL驱动创建数据源时出现异常

    我正在尝试使用 Spring Boot 创建一个非 Web 应用程序MKyong 的例子 https www mkyong com spring boot spring boot non web application example 但我
  • Gulp、Reactify 和 Babelify 不能一起转换

    这是我的 gulpfile 代码 gulp task react function browserify app src main jsx transform reactify transform babelify bundle pipe
  • SES:在 lambda 函数内访问电子邮件正文

    我对 AWS 比较陌生 我正在尝试通过 Lambda 函数处理我的电子邮件 我在 node js 中构建了这个 use strict exports handler event context callback gt var http re
  • soundex算法的数据结构?

    谁能建议我使用什么数据结构声学算法 http en wikipedia org wiki Soundex程序 使用的语言是Java 如果有人以前用 Java 做过这个工作 该程序应具有以下功能 能够阅读约50 000字 应该能够读取一个单词
  • 单击图像时打开 Bootstrap 模式

    当我点击时menu 5 1 png应该会弹出下面的模型 li class men 5l a href span img src images menu 5 1 PNG alt span p Mp3 p a li div class moda
  • 不允许加载本地资源尝试使用 Javascript 在 Android 上打开 googlechrome://navigate?url=xxxx.com URI 架构

    在 Android 设备上 我需要使用 google chrome 打开 URL 无论单击 URL 的浏览器是什么 在我的例子中是 facebook 应用内浏览器 为此 我使用 chrome URI 模式创建了带有 Javascript 重
  • 可视化管理 MongoDB 文档和集合 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 如果已经满足条件,则跳过活动的开始

    在我的 Android 应用程序中 我有一个使用以下方法的 Google plus 登录活动 Override public void onConnected Bundle connectionHint String accountName
  • 使用 JNDI 数据源的 Spring Boot

    我有一个新的 Spring Boot Web 应用程序 我想连接到 JNDI 数据源 Tomcat 的 context xml 中定义的 MySQL 数据库 然而 当我尝试这样做时 我总是遇到以下异常 org springframework