Out容器JNDI数据源
我想在Java SE应用程序中使用JNDI配置DataSource。 做这个的最好方式是什么?
到目前为止,我遇到了两个项目:
- Apache命名 。 项目页面有一个用于配置数据源的特定示例,但看起来该项目已经超级旧并且不再处于活动状态。
- JBossNS 。 看起来使用
LocalOnlyContextFactory
配置本地JNDI很容易,但我没有找到任何关于如何实际配置数据源的文档。
如果可能的话,我还想用JTA事务管理器配置数据源(使用JOTM?)。
你为什么要用这个JNDI? 如果你有一个提供者,那么这并不是一个糟糕的解决方案,但有一些替代方案,如dependency injection(IoC:通过Spring或Guice )。
这里描述了 Spring JDBC数据访问。 最棒的是你可以使用Spring在你的代码中注入一个DataSource
:
可以使用JNDI查找来定义数据源:
在测试环境中,您可以直接注入数据源:
这些引用很老但可能有助于使用jnpserver(JBoss命名服务提供程序):
- 在J2SE应用程序中使用JNDI
- 使用jnpserver.jar的独立JNDI服务器
一个非常容易使用的独立JNDI解决方案就是简单的jndi 。 只要你在一个JVM中只需要它,它就像一个魅力,因为它是一个没有网络服务器的库。
由klenkes74引用的Simple-JNDI版本不再处于活跃开发阶段。 因为我遇到了一些问题,我分叉了它,做了一些错误修复并实现了一些新function。 我已经使用旧版本不仅用于测试,而且还用于生产,因为我更喜欢服务定位器模式而不是dependency injection,尽管后者现在更流行。
您可以轻松地使用Simple-JNDI以声明方式定义DataSource或连接池,并将其绑定到JNDI上下文。
在类路径中定义jndi.properties文件:
java.naming.factory.initial=org.osjava.sj.SimpleContextFactory org.osjava.sj.root=[absolute_or_relative_path_to_a_property_file]
属性文件如下所示:
type=javax.sql.DataSource driver=org.gjt.mm.mysql.Driver url=jdbc:mysql://localhost/testdb user=testuser password=testing
现在,您可以通过以下方式从代码中访问DataSource:
InitialContext ctxt = new InitialContext(); DataSource ds = (DataSource) ctxt.lookup("name_of_your_datasource");
有关更多信息,请参阅https://github.com/h-thurow/Simple-JNDI
- 用于MS SQL Server的JBoss AS 5数据库连接池重新连接例程
- 在Spring Batch中使用多个DataSource
- 如何在spring中覆盖JndiObjectFactoryBean并在java中设置解密密码
- MyBatis-guice 3.3 +多个数据源+属性+ scriptrunner
- 在Spring Boot中的每个数据库连接的开头运行SQL语句
- 使用Mockito模拟JdbcTemplate的DataSource
- 如何使用一个DataSource以编程方式更改Spring中的数据库?
- 如何将PostgreSQL数据源添加到WildFly 9.0?
- 属性’dataSource’是必需的java(Spring)错误