java - 配置 DataSource 并将其注册到 JNDI
问题描述
我跟进了数据源的 java doc java doc。
我不理解下面的代码片段。
我创建了一个连接池数据源并向 jndi 注册。
cpds.setServerName("creamer");
cpds.setDatabaseName("COFFEEBREAK");
cpds.setPortNumber(9040);
cpds.setDescription("Connection pooling for " + "COFFEEBREAK DBMS");
Context ctx = new InitialContext();
ctx.bind("jdbc/pool/fastCoffeeDB", cpds);
现在我们可以检索这个连接池数据源
Context ctx = new InitialContext();
ctx.lookup("jdbc/pool/fastCoffeeDB");
我创建另一个数据源并注册它。
com.applogic.PooledDataSource ds = new
com.applogic.PooledDataSource();
ds.setDescription("produces pooled connections to COFFEEBREAK");
ds.setDataSourceName("jdbc/pool/fastCoffeeDB");
Context ctx = new InitialContext();
ctx.bind("jdbc/fastCoffeeDB", ds);
现在我们可以检索这个连接池数据源
ctx = new InitialContext();
ds = (DataSource)ctx.lookup("jdbc/fastCoffeeDB");
我不清楚 setDataSourceName。
我们将 ConnectionPoolDS 添加到 PoolDataSource 中。
当我们检索数据源时
ds = (DataSource)ctx.lookup("jdbc/fastCoffeeDB");
那么从这里返回的数据源是 PoolDataSource 类型还是 ConnectionPoolDS 类型?
解决方案
使用这个
jdbc/pool/fastCoffeeDB JNDI 你直接指向 COFFEEBREAK 数据库。
在第二个 JNDI
jdbc/fastCoffeeDB
您正在使用以下语句
ds.setDataSourceName("jdbc/pool/fastCoffeeDB");
在上面你指向旧的 JNDI 名称,这意味着你间接指向 COFFEEBREAK 数据库
所以从语句 ds = (DataSource)ctx.lookup("jdbc/fastCoffeeDB"); 您将获得 ConnectionPoolDS。
推荐阅读
- postgresql - 致命:用户 postgres 的密码验证失败 [SQL 状态 = 28P01]
- javascript - 如何在 Angular 中添加多个点击事件?
- java - Flyway Java 迁移回调与自动装配服务
- java - 我将如何创建一种方法来检查移动对于跳棋游戏是否合法?
- android - 如何更正片段声明?
- ios - Xcode 框架是红色的,尽管它被添加到项目中。Xcode 12.2
- html - Jquery on Drop 影响列中的子元素
- java - 有没有办法从 Java GUI 中的单独类调用方法?
- typescript - 使用Typescript在一段时间后自动更改Sequelize中属性的值
- python - Pandas:根据一列的子字符串搜索和另一列的反向创建一个新列