ITKeyword,专注技术干货聚合推荐

注册 | 登录

使用JNDI获取数据库连接池

zw7534313 分享于

2021腾讯云限时秒杀,爆款1核2G云服务器298元/3年!(领取2860元代金券),
地址https://cloud.tencent.com/act/cps/redirect?redirect=1062

2021阿里云最低价产品入口+领取代金券(老用户3折起),
入口地址https://www.aliyun.com/minisite/goods

推荐:从jndi获取数据库连接

public Connection getConnectionFromJNDI() { Connection conn = null; try { long t = System.currentTimeMillis(); Context initCtx = new Initia

使用jndi获取数据库连接池

JNDI是J2EE13个规范之一,也是非常重要的。这里我来先简单介绍一下JNDI:

JNDI(Java Naming and Directory Interface) java命名和目录服务接口

降低程序和程序之间的耦合性

降低设备和设备的耦合性

Tomcat服务器实现了JNDI服务,启动Tomcat服务器,等同于启动JNDI服务器

JNDI是SUN制定的一套规范,这套规范可以和JDBC进行类比,JDBC也是一套规范,我们面向JDBC接口调用就可以获取数据库中的数据。

同样,我们面向JNDI接口调用,可以获取“资源”,这个资源不是在底层数据库中。

JNDI提供了一种服务,这个服务可以将“名称”和“资源”进行绑定,然后程序员通过面向JNDI接口调用方法lookup可以查找到相关的资源。 <?xml version="1.0" encoding="UTF-8"?> <Context>

<WatchedResource>WEB-INF/web.xml</WatchedResource>

<Resource

name="jdbc/TestDB"

JNDI数据源的name,查找时用:java:comp/env/jdbc/TestDB

type="javax.sql.DataSource"

factory="org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory"

driverClassName="com.mysql.jdbc.Driver" JDBC驱动类

url="jdbc:mysql://localhost:3306/test?

characterEncoding=UTF-8&amp;autoReconnectForPools=true&amp;rewriteBatchedStatements=true&amp;useCursorFetch=true&amp;defaultFetchSize=20" 数据库URL地址

username="xxx" 访问数据库用户名

password="xxx" 访问数据库的密码

maxWait="3000" 从池中取连接的最大等待时间,单位ms.

initialSize="10"

初始化连接

maxIdle="60"

最大空闲连接

minIdle="10"

最小空闲连接

maxActive="80" 最大活动连接

validationQuery = "SELECT 1"

验证使用的SQL语句

testWhileIdle = "true"

指明连接是否被空闲连接回收器(如果有)进行检验.如果检测失败,则连接将被从池中去除.

testOnBorrow = "false"

借出连接时不要测试,否则很影响性能

timeBetweenEvictionRunsMillis = "30000"

每30秒运行一次空闲连接回收器

minEvictableIdleTimeMillis = "1800000"

池中的连接空闲30分钟后被回收

numTestsPerEvictionRun="10" 在每次空闲连接回收器线程(如果有)运行时检查的连接数量

removeAbandoned="true"

连接泄漏回收参数,当可用连接数少于3个时才执行

removeAbandonedTimeout=&q

推荐:JNDI数据库连接池

做 tomcat jndi 一共分三部分: jndi.jar 我用的是tomcat 6.0 1:把sql驱动包放到tomcat中lib包下. 2:在/conf/context.xml添加

<Resource name="TestDB" auth=

uot;180"

连接泄漏回收参数,180秒,泄露的连接可以被删除的超时值

/>

</Context> tomcat配置context.xml,使用JNDI获取数据库连接池 通过JNDI来获取连接池: Context context = new InitialContext();

根据名称和资源的绑定来获取数据源连接池,其中java:/comp/env是tomcat实现JNDI的路径,后边是我们连接池名字

DataSource ds = (DataSource)context.lookup("java:/comp/env/jdbc/ljh");

get,获取一种的一个连接,当然下边的close就是返回一个连接给连接池,这里的连接池都对Connection中的方法进行重写,例如close,是返回给连接池,而不是关闭数据库连接。

conn = ds.getConnection();

javax.naming.NoInitialContextException: Need to specify class name in environment web.xml下配置:

<resource-ref>

<res-ref-name>jdbc/db</res-ref-name>

<res-type>javax.sql.DataSource</res-type>

<res-auth>Container</res-auth>

</resource-ref>

在Controller中使用jndi获取数据库连接池(tomcat环境中使用jndi) public class AutoCar {

public void run()throws Exception{

Context context = new InitialContext();

//根据名称和资源的绑定来获取数据源连接池,其中java:/com/env是tomcat实现JNDI的路径,后边是我们连接池名字

DataSource ds = (DataSource)context.lookup("java:/comp/env/jdbc/db");

//get,获取一种的一个连接,当然下边的close就是返回一个连接给连接池,这里的连接池都对Connection中的方法进行重写,例如close,是返回给连接池,而不是关闭数据库连接。

Connection conn = ds.getConnection();

System.out.println(conn);

} } @Controller("usercontroller") @RequestMapping("/user") public class UserController{

@Autowired

@Qualifier("userService") //一个接口多个实现用name区分

private IUserService userService;

@RequestMapping("/")

@ResponseBody

public Response list() throws CustomException{

AutoCarFactory carFactory = (AutoCarFactory)ApplicationContextUtil.getBean("car");

try {

carFactory.createAutoCar().run();

} catch (Exception e) {

e.printStackTrace();

}

} }

推荐:Tomcat6 中使用Jndi获取数据库连接

很久没有使用jndi进行开发了,近期有个老的项目维护发现自己对数据源的配置都陌生了,这里总结下相关的资料,共有需要的朋友参考。   首先在web应用程序下的META

  使用jndi获取数据库连接池   JNDI是J2EE13个规范之一,也是非常重要的。这里我来先简单介绍一下JNDI:  JNDI(Java Naming and Directory Interface) java命名和目录服务接口             

相关阅读排行


相关内容推荐

最新文章

×

×

请激活账号

为了能正常使用评论、编辑功能及以后陆续为用户提供的其他产品,请激活账号。

您的注册邮箱: 修改

重新发送激活邮件 进入我的邮箱

如果您没有收到激活邮件,请注意检查垃圾箱。