Spring-JNDI配置

Spring对JNDI的支持 

Spring中对于JNDI的访问,提供了便捷的方法,在Spring的org.springframework.jndi包中包含了所有的类。其中提供了一下核心类: 

(1)JndiTemplate:它是这个包的核心类,用来简化对JNDI的操作。它提供了对于lookup、bind方法。同时,允许JndiCallback接口的实现在其提供的JNDI上下文中执行任何操作。 

使用JndiTemplate实现InitialContext环境变量的配置 

<bean id="queueTarget" class="org.springframework.jndi.JndiObjectTargetSource"> 

    <property name="jndiName"> 

        <value>queue/testQueue</value> 

    </property> 

    <property name="jndiTemplate"> 

        <ref local="jndiTemplate"/> 

    </property> 

</bean> 

<bean id="jndiTemplate" class="org.springframework.jndi.JndiTemplate"> 

    <property name="environment"> 

        <props> 

      <prop key=" java.naming.factory.initial">org.jnp.interfaces.NamingContextFactory</prop> 

            <prop key="java.naming.provider.url">jnp://localhost:1099</prop> 

            <prop key="java.naming.factory.url.pkgs">org.jboss.naming:org.jnp.interfaces</prop> 

        </props> 

    </property> 

</bean> 

(2)JndiObjectTargetSource 

使用JndiObjectTargetSource,例如 

<bean id="queueTarget" class="org.springframework.jndi.JndiObjectTargetSource"> 

    <property name="jndiName"> 

        <value>queue/testQueue</value> 

    </property> 

</bean> 

(3)JndiObjectFactoryBean: 

使用JndiObjectFactoryBean,例如 

<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean"> 

    <property name="jndiName"> 

        <value>java:/MySqlDS</value> 

    </property> 

</bean> 

总结(事例): 

数据源的配置: 

(1)配置可以访问到同一应用服务器的jndi数据源 

<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean"> 

    <property name="jndiName"> 

        <value>jdbc/cqccms</value> 

    </property> 

</bean> 

(2)配置能访问远程jndi数据源 

<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean"> 

<property name="jndiName"> 

<value>jdbc/cqccms</value> 

</property> 

<property name="jndiEnvironment"> 

     <props> 

        <prop key="java.naming.factory.initial"> 

          weblogic.jndi.WLInitialContextFactory 

        </prop> 

        <prop key="java.naming.provider.url">t3://172.16.101.42:7001</prop> 

        <prop key="java.naming.security.principal">weblogic</prop> 

        <prop key="java.naming.security.credentials">weblogic</prop> 

     </props>    

   </property> 

</bean> 

事务的配置: 

不过事务对象远程访问好像没那么顺利,同理查看org.springframework.transaction.jta.JtaTransactionManager类,没有发现上述方法,不过看到了setJndiTemplate()方法,也不错现配置一个jndiTemplate,如下: 

<bean id="jndiTemplate" class="org.springframework.jndi.JndiTemplate" singleton="true" 

lazy-init="default" autowire="default" dependency-check="default"> 

<property name="environment"> 

     <props> 

        <prop key="java.naming.factory.initial"> 

          weblogic.jndi.WLInitialContextFactory 

        </prop> 

        <prop key="java.naming.provider.url">t3://172.16.101.42:7001</prop> 

        <prop key="java.naming.security.principal">weblogic</prop> 

        <prop key="java.naming.security.credentials">weblogic</prop> 

     </props>    

   </property> 

</bean> 

      然后在配置一下transactionManager,如下 

<bean id="transactionManager" class="org.springframework.transaction.jta.JtaTransactionManager" singleton="true" 

lazy-init="default" autowire="default" dependency-check="default"> 

<property name="jndiTemplate"> 

   <ref local="jndiTemplate" /> 

</property> 

<property name="userTransactionName"> 

   <value>weblogic/transaction/UserTransaction</value> 

</property> 

</bean> 

      不过JtaTransactionManager默认找jndi name为UserTransaction的jta对象,在同一应用服务器上可以,远程访问不到,后直接查看weblogic的jndi树找到这个jndi名weblogic/transaction/UserTransaction,配置上 测试果然成功. 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以通过在Spring Boot项目中配置JNDI数据源来实现JNDI集成。以下是实现步骤: 1. 在项目的src/main/resources目录下创建一个名为jndi.properties的文件,用于指定JNDI数据源的配置信息。 2. 在jndi.properties文件中添加以下内容: ``` java.naming.factory.initial=org.apache.naming.java.javaURLContextFactory java.naming.provider.url=http://localhost:8080 java.naming.factory.url.pkgs=org.apache.naming ``` 其中,java.naming.factory.initial指定JNDI数据源的实现类,java.naming.provider.url指定JNDI服务的URL,java.naming.factory.url.pkgs指定JNDI实现类所在的包。 3. 在Spring Boot项目的pom.xml文件中添加以下依赖: ``` <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> </dependency> <dependency> <groupId>org.apache.tomcat</groupId> <artifactId>tomcat-jdbc</artifactId> </dependency> ``` 其中,spring-boot-starter-jdbc用于支持JDBC,tomcat-jdbc用于提供Tomcat JDBC连接池的实现。 4. 在Spring Boot项目的application.properties文件中添加以下配置: ``` spring.datasource.jndi-name=java:comp/env/jdbc/test ``` 其中,spring.datasource.jndi-name指定JNDI数据源的名称。 5. 在Spring Boot项目中使用JdbcTemplate访问JNDI数据源。 ```java @Autowired private JdbcTemplate jdbcTemplate; public List<Map<String, Object>> getUsers() { String sql = "SELECT * FROM users"; return jdbcTemplate.queryForList(sql); } ``` 通过上述步骤,就可以在Spring Boot项目中成功集成JNDI数据源。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值