JNDI配置 | 学习笔记

本文涉及的产品
RDS MySQL DuckDB 分析主实例,集群系列 4核8GB
简介: 快速学习JNDI配置

开发者学堂课程【JDBC 数据库开发进阶JNDI配置】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/32/detail/688


JNDI配置


内容简介:

一、Tomcat 配置 JNDI 资源

二、获取资源

一、Tomcat 配置 JNDI 资源

JNDl (Java Naming and Directory Interface ),Java 命名和目录接口。

JNDl 的作用

在服务器上配置资源,然后通过统一的方式来获取配置的资源。

我们这里要配置的资源是连接池,这样项目中就可以通过统一的方式来获取连接池对象了。


1. Tomcat 中配置资源的格式如下:

type="com.mycompany.MyBean"

factory="org.apache.naming.factory.BeanFactory"

bar="23"/>


配置JNDI资源需要到  元素中配置  子元素:

① name :指定资源的名称,这个名称可以随便给,在获取资源时需要这个名称;

② factory :用来创建资源的工厂,这个值基本上是固定的,不用修改﹔

③ type :资源的类型,我们要给出的类型当然是我们连接池的类型了﹔  

④ bar :表示资源的属性,如果资源存在名为 bar 的属性,那么就配置 bar 的值。对于DBCP 连接池而言,你需要配置的不是 bar ,因为它没有 bar 这个属性,而是应该去配置 url、username 等属性。


2.按照给出文件配置资源

factory="org.apache.naming.factory.BeanFactory"

type="com.mchange.v2.c3p0.ComboPooledDataSource"

jdbcUrl="jdbc.mysql:// localhost : 3306 / mydb3 "

driverClass=" com. mysgl.jdbc.Driver"

user="root"

password="123"

acquireIncrement="5"

initialPoolSize="10"

/>


Dbcp 的配置

type="org.apache.tomcat.dbcp.dbcp.BasicDataSource"

factory="org.apache.naming.factory.BeanFactory"

username="root"

password="123"

driverClassName="com.mysal.jdbc.Driver"

url="jdbc:mysql://127.0.0.1/mydb1"

maxldle="3"

maxWait="5000"

maxActive="5"

initialSize="3" />


c3p0 的配置

type="com.mchange.v2.c3p0.ComboPooledDataSource"

factory="org.apache.naming.factory.BeanFactory"

user="root"

password="123"

classDriver="com.mysql.jdbc.Driver"

jdbcUrl="jdbc:mysql://127.0.0.1/mydb1"

maxPoolSize.="20"

minPoolSize ="5"

initialPoolSize="10"

acquirelncrement="2"/>



二、获取资源

配置资源的目的是为了获取资源,只要启动 Tomcat ,就可以在项目中通过 JNDI 获取资源的方式来获取资源。

1.获取资源的格式如下

下面一段代码与上面的配置资源是对应的。

Context initCtx =new InitialContext();

Context envCtx = (Context) initCtx.lookup("java:comp/env");

MyBean bean =(MyBean) envCtx.lookup ( "bean/MyBeanFactory");

writer.println ( "foo= " + bean.getFoo () + ", bar = " +

bean.getBar ());


获取资源:

①Context : jaxax.naming.Context ;  

②InitialContext: jaxax.naming.InitialContext;

③lookup(String):获取资源的方法,其中 "java.:comp/enx” 是资源的入口(这是固定的名称),获取过来的还是一个 Context ,这说明需要在获取到的 Context 上进一步进行获取。 "bean/MyBeanFactory" 对应  中配置的 name 值,这回获取的就是资源对象了。


2.按照配置获取资源

获取 JNDI 的资源

public class Aservlet extends HttpServlet {

public void doGet (HttpServletRequest request,HttpServletResponse response)  

throws ServletException,IOException {

①创建JND工的上下文对象

try {

Context cxt = new InitialContext( );

②查询出入口

Context envContext =(Context) cxt.lookup ( "java:comp/env");

③再进行二次查询,找到我们的资源,使用的是名称与元素的name对应

Datasource dataSource =(DataSource)envContext.lookup ("jdbc/dataSource");

connection con = dataSource.getConnection ( ) ;

System.out.println (con) ;

con.close() ;

}catch(Exception e) {

throw new RuntimeException (e) ;

}

}

}

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
相关文章
|
计算机视觉 Windows
Qt实用技巧:实现窗口透明的五种方法
Qt实用技巧:实现窗口透明的五种方法
Qt实用技巧:实现窗口透明的五种方法
|
9月前
|
存储 前端开发 调度
|
9月前
|
SQL 人工智能 前端开发
JeecgBoot 低代码平台 v3.7.4 发布,后台架构大升级
JeecgBoot 是一款基于 SpringBoot2.x/3.x 和 SpringCloud Alibaba 的企业级 AI 低代码平台,采用前后端分离架构(Ant Design & Vue3),支持 Mybatis-plus 和 Shiro。它集成了强大的代码生成器,可一键生成前后端代码,无需手动编写,大幅减少重复工作。平台支持 DeepSeek、ChatGPT 和 Ollama 等主流大模型,提供 AI 对话
600 9
|
XML 监控 负载均衡
Jacoco的覆盖率原理
JaCoCo(Java Code Coverage)是一种广泛使用的代码覆盖率工具,通过在字节码中插入探针(Probe)来收集覆盖率信息。
1071 6
Jacoco的覆盖率原理
|
Web App开发 安全 JavaScript
浙大恩特客户资源管理系统 fileupload.jsp 任意文件上传漏洞
杭州恩软信息技术有限公司(简称浙大恩特)提供外贸管理软件、外贸客户管理软件等外贸软件,是一家专注于外贸客户资源管理及订单管理产品及服务的综合性公司,该系统旨在帮助企业高效管理客户关系,提升销售业绩,促进市场营销和客户服务的优化。系统支持客户数据分析和报表展示,帮助企业深度挖掘客户数据,提供决策参考。
642 0
|
存储
strcpy、sprintf 与 memcpy 的区别
在 C 语言中,`strcpy`、`sprintf` 和 `memcpy` 是三个用于处理内存和字符串的函数,它们有不同的用途和特点
|
人工智能 弹性计算 并行计算
操作系统迁移难?Alibaba Cloud Linux 支持跨版本升级 | 龙蜥技术
无需担心数据丢失,无需考虑如何解决在升级后同步问题。
|
存储 人工智能 C++
【PTA】L1-064 估值一亿的AI核心代码(详C++)
【PTA】L1-064 估值一亿的AI核心代码(详C++)
508 1
|
Kubernetes 容器
k8s ingress获取真实IP地址配置
背景 业务架构:Client->WAF->LB->ECS->容器问题:在容器中获取不到真实的客户端公网IP 抓包分析 在ECS上的抓包分析,看到WAF已经将 真实客户端地址放到了 x-Forwarded-For 的字段中传给了ECS ![image](https://yqfile.
17748 0
|
监控 测试技术 API