JDBC_JNDI

本文介绍了一个简单的 Java 示例,演示了如何通过 JNDI 获取数据源并建立数据库连接。该示例使用 HttpServlet 类处理 HTTP GET 请求,并通过 InitialContext 查找 JNDI 环境中的数据源。
package cn.code.JNDI;
/*
 * 获取JNDI资源
 * */
import java.io.IOException;
import java.sql.Connection;

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.sql.DataSource;

public class Aservlet extends HttpServlet {

    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
            //1.创建JNDI上下文对象
        try {
            Context context = new InitialContext();
            Context envContext = (Context)context.lookup("java:comp/env");
            DataSource dataSource = (DataSource)envContext.lookup("jdbc/dataSource");
            Connection con = dataSource.getConnection();
            System.out.println(con);
            con.close();
        } catch (Exception e) {
            throw new RuntimeException(e);
        } 
    }

}

//配置文件出现问题!!暂时不使用

转载于:https://www.cnblogs.com/wangyinxu/p/7428255.html

### Tomcat 启动时由于 `jdbc_url` 占位符未正确解析导致的 `BeanDefinitionStoreException` 问题解决方案 #### 1. 确保 `application.properties` 或 `application.yml` 文件中定义了 `jdbc_url` 检查项目的配置文件,确保其中包含 `jdbc_url` 的定义。例如,在 `application.properties` 文件中添加如下内容: ```properties # application.properties jdbc_url=jdbc:mysql://localhost:3306/your_database?useSSL=false&serverTimezone=UTC ``` 如果使用的是 `application.yml` 文件,则应如下定义[^1]: ```yaml # application.yml jdbc_url: jdbc:mysql://localhost:3306/your_database?useSSL=false&serverTimezone=UTC ``` #### 2. 验证外部配置文件或环境变量是否正确加载 如果 `jdbc_url` 是通过外部配置文件或环境变量注入的,则需要确保这些外部配置已被正确加载。例如,可以通过以下方式加载外部配置文件: ```java // 在 Spring Boot 配置类中指定外部配置文件路径 @PropertySource("file:/path/to/external-config.properties") public class AppConfig { // 配置内容 } ``` 此外,若使用环境变量,则需确保系统环境变量中存在 `jdbc_url` 的定义。例如,在 Linux 系统中可以设置: ```bash export jdbc_url=jdbc:mysql://localhost:3306/your_database?useSSL=false&serverTimezone=UTC ``` #### 3. 检查 Spring 的 `PropertyPlaceholderConfigurer` 或 `@Value` 注解配置 如果项目中使用了自定义的 `PropertyPlaceholderConfigurer`,则需要确保其正确配置以加载属性文件。例如: ```java @Configuration public class AppConfig { @Bean public static PropertySourcesPlaceholderConfigurer propertyConfigInDev() { return new PropertySourcesPlaceholderConfigurer(); } } ``` 同时,确保代码中使用 `@Value` 注解时,占位符能够被正确解析。例如: ```java @Value("${jdbc_url}") private String jdbcUrl; ``` #### 4. 确认 Spring Profile 配置 如果项目使用了多环境配置(如 `application-dev.properties`、`application-prod.properties`),则需要确保启动时指定了正确的 Profile。例如,在命令行中指定: ```bash -Dspring.profiles.active=dev ``` 或者在 `application.properties` 中默认指定: ```properties spring.profiles.active=dev ``` #### 5. 检查 Tomcat 配置 对于部署在 Tomcat 上的应用,还需检查是否正确配置了上下文参数或 JNDI 数据源。例如,在 `context.xml` 文件中添加: ```xml <Context> <Environment name="jdbc_url" value="jdbc:mysql://localhost:3306/your_database?useSSL=false&serverTimezone=UTC" type="java.lang.String"/> </Context> ``` 然后在 Spring 配置中通过 JNDI 获取该值。 #### 示例代码 以下是一个完整的 Spring 配置示例,用于加载外部配置并解析占位符: ```java @Configuration @PropertySource("classpath:application.properties") public class AppConfig { @Bean public static PropertySourcesPlaceholderConfigurer placeholderConfigurer() { return new PropertySourcesPlaceholderConfigurer(); } @Bean public DataSource dataSource(@Value("${jdbc_url}") String jdbcUrl) { // 使用 jdbcUrl 创建数据源 DriverManagerDataSource dataSource = new DriverManagerDataSource(); dataSource.setUrl(jdbcUrl); return dataSource; } } ``` --- ####
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值